diff --git a/.circleci/config.yml b/.circleci/config.yml
index 8747b7804e..17e6a25fbc 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -326,24 +326,16 @@ jobs:
workflows:
penpot:
jobs:
- - lint
- test-frontend:
requires:
- lint: success
- test-library:
requires:
- - test-frontend: success
- lint: success
- test-components:
requires:
- - test-frontend: success
- - lint: success
-
- - test-integration:
- requires:
- - test-frontend: success
- lint: success
- test-backend:
@@ -354,4 +346,6 @@ workflows:
requires:
- lint: success
+ - lint
+ - test-integration
- test-render-wasm
diff --git a/.github/workflows/build-docker.yml b/.github/workflows/build-docker.yml
index 4665e618a9..1a0723a046 100644
--- a/.github/workflows/build-docker.yml
+++ b/.github/workflows/build-docker.yml
@@ -46,6 +46,7 @@ jobs:
mv penpot/backend bundle-backend
mv penpot/frontend bundle-frontend
mv penpot/exporter bundle-exporter
+ mv penpot/storybook bundle-storybook
popd
- name: Set up Docker Buildx
@@ -99,3 +100,29 @@ jobs:
tags: ${{ secrets.DOCKER_REGISTRY }}/${{ env.DOCKER_IMAGE }}:${{ steps.vars.outputs.gh_ref }}
cache-from: type=registry,ref=${{ secrets.DOCKER_REGISTRY }}/${{ env.DOCKER_IMAGE }}:buildcache
cache-to: type=registry,ref=${{ secrets.DOCKER_REGISTRY }}/${{ env.DOCKER_IMAGE }}:buildcache,mode=max
+
+ - name: Build and push Storybook Docker image
+ uses: docker/build-push-action@v6
+ env:
+ DOCKER_IMAGE: 'storybook'
+ BUNDLE_PATH: './bundle-storybook'
+ with:
+ context: ./docker/images/
+ file: ./docker/images/Dockerfile.storybook
+ platforms: linux/amd64,linux/arm64
+ push: true
+ tags: ${{ secrets.DOCKER_REGISTRY }}/${{ env.DOCKER_IMAGE }}:${{ steps.vars.outputs.gh_ref }}
+ cache-from: type=registry,ref=${{ secrets.DOCKER_REGISTRY }}/${{ env.DOCKER_IMAGE }}:buildcache
+ cache-to: type=registry,ref=${{ secrets.DOCKER_REGISTRY }}/${{ env.DOCKER_IMAGE }}:buildcache,mode=max
+
+ - name: Notify Mattermost
+ if: failure()
+ uses: mattermost/action-mattermost-notify@master
+ with:
+ MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK }}
+ MATTERMOST_CHANNEL: bot-alerts-cicd
+ TEXT: |
+ ❌ 🐳 *[PENPOT] Error building penpot docker images.*
+ 📄 Triggered from ref: `${{ steps.vars.outputs.gh_ref }}`
+ 🔗 Run: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
+ @infra
diff --git a/.github/workflows/commit-checker.yml b/.github/workflows/commit-checker.yml
index 7918c23395..90f5d18a68 100644
--- a/.github/workflows/commit-checker.yml
+++ b/.github/workflows/commit-checker.yml
@@ -26,7 +26,7 @@ jobs:
- name: Check Commit Type
uses: gsactions/commit-message-checker@v2
with:
- pattern: '^(Merge|Revert|:(lipstick|globe_with_meridians|wrench|books|arrow_up|arrow_down|zap|ambulance|construction|boom|fire|whale|bug|sparkles|paperclip|tada|recycle|rewind):)\s["A-Z].*[^.]$'
+ pattern: '^(Merge|Revert|:(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].*[^.]$'
flags: 'gm'
error: 'Commit should match CONTRIBUTING.md guideline'
checkAllCommitMessages: 'true' # optional: this checks all commits associated with a pull request
diff --git a/CHANGES.md b/CHANGES.md
index 8272fc334e..fceece355a 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,17 +1,91 @@
# CHANGELOG
+## 2.11.0 (Unreleased)
+
+### :boom: Breaking changes & Deprecations
+
+- Deprecated configuration variables with the prefix `PENPOT_ASSETS_*`, and will be
+ removed in future versions:
+
+ - The `PENPOT_ASSETS_STORAGE_BACKEND` becomes `PENPOT_OBJECTS_STORAGE_BACKEND` and its
+ values passes from (`assets-fs` or `assets-s3`) to (`fs` or `s3`)
+ - The `PENPOT_STORAGE_ASSETS_FS_DIRECTORY` becomes `PENPOT_OBJECTS_STORAGE_FS_DIRECTORY`
+ - The `PENPOT_STORAGE_ASSETS_S3_BUCKET` becomes `PENPOT_OBJECTS_STORAGE_S3_BUCKET`
+ - The `PENPOT_STORAGE_ASSETS_S3_REGION` becomes `PENPOT_OBJECTS_STORAGE_S3_REGION`
+ - The `PENPOT_STORAGE_ASSETS_S3_ENDPOINT` becomes `PENPOT_OBJECTS_STORAGE_S3_ENDPOINT`
+ - The `PENPOT_STORAGE_ASSETS_S3_IO_THREADS` replaced (see below)
+
+- Add `PENPOT_NETTY_IO_THREADS` and `PENPOT_EXECUTOR_THREADS` variables to provide the
+ control over concurrency of the shared resources used by netty. Penpot uses the netty IO
+ threads for AWS S3 SDK and Redis/Valkey communication, and the EXEC threads to perform
+ out of HTTP serving threads tasks such that cache invalidation, S3 response completion,
+ configuration reloading and many other auxiliar tasks. By default they use a half number
+ if available cpus with a minumum of 2 for both executors. You should not touch that
+ variables unless you are know what you are doing.
+
+- Replace the `PENPOT_STORAGE_ASSETS_S3_IO_THREADS` with a more general configuration
+ `PENPOT_NETTY_IO_THREADS` used to configure a shared netty resources across different
+ services which use netty internally (redis connection, S3 SDK client). This
+ configuration is not very commonly used so don't expected real impact on any user.
+
+### :rocket: Epics and highlights
+
+### :heart: Community contributions (Thank you!)
+
+### :sparkles: New features & Enhancements
+
+- New composite token: Typography [Taiga #10200](https://tree.taiga.io/project/penpot/us/10200)
+- Show current Penpot version [Taiga #11603](https://tree.taiga.io/project/penpot/us/11603)
+- Switch several variant copies at the same time [Taiga #11411](https://tree.taiga.io/project/penpot/us/11411)
+- Invitations management improvements [Taiga #3479](https://tree.taiga.io/project/penpot/us/3479)
+- Alternative ways of creating variants - Button Viewport [Taiga #11931](https://tree.taiga.io/project/penpot/us/11931)
+- Reorder properties for a component [Taiga #10225](https://tree.taiga.io/project/penpot/us/10225)
+- File Data storage layout refactor [Github #7345](https://github.com/penpot/penpot/pull/7345)
+- Make several queries optimization on comment threads [Github #7506](https://github.com/penpot/penpot/pull/7506)
+
+### :bug: Bugs fixed
+
+- Fix selection problems when devtools open [Taiga #11950](https://tree.taiga.io/project/penpot/issue/11950)
+- Fix long font names overlap [Taiga #11844](https://tree.taiga.io/project/penpot/issue/11844)
+- Fix paste behavior according to the selected element [Taiga #11979](https://tree.taiga.io/project/penpot/issue/11979)
+- Fix problem with export size [Github #7160](https://github.com/penpot/penpot/issues/7160)
+- Fix multi level library dependencies [Taiga #12155](https://tree.taiga.io/project/penpot/issue/12155)
+- Fix component context menu options order in assets tab [Taiga #11941](https://tree.taiga.io/project/penpot/issue/11941)
+- Fix error updating library [Taiga #12218](https://tree.taiga.io/project/penpot/issue/12218)
+- Fix restoring a variant in another file makes it overlap the existing variant [Taiga #12049](https://tree.taiga.io/project/penpot/issue/12049)
+- Fix auto-width changes to fixed when switching variants [Taiga #12172](https://tree.taiga.io/project/penpot/issue/12172)
+- Fix component number has no singular translation string [Taiga #12106](https://tree.taiga.io/project/penpot/issue/12106)
+- Fix adding/removing identical text fills [Taiga #12287](https://tree.taiga.io/project/penpot/issue/12287)
+- Fix scroll on the inspect tab [Taiga #12293](https://tree.taiga.io/project/penpot/issue/12293)
+- Fix lock proportion tooltip [Taiga #12326](https://tree.taiga.io/project/penpot/issue/12326)
+- Fix internal Error when selecting a set by name in the token theme editor [Taiga #12310](https://tree.taiga.io/project/penpot/issue/12310)
+- Fix drag & drop functionality is swapping instead or reordering [Taiga #12254](https://tree.taiga.io/project/penpot/issue/12254)
+- Fix variants not syncronizing tokens on switch [Taiga #12290](https://tree.taiga.io/project/penpot/issue/12290)
+- Fix incorrect behavior of Alt + Drag for variants [Taiga #12309](https://tree.taiga.io/project/penpot/issue/12309)
+- Fix text override is lost after switch [Taiga #12269](https://tree.taiga.io/project/penpot/issue/12269)
+- Fix exporting a board crashing the app [Taiga #12384](https://tree.taiga.io/project/penpot/issue/12384)
+- Fix nested variant in a component doesn't keep inherited overrides [Taiga #12299](https://tree.taiga.io/project/penpot/issue/12299)
+- Fix selected colors not showing colors from children shapes in multiple selection [Taiga #12384](https://tree.taiga.io/project/penpot/issue/12385)
+- Fix scrollbar issue in design tab [Taiga #12367](https://tree.taiga.io/project/penpot/issue/12367)
+- Fix library update notificacions showing when they should not [Taiga #12397](https://tree.taiga.io/project/penpot/issue/12397)
+- Fix remove flex button doesn’t work within variant [Taiga #12314](https://tree.taiga.io/project/penpot/issue/12314)
+- Fix an error translation [Taiga #12402](https://tree.taiga.io/project/penpot/issue/12402)
+- Fix problem with certain text input in some editable labels (pages, components, tokens...) being in conflict with the drag/drop functionality [Taiga #12316](https://tree.taiga.io/project/penpot/issue/12316)
+- Fix not controlled theme renaming [Taiga #12411](https://tree.taiga.io/project/penpot/issue/12411)
+- Fix paste without selection sends the new element in the back [Taiga #12382](https://tree.taiga.io/project/penpot/issue/12382)
+- Fix options button does not work for comments created in the lower part of the screen [Taiga #12422](https://tree.taiga.io/project/penpot/issue/12422)
+- Fix problem when checking usage with removed teams [Taiga #12442](https://tree.taiga.io/project/penpot/issue/12442)
+
## 2.10.1
### :sparkles: New features & Enhancements
- Improve workpace file loading [Github 7366](https://github.com/penpot/penpot/pull/7366)
-
### :bug: Bugs fixed
- Fix regression with text shapes creation with Plugins API [Taiga #12244](https://tree.taiga.io/project/penpot/issue/12244)
-
## 2.10.0
### :rocket: Epics and highlights
@@ -27,7 +101,7 @@
- Add efficiency enhancements to right sidebar [Github #7182](https://github.com/penpot/penpot/pull/7182)
- Add defaults for artboard drawing [Taiga #494](https://tree.taiga.io/project/penpot/us/494?milestone=465047)
- Continuous display of distances between elements when moving a layer with the keyboard [Taiga #1780](https://tree.taiga.io/project/penpot/us/1780)
-- New Number token - unitless values [Taiga #10936](https://tree.taiga.io/project/penpot/us/10936)
+- New Number token - unitless values [Taiga #10936](https://tree.taiga.io/project/penpot/us/10936)
- New font-family token [Taiga #10937](https://tree.taiga.io/project/penpot/us/10937)
- New text case token [Taiga #10942](https://tree.taiga.io/project/penpot/us/10942)
- New text-decoration token [Taiga #10941](https://tree.taiga.io/project/penpot/us/10941)
@@ -47,6 +121,7 @@
- Retrieve variants with nested components [Taiga #10277](https://tree.taiga.io/project/penpot/us/10277)
- Create variants in bulk from existing components [Taiga #7926](https://tree.taiga.io/project/penpot/us/7926)
- Alternative ways of creating variants - Button Design Tab [Taiga #10316](https://tree.taiga.io/project/penpot/us/10316)
+- Fix problem with component swapping panel [Taiga #12175](https://tree.taiga.io/project/penpot/issue/12175)
### :bug: Bugs fixed
@@ -60,7 +135,7 @@
- Fix issue where Alt + arrow keys shortcut interferes with letter-spacing when moving text layers [Taiga #11552](https://tree.taiga.io/project/penpot/issue/11771)
- Fix consistency issues on how font variants are visualized [Taiga #11499](https://tree.taiga.io/project/penpot/us/11499)
- Fix parsing rx and ry SVG values for rect radius [Taiga #11861](https://tree.taiga.io/project/penpot/issue/11861)
-- Misleading affordance in saved versions [Taiga #11887](https://tree.taiga.io/project/penpot/issue/11887)
+- Fix misleading affordance in saved versions [Taiga #11887](https://tree.taiga.io/project/penpot/issue/11887)
- Fix pasting RTF text crashes penpot [Taiga #11717](https://tree.taiga.io/project/penpot/issue/11717)
- Fix navigation arrows in Libraries & Templates carousel [Taiga #10609](https://tree.taiga.io/project/penpot/issue/10609)
- Fix applying tokens with zero value to size [Taiga #11618](https://tree.taiga.io/project/penpot/issue/11618)
@@ -107,7 +182,6 @@
- Add info to apply-token event [Taiga #11710](https://tree.taiga.io/project/penpot/task/11710)
- Fix double click on set name input [Taiga #11747](https://tree.taiga.io/project/penpot/issue/11747)
-
### :bug: Bugs fixed
- Copying font size does not copy the unit [Taiga #11143](https://tree.taiga.io/project/penpot/issue/11143)
@@ -155,7 +229,7 @@
**Penpot Library**
-The initial prototype is completly reworked for provide a more consistent API
+The initial prototype is completly reworked to provide a more consistent API
and to have proper validation and params decoding. All the details can be found
on [its own changelog](library/CHANGES.md)
diff --git a/README.md b/README.md
index 3240a097c2..07190bcb29 100644
--- a/README.md
+++ b/README.md
@@ -77,17 +77,14 @@ Provide your team or organization with a completely owned collaborative design t
### Integrations ###
Penpot offers integration into the development toolchain, thanks to its support for webhooks and an API accessible through access tokens.
-### What’s great for design ###
-With Penpot you can design libraries to share and reuse; turn design elements into components and tokens to allow reusability and scalability; and build realistic user flows and interactions.
-
-### Design Tokens ###
-With Penpot’s standardized [design tokens](https://penpot.dev/collaboration/design-tokens) format, you can easily reuse and sync tokens across different platforms, workflows, and disciplines.
+### Building Design Systems: design tokens, components and variants ###
+Penpot brings design systems to code-minded teams: a single source of truth with native Design Tokens, Components, and Variants for scalable, reusable, and consistent UI across projects and platforms.
-
+
diff --git a/backend/deps.edn b/backend/deps.edn
index 8955477424..a6f6fcfecd 100644
--- a/backend/deps.edn
+++ b/backend/deps.edn
@@ -6,7 +6,7 @@
org.clojure/clojure {:mvn/version "1.12.2"}
org.clojure/tools.namespace {:mvn/version "1.5.0"}
- com.github.luben/zstd-jni {:mvn/version "1.5.7-3"}
+ com.github.luben/zstd-jni {:mvn/version "1.5.7-4"}
io.prometheus/simpleclient {:mvn/version "0.16.0"}
io.prometheus/simpleclient_hotspot {:mvn/version "0.16.0"}
@@ -17,7 +17,7 @@
io.prometheus/simpleclient_httpserver {:mvn/version "0.16.0"}
- io.lettuce/lettuce-core {:mvn/version "6.7.0.RELEASE"}
+ io.lettuce/lettuce-core {:mvn/version "6.8.1.RELEASE"}
;; Minimal dependencies required by lettuce, we need to include them
;; explicitly because clojure dependency management does not support
;; yet the BOM format.
@@ -28,29 +28,30 @@
com.google.guava/guava {:mvn/version "33.4.8-jre"}
funcool/yetti
- {:git/tag "v11.4"
- :git/sha "ce50d42"
+ {:git/tag "v11.6"
+ :git/sha "94dc017"
:git/url "https://github.com/funcool/yetti.git"
:exclusions [org.slf4j/slf4j-api]}
com.github.seancorfield/next.jdbc
- {:mvn/version "1.3.1002"}
+ {:mvn/version "1.3.1070"}
+
metosin/reitit-core {:mvn/version "0.9.1"}
- nrepl/nrepl {:mvn/version "1.3.1"}
+ nrepl/nrepl {:mvn/version "1.4.0"}
org.postgresql/postgresql {:mvn/version "42.7.7"}
- org.xerial/sqlite-jdbc {:mvn/version "3.49.1.0"}
+ org.xerial/sqlite-jdbc {:mvn/version "3.50.3.0"}
- com.zaxxer/HikariCP {:mvn/version "6.3.0"}
+ com.zaxxer/HikariCP {:mvn/version "7.0.2"}
io.whitfin/siphash {:mvn/version "2.0.0"}
buddy/buddy-hashers {:mvn/version "2.0.167"}
buddy/buddy-sign {:mvn/version "3.6.1-359"}
- com.github.ben-manes.caffeine/caffeine {:mvn/version "3.2.0"}
+ com.github.ben-manes.caffeine/caffeine {:mvn/version "3.2.2"}
- org.jsoup/jsoup {:mvn/version "1.20.1"}
+ org.jsoup/jsoup {:mvn/version "1.21.2"}
org.im4java/im4java
{:git/tag "1.4.0-penpot-2"
:git/sha "e2b3e16"
@@ -60,12 +61,12 @@
org.clojars.pntblnk/clj-ldap {:mvn/version "0.0.17"}
- dawran6/emoji {:mvn/version "0.1.5"}
- markdown-clj/markdown-clj {:mvn/version "1.12.3"}
+ dawran6/emoji {:mvn/version "0.2.0"}
+ markdown-clj/markdown-clj {:mvn/version "1.12.4"}
;; Pretty Print specs
pretty-spec/pretty-spec {:mvn/version "0.1.4"}
- software.amazon.awssdk/s3 {:mvn/version "2.33.8"}}
+ software.amazon.awssdk/s3 {:mvn/version "2.33.10"}}
:paths ["src" "resources" "target/classes"]
:aliases
@@ -80,12 +81,14 @@
:build
{:extra-deps
- {io.github.clojure/tools.build {:git/tag "v0.10.9" :git/sha "e405aac"}}
+ {io.github.clojure/tools.build {:mvn/version "0.10.10"}}
:ns-default build}
:test
{:main-opts ["-m" "kaocha.runner"]
- :jvm-opts ["-Dlog4j2.configurationFile=log4j2-devenv-repl.xml"]
+ :jvm-opts ["-Dlog4j2.configurationFile=log4j2-devenv-repl.xml"
+ "--sun-misc-unsafe-memory-access=allow"
+ "--enable-native-access=ALL-UNNAMED"]
:extra-deps {lambdaisland/kaocha {:mvn/version "1.91.1392"}}}
:outdated
diff --git a/backend/dev/user.clj b/backend/dev/user.clj
index f93e0b6f46..93197eb059 100644
--- a/backend/dev/user.clj
+++ b/backend/dev/user.clj
@@ -30,8 +30,8 @@
[app.config :as cf]
[app.db :as db]
[app.main :as main]
- [app.srepl.helpers :as srepl.helpers]
- [app.srepl.main :as srepl]
+ [app.srepl.helpers :as h]
+ [app.srepl.main :refer :all]
[app.util.blob :as blob]
[clj-async-profiler.core :as prof]
[clojure.contrib.humanize :as hum]
diff --git a/backend/resources/app/email/invite-to-team/en.subj b/backend/resources/app/email/invite-to-team/en.subj
index d4d00f7316..0e0e08d26b 100644
--- a/backend/resources/app/email/invite-to-team/en.subj
+++ b/backend/resources/app/email/invite-to-team/en.subj
@@ -1 +1 @@
-Invitation to join {{team}}
+{{invited-by|abbreviate:25}} has invited you to join the team “{{ team|abbreviate:25 }}”
\ No newline at end of file
diff --git a/backend/resources/app/onboarding.edn b/backend/resources/app/onboarding.edn
index f8686169e8..9efda9bb9f 100644
--- a/backend/resources/app/onboarding.edn
+++ b/backend/resources/app/onboarding.edn
@@ -1,6 +1,9 @@
[{:id "tokens-starter-kit"
:name "Design tokens starter kit"
- :file-uri "https://github.com/penpot/penpot-files/raw/refs/heads/main/Tokens%20starter%20kit.penpot"},
+ :file-uri "https://github.com/penpot/penpot-files/raw/refs/heads/main/Tokens%20starter%20kit.penpot"}
+ {:id "penpot-design-system"
+ :name "Penpot Design System | Pencil"
+ :file-uri "https://github.com/penpot/penpot-files/raw/refs/heads/main/penpot-app.penpot"}
{:id "wireframing-kit"
:name "Wireframe library"
:file-uri "https://github.com/penpot/penpot-files/raw/refs/heads/main/Wireframing%20kit%20v1.1.penpot"}
@@ -10,9 +13,6 @@
{:id "plants-app"
:name "UI mockup example"
:file-uri "https://github.com/penpot/penpot-files/raw/main/Plants-app.penpot"}
- {:id "penpot-design-system"
- :name "Design system example"
- :file-uri "https://github.com/penpot/penpot-files/raw/refs/heads/main/Penpot%20-%20Design%20System%20v2.1.penpot"}
{:id "tutorial-for-beginners"
:name "Tutorial for beginners"
:file-uri "https://github.com/penpot/penpot-files/raw/main/tutorial-for-beginners.penpot"}
diff --git a/backend/resources/app/templates/debug.tmpl b/backend/resources/app/templates/debug.tmpl
index 65d3d7614c..1f803140a2 100644
--- a/backend/resources/app/templates/debug.tmpl
+++ b/backend/resources/app/templates/debug.tmpl
@@ -45,7 +45,41 @@ Debug Main Page
+
+ VIRTUAL CLOCK
+
+
+ CURRENT CLOCK: {{current-clock}}
+
+ CURRENT OFFSET: {{current-offset}}
+
+ CURRENT TIME: {{current-time}}
+
+
+ Examples: 3h, -7h, 24h (allowed suffixes: h, s)
+
+
+
+
diff --git a/backend/scripts/_env b/backend/scripts/_env
new file mode 100644
index 0000000000..aba7420c27
--- /dev/null
+++ b/backend/scripts/_env
@@ -0,0 +1,81 @@
+#!/usr/bin/env bash
+
+
+export PENPOT_MANAGEMENT_API_SHARED_KEY=super-secret-management-api-key
+export PENPOT_SECRET_KEY=super-secret-devenv-key
+export PENPOT_HOST=devenv
+
+export PENPOT_FLAGS="\
+ $PENPOT_FLAGS \
+ enable-login-with-ldap \
+ enable-login-with-password
+ enable-login-with-oidc \
+ enable-login-with-google \
+ enable-login-with-github \
+ enable-login-with-gitlab \
+ enable-backend-worker \
+ enable-backend-asserts \
+ disable-feature-fdata-pointer-map \
+ enable-feature-fdata-objects-map \
+ enable-audit-log \
+ enable-transit-readable-response \
+ enable-demo-users \
+ disable-secure-session-cookies \
+ enable-smtp \
+ enable-prepl-server \
+ enable-urepl-server \
+ enable-rpc-climit \
+ enable-rpc-rlimit \
+ enable-quotes \
+ enable-soft-rpc-rlimit \
+ enable-auto-file-snapshot \
+ enable-webhooks \
+ enable-access-tokens \
+ disable-tiered-file-data-storage \
+ enable-file-validation \
+ enable-file-schema-validation \
+ enable-redis-cache \
+ enable-subscriptions";
+
+# Default deletion delay for devenv
+export PENPOT_DELETION_DELAY="24h"
+
+# Setup default upload media file size to 100MiB
+export PENPOT_MEDIA_MAX_FILE_SIZE=104857600
+
+# Setup default multipart upload size to 300MiB
+export PENPOT_HTTP_SERVER_MAX_MULTIPART_BODY_SIZE=314572800
+
+export AWS_ACCESS_KEY_ID=penpot-devenv
+export AWS_SECRET_ACCESS_KEY=penpot-devenv
+export PENPOT_OBJECTS_STORAGE_BACKEND=s3
+export PENPOT_OBJECTS_STORAGE_S3_ENDPOINT=http://minio:9000
+export PENPOT_OBJECTS_STORAGE_S3_BUCKET=penpot
+
+export JAVA_OPTS="\
+ -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager \
+ -Djdk.attach.allowAttachSelf \
+ -Dlog4j2.configurationFile=log4j2-devenv.xml \
+ -Djdk.tracePinnedThreads=full \
+ -Dim4java.useV7=true \
+ -XX:+UnlockExperimentalVMOptions \
+ -XX:+UseShenandoahGC \
+ -XX:+UseCompactObjectHeaders \
+ -XX:ShenandoahGCMode=generational \
+ -XX:-OmitStackTraceInFastThrow \
+ --sun-misc-unsafe-memory-access=allow \
+ --enable-preview \
+ --enable-native-access=ALL-UNNAMED";
+
+function setup_minio() {
+ # Initialize MINIO config
+ mc alias set penpot-s3/ http://minio:9000 minioadmin minioadmin -q
+ mc admin user add penpot-s3 penpot-devenv penpot-devenv -q
+ mc admin user info penpot-s3 penpot-devenv |grep -F -q "readwrite"
+ if [ "$?" = "1" ]; then
+ mc admin policy attach penpot-s3 readwrite --user=penpot-devenv -q
+ fi
+ mc mb penpot-s3/penpot -p -q
+}
+
+
diff --git a/backend/scripts/repl b/backend/scripts/repl
index c8daf5f051..2229d69716 100755
--- a/backend/scripts/repl
+++ b/backend/scripts/repl
@@ -1,112 +1,13 @@
#!/usr/bin/env bash
-export PENPOT_SECRET_KEY=super-secret-devenv-key
-export PENPOT_HOST=devenv
-export PENPOT_FLAGS="\
- $PENPOT_FLAGS \
- enable-login-with-ldap \
- enable-login-with-password
- enable-login-with-oidc \
- enable-login-with-google \
- enable-login-with-github \
- enable-login-with-gitlab \
- enable-backend-worker \
- enable-backend-asserts \
- disable-feature-fdata-pointer-map \
- enable-feature-fdata-objects-map \
- enable-audit-log \
- enable-transit-readable-response \
- enable-demo-users \
- disable-secure-session-cookies \
- enable-smtp \
- enable-prepl-server \
- enable-urepl-server \
- enable-rpc-climit \
- enable-rpc-rlimit \
- enable-quotes \
- enable-soft-rpc-rlimit \
- enable-auto-file-snapshot \
- enable-webhooks \
- enable-access-tokens \
- disable-tiered-file-data-storage \
- enable-file-validation \
- enable-file-schema-validation \
- enable-subscriptions \
- disable-subscriptions-old";
-
-# Default deletion delay for devenv
-export PENPOT_DELETION_DELAY="24h"
-
-# Setup default upload media file size to 100MiB
-export PENPOT_MEDIA_MAX_FILE_SIZE=104857600
-
-# Setup default multipart upload size to 300MiB
-export PENPOT_HTTP_SERVER_MAX_MULTIPART_BODY_SIZE=314572800
-
-# export PENPOT_DATABASE_URI="postgresql://172.17.0.1:5432/penpot"
-# export PENPOT_DATABASE_USERNAME="penpot"
-# export PENPOT_DATABASE_PASSWORD="penpot"
-# export PENPOT_DATABASE_READONLY=true
-
-# export PENPOT_DATABASE_URI="postgresql://172.17.0.1:5432/penpot_pre"
-# export PENPOT_DATABASE_USERNAME="penpot_pre"
-# export PENPOT_DATABASE_PASSWORD="penpot_pre"
-
-# export PENPOT_LOGGERS_LOKI_URI="http://172.17.0.1:3100/loki/api/v1/push"
-# export PENPOT_AUDIT_LOG_ARCHIVE_URI="http://localhost:6070/api/audit"
+SCRIPT_DIR=$(dirname $0);
+source $SCRIPT_DIR/_env;
# Initialize MINIO config
-mc alias set penpot-s3/ http://minio:9000 minioadmin minioadmin -q
-mc admin user add penpot-s3 penpot-devenv penpot-devenv -q
-mc admin user info penpot-s3 penpot-devenv |grep -F -q "readwrite"
-if [ "$?" = "1" ]; then
- mc admin policy attach penpot-s3 readwrite --user=penpot-devenv -q
-fi
-mc mb penpot-s3/penpot -p -q
-
-export AWS_ACCESS_KEY_ID=penpot-devenv
-export AWS_SECRET_ACCESS_KEY=penpot-devenv
-
-export PENPOT_OBJECTS_STORAGE_BACKEND=s3
-export PENPOT_OBJECTS_STORAGE_S3_ENDPOINT=http://minio:9000
-export PENPOT_OBJECTS_STORAGE_S3_BUCKET=penpot
-export PENPOT_OBJECTS_STORAGE_FS_DIRECTORY="assets"
-
-export JAVA_OPTS="\
- -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager \
- -Djdk.attach.allowAttachSelf \
- -Dlog4j2.configurationFile=log4j2-devenv-repl.xml \
- -Djdk.tracePinnedThreads=full \
- -Dim4java.useV7=true \
- -XX:+EnableDynamicAgentLoading \
- -XX:-OmitStackTraceInFastThrow \
- -XX:+UnlockDiagnosticVMOptions \
- -XX:+DebugNonSafepoints \
- --sun-misc-unsafe-memory-access=allow \
- --enable-preview \
- --enable-native-access=ALL-UNNAMED";
+setup_minio;
+export JAVA_OPTS="$JAVA_OPTS -Dlog4j2.configurationFile=log4j2-devenv-repl.xml"
export OPTIONS="-A:jmx-remote -A:dev"
-
-# Setup HEAP
-# export OPTIONS="$OPTIONS -J-Xms50m -J-Xmx1024m"
-# export OPTIONS="$OPTIONS -J-Xms1100m -J-Xmx1100m -J-XX:+AlwaysPreTouch"
-
-# Increase virtual thread pool size
-# export OPTIONS="$OPTIONS -J-Djdk.virtualThreadScheduler.parallelism=16"
-
-# Disable C2 Compiler
-# export OPTIONS="$OPTIONS -J-XX:TieredStopAtLevel=1"
-
-# Disable all compilers
-# export OPTIONS="$OPTIONS -J-Xint"
-
-# Setup GC
-# export OPTIONS="$OPTIONS -J-XX:+UseG1GC"
-
-# Setup GC
-# export OPTIONS="$OPTIONS -J-XX:+UseZGC"
-
export OPTIONS_EVAL="nil"
# export OPTIONS_EVAL="(set! *warn-on-reflection* true)"
diff --git a/backend/scripts/repl-test b/backend/scripts/repl-test
deleted file mode 100755
index 2ba1acdbfd..0000000000
--- a/backend/scripts/repl-test
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/env bash
-
-source /home/penpot/environ
-export PENPOT_FLAGS="$PENPOT_FLAGS disable-backend-worker"
-
-export OPTIONS="
- -A:jmx-remote -A:dev \
- -J-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager \
- -J-Djdk.attach.allowAttachSelf \
- -J-Dlog4j2.configurationFile=log4j2-experiments.xml \
- -J-XX:-OmitStackTraceInFastThrow \
- -J-XX:+UnlockDiagnosticVMOptions \
- -J-XX:+DebugNonSafepoints \
- -J-Djdk.tracePinnedThreads=full \
- -J-XX:+UseTransparentHugePages \
- -J-XX:ReservedCodeCacheSize=1g \
- -J-Dpolyglot.engine.WarnInterpreterOnly=false \
- -J--enable-preview";
-
-# Setup HEAP
-export OPTIONS="$OPTIONS -J-Xms320g -J-Xmx320g -J-XX:+AlwaysPreTouch"
-
-export PENPOT_HTTP_SERVER_IO_THREADS=2
-export PENPOT_HTTP_SERVER_WORKER_THREADS=2
-
-# Increase virtual thread pool size
-# export OPTIONS="$OPTIONS -J-Djdk.virtualThreadScheduler.parallelism=16"
-
-# Disable C2 Compiler
-# export OPTIONS="$OPTIONS -J-XX:TieredStopAtLevel=1"
-
-# Disable all compilers
-# export OPTIONS="$OPTIONS -J-Xint"
-
-# Setup GC
-export OPTIONS="$OPTIONS -J-XX:+UseG1GC -J-Xlog:gc:logs/gc.log"
-
-# Setup GC
-#export OPTIONS="$OPTIONS -J-XX:+UseZGC -J-XX:+ZGenerational -J-Xlog:gc:logs/gc.log"
-
-# Enable ImageMagick v7.x support
-# export OPTIONS="-J-Dim4java.useV7=true $OPTIONS";
-
-export OPTIONS_EVAL="nil"
-# export OPTIONS_EVAL="(set! *warn-on-reflection* true)"
-
-set -ex
-exec clojure $OPTIONS -M -e "$OPTIONS_EVAL" -m rebel-readline.main
diff --git a/backend/scripts/run b/backend/scripts/run
index 3d003af3a6..f48d0d060f 100755
--- a/backend/scripts/run
+++ b/backend/scripts/run
@@ -1,44 +1,13 @@
#!/usr/bin/env bash
-export PENPOT_SECRET_KEY=super-secret-devenv-key
-export PENPOT_HOST=devenv
-export PENPOT_FLAGS="\
- $PENPOT_FLAGS \
- enable-backend-asserts \
- enable-feature-fdata-pointer-map \
- enable-feature-fdata-objects-map \
- enable-file-snapshot \
- enable-tiered-file-data-storage";
+SCRIPT_DIR=$(dirname $0);
-export JAVA_OPTS="
- -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager \
- -Djdk.attach.allowAttachSelf \
- -Dlog4j2.configurationFile=log4j2-devenv.xml \
- -XX:+EnableDynamicAgentLoading \
- -XX:-OmitStackTraceInFastThrow \
- -XX:+UnlockDiagnosticVMOptions \
- -XX:+DebugNonSafepoints";
-
-export CLOJURE_OPTIONS="-A:dev"
-
-
-# Default deletion delay for devenv
-export PENPOT_DELETION_DELAY="24h"
-
-# Setup default upload media file size to 100MiB
-export PENPOT_MEDIA_MAX_FILE_SIZE=104857600
-
-# Setup default multipart upload size to 300MiB
-export PENPOT_HTTP_SERVER_MAX_MULTIPART_BODY_SIZE=314572800
-
-export AWS_ACCESS_KEY_ID=penpot-devenv
-export AWS_SECRET_ACCESS_KEY=penpot-devenv
-export PENPOT_OBJECTS_STORAGE_BACKEND=s3
-export PENPOT_OBJECTS_STORAGE_S3_ENDPOINT=http://minio:9000
-export PENPOT_OBJECTS_STORAGE_S3_BUCKET=penpot
+source $SCRIPT_DIR/_env;
+export OPTIONS="-A:dev"
entrypoint=${1:-app.main};
+
shift 1;
set -ex
-clojure $CLOJURE_OPTIONS -A:dev -M -m $entrypoint "$@";
+exec clojure $OPTIONS -A:dev -M -m $entrypoint "$@";
diff --git a/backend/scripts/start-dev b/backend/scripts/start-dev
index b5050e4e82..eaa4ebca70 100755
--- a/backend/scripts/start-dev
+++ b/backend/scripts/start-dev
@@ -1,70 +1,11 @@
#!/usr/bin/env bash
-export PENPOT_SECRET_KEY=super-secret-devenv-key
-export PENPOT_HOST=devenv
-export PENPOT_FLAGS="\
- $PENPOT_FLAGS \
- enable-prepl-server \
- enable-urepl-server \
- enable-nrepl-server \
- enable-webhooks \
- enable-backend-asserts \
- enable-audit-log \
- enable-login-with-ldap \
- enable-transit-readable-response \
- enable-demo-users \
- disable-feature-fdata-pointer-map \
- enable-feature-fdata-objects-map \
- disable-secure-session-cookies \
- enable-rpc-climit \
- enable-smtp \
- enable-quotes \
- enable-file-snapshot \
- enable-access-tokens \
- disable-tiered-file-data-storage \
- enable-file-validation \
- enable-file-schema-validation \
- enable-subscriptions \
- disable-subscriptions-old";
-
-# Default deletion delay for devenv
-export PENPOT_DELETION_DELAY="24h"
-
-# Setup default upload media file size to 100MiB
-export PENPOT_MEDIA_MAX_FILE_SIZE=104857600
-
-# Setup default multipart upload size to 300MiB
-export PENPOT_HTTP_SERVER_MAX_MULTIPART_BODY_SIZE=314572800
+SCRIPT_DIR=$(dirname $0);
+source $SCRIPT_DIR/_env;
# Initialize MINIO config
-mc alias set penpot-s3/ http://minio:9000 minioadmin minioadmin -q
-mc admin user add penpot-s3 penpot-devenv penpot-devenv -q
-mc admin user info penpot-s3 penpot-devenv |grep -F -q "readwrite"
-if [ "$?" = "1" ]; then
- mc admin policy attach penpot-s3 readwrite --user=penpot-devenv -q
-fi
-mc mb penpot-s3/penpot -p -q
-
-export AWS_ACCESS_KEY_ID=penpot-devenv
-export AWS_SECRET_ACCESS_KEY=penpot-devenv
-export PENPOT_OBJECTS_STORAGE_BACKEND=s3
-export PENPOT_OBJECTS_STORAGE_S3_ENDPOINT=http://minio:9000
-export PENPOT_OBJECTS_STORAGE_S3_BUCKET=penpot
-
-entrypoint=${1:-app.main};
-
-export JAVA_OPTS="\
- -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager \
- -Djdk.attach.allowAttachSelf \
- -Dlog4j2.configurationFile=log4j2-devenv.xml \
- -Djdk.tracePinnedThreads=full \
- -Dim4java.useV7=true \
- -XX:-OmitStackTraceInFastThrow \
- --sun-misc-unsafe-memory-access=allow \
- --enable-preview \
- --enable-native-access=ALL-UNNAMED";
-
-export OPTIONS="-A:jmx-remote -A:dev"
+setup_minio;
+shift 1;
set -ex
-clojure $OPTIONS -M -m $entrypoint;
+exec clojure -A:jmx-remote -A:dev -M -m app.main "$@";
diff --git a/backend/src/app/auth/oidc.clj b/backend/src/app/auth/oidc.clj
index 1651517083..9f5de73957 100644
--- a/backend/src/app/auth/oidc.clj
+++ b/backend/src/app/auth/oidc.clj
@@ -434,10 +434,10 @@
(sm/validator schema:info))
(defn- get-info
- [{:keys [::provider ::setup/props] :as cfg} {:keys [params] :as request}]
+ [{:keys [::provider] :as cfg} {:keys [params] :as request}]
(let [state (get params :state)
code (get params :code)
- state (tokens/verify props {:token state :iss :oauth})
+ state (tokens/verify cfg {:token state :iss :oauth})
tdata (fetch-access-token cfg code)
info (case (cf/get :oidc-user-info-source)
:token (get-user-info cfg tdata)
@@ -516,7 +516,7 @@
:iss :prepared-register
:exp (ct/in-future {:hours 48}))
- params {:token (tokens/generate (::setup/props cfg) info)
+ params {:token (tokens/generate cfg info)
:provider (:provider (:path-params request))
:fullname (:fullname info)}
params (d/without-nils params)]
@@ -569,7 +569,7 @@
:else
(let [sxf (session/create-fn cfg (:id profile))
token (or (:invitation-token info)
- (tokens/generate (::setup/props cfg)
+ (tokens/generate cfg
{:iss :auth
:exp (ct/in-future "15m")
:profile-id (:id profile)}))
@@ -620,8 +620,7 @@
:external-session-id esid
:props props
:exp (ct/in-future "4h")}
- state (tokens/generate (::setup/props cfg)
- (d/without-nils params))
+ state (tokens/generate cfg (d/without-nils params))
uri (build-auth-uri cfg state)]
{::yres/status 200
::yres/body {:redirect-uri uri}}))
diff --git a/backend/src/app/binfile/common.clj b/backend/src/app/binfile/common.clj
index 6299ab9179..1f6ab99cf2 100644
--- a/backend/src/app/binfile/common.clj
+++ b/backend/src/app/binfile/common.clj
@@ -34,8 +34,7 @@
[clojure.set :as set]
[cuerdas.core :as str]
[datoteka.fs :as fs]
- [datoteka.io :as io]
- [promesa.exec :as px]))
+ [datoteka.io :as io]))
(set! *warn-on-reflection* true)
@@ -142,13 +141,11 @@
([index coll attr]
(reduce #(index-object %1 %2 attr) index coll)))
-(defn decode-row
- [{:keys [data changes features] :as row}]
+(defn- decode-row-features
+ [{:keys [features] :as row}]
(when row
(cond-> row
- features (assoc :features (db/decode-pgarray features #{}))
- changes (assoc :changes (blob/decode changes))
- data (assoc :data (blob/decode data)))))
+ (db/pgarray? features) (assoc :features (db/decode-pgarray features #{})))))
(def sql:get-minimal-file
"SELECT f.id,
@@ -162,23 +159,158 @@
[cfg id & {:as opts}]
(db/get-with-sql cfg [sql:get-minimal-file id] opts))
-(defn decode-file
- "A general purpose file decoding function that resolves all external
- pointers, run migrations and return plain vanilla file map"
- [cfg {:keys [id] :as file} & {:keys [migrate?] :or {migrate? true}}]
- (binding [pmap/*load-fn* (partial fdata/load-pointer cfg id)]
- (let [file (->> file
- (fmigr/resolve-applied-migrations cfg)
- (fdata/resolve-file-data cfg))
- libs (delay (get-resolved-file-libraries cfg file))]
+(def sql:files-with-data
+ "SELECT f.id,
+ f.project_id,
+ f.created_at,
+ f.modified_at,
+ f.deleted_at,
+ f.name,
+ f.is_shared,
+ f.has_media_trimmed,
+ f.revn,
+ f.data AS legacy_data,
+ f.ignore_sync_until,
+ f.comment_thread_seqn,
+ f.features,
+ f.version,
+ f.vern,
+ p.team_id,
+ coalesce(fd.backend, 'legacy-db') AS backend,
+ fd.metadata AS metadata,
+ fd.data AS data
+ FROM file AS f
+ LEFT JOIN file_data AS fd ON (fd.file_id = f.id AND fd.id = f.id)
+ INNER JOIN project AS p ON (p.id = f.project_id)")
- (-> file
- (update :features db/decode-pgarray #{})
- (update :data blob/decode)
- (update :data fdata/process-pointers deref)
- (update :data fdata/process-objects (partial into {}))
- (update :data assoc :id id)
- (cond-> migrate? (fmg/migrate-file libs))))))
+(def sql:get-file
+ (str sql:files-with-data " WHERE f.id = ?"))
+
+(def sql:get-file-without-data
+ (str "WITH files AS (" sql:files-with-data ")"
+ "SELECT f.id,
+ f.project_id,
+ f.created_at,
+ f.modified_at,
+ f.deleted_at,
+ f.name,
+ f.is_shared,
+ f.has_media_trimmed,
+ f.revn,
+ f.ignore_sync_until,
+ f.comment_thread_seqn,
+ f.features,
+ f.version,
+ f.vern,
+ f.team_id
+ FROM files AS f
+ WHERE f.id = ?"))
+
+(defn- migrate-file
+ [{:keys [::db/conn] :as cfg} {:keys [read-only?]} {:keys [id] :as file}]
+ (binding [pmap/*load-fn* (partial fdata/load-pointer cfg id)
+ pmap/*tracked* (pmap/create-tracked)]
+ (let [libs (delay (get-resolved-file-libraries cfg file))
+ ;; For avoid unnecesary overhead of creating multiple
+ ;; pointers and handly internally with objects map in their
+ ;; worst case (when probably all shapes and all pointers
+ ;; will be readed in any case), we just realize/resolve them
+ ;; before applying the migration to the file.
+ file (-> (fdata/realize cfg file)
+ (fmg/migrate-file libs))]
+
+ (if (or read-only? (db/read-only? conn))
+ file
+ (do ;; When file is migrated, we break the rule of no
+ ;; perform mutations on get operations and update the
+ ;; file with all migrations applied
+ (update-file! cfg file)
+ (fmigr/resolve-applied-migrations cfg file))))))
+
+(defn- get-file*
+ [{:keys [::db/conn] :as cfg} id
+ {:keys [migrate?
+ realize?
+ decode?
+ skip-locked?
+ include-deleted?
+ load-data?
+ throw-if-not-exists?
+ lock-for-update?
+ lock-for-share?]
+ :or {lock-for-update? false
+ lock-for-share? false
+ load-data? true
+ migrate? true
+ decode? true
+ include-deleted? false
+ throw-if-not-exists? true
+ realize? false}
+ :as options}]
+
+ (assert (db/connection? conn) "expected cfg with valid connection")
+ (when (and (not load-data?)
+ (or lock-for-share? lock-for-share? skip-locked?))
+ (throw (IllegalArgumentException. "locking is incompatible when `load-data?` is false")))
+
+ (let [sql
+ (if load-data?
+ sql:get-file
+ sql:get-file-without-data)
+
+ sql
+ (cond
+ lock-for-update?
+ (str sql " FOR UPDATE of f")
+
+ lock-for-share?
+ (str sql " FOR SHARE of f")
+
+ :else
+ sql)
+
+ sql
+ (if skip-locked?
+ (str sql " SKIP LOCKED")
+ sql)
+
+ file
+ (db/get-with-sql conn [sql id]
+ {::db/throw-if-not-exists false
+ ::db/remove-deleted (not include-deleted?)})
+
+ file
+ (-> file
+ (d/update-when :features db/decode-pgarray #{})
+ (d/update-when :metadata fdata/decode-metadata))]
+
+ (if file
+ (if load-data?
+ (let [file
+ (->> file
+ (fmigr/resolve-applied-migrations cfg)
+ (fdata/resolve-file-data cfg))
+
+ will-migrate?
+ (and migrate? (fmg/need-migration? file))]
+
+ (if decode?
+ (cond->> (fdata/decode-file-data cfg file)
+ (and realize? (not will-migrate?))
+ (fdata/realize cfg)
+
+ will-migrate?
+ (migrate-file cfg options))
+
+ file))
+ file)
+
+ (when-not (or skip-locked? (not throw-if-not-exists?))
+ (ex/raise :type :not-found
+ :code :object-not-found
+ :hint "database object not found"
+ :table :file
+ :file-id id)))))
(defn get-file
"Get file, resolve all features and apply migrations.
@@ -187,10 +319,7 @@
operations on file, because it removes the ovehead of lazy fetching
and decoding."
[cfg file-id & {:as opts}]
- (db/run! cfg (fn [{:keys [::db/conn] :as cfg}]
- (when-let [row (db/get* conn :file {:id file-id}
- (assoc opts ::db/remove-deleted false))]
- (decode-file cfg row opts)))))
+ (db/run! cfg get-file* file-id opts))
(defn clean-file-features
[file]
@@ -214,12 +343,12 @@
(let [conn (db/get-connection cfg)
ids (db/create-array conn "uuid" ids)]
(->> (db/exec! conn [sql:get-teams ids])
- (map decode-row))))
+ (map decode-row-features))))
(defn get-team
[cfg team-id]
(-> (db/get cfg :team {:id team-id})
- (decode-row)))
+ (decode-row-features)))
(defn get-fonts
[cfg team-id]
@@ -311,7 +440,6 @@
(do
(l/trc :hint "lookup index"
:file-id (str file-id)
- :snap-id (str (:snapshot-id file))
:id (str id)
:result (str (get mobj :id)))
(get mobj :id))
@@ -328,7 +456,6 @@
(doseq [[old-id item] missing-index]
(l/dbg :hint "create missing references"
:file-id (str file-id)
- :snap-id (str (:snapshot-id file))
:old-id (str old-id)
:id (str (:id item)))
(db/insert! conn :file-media-object item
@@ -339,12 +466,16 @@
(def sql:get-file-media
"SELECT * FROM file_media_object WHERE id = ANY(?)")
+(defn get-file-media*
+ [{:keys [::db/conn] :as cfg} {:keys [data id] :as file}]
+ (let [used (cfh/collect-used-media data)
+ used (db/create-array conn "uuid" used)]
+ (->> (db/exec! conn [sql:get-file-media used])
+ (mapv (fn [row] (assoc row :file-id id))))))
+
(defn get-file-media
- [cfg {:keys [data] :as file}]
- (db/run! cfg (fn [{:keys [::db/conn]}]
- (let [used (cfh/collect-used-media data)
- used (db/create-array conn "uuid" used)]
- (db/exec! conn [sql:get-file-media used])))))
+ [cfg file]
+ (db/run! cfg get-file-media* file))
(def ^:private sql:get-team-files-ids
"SELECT f.id FROM file AS f
@@ -475,8 +606,8 @@
;; all of them, not only the applied
(vary-meta dissoc ::fmg/migrated))))
-(defn encode-file
- [{:keys [::wrk/executor] :as cfg} {:keys [id features] :as file}]
+(defn- encode-file
+ [cfg {:keys [id features] :as file}]
(let [file (if (and (contains? features "fdata/objects-map")
(:data file))
(fdata/enable-objects-map file)
@@ -493,18 +624,33 @@
(-> file
(d/update-when :features into-array)
- (d/update-when :data (fn [data] (px/invoke! executor #(blob/encode data)))))))
+ (d/update-when :data blob/encode))))
(defn- file->params
[file]
(-> (select-keys file file-attrs)
+ (assoc :data nil)
(dissoc :team-id)
(dissoc :migrations)))
+(defn- file->file-data-params
+ [{:keys [id] :as file} & {:as opts}]
+ (let [created-at (or (:created-at file) (ct/now))
+ modified-at (or (:modified-at file) created-at)]
+ (d/without-nils
+ {:id id
+ :type "main"
+ :file-id id
+ :data (:data file)
+ :metadata (:metadata file)
+ :created-at created-at
+ :modified-at modified-at})))
+
(defn insert-file!
"Insert a new file into the database table. Expectes a not-encoded file.
Returns nil."
[{:keys [::db/conn] :as cfg} file & {:as opts}]
+ (db/exec-one! conn ["SET CONSTRAINTS ALL DEFERRED"])
(when (:migrations file)
(fmigr/upsert-migrations! conn file))
@@ -512,35 +658,43 @@
(let [file (encode-file cfg file)]
(db/insert! conn :file
(file->params file)
- {::db/return-keys false})
+ (assoc opts ::db/return-keys false))
+
+ (->> (file->file-data-params file)
+ (fdata/upsert! cfg))
+
nil))
(defn update-file!
"Update an existing file on the database. Expects not encoded file."
[{:keys [::db/conn] :as cfg} {:keys [id] :as file} & {:as opts}]
- (if (::reset-migrations opts false)
+ (if (::reset-migrations? opts false)
(fmigr/reset-migrations! conn file)
(fmigr/upsert-migrations! conn file))
(let [file
(encode-file cfg file)
- params
- (file->params (dissoc file :id))]
+ file-params
+ (file->params (dissoc file :id))
- (db/update! conn :file params
+ file-data-params
+ (file->file-data-params file)]
+
+ (db/update! conn :file file-params
{:id id}
{::db/return-keys false})
+ (fdata/upsert! cfg file-data-params)
nil))
(defn save-file!
"Applies all the final validations and perist the file, binfile
specific, should not be used outside of binfile domain.
-
Returns nil"
[{:keys [::timestamp] :as cfg} file & {:as opts}]
+
(assert (ct/inst? timestamp) "expected valid timestamp")
(let [file (-> file
@@ -565,7 +719,7 @@
(l/error :hint "file schema validation error" :cause result))))
(if (::overwrite cfg)
- (update-file! cfg file (assoc opts ::reset-migrations true))
+ (update-file! cfg file (assoc opts ::reset-migrations? true))
(insert-file! cfg file opts))))
(def ^:private sql:get-file-libraries
@@ -595,7 +749,7 @@
l.version
FROM libs AS l
INNER JOIN project AS p ON (p.id = l.project_id)
- WHERE l.deleted_at IS NULL OR l.deleted_at > now();")
+ WHERE l.deleted_at IS NULL;")
(defn get-file-libraries
[conn file-id]
@@ -604,7 +758,7 @@
;; FIXME: :is-indirect set to false to all rows looks
;; completly useless
(map #(assoc % :is-indirect false))
- (map decode-row))
+ (map decode-row-features))
(db/exec! conn [sql:get-file-libraries file-id])))
(defn get-resolved-file-libraries
diff --git a/backend/src/app/binfile/v1.clj b/backend/src/app/binfile/v1.clj
index d78b97b3c5..04b390bb99 100644
--- a/backend/src/app/binfile/v1.clj
+++ b/backend/src/app/binfile/v1.clj
@@ -346,7 +346,7 @@
thumbnails (->> (bfc/get-file-object-thumbnails cfg file-id)
(mapv #(dissoc % :file-id)))
- file (cond-> (bfc/get-file cfg file-id)
+ file (cond-> (bfc/get-file cfg file-id :realize? true)
detach?
(-> (ctf/detach-external-references file-id)
(dissoc :libraries))
diff --git a/backend/src/app/binfile/v2.clj b/backend/src/app/binfile/v2.clj
index 93cd16c211..c8acf2dc99 100644
--- a/backend/src/app/binfile/v2.clj
+++ b/backend/src/app/binfile/v2.clj
@@ -153,7 +153,7 @@
(defn- write-file!
[cfg file-id]
- (let [file (bfc/get-file cfg file-id)
+ (let [file (bfc/get-file cfg file-id :realize? true)
thumbs (bfc/get-file-object-thumbnails cfg file-id)
media (bfc/get-file-media cfg file)
rels (bfc/get-files-rels cfg #{file-id})]
diff --git a/backend/src/app/binfile/v3.clj b/backend/src/app/binfile/v3.clj
index cb480d209a..682ddc74de 100644
--- a/backend/src/app/binfile/v3.clj
+++ b/backend/src/app/binfile/v3.clj
@@ -224,9 +224,11 @@
(throw (IllegalArgumentException.
"the `include-libraries` and `embed-assets` are mutally excluding options")))
- (let [detach? (and (not embed-assets) (not include-libraries))]
+ (let [detach? (and (not embed-assets) (not include-libraries))]
(db/tx-run! cfg (fn [cfg]
- (cond-> (bfc/get-file cfg file-id {::sql/for-update true})
+ (cond-> (bfc/get-file cfg file-id
+ {:realize? true
+ :lock-for-update? true})
detach?
(-> (ctf/detach-external-references file-id)
(dissoc :libraries))
@@ -713,7 +715,7 @@
:plugin-data plugin-data}))
(defn- import-file
- [{:keys [::bfc/project-id] :as cfg} {file-id :id file-name :name}]
+ [{:keys [::db/conn ::bfc/project-id] :as cfg} {file-id :id file-name :name}]
(let [file-id' (bfc/lookup-index file-id)
file (read-file cfg file-id)
media (read-file-media cfg file-id)
@@ -726,26 +728,48 @@
:version (:version file)
::l/sync? true)
- (events/tap :progress {:section :file :name file-name})
+ (vswap! bfc/*state* update :index bfc/update-index media :id)
- (when media
- ;; Update index with media
- (l/dbg :hint "update media index"
- :file-id (str file-id')
- :total (count media)
- ::l/sync? true)
+ (events/tap :progress {:section :media :file-id file-id})
- (vswap! bfc/*state* update :index bfc/update-index (map :id media))
- (vswap! bfc/*state* update :media into media))
+ (doseq [item media]
+ (let [params (-> item
+ (update :id bfc/lookup-index)
+ (assoc :file-id file-id')
+ (d/update-when :media-id bfc/lookup-index)
+ (d/update-when :thumbnail-id bfc/lookup-index))]
- (when thumbnails
- (l/dbg :hint "update thumbnails index"
- :file-id (str file-id')
- :total (count thumbnails)
- ::l/sync? true)
+ (l/dbg :hint "inserting media object"
+ :file-id (str file-id')
+ :id (str (:id params))
+ :media-id (str (:media-id params))
+ :thumbnail-id (str (:thumbnail-id params))
+ :old-id (str (:id item))
+ ::l/sync? true)
- (vswap! bfc/*state* update :index bfc/update-index (map :media-id thumbnails))
- (vswap! bfc/*state* update :thumbnails into thumbnails))
+ (db/insert! conn :file-media-object params
+ ::db/on-conflict-do-nothing? (::bfc/overwrite cfg))))
+
+ (events/tap :progress {:section :thumbnails :file-id file-id})
+
+ (doseq [item thumbnails]
+ (let [media-id (bfc/lookup-index (:media-id item))
+ object-id (-> (assoc item :file-id file-id')
+ (cth/fmt-object-id))
+ params {:file-id file-id'
+ :object-id object-id
+ :tag (:tag item)
+ :media-id media-id}]
+
+ (l/dbg :hint "inserting object thumbnail"
+ :file-id (str file-id')
+ :media-id (str media-id)
+ ::l/sync? true)
+
+ (db/insert! conn :file-tagged-object-thumbnail params
+ ::db/on-conflict-do-nothing? true)))
+
+ (events/tap :progress {:section :file :file-id file-id})
(let [data (-> (read-file-data cfg file-id)
(d/without-nils)
@@ -794,95 +818,47 @@
entries (keep (match-storage-entry-fn) entries)]
(doseq [{:keys [id entry]} entries]
- (let [object (->> (read-entry input entry)
- (decode-storage-object)
- (validate-storage-object))]
+ (let [object (->> (read-entry input entry)
+ (decode-storage-object)
+ (validate-storage-object))
- (when (not= id (:id object))
+ ext (cmedia/mtype->extension (:content-type object))
+ path (str "objects/" id ext)
+ content (->> path
+ (get-zip-entry input)
+ (zip-entry-storage-content input))]
+
+ (when (not= (:size object) (sto/get-size content))
(ex/raise :type :validation
:code :inconsistent-penpot-file
- :hint "the penpot file seems corrupt, found unexpected uuid (storage-object-id)"
- :expected-id (str id)
- :found-id (str (:id object))))
+ :hint "found corrupted storage object: size does not match"
+ :path path
+ :expected-size (:size object)
+ :found-size (sto/get-size content)))
- (let [ext (cmedia/mtype->extension (:content-type object))
- path (str "objects/" id ext)
- content (->> path
- (get-zip-entry input)
- (zip-entry-storage-content input))]
-
- (when (not= (:size object) (sto/get-size content))
+ (when-let [hash (get object :hash)]
+ (when (not= hash (sto/get-hash content))
(ex/raise :type :validation
:code :inconsistent-penpot-file
- :hint "found corrupted storage object: size does not match"
+ :hint "found corrupted storage object: hash does not match"
:path path
- :expected-size (:size object)
- :found-size (sto/get-size content)))
+ :expected-hash (:hash object)
+ :found-hash (sto/get-hash content))))
- (when-let [hash (get object :hash)]
- (when (not= hash (sto/get-hash content))
- (ex/raise :type :validation
- :code :inconsistent-penpot-file
- :hint "found corrupted storage object: hash does not match"
- :path path
- :expected-hash (:hash object)
- :found-hash (sto/get-hash content))))
+ (let [params (-> object
+ (dissoc :id :size)
+ (assoc ::sto/content content)
+ (assoc ::sto/deduplicate? true)
+ (assoc ::sto/touched-at timestamp))
+ sobject (sto/put-object! storage params)]
- (let [params (-> object
- (dissoc :id :size)
- (assoc ::sto/content content)
- (assoc ::sto/deduplicate? true)
- (assoc ::sto/touched-at timestamp))
- sobject (sto/put-object! storage params)]
+ (l/dbg :hint "persisted storage object"
+ :id (str (:id sobject))
+ :prev-id (str id)
+ :bucket (:bucket params)
+ ::l/sync? true)
- (l/dbg :hint "persisted storage object"
- :id (str (:id sobject))
- :prev-id (str id)
- :bucket (:bucket params)
- ::l/sync? true)
-
- (vswap! bfc/*state* update :index assoc id (:id sobject))))))))
-
-(defn- import-file-media
- [{:keys [::db/conn] :as cfg}]
- (events/tap :progress {:section :media})
-
- (doseq [item (:media @bfc/*state*)]
- (let [params (-> item
- (update :id bfc/lookup-index)
- (update :file-id bfc/lookup-index)
- (d/update-when :media-id bfc/lookup-index)
- (d/update-when :thumbnail-id bfc/lookup-index))]
-
- (l/dbg :hint "inserting file media object"
- :old-id (str (:id item))
- :id (str (:id params))
- :file-id (str (:file-id params))
- ::l/sync? true)
-
- (db/insert! conn :file-media-object params
- ::db/on-conflict-do-nothing? (::bfc/overwrite cfg)))))
-
-(defn- import-file-thumbnails
- [{:keys [::db/conn] :as cfg}]
- (events/tap :progress {:section :thumbnails})
- (doseq [item (:thumbnails @bfc/*state*)]
- (let [file-id (bfc/lookup-index (:file-id item))
- media-id (bfc/lookup-index (:media-id item))
- object-id (-> (assoc item :file-id file-id)
- (cth/fmt-object-id))
- params {:file-id file-id
- :object-id object-id
- :tag (:tag item)
- :media-id media-id}]
-
- (l/dbg :hint "inserting file object thumbnail"
- :file-id (str file-id)
- :media-id (str media-id)
- ::l/sync? true)
-
- (db/insert! conn :file-tagged-object-thumbnail params
- {::db/on-conflict-do-nothing? true}))))
+ (vswap! bfc/*state* update :index assoc id (:id sobject)))))))
(defn- import-files*
[{:keys [::manifest] :as cfg}]
@@ -890,6 +866,8 @@
(vswap! bfc/*state* update :index bfc/update-index (:files manifest) :id)
+ (import-storage-objects cfg)
+
(let [files (get manifest :files)
result (reduce (fn [result {:keys [id] :as file}]
(let [name' (get file :name)
@@ -902,10 +880,6 @@
files)]
(import-file-relations cfg)
- (import-storage-objects cfg)
- (import-file-media cfg)
- (import-file-thumbnails cfg)
-
(bfm/apply-pending-migrations! cfg)
result))
@@ -930,9 +904,8 @@
(binding [bfc/*options* cfg
bfc/*reference-file* ref-file]
- (import-file cfg file)
(import-storage-objects cfg)
- (import-file-media cfg)
+ (import-file cfg file)
(bfc/invalidate-thumbnails cfg file-id)
(bfm/apply-pending-migrations! cfg)
diff --git a/backend/src/app/config.clj b/backend/src/app/config.clj
index 805608da5f..e5339a25a4 100644
--- a/backend/src/app/config.clj
+++ b/backend/src/app/config.clj
@@ -52,6 +52,8 @@
:redis-uri "redis://redis/0"
+ :file-data-backend "legacy-db"
+
:objects-storage-backend "fs"
:objects-storage-fs-directory "assets"
@@ -96,7 +98,9 @@
[:http-server-max-body-size {:optional true} ::sm/int]
[:http-server-max-multipart-body-size {:optional true} ::sm/int]
[:http-server-io-threads {:optional true} ::sm/int]
- [:http-server-worker-threads {:optional true} ::sm/int]
+ [:http-server-max-worker-threads {:optional true} ::sm/int]
+
+ [:management-api-shared-key {:optional true} :string]
[:telemetry-uri {:optional true} :string]
[:telemetry-with-taiga {:optional true} ::sm/boolean] ;; DELETE
@@ -105,7 +109,8 @@
[:auto-file-snapshot-timeout {:optional true} ::ct/duration]
[:media-max-file-size {:optional true} ::sm/int]
- [:deletion-delay {:optional true} ::ct/duration] ;; REVIEW
+ [:deletion-delay {:optional true} ::ct/duration]
+ [:file-clean-delay {:optional true} ::ct/duration]
[:telemetry-enabled {:optional true} ::sm/boolean]
[:default-blob-version {:optional true} ::sm/int]
[:allow-demo-users {:optional true} ::sm/boolean]
@@ -146,7 +151,6 @@
[:quotes-team-access-requests-per-team {:optional true} ::sm/int]
[:quotes-team-access-requests-per-requester {:optional true} ::sm/int]
- [:auth-data-cookie-domain {:optional true} :string]
[:auth-token-cookie-name {:optional true} :string]
[:auth-token-cookie-max-age {:optional true} ::ct/duration]
@@ -210,24 +214,27 @@
[:prepl-host {:optional true} :string]
[:prepl-port {:optional true} ::sm/int]
+ [:file-data-backend {:optional true} [:enum "db" "legacy-db" "storage"]]
+
[:media-directory {:optional true} :string] ;; REVIEW
[:media-uri {:optional true} :string]
[:assets-path {:optional true} :string]
- ;; Legacy, will be removed in 2.5
+ [:netty-io-threads {:optional true} ::sm/int]
+ [:executor-threads {:optional true} ::sm/int]
+
+ ;; DEPRECATED
[:assets-storage-backend {:optional true} :keyword]
[:storage-assets-fs-directory {:optional true} :string]
[:storage-assets-s3-bucket {:optional true} :string]
[:storage-assets-s3-region {:optional true} :keyword]
[:storage-assets-s3-endpoint {:optional true} ::sm/uri]
- [:storage-assets-s3-io-threads {:optional true} ::sm/int]
[:objects-storage-backend {:optional true} :keyword]
[:objects-storage-fs-directory {:optional true} :string]
[:objects-storage-s3-bucket {:optional true} :string]
[:objects-storage-s3-region {:optional true} :keyword]
- [:objects-storage-s3-endpoint {:optional true} ::sm/uri]
- [:objects-storage-s3-io-threads {:optional true} ::sm/int]]))
+ [:objects-storage-s3-endpoint {:optional true} ::sm/uri]]))
(defn- parse-flags
[config]
@@ -300,6 +307,11 @@
(or (c/get config :deletion-delay)
(ct/duration {:days 7})))
+(defn get-file-clean-delay
+ []
+ (or (c/get config :file-clean-delay)
+ (ct/duration {:days 2})))
+
(defn get
"A configuration getter. Helps code be more testable."
([key]
diff --git a/backend/src/app/db.clj b/backend/src/app/db.clj
index 4bf4c6a91b..4f97f35093 100644
--- a/backend/src/app/db.clj
+++ b/backend/src/app/db.clj
@@ -298,7 +298,7 @@
(defn insert!
"A helper that builds an insert sql statement and executes it. By
default returns the inserted row with all the field; you can delimit
- the returned columns with the `::columns` option."
+ the returned columns with the `::sql/columns` option."
[ds table params & {:as opts}]
(let [conn (get-connectable ds)
sql (sql/insert table params opts)
@@ -379,9 +379,7 @@
(defn is-row-deleted?
[{:keys [deleted-at]}]
- (and (ct/inst? deleted-at)
- (< (inst-ms deleted-at)
- (inst-ms (ct/now)))))
+ (some? deleted-at))
(defn get*
"Retrieve a single row from database that matches a simple filters. Do
@@ -406,15 +404,15 @@
:hint "database object not found"))
row))
-
(defn get-with-sql
[ds sql & {:as opts}]
- (let [rows (cond->> (exec! ds sql opts)
- (::remove-deleted opts true)
- (remove is-row-deleted?)
+ (let [rows
+ (cond->> (exec! ds sql opts)
+ (::remove-deleted opts true)
+ (remove is-row-deleted?)
- :always
- (not-empty))]
+ :always
+ (not-empty))]
(when (and (not rows) (::throw-if-not-exists opts true))
(ex/raise :type :not-found
@@ -423,7 +421,6 @@
(first rows)))
-
(def ^:private default-plan-opts
(-> default-opts
(assoc :fetch-size 1000)
@@ -578,10 +575,10 @@
[system f & params]
(cond
(connection? system)
- (run! {::conn system} f)
+ (apply run! {::conn system} f params)
(pool? system)
- (run! {::pool system} f)
+ (apply run! {::pool system} f params)
(::conn system)
(apply f system params)
diff --git a/backend/src/app/features/fdata.clj b/backend/src/app/features/fdata.clj
index 50ebb10b57..16afb9fd1a 100644
--- a/backend/src/app/features/fdata.clj
+++ b/backend/src/app/features/fdata.clj
@@ -9,32 +9,46 @@
(:require
[app.common.data :as d]
[app.common.exceptions :as ex]
- [app.common.files.helpers :as cfh]
- [app.common.files.migrations :as fmg]
[app.common.logging :as l]
+ [app.common.schema :as sm]
+ [app.common.time :as ct]
[app.common.types.objects-map :as omap]
- [app.common.types.path :as path]
+ [app.config :as cf]
[app.db :as db]
[app.db.sql :as-alias sql]
[app.storage :as sto]
[app.util.blob :as blob]
[app.util.objects-map :as omap.legacy]
- [app.util.pointer-map :as pmap]
- [app.worker :as wrk]
- [promesa.exec :as px]))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; OFFLOAD
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defn offloaded?
- [file]
- (= "objects-storage" (:data-backend file)))
+ [app.util.pointer-map :as pmap]))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; OBJECTS-MAP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defn process-objects
+ "Apply a function to all objects-map on the file. Usualy used for convert
+ the objects-map instances to plain maps"
+ [fdata update-fn]
+ (if (contains? fdata :pages-index)
+ (update fdata :pages-index d/update-vals
+ (fn [page]
+ (update page :objects
+ (fn [objects]
+ (if (or (omap/objects-map? objects)
+ (omap.legacy/objects-map? objects))
+ (update-fn objects)
+ objects)))))
+ fdata))
+
+
+(defn realize-objects
+ "Process a file and remove all instances of objects map realizing them
+ to a plain data. Used in operation where is more efficient have the
+ whole file loaded in memory or we going to persist it in an
+ alterantive storage."
+ [_cfg file]
+ (update file :data process-objects (partial into {})))
+
(defn enable-objects-map
[file & _opts]
(let [update-page
@@ -63,51 +77,194 @@
(update :data update-data)
(update :features disj "fdata/objects-map"))))
-(defn process-objects
- "Apply a function to all objects-map on the file. Usualy used for convert
- the objects-map instances to plain maps"
- [fdata update-fn]
- (if (contains? fdata :pages-index)
- (update fdata :pages-index d/update-vals
- (fn [page]
- (update page :objects
- (fn [objects]
- (if (or (omap/objects-map? objects)
- (omap.legacy/objects-map? objects))
- (update-fn objects)
- objects)))))
- fdata))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; STORAGE
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defmulti resolve-file-data
+ (fn [_cfg file] (get file :backend "legacy-db")))
+
+(defmethod resolve-file-data "legacy-db"
+ [_cfg {:keys [legacy-data] :as file}]
+ (-> file
+ (assoc :data legacy-data)
+ (dissoc :legacy-data)))
+
+(defmethod resolve-file-data "db"
+ [_cfg file]
+ (dissoc file :legacy-data))
+
+(defmethod resolve-file-data "storage"
+ [cfg {:keys [metadata] :as file}]
+ (let [storage (sto/resolve cfg ::db/reuse-conn true)
+ ref-id (:storage-ref-id metadata)
+ data (->> (sto/get-object storage ref-id)
+ (sto/get-object-bytes storage))]
+ (-> file
+ (assoc :data data)
+ (dissoc :legacy-data))))
+
+(defn decode-file-data
+ [_cfg {:keys [data] :as file}]
+ (cond-> file
+ (bytes? data)
+ (assoc :data (blob/decode data))))
+
+(def ^:private sql:insert-file-data
+ "INSERT INTO file_data (file_id, id, created_at, modified_at, deleted_at,
+ type, backend, metadata, data)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)")
+
+(def ^:private sql:upsert-file-data
+ (str sql:insert-file-data
+ " ON CONFLICT (file_id, id)
+ DO UPDATE SET modified_at=?,
+ deleted_at=?,
+ backend=?,
+ metadata=?,
+ data=?"))
+
+(defn- upsert-in-database
+ [cfg {:keys [id file-id created-at modified-at deleted-at type backend data metadata]}]
+ (let [created-at (or created-at (ct/now))
+ metadata (some-> metadata db/json)
+ modified-at (or modified-at created-at)]
+
+ (db/exec-one! cfg [sql:upsert-file-data
+ file-id id
+ created-at
+ modified-at
+ deleted-at
+ type
+ backend
+ metadata
+ data
+ modified-at
+ deleted-at
+ backend
+ metadata
+ data])))
+
+(defn- handle-persistence
+ [cfg {:keys [type backend id file-id data] :as params}]
+
+ (cond
+ (= backend "storage")
+ (let [storage (sto/resolve cfg)
+ content (sto/content data)
+ sobject (sto/put-object! storage
+ {::sto/content content
+ ::sto/touch true
+ :bucket "file-data"
+ :content-type "application/octet-stream"
+ :file-id file-id
+ :id id})
+ metadata {:storage-ref-id (:id sobject)}
+ params (-> params
+ (assoc :metadata metadata)
+ (assoc :data nil))]
+ (upsert-in-database cfg params))
+
+ (= backend "db")
+ (->> (dissoc params :metadata)
+ (upsert-in-database cfg))
+
+ (= backend "legacy-db")
+ (cond
+ (= type "main")
+ (do
+ (db/delete! cfg :file-data
+ {:id id :file-id file-id :type "main"}
+ {::db/return-keys false})
+ (db/update! cfg :file
+ {:data data}
+ {:id file-id}
+ {::db/return-keys false}))
+
+ (= type "snapshot")
+ (do
+ (db/delete! cfg :file-data
+ {:id id :file-id file-id :type "snapshot"}
+ {::db/return-keys false})
+ (db/update! cfg :file-change
+ {:data data}
+ {:file-id file-id :id id}
+ {::db/return-keys false}))
+
+ (= type "fragment")
+ (upsert-in-database cfg
+ (-> (dissoc params :metadata)
+ (assoc :backend "db")))
+
+ :else
+ (throw (RuntimeException. "not implemented")))
+
+ :else
+ (throw (IllegalArgumentException.
+ (str "backend '" backend "' not supported")))))
+
+(defn process-metadata
+ [cfg metadata]
+ (when-let [storage-id (:storage-ref-id metadata)]
+ (let [storage (sto/resolve cfg ::db/reuse-conn true)]
+ (sto/touch-object! storage storage-id))))
+
+(defn- default-backend
+ [backend]
+ (or backend (cf/get :file-data-backend)))
+
+(def ^:private schema:metadata
+ [:map {:title "Metadata"}
+ [:storage-ref-id {:optional true} ::sm/uuid]])
+
+(def decode-metadata-with-schema
+ (sm/decoder schema:metadata sm/json-transformer))
+
+(defn decode-metadata
+ [metadata]
+ (some-> metadata
+ (db/decode-json-pgobject)
+ (decode-metadata-with-schema)))
+
+(def ^:private schema:update-params
+ [:map {:closed true}
+ [:id ::sm/uuid]
+ [:type [:enum "main" "snapshot" "fragment"]]
+ [:file-id ::sm/uuid]
+ [:backend {:optional true} [:enum "db" "legacy-db" "storage"]]
+ [:metadata {:optional true} [:maybe schema:metadata]]
+ [:data {:optional true} bytes?]
+ [:created-at {:optional true} ::ct/inst]
+ [:modified-at {:optional true} [:maybe ::ct/inst]]
+ [:deleted-at {:optional true} [:maybe ::ct/inst]]])
+
+(def ^:private check-update-params
+ (sm/check-fn schema:update-params :hint "invalid params received for update"))
+
+(defn upsert!
+ "Create or update file data"
+ [cfg params & {:as opts}]
+ (let [params (-> (check-update-params params)
+ (update :backend default-backend))]
+
+ (some->> (:metadata params)
+ (process-metadata cfg))
+
+ (-> (handle-persistence cfg params)
+ (db/get-update-count)
+ (pos?))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; POINTER-MAP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defn get-file-data
- "Get file data given a file instance."
- [system file]
- (if (offloaded? file)
- (let [storage (sto/resolve system ::db/reuse-conn true)]
- (->> (sto/get-object storage (:data-ref-id file))
- (sto/get-object-bytes storage)))
- (:data file)))
-
-(defn resolve-file-data
- [system file]
- (let [data (get-file-data system file)]
- (assoc file :data data)))
-
-(defn decode-file-data
- [{:keys [::wrk/executor]} {:keys [data] :as file}]
- (cond-> file
- (bytes? data)
- (assoc :data (px/invoke! executor #(blob/decode data)))))
-
(defn load-pointer
"A database loader pointer helper"
- [system file-id id]
- (let [fragment (db/get* system :file-data-fragment
- {:id id :file-id file-id}
- {::sql/columns [:data :data-backend :data-ref-id :id]})]
+ [cfg file-id id]
+ (let [fragment (some-> (db/get* cfg :file-data
+ {:id id :file-id file-id :type "fragment"}
+ {::sql/columns [:data :backend :id :metadata]})
+ (update :metadata decode-metadata))]
(l/trc :hint "load pointer"
:file-id (str file-id)
@@ -121,22 +278,21 @@
:file-id file-id
:fragment-id id))
- (let [data (get-file-data system fragment)]
- ;; FIXME: conditional thread scheduling for decoding big objects
- (blob/decode data))))
+ (-> (resolve-file-data cfg fragment)
+ (get :data)
+ (blob/decode))))
(defn persist-pointers!
"Persist all currently tracked pointer objects"
- [system file-id]
- (let [conn (db/get-connection system)]
- (doseq [[id item] @pmap/*tracked*]
- (when (pmap/modified? item)
- (l/trc :hint "persist pointer" :file-id (str file-id) :id (str id))
- (let [content (-> item deref blob/encode)]
- (db/insert! conn :file-data-fragment
- {:id id
- :file-id file-id
- :data content}))))))
+ [cfg file-id]
+ (doseq [[id item] @pmap/*tracked*]
+ (when (pmap/modified? item)
+ (l/trc :hint "persist pointer" :file-id (str file-id) :id (str id))
+ (let [content (-> item deref blob/encode)]
+ (upsert! cfg {:id id
+ :file-id file-id
+ :type "fragment"
+ :data content})))))
(defn process-pointers
"Apply a function to all pointers on the file. Usuly used for
@@ -150,6 +306,14 @@
(d/update-vals update-fn')
(update :pages-index d/update-vals update-fn'))))
+(defn realize-pointers
+ "Process a file and remove all instances of pointers realizing them to
+ a plain data. Used in operation where is more efficient have the
+ whole file loaded in memory."
+ [cfg {:keys [id] :as file}]
+ (binding [pmap/*load-fn* (partial load-pointer cfg id)]
+ (update file :data process-pointers deref)))
+
(defn get-used-pointer-ids
"Given a file, return all pointer ids used in the data."
[fdata]
@@ -169,47 +333,12 @@
(update :features conj "fdata/pointer-map")))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; PATH-DATA
+;; GENERAL PURPOSE HELPERS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defn enable-path-data
- "Enable the fdata/path-data feature on the file."
- [file & _opts]
- (letfn [(update-object [object]
- (if (or (cfh/path-shape? object)
- (cfh/bool-shape? object))
- (update object :content path/content)
- object))
-
- (update-container [container]
- (d/update-when container :objects d/update-vals update-object))]
-
- (-> file
- (update :data (fn [data]
- (-> data
- (update :pages-index d/update-vals update-container)
- (d/update-when :components d/update-vals update-container))))
- (update :features conj "fdata/path-data"))))
-
-(defn disable-path-data
- [file & _opts]
- (letfn [(update-object [object]
- (if (or (cfh/path-shape? object)
- (cfh/bool-shape? object))
- (update object :content vec)
- object))
-
- (update-container [container]
- (d/update-when container :objects d/update-vals update-object))]
-
- (when-let [conn db/*conn*]
- (db/delete! conn :file-migration {:file-id (:id file)
- :name "0003-convert-path-content"}))
- (-> file
- (update :data (fn [data]
- (-> data
- (update :pages-index d/update-vals update-container)
- (d/update-when :components d/update-vals update-container))))
- (update :features disj "fdata/path-data")
- (update :migrations disj "0003-convert-path-content")
- (vary-meta update ::fmg/migrated disj "0003-convert-path-content"))))
+(defn realize
+ "A helper that combines realize-pointers and realize-objects"
+ [cfg file]
+ (->> file
+ (realize-pointers cfg)
+ (realize-objects cfg)))
diff --git a/backend/src/app/features/file_snapshots.clj b/backend/src/app/features/file_snapshots.clj
new file mode 100644
index 0000000000..cf40a08a79
--- /dev/null
+++ b/backend/src/app/features/file_snapshots.clj
@@ -0,0 +1,446 @@
+;; 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.features.file-snapshots
+ (:require
+ [app.binfile.common :as bfc]
+ [app.common.data :as d]
+ [app.common.exceptions :as ex]
+ [app.common.features :as-alias cfeat]
+ [app.common.files.migrations :as fmg]
+ [app.common.logging :as l]
+ [app.common.schema :as sm]
+ [app.common.time :as ct]
+ [app.common.uuid :as uuid]
+ [app.config :as cf]
+ [app.db :as db]
+ [app.db.sql :as-alias sql]
+ [app.features.fdata :as fdata]
+ [app.storage :as sto]
+ [app.util.blob :as blob]
+ [app.worker :as wrk]
+ [cuerdas.core :as str]))
+
+(def sql:snapshots
+ "SELECT c.id,
+ c.label,
+ c.created_at,
+ c.updated_at AS modified_at,
+ c.deleted_at,
+ c.profile_id,
+ c.created_by,
+ c.locked_by,
+ c.revn,
+ c.features,
+ c.migrations,
+ c.version,
+ c.file_id,
+ c.data AS legacy_data,
+ fd.data AS data,
+ coalesce(fd.backend, 'legacy-db') AS backend,
+ fd.metadata AS metadata
+ FROM file_change AS c
+ LEFT JOIN file_data AS fd ON (fd.file_id = c.file_id
+ AND fd.id = c.id
+ AND fd.type = 'snapshot')
+ WHERE c.label IS NOT NULL")
+
+(defn- decode-snapshot
+ [snapshot]
+ (some-> snapshot
+ (-> (d/update-when :metadata fdata/decode-metadata)
+ (d/update-when :migrations db/decode-pgarray [])
+ (d/update-when :features db/decode-pgarray #{}))))
+
+(def ^:private sql:get-minimal-file
+ "SELECT f.id,
+ f.revn,
+ f.modified_at,
+ f.deleted_at,
+ fd.backend AS backend,
+ fd.metadata AS metadata
+ FROM file AS f
+ LEFT JOIN file_data AS fd ON (fd.file_id = f.id AND fd.id = f.id)
+ WHERE f.id = ?")
+
+(defn- get-minimal-file
+ [cfg id & {:as opts}]
+ (-> (db/get-with-sql cfg [sql:get-minimal-file id] opts)
+ (d/update-when :metadata fdata/decode-metadata)))
+
+(def ^:private sql:get-snapshot-without-data
+ (str "WITH snapshots AS (" sql:snapshots ")"
+ "SELECT c.id,
+ c.label,
+ c.revn,
+ c.created_at,
+ c.modified_at,
+ c.deleted_at,
+ c.profile_id,
+ c.created_by,
+ c.locked_by,
+ c.features,
+ c.metadata,
+ c.migrations,
+ c.version,
+ c.file_id
+ FROM snapshots AS c
+ WHERE c.id = ?
+ AND CASE WHEN c.created_by = 'user'
+ THEN c.deleted_at IS NULL
+ WHEN c.created_by = 'system'
+ THEN c.deleted_at IS NULL OR c.deleted_at >= ?::timestamptz
+ END"))
+
+(defn get-minimal-snapshot
+ [cfg snapshot-id]
+ (let [now (ct/now)]
+ (-> (db/get-with-sql cfg [sql:get-snapshot-without-data snapshot-id now]
+ {::db/remove-deleted false})
+ (decode-snapshot))))
+
+(def ^:private sql:get-snapshot
+ (str sql:snapshots
+ " AND c.file_id = ?
+ AND c.id = ?
+ AND CASE WHEN c.created_by = 'user'
+ THEN (c.deleted_at IS NULL)
+ WHEN c.created_by = 'system'
+ THEN (c.deleted_at IS NULL OR c.deleted_at >= ?::timestamptz)
+ END"))
+
+(defn- get-snapshot
+ "Get snapshot with decoded data"
+ [cfg file-id snapshot-id]
+ (let [now (ct/now)]
+ (->> (db/get-with-sql cfg [sql:get-snapshot file-id snapshot-id now]
+ {::db/remove-deleted false})
+ (decode-snapshot)
+ (fdata/resolve-file-data cfg)
+ (fdata/decode-file-data cfg))))
+
+(def ^:private sql:get-visible-snapshots
+ (str "WITH "
+ "snapshots1 AS ( " sql:snapshots "),"
+ "snapshots2 AS (
+ SELECT c.id,
+ c.label,
+ c.revn,
+ c.version,
+ c.created_at,
+ c.modified_at,
+ c.created_by,
+ c.locked_by,
+ c.profile_id,
+ c.deleted_at
+ FROM snapshots1 AS c
+ WHERE c.file_id = ?
+ ), snapshots3 AS (
+ (SELECT * FROM snapshots2
+ WHERE created_by = 'system'
+ AND (deleted_at IS NULL OR
+ deleted_at >= ?::timestamptz)
+ LIMIT 500)
+ UNION ALL
+ (SELECT * FROM snapshots2
+ WHERE created_by = 'user'
+ AND deleted_at IS NULL
+ LIMIT 500)
+ )
+ SELECT * FROM snapshots3
+ ORDER BY created_at DESC"))
+
+(defn get-visible-snapshots
+ "Return a list of snapshots fecheable from the API, it has a limited
+ set of fields and applies big but safe limits over all available
+ snapshots. It return a ordered vector by the snapshot date of
+ creation."
+ [cfg file-id]
+ (let [now (ct/now)]
+ (->> (db/exec! cfg [sql:get-visible-snapshots file-id now])
+ (mapv decode-snapshot))))
+
+(def ^:private schema:decoded-file
+ [:map {:title "DecodedFile"}
+ [:id ::sm/uuid]
+ [:revn :int]
+ [:vern :int]
+ [:data :map]
+ [:version :int]
+ [:features ::cfeat/features]
+ [:migrations [::sm/set :string]]])
+
+(def ^:private schema:snapshot
+ [:map {:title "Snapshot"}
+ [:id ::sm/uuid]
+ [:revn [::sm/int {:min 0}]]
+ [:version [::sm/int {:min 0}]]
+ [:features ::cfeat/features]
+ [:migrations [::sm/set ::sm/text]]
+ [:profile-id {:optional true} ::sm/uuid]
+ [:label ::sm/text]
+ [:file-id ::sm/uuid]
+ [:created-by [:enum "system" "user" "admin"]]
+ [:deleted-at {:optional true} ::ct/inst]
+ [:modified-at ::ct/inst]
+ [:created-at ::ct/inst]])
+
+(def ^:private check-snapshot
+ (sm/check-fn schema:snapshot))
+
+(def ^:private check-decoded-file
+ (sm/check-fn schema:decoded-file))
+
+(defn- generate-snapshot-label
+ []
+ (let [ts (-> (ct/now)
+ (ct/format-inst)
+ (str/replace #"[T:\.]" "-")
+ (str/rtrim "Z"))]
+ (str "snapshot-" ts)))
+
+(def ^:private schema:create-params
+ [:map {:title "SnapshotCreateParams"}
+ [:profile-id ::sm/uuid]
+ [:created-by {:optional true} [:enum "user" "system"]]
+ [:label {:optional true} ::sm/text]
+ [:session-id {:optional true} ::sm/uuid]
+ [:modified-at {:optional true} ::ct/inst]
+ [:deleted-at {:optional true} ::ct/inst]])
+
+(def ^:private check-create-params
+ (sm/check-fn schema:create-params))
+
+(defn create!
+ "Create a file snapshot; expects a non-encoded file"
+ [cfg file & {:as params}]
+ (let [{:keys [label created-by deleted-at profile-id session-id]}
+ (check-create-params params)
+
+ file
+ (check-decoded-file file)
+
+ created-by
+ (or created-by "system")
+
+ snapshot-id
+ (uuid/next)
+
+ created-at
+ (ct/now)
+
+ deleted-at
+ (or deleted-at
+ (if (= created-by "system")
+ (ct/in-future (cf/get-deletion-delay))
+ nil))
+
+ label
+ (or label (generate-snapshot-label))
+
+ snapshot
+ (cond-> {:id snapshot-id
+ :revn (:revn file)
+ :version (:version file)
+ :file-id (:id file)
+ :features (:features file)
+ :migrations (:migrations file)
+ :label label
+ :created-at created-at
+ :modified-at created-at
+ :created-by created-by}
+
+ deleted-at
+ (assoc :deleted-at deleted-at)
+
+ :always
+ (check-snapshot))]
+
+ (db/insert! cfg :file-change
+ (-> snapshot
+ (update :features into-array)
+ (update :migrations into-array)
+ (assoc :updated-at created-at)
+ (assoc :profile-id profile-id)
+ (assoc :session-id session-id)
+ (dissoc :modified-at))
+ {::db/return-keys false})
+
+ (fdata/upsert! cfg
+ {:id snapshot-id
+ :file-id (:id file)
+ :type "snapshot"
+ :data (blob/encode (:data file))
+ :created-at created-at
+ :deleted-at deleted-at})
+
+ snapshot))
+
+(def ^:private schema:update-params
+ [:map {:title "SnapshotUpdateParams"}
+ [:id ::sm/uuid]
+ [:file-id ::sm/uuid]
+ [:label ::sm/text]
+ [:modified-at {:optional true} ::ct/inst]])
+
+(def ^:private check-update-params
+ (sm/check-fn schema:update-params))
+
+(defn update!
+ [cfg params]
+
+ (let [{:keys [id file-id label modified-at]}
+ (check-update-params params)
+
+ modified-at
+ (or modified-at (ct/now))]
+
+ (db/update! cfg :file-data
+ {:deleted-at nil
+ :modified-at modified-at}
+ {:file-id file-id
+ :id id
+ :type "snapshot"}
+ {::db/return-keys false})
+
+ (-> (db/update! cfg :file-change
+ {:label label
+ :created-by "user"
+ :updated-at modified-at
+ :deleted-at nil}
+ {:file-id file-id
+ :id id}
+ {::db/return-keys false})
+ (db/get-update-count)
+ (pos?))))
+
+(defn restore!
+ [{:keys [::db/conn] :as cfg} file-id snapshot-id]
+ (let [file (get-minimal-file conn file-id {::db/for-update true})
+ vern (rand-int Integer/MAX_VALUE)
+
+ storage
+ (sto/resolve cfg {::db/reuse-conn true})
+
+ snapshot
+ (get-snapshot cfg file-id snapshot-id)]
+
+ (when-not snapshot
+ (ex/raise :type :not-found
+ :code :snapshot-not-found
+ :hint "unable to find snapshot with the provided label"
+ :snapshot-id snapshot-id
+ :file-id file-id))
+
+ (when-not (:data snapshot)
+ (ex/raise :type :internal
+ :code :snapshot-without-data
+ :hint "snapshot has no data"
+ :label (:label snapshot)
+ :file-id file-id))
+
+ (let [;; If the snapshot has applied migrations stored, we reuse
+ ;; them, if not, we take a safest set of migrations as
+ ;; starting point. This is because, at the time of
+ ;; implementing snapshots, migrations were not taken into
+ ;; account so we need to make this backward compatible in
+ ;; some way.
+ migrations
+ (or (:migrations snapshot)
+ (fmg/generate-migrations-from-version 67))
+
+ file
+ (-> file
+ (update :revn inc)
+ (assoc :migrations migrations)
+ (assoc :data (:data snapshot))
+ (assoc :vern vern)
+ (assoc :version (:version snapshot))
+ (assoc :has-media-trimmed false)
+ (assoc :modified-at (:modified-at snapshot))
+ (assoc :features (:features snapshot)))]
+
+ (l/dbg :hint "restoring snapshot"
+ :file-id (str file-id)
+ :label (:label snapshot)
+ :snapshot-id (str (:id snapshot)))
+
+ ;; In the same way, on reseting the file data, we need to restore
+ ;; the applied migrations on the moment of taking the snapshot
+ (bfc/update-file! cfg file ::bfc/reset-migrations? true)
+
+ ;; FIXME: this should be separated functions, we should not have
+ ;; inline sql here.
+
+ ;; clean object thumbnails
+ (let [sql (str "update file_tagged_object_thumbnail "
+ " set deleted_at = now() "
+ " where file_id=? returning media_id")
+ res (db/exec! conn [sql file-id])]
+ (doseq [media-id (into #{} (keep :media-id) res)]
+ (sto/touch-object! storage media-id)))
+
+ ;; clean file thumbnails
+ (let [sql (str "update file_thumbnail "
+ " set deleted_at = now() "
+ " where file_id=? returning media_id")
+ res (db/exec! conn [sql file-id])]
+ (doseq [media-id (into #{} (keep :media-id) res)]
+ (sto/touch-object! storage media-id)))
+
+ vern)))
+
+(defn delete!
+ [cfg & {:keys [id file-id deleted-at]}]
+ (assert (uuid? id) "missing id")
+ (assert (uuid? file-id) "missing file-id")
+ (assert (ct/inst? deleted-at) "missing deleted-at")
+
+ (wrk/submit! {::db/conn (db/get-connection cfg)
+ ::wrk/task :delete-object
+ ::wrk/params {:object :snapshot
+ :deleted-at deleted-at
+ :file-id file-id
+ :id id}})
+ (db/update! cfg :file-change
+ {:deleted-at deleted-at}
+ {:id id :file-id file-id}
+ {::db/return-keys false})
+ true)
+
+(def ^:private sql:get-snapshots
+ (str sql:snapshots " AND c.file_id = ?"))
+
+(defn lock-by!
+ [conn id profile-id]
+ (-> (db/update! conn :file-change
+ {:locked-by profile-id}
+ {:id id}
+ {::db/return-keys false})
+ (db/get-update-count)
+ (pos?)))
+
+(defn unlock!
+ [conn id]
+ (-> (db/update! conn :file-change
+ {:locked-by nil}
+ {:id id}
+ {::db/return-keys false})
+ (db/get-update-count)
+ (pos?)))
+
+(defn reduce-snapshots
+ "Process the file snapshots using efficient reduction; the file
+ reduction comes with all snapshots, including maked as deleted"
+ [cfg file-id xform f init]
+ (let [conn (db/get-connection cfg)
+ xform (comp
+ (map (partial fdata/resolve-file-data cfg))
+ (map (partial fdata/decode-file-data cfg))
+ xform)]
+
+ (->> (db/plan conn [sql:get-snapshots file-id] {:fetch-size 1})
+ (transduce xform f init))))
diff --git a/backend/src/app/http.clj b/backend/src/app/http.clj
index 275f081fd0..633697985d 100644
--- a/backend/src/app/http.clj
+++ b/backend/src/app/http.clj
@@ -19,6 +19,7 @@
[app.http.errors :as errors]
[app.http.management :as mgmt]
[app.http.middleware :as mw]
+ [app.http.security :as sec]
[app.http.session :as session]
[app.http.websocket :as-alias ws]
[app.main :as-alias main]
@@ -26,9 +27,7 @@
[app.rpc :as-alias rpc]
[app.rpc.doc :as-alias rpc.doc]
[app.setup :as-alias setup]
- [app.worker :as wrk]
[integrant.core :as ig]
- [promesa.exec :as px]
[reitit.core :as r]
[reitit.middleware :as rr]
[yetti.adapter :as yt]
@@ -55,6 +54,8 @@
[:map
[::port ::sm/int]
[::host ::sm/text]
+ [::io-threads {:optional true} ::sm/int]
+ [::max-worker-threads {:optional true} ::sm/int]
[::max-body-size {:optional true} ::sm/int]
[::max-multipart-body-size {:optional true} ::sm/int]
[::router {:optional true} [:fn r/router?]]
@@ -65,31 +66,41 @@
(assert (sm/check schema:server-params params)))
(defmethod ig/init-key ::server
- [_ {:keys [::handler ::router ::host ::port ::wrk/executor] :as cfg}]
+ [_ {:keys [::handler ::router ::host ::port ::mtx/metrics] :as cfg}]
(l/info :hint "starting http server" :port port :host host)
- (let [options {:http/port port
- :http/host host
- :http/max-body-size (::max-body-size cfg)
- :http/max-multipart-body-size (::max-multipart-body-size cfg)
- :xnio/direct-buffers false
- :xnio/io-threads (or (::io-threads cfg)
- (max 3 (px/get-available-processors)))
- :xnio/dispatch executor
- :ring/compat :ring2
- :socket/backlog 4069}
+ (let [on-dispatch
+ (fn [_ start-at-ns]
+ (let [timing (- (System/nanoTime) start-at-ns)
+ timing (int (/ timing 1000000))]
+ (mtx/run! metrics
+ :id :http-server-dispatch-timing
+ :val timing)))
- handler (cond
- (some? router)
- (router-handler router)
+ options
+ {:http/port port
+ :http/host host
+ :http/max-body-size (::max-body-size cfg)
+ :http/max-multipart-body-size (::max-multipart-body-size cfg)
+ :xnio/direct-buffers false
+ :xnio/io-threads (::io-threads cfg)
+ :xnio/max-worker-threads (::max-worker-threads cfg)
+ :ring/compat :ring2
+ :events/on-dispatch on-dispatch
+ :socket/backlog 4069}
- (some? handler)
- handler
+ handler
+ (cond
+ (some? router)
+ (router-handler router)
- :else
- (throw (UnsupportedOperationException. "handler or router are required")))
+ (some? handler)
+ handler
- options (d/without-nils options)
- server (yt/server handler options)]
+ :else
+ (throw (UnsupportedOperationException. "handler or router are required")))
+
+ server
+ (yt/server handler (d/without-nils options))]
(assoc cfg ::server (yt/start! server))))
@@ -157,6 +168,7 @@
[_ cfg]
(rr/router
[["" {:middleware [[mw/server-timing]
+ [sec/sec-fetch-metadata]
[mw/params]
[mw/format-response]
[session/soft-auth cfg]
@@ -177,7 +189,8 @@
(::ws/routes cfg)
- ["/api" {:middleware [[mw/cors]]}
+ ["/api" {:middleware [[mw/cors]
+ [sec/client-header-check]]}
(::oidc/routes cfg)
(::rpc.doc/routes cfg)
(::rpc/routes cfg)]]]))
diff --git a/backend/src/app/http/access_token.clj b/backend/src/app/http/access_token.clj
index d498005642..ae8b61122e 100644
--- a/backend/src/app/http/access_token.clj
+++ b/backend/src/app/http/access_token.clj
@@ -14,18 +14,18 @@
[app.tokens :as tokens]
[yetti.request :as yreq]))
-(def header-re #"^Token\s+(.*)")
+(def header-re #"(?i)^Token\s+(.*)")
-(defn- get-token
+(defn get-token
[request]
(some->> (yreq/get-header request "authorization")
(re-matches header-re)
(second)))
(defn- decode-token
- [props token]
+ [cfg token]
(when token
- (tokens/verify props {:token token :iss "access-token"})))
+ (tokens/verify cfg {:token token :iss "access-token"})))
(def sql:get-token-data
"SELECT perms, profile_id, expires_at
@@ -43,11 +43,11 @@
(defn- wrap-soft-auth
"Soft Authentication, will be executed synchronously on the undertow
worker thread."
- [handler {:keys [::setup/props]}]
+ [handler cfg]
(letfn [(handle-request [request]
(try
(let [token (get-token request)
- claims (decode-token props token)]
+ claims (decode-token cfg token)]
(cond-> request
(map? claims)
(assoc ::id (:tid claims))))
diff --git a/backend/src/app/http/awsns.clj b/backend/src/app/http/awsns.clj
index 1a937e4444..051a2ecf8b 100644
--- a/backend/src/app/http/awsns.clj
+++ b/backend/src/app/http/awsns.clj
@@ -17,11 +17,9 @@
[app.main :as-alias main]
[app.setup :as-alias setup]
[app.tokens :as tokens]
- [app.worker :as-alias wrk]
[clojure.data.json :as j]
[cuerdas.core :as str]
[integrant.core :as ig]
- [promesa.exec :as px]
[yetti.request :as yreq]
[yetti.response :as-alias yres]))
@@ -40,8 +38,8 @@
[_ cfg]
(letfn [(handler [request]
(let [data (-> request yreq/body slurp)]
- (px/run! :vthread (partial handle-request cfg data)))
- {::yres/status 200})]
+ (handle-request cfg data)
+ {::yres/status 200}))]
["/sns" {:handler handler
:allowed-methods #{:post}}]))
@@ -109,7 +107,7 @@
[cfg headers]
(let [tdata (get headers "x-penpot-data")]
(when-not (str/empty? tdata)
- (let [result (tokens/verify (::setup/props cfg) {:token tdata :iss :profile-identity})]
+ (let [result (tokens/verify cfg {:token tdata :iss :profile-identity})]
(:profile-id result)))))
(defn- parse-notification
diff --git a/backend/src/app/http/debug.clj b/backend/src/app/http/debug.clj
index 76d7661bdf..6df4398116 100644
--- a/backend/src/app/http/debug.clj
+++ b/backend/src/app/http/debug.clj
@@ -27,6 +27,7 @@
[app.rpc.commands.profile :as profile]
[app.rpc.commands.teams :as teams]
[app.setup :as-alias setup]
+ [app.setup.clock :as clock]
[app.srepl.main :as srepl]
[app.storage :as-alias sto]
[app.storage.tmp :as tmp]
@@ -49,11 +50,17 @@
(defn index-handler
[_cfg _request]
- {::yres/status 200
- ::yres/headers {"content-type" "text/html"}
- ::yres/body (-> (io/resource "app/templates/debug.tmpl")
- (tmpl/render {:version (:full cf/version)
- :supported-features cfeat/supported-features}))})
+ (let [{:keys [clock offset]} @clock/current]
+ {::yres/status 200
+ ::yres/headers {"content-type" "text/html"}
+ ::yres/body (-> (io/resource "app/templates/debug.tmpl")
+ (tmpl/render {:version (:full cf/version)
+ :current-clock (str clock)
+ :current-offset (if offset
+ (ct/format-duration offset)
+ "NO OFFSET")
+ :current-time (ct/format-inst (ct/now) :http)
+ :supported-features cfeat/supported-features}))}))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; FILE CHANGES
@@ -390,34 +397,6 @@
::yres/headers {"content-type" "text/plain"}
::yres/body (str/ffmt "PROFILE '%' ACTIVATED" (:email profile))}))))))
-
-(defn- reset-file-version
- [cfg {:keys [params] :as request}]
- (let [file-id (some-> params :file-id d/parse-uuid)
- version (some-> params :version d/parse-integer)]
-
- (when-not (contains? params :force)
- (ex/raise :type :validation
- :code :missing-force
- :hint "missing force checkbox"))
-
- (when (nil? file-id)
- (ex/raise :type :validation
- :code :invalid-file-id
- :hint "provided invalid file id"))
-
- (when (nil? version)
- (ex/raise :type :validation
- :code :invalid-version
- :hint "provided invalid version"))
-
- (db/tx-run! cfg srepl/process-file! file-id #(assoc % :version version))
-
- {::yres/status 200
- ::yres/headers {"content-type" "text/plain"}
- ::yres/body "OK"}))
-
-
(defn- handle-team-features
[cfg {:keys [params] :as request}]
(let [team-id (some-> params :team-id d/parse-uuid)
@@ -462,6 +441,24 @@
::yres/headers {"content-type" "text/plain"}
::yres/body "OK"}))))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; VIRTUAL CLOCK
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defn- set-virtual-clock
+ [_ {:keys [params] :as request}]
+ (let [offset (some-> params :offset str/trim not-empty ct/duration)
+ reset? (contains? params :reset)]
+ (if (= "production" (cf/get :tenant))
+ {::yres/status 501
+ ::yres/body "OPERATION NOT ALLOWED"}
+ (do
+ (if (or reset? (zero? (inst-ms offset)))
+ (clock/set-offset! nil)
+ (clock/set-offset! offset))
+ {::yres/status 302
+ ::yres/headers {"location" "/dbg"}}))))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; OTHER SMALL VIEWS/HANDLERS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -548,10 +545,10 @@
["/error/:id" {:handler (partial error-handler cfg)}]
["/error" {:handler (partial error-list-handler cfg)}]
["/actions" {:middleware [[errors]]}
+ ["/set-virtual-clock"
+ {:handler (partial set-virtual-clock cfg)}]
["/resend-email-verification"
{:handler (partial resend-email-notification cfg)}]
- ["/reset-file-version"
- {:handler (partial reset-file-version cfg)}]
["/handle-team-features"
{:handler (partial handle-team-features cfg)}]
["/file-export" {:handler (partial export-handler cfg)}]
diff --git a/backend/src/app/http/management.clj b/backend/src/app/http/management.clj
index 929cda32fd..cf91503f67 100644
--- a/backend/src/app/http/management.clj
+++ b/backend/src/app/http/management.clj
@@ -11,7 +11,9 @@
[app.common.schema :as sm]
[app.common.schema.generators :as sg]
[app.common.time :as ct]
+ [app.config :as cf]
[app.db :as db]
+ [app.http.access-token :refer [get-token]]
[app.main :as-alias main]
[app.rpc.commands.profile :as cmd.profile]
[app.setup :as-alias setup]
@@ -30,6 +32,20 @@
[_ params]
(assert (db/pool? (::db/pool params)) "expect valid database pool"))
+(def ^:private auth
+ {:name ::auth
+ :compile
+ (fn [_ _]
+ (fn [handler shared-key]
+ (if shared-key
+ (fn [request]
+ (let [token (get-token request)]
+ (if (= token shared-key)
+ (handler request)
+ {::yres/status 403})))
+ (fn [_ _]
+ {::yres/status 403}))))})
+
(def ^:private default-system
{:name ::default-system
:compile
@@ -49,7 +65,8 @@
(defmethod ig/init-key ::routes
[_ cfg]
- ["" {:middleware [[default-system cfg]
+ ["" {:middleware [[auth (cf/get :management-api-shared-key)]
+ [default-system cfg]
[transaction]]}
["/authenticate"
{:handler authenticate
@@ -79,8 +96,7 @@
(defn- authenticate
[cfg request]
(let [token (-> request :params :token)
- props (get cfg ::setup/props)
- result (tokens/verify props {:token token :iss "authentication"})]
+ result (tokens/verify cfg {:token token :iss "authentication"})]
{::yres/status 200
::yres/body result}))
diff --git a/backend/src/app/http/security.clj b/backend/src/app/http/security.clj
new file mode 100644
index 0000000000..a1c7262c79
--- /dev/null
+++ b/backend/src/app/http/security.clj
@@ -0,0 +1,55 @@
+;; 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.http.security
+ "Additional security layer middlewares"
+ (:require
+ [app.config :as cf]
+ [yetti.request :as yreq]
+ [yetti.response :as yres]))
+
+(def ^:private safe-methods
+ #{:get :head :options})
+
+(defn- wrap-sec-fetch-metadata
+ "Sec-Fetch metadata security layer middleware"
+ [handler]
+ (fn [request]
+ (let [site (yreq/get-header request "sec-fetch-site")]
+ (cond
+ (= site "same-origin")
+ (handler request)
+
+ (or (= site "same-site")
+ (= site "cross-site"))
+ (if (contains? safe-methods (yreq/method request))
+ (handler request)
+ {::yres/status 403})
+
+ :else
+ (handler request)))))
+
+(def sec-fetch-metadata
+ {:name ::sec-fetch-metadata
+ :compile (fn [_ _]
+ (when (contains? cf/flags :sec-fetch-metadata-middleware)
+ wrap-sec-fetch-metadata))})
+
+(defn- wrap-client-header-check
+ "Check for a penpot custom header to be present as additional CSRF
+ protection"
+ [handler]
+ (fn [request]
+ (let [client (yreq/get-header request "x-client")]
+ (if (some? client)
+ (handler request)
+ {::yres/status 403}))))
+
+(def client-header-check
+ {:name ::client-header-check
+ :compile (fn [_ _]
+ (when (contains? cf/flags :client-header-check-middleware)
+ wrap-client-header-check))})
diff --git a/backend/src/app/http/session.clj b/backend/src/app/http/session.clj
index d3bc0bd2bd..ab6d03ebda 100644
--- a/backend/src/app/http/session.clj
+++ b/backend/src/app/http/session.clj
@@ -11,7 +11,6 @@
[app.common.logging :as l]
[app.common.schema :as sm]
[app.common.time :as ct]
- [app.common.uri :as u]
[app.config :as cf]
[app.db :as db]
[app.db.sql :as sql]
@@ -72,7 +71,7 @@
(sm/validator schema:params))
(defn- prepare-session-params
- [key params]
+ [params key]
(assert (string? key) "expected key to be a string")
(assert (not (str/blank? key)) "expected key to be not empty")
(assert (valid-params? params) "expected valid params")
@@ -90,7 +89,9 @@
(db/exec-one! pool (sql/select :http-session {:id token})))
(write! [_ key params]
- (let [params (prepare-session-params key params)]
+ (let [params (-> params
+ (assoc :created-at (ct/now))
+ (prepare-session-params key))]
(db/insert! pool :http-session params)
params))
@@ -113,7 +114,9 @@
(get @cache token))
(write! [_ key params]
- (let [params (prepare-session-params key params)]
+ (let [params (-> params
+ (assoc :created-at (ct/now))
+ (prepare-session-params key))]
(swap! cache assoc key params)
params))
@@ -144,27 +147,23 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(declare ^:private assign-auth-token-cookie)
-(declare ^:private assign-auth-data-cookie)
(declare ^:private clear-auth-token-cookie)
-(declare ^:private clear-auth-data-cookie)
(declare ^:private gen-token)
(defn create-fn
- [{:keys [::manager ::setup/props]} profile-id]
+ [{:keys [::manager] :as cfg} profile-id]
(assert (manager? manager) "expected valid session manager")
(assert (uuid? profile-id) "expected valid uuid for profile-id")
(fn [request response]
(let [uagent (yreq/get-header request "user-agent")
params {:profile-id profile-id
- :user-agent uagent
- :created-at (ct/now)}
- token (gen-token props params)
+ :user-agent uagent}
+ token (gen-token cfg params)
session (write! manager token params)]
- (l/trace :hint "create" :profile-id (str profile-id))
+ (l/trc :hint "create" :profile-id (str profile-id))
(-> response
- (assign-auth-token-cookie session)
- (assign-auth-data-cookie session)))))
+ (assign-auth-token-cookie session)))))
(defn delete-fn
[{:keys [::manager]}]
@@ -172,23 +171,22 @@
(fn [request response]
(let [cname (cf/get :auth-token-cookie-name default-auth-token-cookie-name)
cookie (yreq/get-cookie request cname)]
- (l/trace :hint "delete" :profile-id (:profile-id request))
+ (l/trc :hint "delete" :profile-id (:profile-id request))
(some->> (:value cookie) (delete! manager))
(-> response
(assoc :status 204)
(assoc :body nil)
- (clear-auth-token-cookie)
- (clear-auth-data-cookie)))))
+ (clear-auth-token-cookie)))))
(defn- gen-token
- [props {:keys [profile-id created-at]}]
- (tokens/generate props {:iss "authentication"
- :iat created-at
- :uid profile-id}))
+ [cfg {:keys [profile-id created-at]}]
+ (tokens/generate cfg {:iss "authentication"
+ :iat created-at
+ :uid profile-id}))
(defn- decode-token
- [props token]
+ [cfg token]
(when token
- (tokens/verify props {:token token :iss "authentication"})))
+ (tokens/verify cfg {:token token :iss "authentication"})))
(defn- get-token
[request]
@@ -208,18 +206,18 @@
(neg? (compare default-renewal-max-age elapsed)))))
(defn- wrap-soft-auth
- [handler {:keys [::manager ::setup/props]}]
+ [handler {:keys [::manager] :as cfg}]
(assert (manager? manager) "expected valid session manager")
(letfn [(handle-request [request]
(try
(let [token (get-token request)
- claims (decode-token props token)]
+ claims (decode-token cfg token)]
(cond-> request
(map? claims)
(-> (assoc ::token-claims claims)
(assoc ::token token))))
(catch Throwable cause
- (l/trace :hint "exception on decoding malformed token" :cause cause)
+ (l/trc :hint "exception on decoding malformed token" :cause cause)
request)))]
(fn [request]
@@ -239,8 +237,7 @@
(if (renew-session? session)
(let [session (update! manager session)]
(-> response
- (assign-auth-token-cookie session)
- (assign-auth-data-cookie session)))
+ (assign-auth-token-cookie session)))
response))))
(def soft-auth
@@ -256,7 +253,7 @@
(defn- assign-auth-token-cookie
[response {token :id updated-at :updated-at}]
(let [max-age (cf/get :auth-token-cookie-max-age default-cookie-max-age)
- created-at (or updated-at (ct/now))
+ created-at updated-at
renewal (ct/plus created-at default-renewal-max-age)
expires (ct/plus created-at max-age)
secure? (contains? cf/flags :secure-session-cookies)
@@ -273,53 +270,15 @@
:secure secure?}]
(update response :cookies assoc name cookie)))
-(defn- assign-auth-data-cookie
- [response {profile-id :profile-id updated-at :updated-at}]
- (let [max-age (cf/get :auth-token-cookie-max-age default-cookie-max-age)
- domain (cf/get :auth-data-cookie-domain)
- cname default-auth-data-cookie-name
-
- created-at (or updated-at (ct/now))
- renewal (ct/plus created-at default-renewal-max-age)
- expires (ct/plus created-at max-age)
-
- comment (str "Renewal at: " (ct/format-inst renewal :rfc1123))
- secure? (contains? cf/flags :secure-session-cookies)
- strict? (contains? cf/flags :strict-session-cookies)
- cors? (contains? cf/flags :cors)
-
- cookie {:domain domain
- :expires expires
- :path "/"
- :comment comment
- :value (u/map->query-string {:profile-id profile-id})
- :same-site (if cors? :none (if strict? :strict :lax))
- :secure secure?}]
-
- (cond-> response
- (string? domain)
- (update :cookies assoc cname cookie))))
-
(defn- clear-auth-token-cookie
[response]
(let [cname (cf/get :auth-token-cookie-name default-auth-token-cookie-name)]
(update response :cookies assoc cname {:path "/" :value "" :max-age 0})))
-(defn- clear-auth-data-cookie
- [response]
- (let [cname default-auth-data-cookie-name
- domain (cf/get :auth-data-cookie-domain)]
- (cond-> response
- (string? domain)
- (update :cookies assoc cname {:domain domain :path "/" :value "" :max-age 0}))))
-
-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; TASK: SESSION GC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; FIXME: MOVE
-
(defmethod ig/assert-key ::tasks/gc
[_ params]
(assert (db/pool? (::db/pool params)) "expected valid database pool")
@@ -332,22 +291,23 @@
(def ^:private
sql:delete-expired
- "delete from http_session
- where updated_at < now() - ?::interval
+ "DELETE FROM http_session
+ WHERE updated_at < ?::timestamptz
or (updated_at is null and
- created_at < now() - ?::interval)")
+ created_at < ?::timestamptz)")
(defn- collect-expired-tasks
[{:keys [::db/conn ::tasks/max-age]}]
- (let [interval (db/interval max-age)
- result (db/exec-one! conn [sql:delete-expired interval interval])
- result (:next.jdbc/update-count result)]
- (l/debug :task "gc"
- :hint "clean http sessions"
- :deleted result)
+ (let [threshold (ct/minus (ct/now) max-age)
+ result (-> (db/exec-one! conn [sql:delete-expired threshold threshold])
+ (db/get-update-count))]
+ (l/dbg :task "gc"
+ :hint "clean http sessions"
+ :deleted result)
result))
(defmethod ig/init-key ::tasks/gc
[_ {:keys [::tasks/max-age] :as cfg}]
- (l/debug :hint "initializing session gc task" :max-age max-age)
- (fn [_] (db/tx-run! cfg collect-expired-tasks)))
+ (l/dbg :hint "initializing session gc task" :max-age max-age)
+ (fn [_]
+ (db/tx-run! cfg collect-expired-tasks)))
diff --git a/backend/src/app/http/sse.clj b/backend/src/app/http/sse.clj
index 00defbd80e..747452a7f7 100644
--- a/backend/src/app/http/sse.clj
+++ b/backend/src/app/http/sse.clj
@@ -55,7 +55,7 @@
::yres/body (yres/stream-body
(fn [_ output]
(let [channel (sp/chan :buf buf :xf (keep encode))
- listener (events/start-listener
+ listener (events/spawn-listener
channel
(partial write! output)
(partial pu/close! output))]
diff --git a/backend/src/app/loggers/audit/archive_task.clj b/backend/src/app/loggers/audit/archive_task.clj
index 257f55a94e..c8aa0e0de9 100644
--- a/backend/src/app/loggers/audit/archive_task.clj
+++ b/backend/src/app/loggers/audit/archive_task.clj
@@ -9,7 +9,6 @@
[app.common.exceptions :as ex]
[app.common.logging :as l]
[app.common.schema :as sm]
- [app.common.time :as ct]
[app.common.transit :as t]
[app.common.uuid :as uuid]
[app.config :as cf]
@@ -53,9 +52,8 @@
(defn- send!
[{:keys [::uri] :as cfg} events]
- (let [token (tokens/generate (::setup/props cfg)
+ (let [token (tokens/generate cfg
{:iss "authentication"
- :iat (ct/now)
:uid uuid/zero})
body (t/encode {:events events})
headers {"content-type" "application/transit+json"
diff --git a/backend/src/app/main.clj b/backend/src/app/main.clj
index 706e273bd6..57aebd30df 100644
--- a/backend/src/app/main.clj
+++ b/backend/src/app/main.clj
@@ -42,6 +42,7 @@
[app.svgo :as-alias svgo]
[app.util.cron]
[app.worker :as-alias wrk]
+ [app.worker.executor]
[clojure.test :as test]
[clojure.tools.namespace.repl :as repl]
[cuerdas.core :as str]
@@ -148,23 +149,11 @@
::mdef/labels []
::mdef/type :histogram}
- :executors-active-threads
- {::mdef/name "penpot_executors_active_threads"
- ::mdef/help "Current number of threads available in the executor service."
- ::mdef/labels ["name"]
- ::mdef/type :gauge}
-
- :executors-completed-tasks
- {::mdef/name "penpot_executors_completed_tasks_total"
- ::mdef/help "Approximate number of completed tasks by the executor."
- ::mdef/labels ["name"]
- ::mdef/type :counter}
-
- :executors-running-threads
- {::mdef/name "penpot_executors_running_threads"
- ::mdef/help "Current number of threads with state RUNNING."
- ::mdef/labels ["name"]
- ::mdef/type :gauge}})
+ :http-server-dispatch-timing
+ {::mdef/name "penpot_http_server_dispatch_timing"
+ ::mdef/help "Histogram of dispatch handler"
+ ::mdef/labels []
+ ::mdef/type :histogram}})
(def system-config
{::db/pool
@@ -176,14 +165,12 @@
::db/max-size (cf/get :database-max-pool-size 60)
::mtx/metrics (ig/ref ::mtx/metrics)}
- ;; Default thread pool for IO operations
- ::wrk/executor
- {}
+ ;; Default netty IO pool (shared between several services)
+ ::wrk/netty-io-executor
+ {:threads (cf/get :netty-io-threads)}
- ::wrk/monitor
- {::mtx/metrics (ig/ref ::mtx/metrics)
- ::wrk/executor (ig/ref ::wrk/executor)
- ::wrk/name "default"}
+ ::wrk/netty-executor
+ {:threads (cf/get :executor-threads)}
:app.migrations/migrations
{::db/pool (ig/ref ::db/pool)}
@@ -194,17 +181,27 @@
::mtx/routes
{::mtx/metrics (ig/ref ::mtx/metrics)}
- ::rds/redis
- {::rds/uri (cf/get :redis-uri)
- ::mtx/metrics (ig/ref ::mtx/metrics)
- ::wrk/executor (ig/ref ::wrk/executor)}
+ ::rds/client
+ {::rds/uri
+ (cf/get :redis-uri)
+
+ ::wrk/netty-executor
+ (ig/ref ::wrk/netty-executor)
+
+ ::wrk/netty-io-executor
+ (ig/ref ::wrk/netty-io-executor)}
+
+ ::rds/pool
+ {::rds/client (ig/ref ::rds/client)
+ ::mtx/metrics (ig/ref ::mtx/metrics)}
::mbus/msgbus
- {::wrk/executor (ig/ref ::wrk/executor)
- ::rds/redis (ig/ref ::rds/redis)}
+ {::wrk/executor (ig/ref ::wrk/netty-executor)
+ ::rds/client (ig/ref ::rds/client)
+ ::mtx/metrics (ig/ref ::mtx/metrics)}
:app.storage.tmp/cleaner
- {::wrk/executor (ig/ref ::wrk/executor)}
+ {::wrk/executor (ig/ref ::wrk/netty-executor)}
::sto.gc-deleted/handler
{::db/pool (ig/ref ::db/pool)
@@ -232,9 +229,10 @@
::http/host (cf/get :http-server-host)
::http/router (ig/ref ::http/router)
::http/io-threads (cf/get :http-server-io-threads)
+ ::http/max-worker-threads (cf/get :http-server-max-worker-threads)
::http/max-body-size (cf/get :http-server-max-body-size)
::http/max-multipart-body-size (cf/get :http-server-max-multipart-body-size)
- ::wrk/executor (ig/ref ::wrk/executor)}
+ ::mtx/metrics (ig/ref ::mtx/metrics)}
::ldap/provider
{:host (cf/get :ldap-host)
@@ -312,23 +310,24 @@
::rpc/climit
{::mtx/metrics (ig/ref ::mtx/metrics)
- ::wrk/executor (ig/ref ::wrk/executor)
+ ::wrk/executor (ig/ref ::wrk/netty-executor)
::climit/config (cf/get :rpc-climit-config)
::climit/enabled (contains? cf/flags :rpc-climit)}
:app.rpc/rlimit
- {::wrk/executor (ig/ref ::wrk/executor)}
+ {::wrk/executor (ig/ref ::wrk/netty-executor)}
:app.rpc/methods
{::http.client/client (ig/ref ::http.client/client)
::db/pool (ig/ref ::db/pool)
- ::wrk/executor (ig/ref ::wrk/executor)
+ ::rds/pool (ig/ref ::rds/pool)
+ ::wrk/executor (ig/ref ::wrk/netty-executor)
::session/manager (ig/ref ::session/manager)
::ldap/provider (ig/ref ::ldap/provider)
::sto/storage (ig/ref ::sto/storage)
::mtx/metrics (ig/ref ::mtx/metrics)
::mbus/msgbus (ig/ref ::mbus/msgbus)
- ::rds/redis (ig/ref ::rds/redis)
+ ::rds/client (ig/ref ::rds/client)
::rpc/climit (ig/ref ::rpc/climit)
::rpc/rlimit (ig/ref ::rpc/rlimit)
@@ -341,7 +340,7 @@
:app.rpc.doc/routes
{:app.rpc/methods (ig/ref :app.rpc/methods)}
- :app.rpc/routes
+ ::rpc/routes
{::rpc/methods (ig/ref :app.rpc/methods)
::db/pool (ig/ref ::db/pool)
::session/manager (ig/ref ::session/manager)
@@ -433,6 +432,9 @@
;; module requires the migrations to run before initialize.
::migrations (ig/ref :app.migrations/migrations)}
+ ::setup/clock
+ {}
+
:app.loggers.audit.archive-task/handler
{::setup/props (ig/ref ::setup/props)
::db/pool (ig/ref ::db/pool)
@@ -476,13 +478,14 @@
(cf/get :objects-storage-s3-bucket))
::sto.s3/io-threads (or (cf/get :storage-assets-s3-io-threads)
(cf/get :objects-storage-s3-io-threads))
- ::wrk/executor (ig/ref ::wrk/executor)}
+
+ ::wrk/netty-io-executor
+ (ig/ref ::wrk/netty-io-executor)}
:app.storage.fs/backend
{::sto.fs/directory (or (cf/get :storage-assets-fs-directory)
(cf/get :objects-storage-fs-directory))}})
-
(def worker-config
{::wrk/cron
{::wrk/registry (ig/ref ::wrk/registry)
@@ -518,7 +521,7 @@
:task :audit-log-gc})]}
::wrk/dispatcher
- {::rds/redis (ig/ref ::rds/redis)
+ {::rds/client (ig/ref ::rds/client)
::mtx/metrics (ig/ref ::mtx/metrics)
::db/pool (ig/ref ::db/pool)
::wrk/tenant (cf/get :tenant)}
@@ -527,7 +530,7 @@
{::wrk/parallelism (cf/get ::worker-default-parallelism 1)
::wrk/queue :default
::wrk/tenant (cf/get :tenant)
- ::rds/redis (ig/ref ::rds/redis)
+ ::rds/client (ig/ref ::rds/client)
::wrk/registry (ig/ref ::wrk/registry)
::mtx/metrics (ig/ref ::mtx/metrics)
::db/pool (ig/ref ::db/pool)}
@@ -536,7 +539,7 @@
{::wrk/parallelism (cf/get ::worker-webhook-parallelism 1)
::wrk/queue :webhooks
::wrk/tenant (cf/get :tenant)
- ::rds/redis (ig/ref ::rds/redis)
+ ::rds/client (ig/ref ::rds/client)
::wrk/registry (ig/ref ::wrk/registry)
::mtx/metrics (ig/ref ::mtx/metrics)
::db/pool (ig/ref ::db/pool)}})
diff --git a/backend/src/app/migrations.clj b/backend/src/app/migrations.clj
index 4d2eb64172..d9b3be6824 100644
--- a/backend/src/app/migrations.clj
+++ b/backend/src/app/migrations.clj
@@ -447,7 +447,10 @@
:fn (mg/resource "app/migrations/sql/0140-add-locked-by-column-to-file-change-table.sql")}
{:name "0141-add-idx-to-file-library-rel"
- :fn (mg/resource "app/migrations/sql/0141-add-idx-to-file-library-rel.sql")}])
+ :fn (mg/resource "app/migrations/sql/0141-add-idx-to-file-library-rel.sql")}
+
+ {:name "0141-add-file-data-table.sql"
+ :fn (mg/resource "app/migrations/sql/0141-add-file-data-table.sql")}])
(defn apply-migrations!
[pool name migrations]
diff --git a/backend/src/app/migrations/media_refs.clj b/backend/src/app/migrations/media_refs.clj
index 67cad944e1..af08706819 100644
--- a/backend/src/app/migrations/media_refs.clj
+++ b/backend/src/app/migrations/media_refs.clj
@@ -10,8 +10,8 @@
[app.common.exceptions :as ex]
[app.common.logging :as l]
[app.common.pprint]
- [app.srepl.fixes.media-refs :refer [process-file]]
[app.srepl.main :as srepl]
+ [app.srepl.procs.media-refs]
[clojure.edn :as edn]))
(def ^:private required-services
@@ -20,7 +20,10 @@
:app.storage/storage
:app.metrics/metrics
:app.db/pool
- :app.worker/executor])
+ :app.worker/netty-io-executor])
+
+(def default-options
+ {:rollback? false})
(defn -main
[& [options]]
@@ -28,22 +31,20 @@
(let [config-var (requiring-resolve 'app.main/system-config)
start-var (requiring-resolve 'app.main/start-custom)
stop-var (requiring-resolve 'app.main/stop)
- config (select-keys @config-var required-services)]
+
+ config (select-keys @config-var required-services)
+ options (if (string? options)
+ (ex/ignoring (edn/read-string options))
+ {})
+ options (-> (merge default-options options)
+ (assoc :proc-fn #'app.srepl.procs.media-refs/fix-media-refs))]
(start-var config)
-
- (let [options (if (string? options)
- (ex/ignoring (edn/read-string options))
- {})]
-
- (l/inf :hint "executing media-refs migration" :options options)
- (srepl/process-files! process-file options))
-
+ (l/inf :hint "executing media-refs migration" :options options)
+ (srepl/process! options)
(stop-var)
(System/exit 0))
(catch Throwable cause
(ex/print-throwable cause)
(flush)
(System/exit -1))))
-
-
diff --git a/backend/src/app/migrations/sql/0141-add-file-data-table.sql b/backend/src/app/migrations/sql/0141-add-file-data-table.sql
new file mode 100644
index 0000000000..6cde799de7
--- /dev/null
+++ b/backend/src/app/migrations/sql/0141-add-file-data-table.sql
@@ -0,0 +1,38 @@
+CREATE TABLE file_data (
+ file_id uuid NOT NULL REFERENCES file(id) DEFERRABLE,
+ id uuid NOT NULL,
+
+ created_at timestamptz NOT NULL DEFAULT now(),
+ modified_at timestamptz NOT NULL DEFAULT now(),
+ deleted_at timestamptz NULL,
+
+ type text NOT NULL,
+ backend text NULL,
+
+ metadata jsonb NULL,
+ data bytea NULL,
+
+ PRIMARY KEY (file_id, id)
+
+) PARTITION BY HASH (file_id);
+
+CREATE TABLE file_data_00 PARTITION OF file_data FOR VALUES WITH (MODULUS 16, REMAINDER 0);
+CREATE TABLE file_data_01 PARTITION OF file_data FOR VALUES WITH (MODULUS 16, REMAINDER 1);
+CREATE TABLE file_data_02 PARTITION OF file_data FOR VALUES WITH (MODULUS 16, REMAINDER 2);
+CREATE TABLE file_data_03 PARTITION OF file_data FOR VALUES WITH (MODULUS 16, REMAINDER 3);
+CREATE TABLE file_data_04 PARTITION OF file_data FOR VALUES WITH (MODULUS 16, REMAINDER 4);
+CREATE TABLE file_data_05 PARTITION OF file_data FOR VALUES WITH (MODULUS 16, REMAINDER 5);
+CREATE TABLE file_data_06 PARTITION OF file_data FOR VALUES WITH (MODULUS 16, REMAINDER 6);
+CREATE TABLE file_data_07 PARTITION OF file_data FOR VALUES WITH (MODULUS 16, REMAINDER 7);
+CREATE TABLE file_data_08 PARTITION OF file_data FOR VALUES WITH (MODULUS 16, REMAINDER 8);
+CREATE TABLE file_data_09 PARTITION OF file_data FOR VALUES WITH (MODULUS 16, REMAINDER 9);
+CREATE TABLE file_data_10 PARTITION OF file_data FOR VALUES WITH (MODULUS 16, REMAINDER 10);
+CREATE TABLE file_data_11 PARTITION OF file_data FOR VALUES WITH (MODULUS 16, REMAINDER 11);
+CREATE TABLE file_data_12 PARTITION OF file_data FOR VALUES WITH (MODULUS 16, REMAINDER 12);
+CREATE TABLE file_data_13 PARTITION OF file_data FOR VALUES WITH (MODULUS 16, REMAINDER 13);
+CREATE TABLE file_data_14 PARTITION OF file_data FOR VALUES WITH (MODULUS 16, REMAINDER 14);
+CREATE TABLE file_data_15 PARTITION OF file_data FOR VALUES WITH (MODULUS 16, REMAINDER 15);
+
+CREATE INDEX file_data__deleted_at__idx
+ ON file_data (deleted_at, file_id, id)
+ WHERE deleted_at IS NOT NULL;
diff --git a/backend/src/app/msgbus.clj b/backend/src/app/msgbus.clj
index b58a51103b..eda7431e2e 100644
--- a/backend/src/app/msgbus.clj
+++ b/backend/src/app/msgbus.clj
@@ -16,7 +16,6 @@
[app.redis :as rds]
[app.worker :as wrk]
[integrant.core :as ig]
- [promesa.core :as p]
[promesa.exec :as px]
[promesa.exec.csp :as sp]))
@@ -59,14 +58,16 @@
(assoc ::timeout (ct/duration {:seconds 30})))})
(def ^:private schema:params
- [:map ::rds/redis ::wrk/executor])
+ [:map
+ ::rds/client
+ ::wrk/executor])
(defmethod ig/assert-key ::msgbus
[_ params]
(assert (sm/check schema:params params)))
(defmethod ig/init-key ::msgbus
- [_ {:keys [::buffer-size ::wrk/executor ::timeout ::rds/redis] :as cfg}]
+ [_ {:keys [::buffer-size ::wrk/executor ::timeout] :as cfg}]
(l/info :hint "initialize msgbus" :buffer-size buffer-size)
(let [cmd-ch (sp/chan :buf buffer-size)
rcv-ch (sp/chan :buf (sp/dropping-buffer buffer-size))
@@ -74,8 +75,9 @@
:xf xform-prefix-topic)
state (agent {})
- pconn (rds/connect redis :type :default :timeout timeout)
- sconn (rds/connect redis :type :pubsub :timeout timeout)
+ ;; Open persistent connections to redis
+ pconn (rds/connect cfg :timeout timeout)
+ sconn (rds/connect-pubsub cfg :timeout timeout)
_ (set-error-handler! state #(l/error :cause % :hint "unexpected error on agent" ::l/sync? true))
_ (set-error-mode! state :continue)
@@ -189,14 +191,13 @@
(defn- create-listener
[rcv-ch]
- (rds/pubsub-listener
- :on-message (fn [_ topic message]
+ {:on-message (fn [_ topic message]
;; There are no back pressure, so we use a slidding
;; buffer for cases when the pubsub broker sends
;; more messages that we can process.
- (let [val {:topic topic :message (t/decode message)}]
+ (let [val {:topic topic :message (t/decode-str message)}]
(when-not (sp/offer! rcv-ch val)
- (l/warn :msg "dropping message on subscription loop"))))))
+ (l/warn :msg "dropping message on subscription loop"))))})
(defn- process-input
[{:keys [::state ::wrk/executor] :as cfg} topic message]
@@ -216,8 +217,7 @@
(rds/add-listener sconn (create-listener rcv-ch))
(px/thread
- {:name "penpot/msgbus/io-loop"
- :virtual true}
+ {:name "penpot/msgbus"}
(try
(loop []
(let [timeout-ch (sp/timeout-chan 1000)
@@ -263,7 +263,7 @@
intended to be used in core.async go blocks."
[{:keys [::pconn] :as cfg} {:keys [topic message]}]
(try
- (p/await! (rds/publish pconn topic (t/encode message)))
+ (rds/publish pconn topic (t/encode-str message))
(catch InterruptedException cause
(throw cause))
(catch Throwable cause
diff --git a/backend/src/app/redis.clj b/backend/src/app/redis.clj
index 510069e47c..96e6b07be5 100644
--- a/backend/src/app/redis.clj
+++ b/backend/src/app/redis.clj
@@ -6,23 +6,22 @@
(ns app.redis
"The msgbus abstraction implemented using redis as underlying backend."
- (:refer-clojure :exclude [eval])
+ (:refer-clojure :exclude [eval get set run!])
(:require
[app.common.data :as d]
[app.common.exceptions :as ex]
+ [app.common.generic-pool :as gpool]
[app.common.logging :as l]
[app.common.schema :as sm]
[app.common.time :as ct]
[app.metrics :as mtx]
[app.redis.script :as-alias rscript]
- [app.util.cache :as cache]
- [app.worker :as-alias wrk]
+ [app.worker :as wrk]
+ [app.worker.executor]
[clojure.core :as c]
[clojure.java.io :as io]
[cuerdas.core :as str]
- [integrant.core :as ig]
- [promesa.core :as p]
- [promesa.exec :as px])
+ [integrant.core :as ig])
(:import
clojure.lang.MapEntry
io.lettuce.core.KeyValue
@@ -32,12 +31,10 @@
io.lettuce.core.RedisException
io.lettuce.core.RedisURI
io.lettuce.core.ScriptOutputType
- io.lettuce.core.api.StatefulConnection
+ io.lettuce.core.SetArgs
io.lettuce.core.api.StatefulRedisConnection
- io.lettuce.core.api.async.RedisAsyncCommands
- io.lettuce.core.api.async.RedisScriptingAsyncCommands
io.lettuce.core.api.sync.RedisCommands
- io.lettuce.core.codec.ByteArrayCodec
+ io.lettuce.core.api.sync.RedisScriptingCommands
io.lettuce.core.codec.RedisCodec
io.lettuce.core.codec.StringCodec
io.lettuce.core.pubsub.RedisPubSubListener
@@ -45,244 +42,238 @@
io.lettuce.core.pubsub.api.sync.RedisPubSubCommands
io.lettuce.core.resource.ClientResources
io.lettuce.core.resource.DefaultClientResources
+ io.netty.channel.nio.NioEventLoopGroup
io.netty.util.HashedWheelTimer
io.netty.util.Timer
+ io.netty.util.concurrent.EventExecutorGroup
java.lang.AutoCloseable
java.time.Duration))
(set! *warn-on-reflection* true)
-(declare ^:private initialize-resources)
-(declare ^:private shutdown-resources)
-(declare ^:private impl-eval)
+(def ^:const MAX-EVAL-RETRIES 18)
-(defprotocol IRedis
- (-connect [_ options])
- (-get-or-connect [_ key options]))
+(def default-timeout
+ (ct/duration "10s"))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; IMPL & PRIVATE API
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defprotocol IConnection
- (publish [_ topic message])
- (rpush [_ key payload])
- (blpop [_ timeout keys])
- (eval [_ script]))
+ (-set-timeout [_ timeout] "set connection timeout")
+ (-get-timeout [_] "get current timeout")
+ (-reset-timeout [_] "reset to default timeout"))
+
+(defprotocol IDefaultConnection
+ "Public API of default redis connection"
+ (-publish [_ topic message])
+ (-rpush [_ key payload])
+ (-blpop [_ timeout keys])
+ (-eval [_ script])
+ (-get [_ key])
+ (-set [_ key val args])
+ (-del [_ key-or-keys])
+ (-ping [_]))
(defprotocol IPubSubConnection
- (add-listener [_ listener])
- (subscribe [_ topics])
- (unsubscribe [_ topics]))
+ (-add-listener [_ listener])
+ (-subscribe [_ topics])
+ (-unsubscribe [_ topics]))
-(def default-codec
- (RedisCodec/of StringCodec/UTF8 ByteArrayCodec/INSTANCE))
-
-(def string-codec
+(def ^:private default-codec
(RedisCodec/of StringCodec/UTF8 StringCodec/UTF8))
-(sm/register!
- {:type ::connection
- :pred #(satisfies? IConnection %)
- :type-properties
- {:title "connection"
- :description "redis connection instance"}})
+(defn- impl-eval
+ [cmd cache metrics script]
+ (let [keys (into-array String (map str (::rscript/keys script)))
+ vals (into-array String (map str (::rscript/vals script)))
+ sname (::rscript/name script)
-(sm/register!
- {:type ::pubsub-connection
- :pred #(satisfies? IPubSubConnection %)
- :type-properties
- {:title "connection"
- :description "redis connection instance"}})
+ read-script
+ (fn []
+ (-> script ::rscript/path io/resource slurp))
-(defn redis?
- [o]
- (satisfies? IRedis o))
+ load-script
+ (fn []
+ (let [id (.scriptLoad ^RedisScriptingCommands cmd
+ ^String (read-script))]
+ (swap! cache assoc sname id)
+ (l/trc :hint "load script" :name sname :id id)
-(sm/register!
- {:type ::redis
- :pred redis?})
+ id))
-(def ^:private schema:script
- [:map {:title "script"}
- [::rscript/name qualified-keyword?]
- [::rscript/path ::sm/text]
- [::rscript/keys {:optional true} [:vector :any]]
- [::rscript/vals {:optional true} [:vector :any]]])
+ eval-script
+ (fn [id]
+ (try
+ (let [tpoint (ct/tpoint)
+ result (.evalsha ^RedisScriptingCommands cmd
+ ^String id
+ ^ScriptOutputType ScriptOutputType/MULTI
+ ^"[Ljava.lang.String;" keys
+ ^"[Ljava.lang.String;" vals)
+ elapsed (tpoint)]
-(def valid-script?
- (sm/lazy-validator schema:script))
+ (mtx/run! metrics {:id :redis-eval-timing
+ :labels [(name sname)]
+ :val (inst-ms elapsed)})
-(defmethod ig/expand-key ::redis
- [k v]
- (let [cpus (px/get-available-processors)
- threads (max 1 (int (* cpus 0.2)))]
- {k (-> (d/without-nils v)
- (assoc ::timeout (ct/duration "10s"))
- (assoc ::io-threads (max 3 threads))
- (assoc ::worker-threads (max 3 threads)))}))
+ (l/trc :hint "eval script"
+ :name (name sname)
+ :id id
+ :params (str/join "," (::rscript/vals script))
+ :elapsed (ct/format-duration elapsed))
-(def ^:private schema:redis-params
- [:map {:title "redis-params"}
- ::wrk/executor
- ::mtx/metrics
- [::uri ::sm/uri]
- [::worker-threads ::sm/int]
- [::io-threads ::sm/int]
- [::timeout ::ct/duration]])
+ result)
-(defmethod ig/assert-key ::redis
- [_ params]
- (assert (sm/check schema:redis-params params)))
+ (catch io.lettuce.core.RedisNoScriptException _cause
+ ::load)
-(defmethod ig/init-key ::redis
- [_ params]
- (initialize-resources params))
+ (catch Throwable cause
+ (when-let [on-error (::rscript/on-error script)]
+ (on-error cause))
+ (throw cause))))
-(defmethod ig/halt-key! ::redis
- [_ instance]
- (d/close! instance))
+ eval-script'
+ (fn [id]
+ (loop [id id
+ retries 0]
+ (if (> retries MAX-EVAL-RETRIES)
+ (ex/raise :type :internal
+ :code ::max-eval-retries-reached
+ :hint (str "unable to eval redis script " sname))
+ (let [result (eval-script id)]
+ (if (= result ::load)
+ (recur (load-script)
+ (inc retries))
+ result)))))]
-(defn- initialize-resources
- "Initialize redis connection resources"
- [{:keys [::uri ::io-threads ::worker-threads ::wrk/executor ::mtx/metrics] :as params}]
+ (if-let [id (c/get @cache sname)]
+ (eval-script' id)
+ (-> (load-script)
+ (eval-script')))))
- (l/inf :hint "initialize redis resources"
- :uri (str uri)
- :io-threads io-threads
- :worker-threads worker-threads)
+(deftype Connection [^StatefulRedisConnection conn
+ ^RedisCommands cmd
+ ^Duration timeout
+ cache metrics]
+ AutoCloseable
+ (close [_]
+ (ex/ignoring (.close conn)))
- (let [timer (HashedWheelTimer.)
- resources (.. (DefaultClientResources/builder)
- (ioThreadPoolSize ^long io-threads)
- (computationThreadPoolSize ^long worker-threads)
- (timer ^Timer timer)
- (build))
+ IConnection
+ (-set-timeout [_ timeout]
+ (.setTimeout conn ^Duration timeout))
- redis-uri (RedisURI/create ^String (str uri))
+ (-reset-timeout [_]
+ (.setTimeout conn timeout))
- shutdown (fn [client conn]
- (ex/ignoring (.close ^StatefulConnection conn))
- (ex/ignoring (.close ^RedisClient client))
- (l/trc :hint "disconnect" :hid (hash client)))
+ (-get-timeout [_]
+ (.getTimeout conn))
- on-remove (fn [key val cause]
- (l/trace :hint "evict connection (cache)" :key key :reason cause)
- (some-> val d/close!))
+ IDefaultConnection
+ (-publish [_ topic message]
+ (.publish cmd ^String topic ^String message))
- cache (cache/create :executor executor
- :on-remove on-remove
- :keepalive "5m")]
- (reify
- java.lang.AutoCloseable
- (close [_]
- (ex/ignoring (cache/invalidate! cache))
- (ex/ignoring (.shutdown ^ClientResources resources))
- (ex/ignoring (.stop ^Timer timer)))
+ (-rpush [_ key elements]
+ (try
+ (let [vals (make-array String (count elements))]
+ (loop [i 0 xs (seq elements)]
+ (when xs
+ (aset ^"[[Ljava.lang.String;" vals i ^String (first xs))
+ (recur (inc i) (next xs))))
- IRedis
- (-get-or-connect [this key options]
- (let [create (fn [_] (-connect this options))]
- (cache/get cache key create)))
+ (.rpush cmd
+ ^String key
+ ^"[[Ljava.lang.String;" vals))
- (-connect [_ options]
- (let [timeout (or (:timeout options) (::timeout params))
- codec (get options :codec default-codec)
- type (get options :type :default)
- client (RedisClient/create ^ClientResources resources
- ^RedisURI redis-uri)]
+ (catch RedisCommandInterruptedException cause
+ (throw (InterruptedException. (ex-message cause))))))
- (l/trc :hint "connect" :hid (hash client))
- (if (= type :pubsub)
- (let [conn (.connectPubSub ^RedisClient client
- ^RedisCodec codec)]
- (.setTimeout ^StatefulConnection conn
- ^Duration timeout)
- (reify
- IPubSubConnection
- (add-listener [_ listener]
- (assert (instance? RedisPubSubListener listener) "expected listener instance")
- (.addListener ^StatefulRedisPubSubConnection conn
- ^RedisPubSubListener listener))
+ (-blpop [_ keys timeout]
+ (try
+ (let [keys (into-array String keys)]
+ (when-let [res (.blpop cmd
+ ^double timeout
+ ^"[Ljava.lang.String;" keys)]
+ (MapEntry/create
+ (.getKey ^KeyValue res)
+ (.getValue ^KeyValue res))))
+ (catch RedisCommandInterruptedException cause
+ (throw (InterruptedException. (ex-message cause))))))
- (subscribe [_ topics]
- (try
- (let [topics (into-array String (map str topics))
- cmd (.sync ^StatefulRedisPubSubConnection conn)]
- (.subscribe ^RedisPubSubCommands cmd topics))
- (catch RedisCommandInterruptedException cause
- (throw (InterruptedException. (ex-message cause))))))
+ (-get [_ key]
+ (assert (string? key) "key expected to be string")
+ (.get cmd ^String key))
- (unsubscribe [_ topics]
- (try
- (let [topics (into-array String (map str topics))
- cmd (.sync ^StatefulRedisPubSubConnection conn)]
- (.unsubscribe ^RedisPubSubCommands cmd topics))
- (catch RedisCommandInterruptedException cause
- (throw (InterruptedException. (ex-message cause))))))
+ (-set [_ key val args]
+ (.set cmd
+ ^String key
+ ^bytes val
+ ^SetArgs args))
+
+ (-del [_ keys]
+ (let [keys (into-array String keys)]
+ (.del cmd ^String/1 keys)))
+
+ (-ping [_]
+ (.ping cmd))
+
+ (-eval [_ script]
+ (impl-eval cmd cache metrics script)))
- AutoCloseable
- (close [_] (shutdown client conn))))
+(deftype SubscriptionConnection [^StatefulRedisPubSubConnection conn
+ ^RedisPubSubCommands cmd
+ ^Duration timeout]
+ AutoCloseable
+ (close [_]
+ (ex/ignoring (.close conn)))
- (let [conn (.connect ^RedisClient client ^RedisCodec codec)]
- (.setTimeout ^StatefulConnection conn ^Duration timeout)
- (reify
- IConnection
- (publish [_ topic message]
- (assert (string? topic) "expected topic to be string")
- (assert (bytes? message) "expected message to be a byte array")
+ IConnection
+ (-set-timeout [_ timeout]
+ (.setTimeout conn ^Duration timeout))
- (let [pcomm (.async ^StatefulRedisConnection conn)]
- (.publish ^RedisAsyncCommands pcomm ^String topic ^bytes message)))
+ (-reset-timeout [_]
+ (.setTimeout conn timeout))
- (rpush [_ key payload]
- (assert (or (and (vector? payload)
- (every? bytes? payload))
- (bytes? payload)))
- (try
- (let [cmd (.sync ^StatefulRedisConnection conn)
- data (if (vector? payload) payload [payload])
- vals (make-array (. Class (forName "[B")) (count data))]
+ (-get-timeout [_]
+ (.getTimeout conn))
- (loop [i 0 xs (seq data)]
- (when xs
- (aset ^"[[B" vals i ^bytes (first xs))
- (recur (inc i) (next xs))))
+ IPubSubConnection
+ (-add-listener [_ listener]
+ (.addListener conn ^RedisPubSubListener listener))
- (.rpush ^RedisCommands cmd
- ^String key
- ^"[[B" vals))
+ (-subscribe [_ topics]
+ (try
+ (let [topics (into-array String topics)]
+ (.subscribe cmd topics))
+ (catch RedisCommandInterruptedException cause
+ (throw (InterruptedException. (ex-message cause))))))
- (catch RedisCommandInterruptedException cause
- (throw (InterruptedException. (ex-message cause))))))
+ (-unsubscribe [_ topics]
+ (try
+ (let [topics (into-array String topics)]
+ (.unsubscribe cmd topics))
+ (catch RedisCommandInterruptedException cause
+ (throw (InterruptedException. (ex-message cause)))))))
- (blpop [_ timeout keys]
- (try
- (let [keys (into-array Object (map str keys))
- cmd (.sync ^StatefulRedisConnection conn)
- timeout (/ (double (inst-ms timeout)) 1000.0)]
- (when-let [res (.blpop ^RedisCommands cmd
- ^double timeout
- ^"[Ljava.lang.String;" keys)]
- (MapEntry/create
- (.getKey ^KeyValue res)
- (.getValue ^KeyValue res))))
- (catch RedisCommandInterruptedException cause
- (throw (InterruptedException. (ex-message cause))))))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; PUBLIC API
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- (eval [_ script]
- (assert (valid-script? script) "expected valid script")
- (impl-eval conn metrics script))
-
- AutoCloseable
- (close [_] (shutdown client conn))))))))))
-
-(defn connect
- [instance & {:as opts}]
- (assert (satisfies? IRedis instance) "expected valid redis instance")
- (-connect instance opts))
-
-(defn get-or-connect
- [instance key & {:as opts}]
- (assert (satisfies? IRedis instance) "expected valid redis instance")
- (-get-or-connect instance key opts))
+(defn build-set-args
+ [options]
+ (reduce-kv (fn [^SetArgs args k v]
+ (case k
+ :ex (if (instance? Duration v)
+ (.ex args ^Duration v)
+ (.ex args (long v)))
+ :px (.px args (long v))
+ :nx (if v (.nx args) args)
+ :keep-ttl (if v (.keepttl args) args)))
+ (SetArgs.)
+ options))
(defn pubsub-listener
[& {:keys [on-message on-subscribe on-unsubscribe]}]
@@ -311,61 +302,172 @@
(when on-unsubscribe
(on-unsubscribe nil topic count)))))
-(def ^:private scripts-cache (atom {}))
+(defn connect
+ [cfg & {:as options}]
+ (assert (contains? cfg ::mtx/metrics) "missing ::mtx/metrics on provided system")
+ (assert (contains? cfg ::client) "missing ::rds/client on provided system")
-(defn- impl-eval
- [^StatefulRedisConnection connection metrics script]
- (let [cmd (.async ^StatefulRedisConnection connection)
- keys (into-array String (map str (::rscript/keys script)))
- vals (into-array String (map str (::rscript/vals script)))
- sname (::rscript/name script)]
+ (let [state (::client cfg)
- (letfn [(on-error [cause]
- (if (instance? io.lettuce.core.RedisNoScriptException cause)
- (do
- (l/error :hint "no script found" :name sname :cause cause)
- (->> (load-script)
- (p/mcat eval-script)))
- (if-let [on-error (::rscript/on-error script)]
- (on-error cause)
- (p/rejected cause))))
+ cache (::cache state)
+ client (::client state)
+ timeout (or (some-> (:timeout options) ct/duration)
+ (::timeout state))
- (eval-script [sha]
- (let [tpoint (ct/tpoint)]
- (->> (.evalsha ^RedisScriptingAsyncCommands cmd
- ^String sha
- ^ScriptOutputType ScriptOutputType/MULTI
- ^"[Ljava.lang.String;" keys
- ^"[Ljava.lang.String;" vals)
- (p/fmap (fn [result]
- (let [elapsed (tpoint)]
- (mtx/run! metrics {:id :redis-eval-timing
- :labels [(name sname)]
- :val (inst-ms elapsed)})
- (l/trace :hint "eval script"
- :name (name sname)
- :sha sha
- :params (str/join "," (::rscript/vals script))
- :elapsed (ct/format-duration elapsed))
- result)))
- (p/merr on-error))))
+ conn (.connect ^RedisClient client
+ ^RedisCodec default-codec)
+ cmd (.sync ^StatefulRedisConnection conn)]
- (read-script []
- (-> script ::rscript/path io/resource slurp))
+ (.setTimeout ^StatefulRedisConnection conn ^Duration timeout)
+ (->Connection conn cmd timeout cache (::mtx/metrics cfg))))
- (load-script []
- (l/trace :hint "load script" :name sname)
- (->> (.scriptLoad ^RedisScriptingAsyncCommands cmd
- ^String (read-script))
- (p/fmap (fn [sha]
- (swap! scripts-cache assoc sname sha)
- sha))))]
+(defn connect-pubsub
+ [cfg & {:as options}]
+ (let [state (::client cfg)
+ client (::client state)
- (p/await!
- (if-let [sha (get @scripts-cache sname)]
- (eval-script sha)
- (->> (load-script)
- (p/mapcat eval-script)))))))
+ timeout (or (some-> (:timeout options) ct/duration)
+ (::timeout state))
+ conn (.connectPubSub ^RedisClient client
+ ^RedisCodec default-codec)
+ cmd (.sync ^StatefulRedisPubSubConnection conn)]
+
+
+ (.setTimeout ^StatefulRedisPubSubConnection conn
+ ^Duration timeout)
+ (->SubscriptionConnection conn cmd timeout)))
+
+(defn get
+ [conn key]
+ (assert (string? key) "key must be string instance")
+ (try
+ (-get conn key)
+ (catch RedisCommandTimeoutException cause
+ (l/err :hint "timeout on get redis key" :key key :cause cause)
+ nil)))
+
+(defn set
+ ([conn key val]
+ (set conn key val nil))
+ ([conn key val args]
+ (assert (string? key) "key must be string instance")
+ (assert (string? val) "val must be string instance")
+ (let [args (cond
+ (or (instance? SetArgs args)
+ (nil? args))
+ args
+
+ (map? args)
+ (build-set-args args)
+
+ :else
+ (throw (IllegalArgumentException. "invalid args")))]
+
+ (try
+ (-set conn key val args)
+ (catch RedisCommandTimeoutException cause
+ (l/err :hint "timeout on set redis key" :key key :cause cause)
+ nil)))))
+
+(defn del
+ [conn key-or-keys]
+ (let [keys (if (vector? key-or-keys) key-or-keys [key-or-keys])]
+ (assert (every? string? keys) "only string keys allowed")
+ (try
+ (-del conn keys)
+ (catch RedisCommandTimeoutException cause
+ (l/err :hint "timeout on del redis key" :key key :cause cause)
+ nil))))
+
+(defn ping
+ [conn]
+ (-ping conn))
+
+(defn blpop
+ [conn key-or-keys timeout]
+ (let [keys (if (vector? key-or-keys) key-or-keys [key-or-keys])
+ timeout (cond
+ (ct/duration? timeout)
+ (/ (double (inst-ms timeout)) 1000.0)
+
+ (double? timeout)
+ timeout
+
+ (int? timeout)
+ (/ (double timeout) 1000.0)
+
+ :else
+ 0)]
+
+ (assert (every? string? keys) "only string keys allowed")
+ (-blpop conn keys timeout)))
+
+(defn rpush
+ [conn key elements]
+ (assert (string? key) "key must be string instance")
+ (assert (every? string? elements) "elements should be all strings")
+ (let [elements (vec elements)]
+ (-rpush conn key elements)))
+
+(defn publish
+ [conn topic payload]
+ (assert (string? topic) "expected topic to be string")
+ (assert (string? payload) "expected message to be a byte array")
+ (-publish conn topic payload))
+
+(def ^:private schema:script
+ [:map {:title "script"}
+ [::rscript/name qualified-keyword?]
+ [::rscript/path ::sm/text]
+ [::rscript/keys {:optional true} [:vector :any]]
+ [::rscript/vals {:optional true} [:vector :any]]])
+
+(def ^:private valid-script?
+ (sm/lazy-validator schema:script))
+
+(defn eval
+ [conn script]
+ (assert (valid-script? script) "expected valid script")
+ (-eval conn script))
+
+(defn add-listener
+ [conn listener]
+ (let [listener (cond
+ (map? listener)
+ (pubsub-listener listener)
+
+ (instance? RedisPubSubListener listener)
+ listener
+
+ :else
+ (throw (IllegalArgumentException. "invalid listener provided")))]
+
+ (-add-listener conn listener)))
+
+(defn subscribe
+ [conn topic-or-topics]
+ (let [topics (if (vector? topic-or-topics) topic-or-topics [topic-or-topics])]
+ (assert (every? string? topics))
+ (-subscribe conn topics)))
+
+(defn unsubscribe
+ [conn topic-or-topics]
+ (let [topics (if (vector? topic-or-topics) topic-or-topics [topic-or-topics])]
+ (assert (every? string? topics))
+ (-unsubscribe conn topics)))
+
+(defn set-timeout
+ [conn timeout]
+ (let [timeout (ct/duration timeout)]
+ (-set-timeout conn timeout)))
+
+(defn get-timeout
+ [conn]
+ (-get-timeout conn))
+
+(defn reset-timeout
+ [conn]
+ (-reset-timeout conn))
(defn timeout-exception?
[cause]
@@ -374,3 +476,121 @@
(defn exception?
[cause]
(instance? RedisException cause))
+
+(defn get-pooled
+ [cfg]
+ (let [pool (::pool cfg)]
+ (gpool/get pool)))
+
+(defn close
+ [o]
+ (.close ^AutoCloseable o))
+
+(defn pool
+ [cfg & {:as options}]
+ (gpool/create :create-fn (partial connect cfg options)
+ :destroy-fn close
+ :dispose-fn -reset-timeout))
+
+(defn run!
+ [cfg f & args]
+ (if (gpool/pool? cfg)
+ (apply f {::pool cfg} f args)
+ (let [pool (::pool cfg)]
+ (with-open [^AutoCloseable conn (gpool/get pool)]
+ (apply f (assoc cfg ::conn @conn) args)))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; INITIALIZATION
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defmethod ig/expand-key ::client
+ [k v]
+ {k (-> (d/without-nils v)
+ (assoc ::timeout (ct/duration "10s")))})
+
+(def ^:private schema:client
+ [:map {:title "RedisClient"}
+ [::timer [:fn #(instance? HashedWheelTimer %)]]
+ [::cache ::sm/atom]
+ [::timeout ::ct/duration]
+ [::resources [:fn #(instance? DefaultClientResources %)]]])
+
+(def check-client
+ (sm/check-fn schema:client))
+
+(sm/register! ::client schema:client)
+(sm/register!
+ {:type ::pool
+ :pred gpool/pool?})
+
+(def ^:private schema:client-params
+ [:map {:title "redis-params"}
+ ::wrk/netty-io-executor
+ ::wrk/netty-executor
+ [::uri ::sm/uri]
+ [::timeout ::ct/duration]])
+
+(def ^:private check-client-params
+ (sm/check-fn schema:client-params))
+
+(defmethod ig/assert-key ::client
+ [_ params]
+ (check-client-params params))
+
+(defmethod ig/init-key ::client
+ [_ {:keys [::uri ::wrk/netty-io-executor ::wrk/netty-executor] :as params}]
+
+ (l/inf :hint "initialize redis client" :uri (str uri))
+
+ (let [timer (HashedWheelTimer.)
+ cache (atom {})
+
+ resources (.. (DefaultClientResources/builder)
+ (eventExecutorGroup ^EventExecutorGroup netty-executor)
+
+ ;; We provide lettuce with a shared event loop
+ ;; group instance instead of letting lettuce to
+ ;; create its own
+ (eventLoopGroupProvider
+ (reify io.lettuce.core.resource.EventLoopGroupProvider
+ (allocate [_ _] netty-io-executor)
+ (threadPoolSize [_]
+ (.executorCount ^NioEventLoopGroup netty-io-executor))
+ (release [_ _ _ _ _]
+ ;; Do nothing
+ )
+ (shutdown [_ _ _ _]
+ ;; Do nothing
+ )))
+
+ (timer ^Timer timer)
+ (build))
+
+ redis-uri (RedisURI/create ^String (str uri))
+ client (RedisClient/create ^ClientResources resources
+ ^RedisURI redis-uri)]
+
+ {::client client
+ ::cache cache
+ ::timer timer
+ ::timeout default-timeout
+ ::resources resources}))
+
+(defmethod ig/halt-key! ::client
+ [_ {:keys [::client ::timer ::resources]}]
+ (ex/ignoring (.shutdown ^RedisClient client))
+ (ex/ignoring (.shutdown ^ClientResources resources))
+ (ex/ignoring (.stop ^Timer timer)))
+
+(defmethod ig/assert-key ::pool
+ [_ {:keys [::client]}]
+ (check-client client))
+
+(defmethod ig/init-key ::pool
+ [_ cfg]
+ (pool cfg {:timeout (ct/duration 2000)}))
+
+(defmethod ig/halt-key! ::pool
+ [_ instance]
+ (.close ^java.lang.AutoCloseable instance))
diff --git a/backend/src/app/rpc.clj b/backend/src/app/rpc.clj
index 94537a9708..63d778a89c 100644
--- a/backend/src/app/rpc.clj
+++ b/backend/src/app/rpc.clj
@@ -23,6 +23,7 @@
[app.main :as-alias main]
[app.metrics :as mtx]
[app.msgbus :as-alias mbus]
+ [app.redis :as rds]
[app.rpc.climit :as climit]
[app.rpc.cond :as cond]
[app.rpc.helpers :as rph]
@@ -239,7 +240,6 @@
'app.rpc.commands.files
'app.rpc.commands.files-create
'app.rpc.commands.files-share
- 'app.rpc.commands.files-temp
'app.rpc.commands.files-update
'app.rpc.commands.files-snapshot
'app.rpc.commands.files-thumbnails
@@ -262,6 +262,7 @@
::session/manager
::http.client/client
::db/pool
+ ::rds/pool
::mbus/msgbus
::sto/storage
::mtx/metrics
diff --git a/backend/src/app/rpc/climit.clj b/backend/src/app/rpc/climit.clj
index f03f19e79c..6c773b94d6 100644
--- a/backend/src/app/rpc/climit.clj
+++ b/backend/src/app/rpc/climit.clj
@@ -21,7 +21,6 @@
[clojure.set :as set]
[datoteka.fs :as fs]
[integrant.core :as ig]
- [promesa.exec :as px]
[promesa.exec.bulkhead :as pbh])
(:import
clojure.lang.ExceptionInfo
@@ -289,13 +288,9 @@
(get-limits cfg)))
(defn invoke!
- "Run a function in context of climit.
- Intended to be used in virtual threads."
- [{:keys [::executor ::rpc/climit] :as cfg} f params]
+ "Run a function in context of climit."
+ [{:keys [::rpc/climit] :as cfg} f params]
(let [f (if climit
- (let [f (if (some? executor)
- (fn [cfg params] (px/await! (px/submit! executor (fn [] (f cfg params)))))
- f)]
- (build-exec-chain cfg f))
+ (build-exec-chain cfg f)
f)]
(f cfg params)))
diff --git a/backend/src/app/rpc/commands/access_token.clj b/backend/src/app/rpc/commands/access_token.clj
index d91e39c86b..fcbb0af2f2 100644
--- a/backend/src/app/rpc/commands/access_token.clj
+++ b/backend/src/app/rpc/commands/access_token.clj
@@ -23,14 +23,14 @@
(dissoc row :perms))
(defn create-access-token
- [{:keys [::db/conn ::setup/props]} profile-id name expiration]
- (let [created-at (ct/now)
- token-id (uuid/next)
- token (tokens/generate props {:iss "access-token"
- :tid token-id
- :iat created-at})
+ [{:keys [::db/conn] :as cfg} profile-id name expiration]
+ (let [token-id (uuid/next)
+ expires-at (some-> expiration (ct/in-future))
+ created-at (ct/now)
+ token (tokens/generate cfg {:iss "access-token"
+ :iat created-at
+ :tid token-id})
- expires-at (some-> expiration ct/in-future)
token (db/insert! conn :access-token
{:id token-id
:name name
diff --git a/backend/src/app/rpc/commands/auth.clj b/backend/src/app/rpc/commands/auth.clj
index 20e1a9cdc9..f6b81d6add 100644
--- a/backend/src/app/rpc/commands/auth.clj
+++ b/backend/src/app/rpc/commands/auth.clj
@@ -6,6 +6,7 @@
(ns app.rpc.commands.auth
(:require
+ [app.auth :as auth]
[app.common.data :as d]
[app.common.data.macros :as dm]
[app.common.exceptions :as ex]
@@ -62,7 +63,7 @@
(ex/raise :type :validation
:code :account-without-password
:hint "the current account does not have password")
- (let [result (profile/verify-password cfg password (:password profile))]
+ (let [result (auth/verify-password password (:password profile))]
(when (:update result)
(l/trc :hint "updating profile password"
:id (str (:id profile))
@@ -98,7 +99,7 @@
(profile/strip-private-attrs))
invitation (when-let [token (:invitation-token params)]
- (tokens/verify (::setup/props cfg) {:token token :iss :team-invitation}))
+ (tokens/verify cfg {:token token :iss :team-invitation}))
;; If invitation member-id does not matches the profile-id, we just proceed to ignore the
;; invitation because invitations matches exactly; and user can't login with other email and
@@ -152,11 +153,11 @@
(defn recover-profile
[{:keys [::db/conn] :as cfg} {:keys [token password]}]
(letfn [(validate-token [token]
- (let [tdata (tokens/verify (::setup/props cfg) {:token token :iss :password-recovery})]
+ (let [tdata (tokens/verify cfg {:token token :iss :password-recovery})]
(:profile-id tdata)))
(update-password [conn profile-id]
- (let [pwd (profile/derive-password cfg password)]
+ (let [pwd (auth/derive-password password)]
(db/update! conn :profile {:password pwd :is-active true} {:id profile-id})
nil))]
@@ -191,7 +192,7 @@
:hint "registration disabled"))
(when (contains? params :invitation-token)
- (let [invitation (tokens/verify (::setup/props cfg)
+ (let [invitation (tokens/verify cfg
{:token (:invitation-token params)
:iss :team-invitation})]
(when-not (= (:email params) (:member-email invitation))
@@ -248,7 +249,7 @@
:props {:newsletter-updates (or accept-newsletter-updates false)}}
params (d/without-nils params)
- token (tokens/generate (::setup/props cfg) params)]
+ token (tokens/generate cfg params)]
(with-meta {:token token}
{::audit/profile-id uuid/zero})))
@@ -342,14 +343,14 @@
(defn send-email-verification!
[{:keys [::db/conn] :as cfg} profile]
- (let [vtoken (tokens/generate (::setup/props cfg)
+ (let [vtoken (tokens/generate cfg
{:iss :verify-email
:exp (ct/in-future "72h")
:profile-id (:id profile)
:email (:email profile)})
;; NOTE: this token is mainly used for possible complains
;; identification on the sns webhook
- ptoken (tokens/generate (::setup/props cfg)
+ ptoken (tokens/generate cfg
{:iss :profile-identity
:profile-id (:id profile)
:exp (ct/in-future {:days 30})})]
@@ -363,7 +364,7 @@
(defn register-profile
[{:keys [::db/conn ::wrk/executor] :as cfg} {:keys [token] :as params}]
- (let [claims (tokens/verify (::setup/props cfg) {:token token :iss :prepared-register})
+ (let [claims (tokens/verify cfg {:token token :iss :prepared-register})
params (into claims params)
profile (if-let [profile-id (:profile-id claims)]
@@ -378,7 +379,7 @@
(not (contains? cf/flags :email-verification)))
params (-> params
(assoc :is-active is-active)
- (update :password #(profile/derive-password cfg %)))
+ (update :password auth/derive-password))
profile (->> (create-profile! conn params)
(create-profile-rels! conn))]
(vary-meta profile assoc :created true))))
@@ -386,7 +387,7 @@
created? (-> profile meta :created true?)
invitation (when-let [token (:invitation-token params)]
- (tokens/verify (::setup/props cfg) {:token token :iss :team-invitation}))
+ (tokens/verify cfg {:token token :iss :team-invitation}))
props (-> (audit/profile->props profile)
(assoc :from-invitation (some? invitation)))
@@ -419,7 +420,7 @@
(= (:email profile)
(:member-email invitation)))
(let [claims (assoc invitation :member-id (:id profile))
- token (tokens/generate (::setup/props cfg) claims)]
+ token (tokens/generate cfg claims)]
(-> {:invitation-token token}
(rph/with-transform (session/create-fn cfg (:id profile)))
(rph/with-meta {::audit/replace-props props
@@ -493,14 +494,14 @@
(defn- request-profile-recovery
[{:keys [::db/conn] :as cfg} {:keys [email] :as params}]
(letfn [(create-recovery-token [{:keys [id] :as profile}]
- (let [token (tokens/generate (::setup/props cfg)
+ (let [token (tokens/generate cfg
{:iss :password-recovery
:exp (ct/in-future "15m")
:profile-id id})]
(assoc profile :token token)))
(send-email-notification [conn profile]
- (let [ptoken (tokens/generate (::setup/props cfg)
+ (let [ptoken (tokens/generate cfg
{:iss :profile-identity
:profile-id (:id profile)
:exp (ct/in-future {:days 30})})]
diff --git a/backend/src/app/rpc/commands/binfile.clj b/backend/src/app/rpc/commands/binfile.clj
index c9542d4089..f0fc211e46 100644
--- a/backend/src/app/rpc/commands/binfile.clj
+++ b/backend/src/app/rpc/commands/binfile.clj
@@ -28,7 +28,6 @@
[app.tasks.file-gc]
[app.util.services :as sv]
[app.worker :as-alias wrk]
- [promesa.exec :as px]
[yetti.response :as yres]))
(set! *warn-on-reflection* true)
@@ -94,7 +93,7 @@
;; --- Command: import-binfile
(defn- import-binfile
- [{:keys [::db/pool ::wrk/executor] :as cfg} {:keys [profile-id project-id version name file]}]
+ [{:keys [::db/pool] :as cfg} {:keys [profile-id project-id version name file]}]
(let [team (teams/get-team pool
:profile-id profile-id
:project-id project-id)
@@ -105,13 +104,9 @@
(assoc ::bfc/name name)
(assoc ::bfc/input (:path file)))
- ;; NOTE: the importation process performs some operations that are
- ;; not very friendly with virtual threads, and for avoid
- ;; unexpected blocking of other concurrent operations we dispatch
- ;; that operation to a dedicated executor.
result (case (int version)
- 1 (px/invoke! executor (partial bf.v1/import-files! cfg))
- 3 (px/invoke! executor (partial bf.v3/import-files! cfg)))]
+ 1 (bf.v1/import-files! cfg)
+ 3 (bf.v3/import-files! cfg))]
(db/update! pool :project
{:modified-at (ct/now)}
diff --git a/backend/src/app/rpc/commands/comments.clj b/backend/src/app/rpc/commands/comments.clj
index 8f449d1bf8..2227b8d5c5 100644
--- a/backend/src/app/rpc/commands/comments.clj
+++ b/backend/src/app/rpc/commands/comments.clj
@@ -6,6 +6,7 @@
(ns app.rpc.commands.comments
(:require
+ [app.binfile.common :as bfc]
[app.common.data :as d]
[app.common.data.macros :as dm]
[app.common.exceptions :as ex]
@@ -163,34 +164,16 @@
(def xf-decode-row
(map decode-row))
-(def ^:private
- sql:get-file
- "SELECT f.id, f.modified_at, f.revn, f.features, f.name,
- f.project_id, p.team_id, f.data,
- f.data_ref_id, f.data_backend
- FROM file as f
- INNER JOIN project as p on (p.id = f.project_id)
- WHERE f.id = ?
- AND (f.deleted_at IS NULL OR f.deleted_at > now())")
-
(defn- get-file
"A specialized version of get-file for comments module."
[cfg file-id page-id]
- (let [file (db/exec-one! cfg [sql:get-file file-id])]
- (when-not file
- (ex/raise :type :not-found
- :code :object-not-found
- :hint "file not found"))
-
- (binding [pmap/*load-fn* (partial feat.fdata/load-pointer cfg file-id)]
- (let [file (->> file
- (files/decode-row)
- (feat.fdata/resolve-file-data cfg))
- data (get file :data)]
- (-> file
- (assoc :page-name (dm/get-in data [:pages-index page-id :name]))
- (assoc :page-id page-id)
- (dissoc :data))))))
+ (binding [pmap/*load-fn* (partial feat.fdata/load-pointer cfg file-id)]
+ (let [file (bfc/get-file cfg file-id)
+ data (get file :data)]
+ (-> file
+ (assoc :page-name (dm/get-in data [:pages-index page-id :name]))
+ (assoc :page-id page-id)
+ (dissoc :data)))))
;; FIXME: rename
(defn- get-comment-thread
@@ -251,34 +234,39 @@
(files/check-comment-permissions! conn profile-id file-id share-id)
(get-comment-threads conn profile-id file-id))))
-(def ^:private sql:comment-threads
- "SELECT DISTINCT ON (ct.id)
- ct.*,
- pf.fullname AS owner_fullname,
- pf.email AS owner_email,
- pf.photo_id AS owner_photo_id,
- p.team_id AS team_id,
- f.name AS file_name,
- f.project_id AS project_id,
- first_value(c.content) OVER w AS content,
- (SELECT count(1)
- FROM comment AS c
- WHERE c.thread_id = ct.id) AS count_comments,
- (SELECT count(1)
- FROM comment AS c
- WHERE c.thread_id = ct.id
- AND c.created_at >= coalesce(cts.modified_at, ct.created_at)) AS count_unread_comments
- FROM comment_thread AS ct
- INNER JOIN comment AS c ON (c.thread_id = ct.id)
- INNER JOIN file AS f ON (f.id = ct.file_id)
- INNER JOIN project AS p ON (p.id = f.project_id)
- LEFT JOIN comment_thread_status AS cts ON (cts.thread_id = ct.id AND cts.profile_id = ?)
- LEFT JOIN profile AS pf ON (ct.owner_id = pf.id)
- WINDOW w AS (PARTITION BY c.thread_id ORDER BY c.created_at ASC)")
+(defn- get-comment-threads-sql
+ [where]
+ (str/ffmt
+ "SELECT DISTINCT ON (ct.id)
+ ct.*,
+ pf.fullname AS owner_fullname,
+ pf.email AS owner_email,
+ pf.photo_id AS owner_photo_id,
+ p.team_id AS team_id,
+ f.name AS file_name,
+ f.project_id AS project_id,
+ first_value(c.content) OVER w AS content,
+ (SELECT count(1)
+ FROM comment AS c
+ WHERE c.thread_id = ct.id) AS count_comments,
+ (SELECT count(1)
+ FROM comment AS c
+ WHERE c.thread_id = ct.id
+ AND c.created_at >= coalesce(cts.modified_at, ct.created_at)) AS count_unread_comments
+ FROM comment_thread AS ct
+ INNER JOIN comment AS c ON (c.thread_id = ct.id)
+ INNER JOIN file AS f ON (f.id = ct.file_id)
+ INNER JOIN project AS p ON (p.id = f.project_id)
+ LEFT JOIN comment_thread_status AS cts ON (cts.thread_id = ct.id AND cts.profile_id = ?)
+ LEFT JOIN profile AS pf ON (ct.owner_id = pf.id)
+ WHERE f.deleted_at IS NULL
+ AND p.deleted_at IS NULL
+ %1
+ WINDOW w AS (PARTITION BY c.thread_id ORDER BY c.created_at ASC)"
+ where))
(def ^:private sql:comment-threads-by-file-id
- (str "WITH threads AS (" sql:comment-threads ")"
- "SELECT * FROM threads WHERE file_id = ?"))
+ (get-comment-threads-sql "AND ct.file_id = ?"))
(defn- get-comment-threads
[conn profile-id file-id]
@@ -287,7 +275,30 @@
;; --- COMMAND: Get Unread Comment Threads
-(declare ^:private get-unread-comment-threads)
+(def ^:private sql:unread-all-comment-threads-by-team
+ (str "WITH threads AS ("
+ (get-comment-threads-sql "AND p.team_id = ?")
+ ")"
+ "SELECT t.* FROM threads AS t
+ WHERE t.count_unread_comments > 0"))
+
+(def ^:private sql:unread-partial-comment-threads-by-team
+ (str "WITH threads AS ("
+ (get-comment-threads-sql "AND p.team_id = ? AND (ct.owner_id = ? OR ? = ANY(ct.mentions))")
+ ")"
+ "SELECT t.* FROM threads AS t
+ WHERE t.count_unread_comments > 0"))
+
+(defn- get-unread-comment-threads
+ [cfg profile-id team-id]
+ (let [profile (-> (db/get cfg :profile {:id profile-id} ::db/remove-deleted false)
+ (profile/decode-row))
+ notify (or (-> profile :props :notifications :dashboard-comments) :all)
+ result (case notify
+ :all (db/exec! cfg [sql:unread-all-comment-threads-by-team profile-id team-id])
+ :partial (db/exec! cfg [sql:unread-partial-comment-threads-by-team profile-id team-id profile-id profile-id])
+ [])]
+ (into [] xf-decode-row result)))
(def ^:private
schema:get-unread-comment-threads
@@ -298,41 +309,8 @@
{::doc/added "1.15"
::sm/params schema:get-unread-comment-threads}
[cfg {:keys [::rpc/profile-id team-id] :as params}]
- (db/run!
- cfg
- (fn [{:keys [::db/conn]}]
- (teams/check-read-permissions! conn profile-id team-id)
- (get-unread-comment-threads conn profile-id team-id))))
-
-(def sql:unread-all-comment-threads-by-team
- (str "WITH threads AS (" sql:comment-threads ")"
- "SELECT * FROM threads WHERE count_unread_comments > 0 AND team_id = ?"))
-
-;; The partial configuration will retrieve only comments created by the user and
-;; threads that have a mention to the user.
-(def sql:unread-partial-comment-threads-by-team
- (str "WITH threads AS (" sql:comment-threads ")"
- "SELECT * FROM threads
- WHERE count_unread_comments > 0
- AND team_id = ?
- AND (owner_id = ? OR ? = ANY(mentions))"))
-
-(defn- get-unread-comment-threads
- [conn profile-id team-id]
- (let [profile (-> (db/get conn :profile {:id profile-id})
- (profile/decode-row))
- notify (or (-> profile :props :notifications :dashboard-comments) :all)]
-
- (case notify
- :all
- (->> (db/exec! conn [sql:unread-all-comment-threads-by-team profile-id team-id])
- (into [] xf-decode-row))
-
- :partial
- (->> (db/exec! conn [sql:unread-partial-comment-threads-by-team profile-id team-id profile-id profile-id])
- (into [] xf-decode-row))
-
- [])))
+ (teams/check-read-permissions! cfg profile-id team-id)
+ (get-unread-comment-threads cfg profile-id team-id))
;; --- COMMAND: Get Single Comment Thread
@@ -343,16 +321,17 @@
[:id ::sm/uuid]
[:share-id {:optional true} [:maybe ::sm/uuid]]])
+(def ^:private sql:get-comment-thread
+ (get-comment-threads-sql "AND ct.file_id = ? AND ct.id = ?"))
+
(sv/defmethod ::get-comment-thread
{::doc/added "1.15"
::sm/params schema:get-comment-thread}
[cfg {:keys [::rpc/profile-id file-id id share-id] :as params}]
(db/run! cfg (fn [{:keys [::db/conn]}]
(files/check-comment-permissions! conn profile-id file-id share-id)
- (let [sql (str "WITH threads AS (" sql:comment-threads ")"
- "SELECT * FROM threads WHERE id = ? AND file_id = ?")]
- (-> (db/exec-one! conn [sql profile-id id file-id])
- (decode-row))))))
+ (some-> (db/exec-one! conn [sql:get-comment-thread profile-id file-id id])
+ (decode-row)))))
;; --- COMMAND: Retrieve Comments
diff --git a/backend/src/app/rpc/commands/demo.clj b/backend/src/app/rpc/commands/demo.clj
index 4e64eac7ba..d6825a3f68 100644
--- a/backend/src/app/rpc/commands/demo.clj
+++ b/backend/src/app/rpc/commands/demo.clj
@@ -7,6 +7,7 @@
(ns app.rpc.commands.demo
"A demo specific mutations."
(:require
+ [app.auth :refer [derive-password]]
[app.common.exceptions :as ex]
[app.common.time :as ct]
[app.config :as cf]
@@ -14,7 +15,6 @@
[app.loggers.audit :as audit]
[app.rpc :as-alias rpc]
[app.rpc.commands.auth :as auth]
- [app.rpc.commands.profile :as profile]
[app.rpc.doc :as-alias doc]
[app.util.services :as sv]
[buddy.core.codecs :as bc]
@@ -45,8 +45,9 @@
params {:email email
:fullname fullname
:is-active true
+ :is-demo true
:deleted-at (ct/in-future (cf/get-deletion-delay))
- :password (profile/derive-password cfg password)
+ :password (derive-password password)
:props {}}
profile (db/tx-run! cfg (fn [{:keys [::db/conn]}]
(->> (auth/create-profile! conn params)
diff --git a/backend/src/app/rpc/commands/files.clj b/backend/src/app/rpc/commands/files.clj
index 91a4947608..22b9b08a1a 100644
--- a/backend/src/app/rpc/commands/files.clj
+++ b/backend/src/app/rpc/commands/files.clj
@@ -17,6 +17,7 @@
[app.common.schema :as sm]
[app.common.schema.desc-js-like :as-alias smdj]
[app.common.time :as ct]
+ [app.common.transit :as t]
[app.common.types.components-list :as ctkl]
[app.common.types.file :as ctf]
[app.common.uri :as uri]
@@ -24,10 +25,11 @@
[app.db :as db]
[app.db.sql :as-alias sql]
[app.features.fdata :as feat.fdata]
- [app.features.file-migrations :as feat.fmigr]
[app.features.logical-deletion :as ldel]
[app.loggers.audit :as-alias audit]
[app.loggers.webhooks :as-alias webhooks]
+ [app.msgbus :as mbus]
+ [app.redis :as rds]
[app.rpc :as-alias rpc]
[app.rpc.commands.projects :as projects]
[app.rpc.commands.teams :as teams]
@@ -39,8 +41,7 @@
[app.util.pointer-map :as pmap]
[app.util.services :as sv]
[app.worker :as wrk]
- [cuerdas.core :as str]
- [promesa.exec :as px]))
+ [cuerdas.core :as str]))
;; --- FEATURES
@@ -55,12 +56,10 @@
(ct/duration {:days 7}))
(defn decode-row
- [{:keys [data changes features] :as row}]
+ [{:keys [features] :as row}]
(when row
(cond-> row
- features (assoc :features (db/decode-pgarray features #{}))
- changes (assoc :changes (blob/decode changes))
- data (assoc :data (blob/decode data)))))
+ (db/pgarray? features) (assoc :features (db/decode-pgarray features #{})))))
(defn check-version!
[file]
@@ -84,8 +83,10 @@
fpr.is_admin,
fpr.can_edit
from file_profile_rel as fpr
+ inner join file as f on (f.id = fpr.file_id)
where fpr.file_id = ?
and fpr.profile_id = ?
+ and f.deleted_at is null
union all
select tpr.is_owner,
tpr.is_admin,
@@ -95,6 +96,7 @@
inner join file as f on (p.id = f.project_id)
where f.id = ?
and tpr.profile_id = ?
+ and f.deleted_at is null
union all
select ppr.is_owner,
ppr.is_admin,
@@ -102,7 +104,8 @@
from project_profile_rel as ppr
inner join file as f on (f.project_id = ppr.project_id)
where f.id = ?
- and ppr.profile_id = ?")
+ and ppr.profile_id = ?
+ and f.deleted_at is null")
(defn get-file-permissions
[conn profile-id file-id]
@@ -207,93 +210,11 @@
schema:get-file
[:map {:title "get-file"}
[:features {:optional true} ::cfeat/features]
- [:id ::sm/uuid]
- [:project-id {:optional true} ::sm/uuid]])
-
-(defn- migrate-file
- [{:keys [::db/conn] :as cfg} {:keys [id] :as file} {:keys [read-only?]}]
- (binding [pmap/*load-fn* (partial feat.fdata/load-pointer cfg id)
- pmap/*tracked* (pmap/create-tracked)]
- (let [libs (delay (bfc/get-resolved-file-libraries cfg file))
- ;; For avoid unnecesary overhead of creating multiple pointers and
- ;; handly internally with objects map in their worst case (when
- ;; probably all shapes and all pointers will be readed in any
- ;; case), we just realize/resolve them before applying the
- ;; migration to the file
- file (-> file
- (update :data feat.fdata/process-pointers deref)
- (update :data feat.fdata/process-objects (partial into {}))
- (fmg/migrate-file libs))]
-
- (if (or read-only? (db/read-only? conn))
- file
- (let [;; When file is migrated, we break the rule of no perform
- ;; mutations on get operations and update the file with all
- ;; migrations applied
- file (if (contains? (:features file) "fdata/objects-map")
- (feat.fdata/enable-objects-map file)
- file)
- file (if (contains? (:features file) "fdata/pointer-map")
- (feat.fdata/enable-pointer-map file)
- file)]
-
- (db/update! conn :file
- {:data (blob/encode (:data file))
- :version (:version file)
- :features (db/create-array conn "text" (:features file))}
- {:id id}
- {::db/return-keys false})
-
- (when (contains? (:features file) "fdata/pointer-map")
- (feat.fdata/persist-pointers! cfg id))
-
- (feat.fmigr/upsert-migrations! conn file)
- (feat.fmigr/resolve-applied-migrations cfg file))))))
-
-(defn get-file
- [{:keys [::db/conn ::wrk/executor] :as cfg} id
- & {:keys [project-id
- migrate?
- include-deleted?
- lock-for-update?
- preload-pointers?]
- :or {include-deleted? false
- lock-for-update? false
- migrate? true
- preload-pointers? false}
- :as options}]
-
- (assert (db/connection? conn) "expected cfg with valid connection")
-
- (let [params (merge {:id id}
- (when (some? project-id)
- {:project-id project-id}))
- file (->> (db/get conn :file params
- {::db/check-deleted (not include-deleted?)
- ::db/remove-deleted (not include-deleted?)
- ::sql/for-update lock-for-update?})
- (feat.fmigr/resolve-applied-migrations cfg)
- (feat.fdata/resolve-file-data cfg))
-
- ;; NOTE: we perform the file decoding in a separate thread
- ;; because it has heavy and synchronous operations for
- ;; decoding file body that are not very friendly with virtual
- ;; threads.
- file (px/invoke! executor #(decode-row file))
-
- file (if (and migrate? (fmg/need-migration? file))
- (migrate-file cfg file options)
- file)]
-
- (if preload-pointers?
- (binding [pmap/*load-fn* (partial feat.fdata/load-pointer cfg id)]
- (update file :data feat.fdata/process-pointers deref))
-
- file)))
+ [:id ::sm/uuid]])
(defn get-minimal-file
[cfg id & {:as opts}]
- (let [opts (assoc opts ::sql/columns [:id :modified-at :deleted-at :revn :vern :data-ref-id :data-backend])]
+ (let [opts (assoc opts ::sql/columns [:id :modified-at :deleted-at :revn :vern])]
(db/get cfg :file {:id id} opts)))
(defn- get-minimal-file-with-perms
@@ -333,9 +254,9 @@
:project-id project-id
:file-id id)
- file (-> (get-file cfg id :project-id project-id)
+ file (-> (bfc/get-file cfg id
+ :project-id project-id)
(assoc :permissions perms)
- (assoc :team-id (:id team))
(check-version!))]
(-> (cfeat/get-team-enabled-features cf/flags team)
@@ -349,8 +270,7 @@
;; return a complete file
(if (and (contains? (:features file) "fdata/pointer-map")
(not (contains? (:features params) "fdata/pointer-map")))
- (binding [pmap/*load-fn* (partial feat.fdata/load-pointer cfg id)]
- (update file :data feat.fdata/process-pointers deref))
+ (feat.fdata/realize-pointers cfg file)
file)
;; This operation is needed for backward comapatibility with
@@ -358,7 +278,7 @@
;; just converts all objects map instaces to plain maps
(if (and (contains? (:features file) "fdata/objects-map")
(not (contains? (:features params) "fdata/objects-map")))
- (update file :data feat.fdata/process-objects (partial into {}))
+ (feat.fdata/realize-objects cfg file)
file)))))
;; --- COMMAND QUERY: get-file-fragment (by id)
@@ -378,10 +298,8 @@
(defn- get-file-fragment
[cfg file-id fragment-id]
- (let [resolve-file-data (partial feat.fdata/resolve-file-data cfg)]
- (some-> (db/get cfg :file-data-fragment {:file-id file-id :id fragment-id})
- (resolve-file-data)
- (update :data blob/decode))))
+ (some-> (db/get cfg :file-data {:file-id file-id :id fragment-id :type "fragment"})
+ (update :data blob/decode)))
(sv/defmethod ::get-file-fragment
"Retrieve a file fragment by its ID. Only authenticated users."
@@ -540,7 +458,7 @@
(let [perms (get-permissions conn profile-id file-id share-id)
- file (get-file cfg file-id :read-only? true)
+ file (bfc/get-file cfg file-id :read-only? true)
proj (db/get conn :project {:id (:project-id file)})
@@ -596,87 +514,136 @@
;; --- COMMAND QUERY: get-team-shared-files
-(defn- components-and-variants
- "Return a set with all the variant-ids, and a list of components, but with
- only one component by variant"
- [components]
- (let [{:keys [variant-ids components]}
- (reduce (fn [{:keys [variant-ids components] :as acc} {:keys [variant-id] :as component}]
- (cond
- (nil? variant-id)
- {:variant-ids variant-ids :components (conj components component)}
- (contains? variant-ids variant-id)
- acc
- :else
- {:variant-ids (conj variant-ids variant-id) :components (conj components component)}))
- {:variant-ids #{} :components []}
- components)]
- {:components components
- :variant-ids variant-ids}))
+(defn- get-components-with-variants
+ "Return a set with all the variant-ids, and a list of components, but
+ with only one component by variant.
+
+ Returns a vector of unique components and a set of all variant ids"
+ [fdata]
+ (loop [variant-ids #{}
+ components' []
+ components (ctkl/components-seq fdata)]
+ (if-let [{:keys [variant-id] :as component} (first components)]
+ (cond
+ (nil? variant-id)
+ (recur variant-ids
+ (conj components' component)
+ (rest components))
+
+ (contains? variant-ids variant-id)
+ (recur variant-ids
+ components'
+ (rest components))
+
+ :else
+ (recur (conj variant-ids variant-id)
+ (conj components' component)
+ (rest components)))
+
+ [(d/index-by :id components') variant-ids])))
+
+(defn- sample-assets
+ [assets limit]
+ (let [assets (into [] (map val) assets)]
+ {:count (count assets)
+ :sample (->> assets
+ (sort-by #(str/lower (:name %)))
+ (into [] (take limit)))}))
+
+(defn- calculate-library-summary
+ "Calculate the file library summary (counters and samples)"
+ [{:keys [data] :as file}]
+ (let [load-objects
+ (fn [sample]
+ (mapv #(ctf/load-component-objects data %) sample))
+
+ [components variant-ids]
+ (get-components-with-variants data)
+
+ components-sample
+ (-> (sample-assets components 4)
+ (update :sample load-objects))]
+
+ {:components components-sample
+ :variants {:count (count variant-ids)}
+ :colors (sample-assets (:colors data) 3)
+ :typographies (sample-assets (:typographies data) 3)}))
+
+(def ^:private file-summary-cache-key-ttl
+ (ct/duration {:days 30}))
+
+(def file-summary-cache-key-prefix
+ "penpot.library-summary.")
+
+(defn- get-file-with-summary
+ "Get a file without data with a summary of its local library content"
+ [cfg id]
+ (let [get-from-cache
+ (fn [{:keys [::rds/conn]} cache-key]
+ (when-let [result (rds/get conn cache-key)]
+ (let [file (bfc/get-file cfg id :load-data? false)
+ summary (t/decode-str result)]
+ (-> (assoc file :library-summary summary)
+ (dissoc :data)))))
+
+ calculate-from-db
+ (fn []
+ (let [file (bfc/get-file cfg id)
+ result (binding [pmap/*load-fn* (partial feat.fdata/load-pointer cfg id)]
+ (calculate-library-summary file))]
+ (-> file
+ (assoc :library-summary result)
+ (dissoc :legacy-data)
+ (dissoc :data))))
+
+ persist-to-cache
+ (fn [{:keys [::rds/conn]} data cache-key]
+ (rds/set conn cache-key (t/encode-str data)
+ (rds/build-set-args {:ex file-summary-cache-key-ttl})))]
+
+ (if (contains? cf/flags :redis-cache)
+ (let [cache-key (str file-summary-cache-key-prefix id)]
+ (or (rds/run! cfg get-from-cache cache-key)
+ (let [file (calculate-from-db)]
+ (rds/run! cfg persist-to-cache (:library-summary file) cache-key)
+ file)))
+ (calculate-from-db))))
(def ^:private sql:team-shared-files
- "select f.id,
- f.revn,
- f.vern,
- f.data,
- f.project_id,
- f.created_at,
- f.modified_at,
- f.data_backend,
- f.data_ref_id,
- f.name,
- f.version,
- f.is_shared,
- ft.media_id,
- p.team_id
- from file as f
- inner join project as p on (p.id = f.project_id)
- left join file_thumbnail as ft on (ft.file_id = f.id and ft.revn = f.revn and ft.deleted_at is null)
- where f.is_shared = true
- and f.deleted_at is null
- and p.deleted_at is null
- and p.team_id = ?
- order by f.modified_at desc")
+ "WITH file_library_agg AS (
+ SELECT flr.file_id,
+ coalesce(array_agg(flr.library_file_id) filter (WHERE flr.library_file_id IS NOT NULL), '{}') AS library_file_ids
+ FROM file_library_rel flr
+ GROUP BY flr.file_id
+ )
-(defn- get-library-summary
- [cfg {:keys [id data] :as file}]
- (letfn [(assets-sample [assets limit]
- (let [sorted-assets (->> (vals assets)
- (sort-by #(str/lower (:name %))))]
- {:count (count sorted-assets)
- :sample (into [] (take limit sorted-assets))}))]
-
- (binding [pmap/*load-fn* (partial feat.fdata/load-pointer cfg id)]
- (let [load-objects (fn [component]
- (ctf/load-component-objects data component))
- comps-and-variants (components-and-variants (ctkl/components-seq data))
- components (into {} (map (juxt :id identity) (:components comps-and-variants)))
- components-sample (-> (assets-sample components 4)
- (update :sample #(mapv load-objects %))
- (assoc :variants-count (-> comps-and-variants :variant-ids count)))]
- {:components components-sample
- :media (assets-sample (:media data) 3)
- :colors (assets-sample (:colors data) 3)
- :typographies (assets-sample (:typographies data) 3)}))))
+ SELECT f.id,
+ fla.library_file_ids,
+ ft.media_id AS thumbnail_id
+ FROM file AS f
+ INNER JOIN project AS p ON (p.id = f.project_id)
+ LEFT JOIN file_thumbnail AS ft ON (ft.file_id = f.id AND ft.revn = f.revn AND ft.deleted_at IS NULL)
+ LEFT JOIN file_library_agg AS fla ON (fla.file_id = f.id)
+ WHERE f.is_shared = true
+ AND f.deleted_at IS NULL
+ AND p.deleted_at IS NULL
+ AND p.team_id = ?
+ ORDER BY f.modified_at DESC")
(defn- get-team-shared-files
[{:keys [::db/conn] :as cfg} {:keys [team-id profile-id]}]
(teams/check-read-permissions! conn profile-id team-id)
- (->> (db/exec! conn [sql:team-shared-files team-id])
- (into #{} (comp
- ;; NOTE: this decode operation is a workaround for a
- ;; fast fix, this should be approached with a more
- ;; efficient implementation, for now it loads all
- ;; the files in memory.
- (map (partial bfc/decode-file cfg))
- (map (fn [row]
- (if-let [media-id (:media-id row)]
- (-> row
- (dissoc :media-id)
- (assoc :thumbnail-id media-id))
- (dissoc row :media-id))))
- (map #(assoc % :library-summary (get-library-summary cfg %)))
- (map #(dissoc % :data))))))
+
+ (let [process-row
+ (fn [{:keys [id library-file-ids]}]
+ (let [file (get-file-with-summary cfg id)]
+ (assoc file :library-file-ids (db/decode-pgarray library-file-ids #{}))))
+
+ xform
+ (map process-row)]
+
+ (->> (db/plan conn [sql:team-shared-files team-id] {:fetch-size 1})
+ (transduce xform conj #{}))))
(def ^:private schema:get-team-shared-files
[:map {:title "get-team-shared-files"}
@@ -689,6 +656,28 @@
[cfg {:keys [::rpc/profile-id] :as params}]
(db/tx-run! cfg get-team-shared-files (assoc params :profile-id profile-id)))
+;; --- COMMAND QUERY: get-file-summary
+
+(defn- get-file-summary
+ [cfg id]
+ (let [file (get-file-with-summary cfg id)]
+ (-> (:library-summary file)
+ (assoc :name (:name file)))))
+
+(def ^:private
+ schema:get-file-summary
+ [:map {:title "get-file-summary"}
+ [:id ::sm/uuid]])
+
+(sv/defmethod ::get-file-summary
+ "Retrieve a file summary by its ID. Only authenticated users."
+ {::doc/added "1.20"
+ ::sm/params schema:get-file-summary}
+ [cfg {:keys [::rpc/profile-id id] :as params}]
+ (check-read-permissions! cfg profile-id id)
+ (get-file-summary cfg id))
+
+
;; --- COMMAND QUERY: get-file-libraries
(def ^:private schema:get-file-libraries
@@ -707,7 +696,6 @@
;; --- COMMAND QUERY: Files that use this File library
-
(def ^:private sql:library-using-files
"SELECT f.id,
f.name
@@ -777,51 +765,14 @@
(teams/check-read-permissions! conn profile-id team-id)
(get-team-recent-files conn team-id)))
-
-;; --- COMMAND QUERY: get-file-summary
-
-
-(defn- get-file-summary
- [{:keys [::db/conn] :as cfg} {:keys [profile-id id project-id] :as params}]
- (check-read-permissions! conn profile-id id)
- (let [team (teams/get-team conn
- :profile-id profile-id
- :project-id project-id
- :file-id id)
-
- file (get-file cfg id
- :project-id project-id
- :read-only? true)]
-
- (-> (cfeat/get-team-enabled-features cf/flags team)
- (cfeat/check-client-features! (:features params))
- (cfeat/check-file-features! (:features file)))
-
- (binding [pmap/*load-fn* (partial feat.fdata/load-pointer cfg id)]
- (let [components-and-variants (components-and-variants (ctkl/components-seq (:data file)))]
- {:name (:name file)
- :components-count (-> components-and-variants :components count)
- :variants-count (-> components-and-variants :variant-ids count)
- :graphics-count (count (get-in file [:data :media] []))
- :colors-count (count (get-in file [:data :colors] []))
- :typography-count (count (get-in file [:data :typographies] []))}))))
-
-(sv/defmethod ::get-file-summary
- "Retrieve a file summary by its ID. Only authenticated users."
- {::doc/added "1.20"
- ::sm/params schema:get-file}
- [cfg {:keys [::rpc/profile-id] :as params}]
- (db/tx-run! cfg get-file-summary (assoc params :profile-id profile-id)))
-
-
;; --- COMMAND QUERY: get-file-info
(defn- get-file-info
[{:keys [::db/conn] :as cfg} {:keys [id] :as params}]
- (db/get* conn :file
- {:id id}
- {::sql/columns [:id]}))
+ (db/get conn :file
+ {:id id}
+ {::sql/columns [:id :deleted-at]}))
(sv/defmethod ::get-file-info
"Retrieve minimal file info by its ID."
@@ -881,7 +832,7 @@
;; --- MUTATION COMMAND: set-file-shared
-(def sql:get-referenced-files
+(def ^:private sql:get-referenced-files
"SELECT f.id
FROM file_library_rel AS flr
INNER JOIN file AS f ON (f.id = flr.file_id)
@@ -892,56 +843,51 @@
(defn- absorb-library-by-file!
[cfg ldata file-id]
- (dm/assert!
- "expected cfg with valid connection"
- (db/connection-map? cfg))
+ (assert (db/connection-map? cfg)
+ "expected cfg with valid connection")
(binding [pmap/*load-fn* (partial feat.fdata/load-pointer cfg file-id)
pmap/*tracked* (pmap/create-tracked)]
- (let [file (-> (get-file cfg file-id
- :include-deleted? true
- :lock-for-update? true)
+ (let [file (-> (bfc/get-file cfg file-id
+ :include-deleted? true
+ :lock-for-update? true)
(update :data ctf/absorb-assets ldata))]
(l/trc :hint "library absorbed"
:library-id (str (:id ldata))
:file-id (str file-id))
- (db/update! cfg :file
- {:revn (inc (:revn file))
- :data (blob/encode (:data file))
- :modified-at (ct/now)
- :has-media-trimmed false}
- {:id file-id})
-
- (feat.fdata/persist-pointers! cfg file-id))))
+ (bfc/update-file! cfg {:id file-id
+ :migrations (:migrations file)
+ :revn (inc (:revn file))
+ :data (:data file)
+ :modified-at (ct/now)
+ :has-media-trimmed false}))))
(defn- absorb-library
"Find all files using a shared library, and absorb all library assets
into the file local libraries"
- [cfg {:keys [id] :as library}]
+ [cfg {:keys [id data] :as library}]
- (dm/assert!
- "expected cfg with valid connection"
- (db/connection-map? cfg))
+ (assert (db/connection-map? cfg)
+ "expected cfg with valid connection")
- (let [ldata (binding [pmap/*load-fn* (partial feat.fdata/load-pointer cfg id)]
- (-> library :data (feat.fdata/process-pointers deref)))
- ids (->> (db/exec! cfg [sql:get-referenced-files id])
- (map :id))]
+ (let [ids (->> (db/exec! cfg [sql:get-referenced-files id])
+ (sequence bfc/xf-map-id))]
(l/trc :hint "absorbing library"
:library-id (str id)
:files (str/join "," (map str ids)))
- (run! (partial absorb-library-by-file! cfg ldata) ids)
+ (run! (partial absorb-library-by-file! cfg data) ids)
library))
(defn absorb-library!
[{:keys [::db/conn] :as cfg} id]
- (let [file (-> (get-file cfg id
- :lock-for-update? true
- :include-deleted? true)
+ (let [file (-> (bfc/get-file cfg id
+ :realize? true
+ :lock-for-update? true
+ :include-deleted? true)
(check-version!))
proj (db/get* conn :project {:id (:project-id file)}
@@ -1038,7 +984,14 @@
(let [team (teams/get-team conn
:profile-id profile-id
:file-id id)
- file (mark-file-deleted conn team id)]
+ file (mark-file-deleted conn team id)
+ msgbus (::mbus/msgbus cfg)]
+
+ (mbus/pub! msgbus
+ :topic id
+ :message {:type :file-deleted
+ :file-id id
+ :profile-id profile-id})
(rph/with-meta (rph/wrap)
{::audit/props {:project-id (:project-id file)
@@ -1071,6 +1024,7 @@
[:library-id ::sm/uuid]])
(sv/defmethod ::link-file-to-library
+ "Link a file to a library. Returns the recursive list of libraries used by that library"
{::doc/added "1.17"
::webhooks/event? true
::sm/params schema:link-file-to-library}
@@ -1084,7 +1038,8 @@
(fn [{:keys [::db/conn]}]
(check-edition-permissions! conn profile-id file-id)
(check-edition-permissions! conn profile-id library-id)
- (link-file-to-library conn params))))
+ (link-file-to-library conn params)
+ (bfc/get-libraries cfg [library-id]))))
;; --- MUTATION COMMAND: unlink-file-from-library
diff --git a/backend/src/app/rpc/commands/files_create.clj b/backend/src/app/rpc/commands/files_create.clj
index 8f4b9b428e..a0d1d9d516 100644
--- a/backend/src/app/rpc/commands/files_create.clj
+++ b/backend/src/app/rpc/commands/files_create.clj
@@ -8,6 +8,7 @@
(:require
[app.binfile.common :as bfc]
[app.common.features :as cfeat]
+ [app.common.files.migrations :as fmg]
[app.common.schema :as sm]
[app.common.time :as ct]
[app.common.types.file :as ctf]
@@ -45,12 +46,14 @@
(binding [pmap/*tracked* (pmap/create-tracked)
cfeat/*current* features]
+
(let [file (ctf/make-file {:id id
:project-id project-id
:name name
:revn revn
:is-shared is-shared
:features features
+ :migrations fmg/available-migrations
:ignore-sync-until ignore-sync-until
:created-at modified-at
:deleted-at deleted-at}
@@ -66,7 +69,7 @@
{:modified-at (ct/now)}
{:id project-id})
- file)))
+ (bfc/get-file cfg (:id file)))))
(def ^:private schema:create-file
[:map {:title "create-file"}
diff --git a/backend/src/app/rpc/commands/files_snapshot.clj b/backend/src/app/rpc/commands/files_snapshot.clj
index 43c59def96..cd3cbcdf0f 100644
--- a/backend/src/app/rpc/commands/files_snapshot.clj
+++ b/backend/src/app/rpc/commands/files_snapshot.clj
@@ -8,52 +8,20 @@
(:require
[app.binfile.common :as bfc]
[app.common.exceptions :as ex]
- [app.common.files.migrations :as fmg]
- [app.common.logging :as l]
[app.common.schema :as sm]
[app.common.time :as ct]
- [app.common.uuid :as uuid]
- [app.config :as cf]
[app.db :as db]
[app.db.sql :as-alias sql]
- [app.features.fdata :as feat.fdata]
- [app.features.file-migrations :refer [reset-migrations!]]
+ [app.features.file-snapshots :as fsnap]
+ [app.features.logical-deletion :as ldel]
[app.main :as-alias main]
[app.msgbus :as mbus]
[app.rpc :as-alias rpc]
[app.rpc.commands.files :as files]
+ [app.rpc.commands.teams :as teams]
[app.rpc.doc :as-alias doc]
[app.rpc.quotes :as quotes]
- [app.storage :as sto]
- [app.util.blob :as blob]
- [app.util.services :as sv]
- [cuerdas.core :as str]))
-
-(defn decode-row
- [{:keys [migrations] :as row}]
- (when row
- (cond-> row
- (some? migrations)
- (assoc :migrations (db/decode-pgarray migrations)))))
-
-(def sql:get-file-snapshots
- "WITH changes AS (
- SELECT id, label, revn, created_at, created_by, profile_id, locked_by
- FROM file_change
- WHERE file_id = ?
- AND data IS NOT NULL
- AND (deleted_at IS NULL OR deleted_at > now())
- ), versions AS (
- (SELECT * FROM changes WHERE created_by = 'system' LIMIT 1000)
- UNION ALL
- (SELECT * FROM changes WHERE created_by != 'system' LIMIT 1000)
- )
- SELECT * FROM versions
- ORDER BY created_at DESC;")
-
-(defn get-file-snapshots
- [conn file-id]
- (db/exec! conn [sql:get-file-snapshots file-id]))
+ [app.util.services :as sv]))
(def ^:private schema:get-file-snapshots
[:map {:title "get-file-snapshots"}
@@ -65,73 +33,7 @@
[cfg {:keys [::rpc/profile-id file-id] :as params}]
(db/run! cfg (fn [{:keys [::db/conn]}]
(files/check-read-permissions! conn profile-id file-id)
- (get-file-snapshots conn file-id))))
-
-(defn- generate-snapshot-label
- []
- (let [ts (-> (ct/now)
- (ct/format-inst)
- (str/replace #"[T:\.]" "-")
- (str/rtrim "Z"))]
- (str "snapshot-" ts)))
-
-(defn create-file-snapshot!
- [cfg file & {:keys [label created-by deleted-at profile-id]
- :or {deleted-at :default
- created-by :system}}]
-
- (assert (#{:system :user :admin} created-by)
- "expected valid keyword for created-by")
-
- (let [created-by
- (name created-by)
-
- deleted-at
- (cond
- (= deleted-at :default)
- (ct/plus (ct/now) (cf/get-deletion-delay))
-
- (ct/inst? deleted-at)
- deleted-at
-
- :else
- nil)
-
- label
- (or label (generate-snapshot-label))
-
- snapshot-id
- (uuid/next)
-
- data
- (blob/encode (:data file))
-
- features
- (into-array (:features file))
-
- migrations
- (into-array (:migrations file))]
-
- (l/dbg :hint "creating file snapshot"
- :file-id (str (:id file))
- :id (str snapshot-id)
- :label label)
-
- (db/insert! cfg :file-change
- {:id snapshot-id
- :revn (:revn file)
- :data data
- :version (:version file)
- :features features
- :migrations migrations
- :profile-id profile-id
- :file-id (:id file)
- :label label
- :deleted-at deleted-at
- :created-by created-by}
- {::db/return-keys false})
-
- {:id snapshot-id :label label}))
+ (fsnap/get-visible-snapshots conn file-id))))
(def ^:private schema:create-file-snapshot
[:map
@@ -144,7 +46,7 @@
::db/transaction true}
[{:keys [::db/conn] :as cfg} {:keys [::rpc/profile-id file-id label]}]
(files/check-edition-permissions! conn profile-id file-id)
- (let [file (bfc/get-file cfg file-id)
+ (let [file (bfc/get-file cfg file-id :realize? true)
project (db/get-by-id cfg :project (:project-id file))]
(-> cfg
@@ -155,96 +57,10 @@
(quotes/check! {::quotes/id ::quotes/snapshots-per-file}
{::quotes/id ::quotes/snapshots-per-team}))
- (create-file-snapshot! cfg file
- {:label label
- :profile-id profile-id
- :created-by :user})))
-
-(defn restore-file-snapshot!
- [{:keys [::db/conn ::mbus/msgbus] :as cfg} file-id snapshot-id]
- (let [storage (sto/resolve cfg {::db/reuse-conn true})
- file (files/get-minimal-file conn file-id {::db/for-update true})
- vern (rand-int Integer/MAX_VALUE)
- snapshot (some->> (db/get* conn :file-change
- {:file-id file-id
- :id snapshot-id}
- {::db/for-share true})
- (feat.fdata/resolve-file-data cfg)
- (decode-row))
-
- ;; If snapshot has tracked applied migrations, we reuse them,
- ;; if not we take a safest set of migrations as starting
- ;; point. This is because, at the time of implementing
- ;; snapshots, migrations were not taken into account so we
- ;; need to make this backward compatible in some way.
- file (assoc file :migrations
- (or (:migrations snapshot)
- (fmg/generate-migrations-from-version 67)))]
-
- (when-not snapshot
- (ex/raise :type :not-found
- :code :snapshot-not-found
- :hint "unable to find snapshot with the provided label"
- :snapshot-id snapshot-id
- :file-id file-id))
-
- (when-not (:data snapshot)
- (ex/raise :type :validation
- :code :snapshot-without-data
- :hint "snapshot has no data"
- :label (:label snapshot)
- :file-id file-id))
-
- (l/dbg :hint "restoring snapshot"
- :file-id (str file-id)
- :label (:label snapshot)
- :snapshot-id (str (:id snapshot)))
-
- ;; If the file was already offloaded, on restoring the snapshot we
- ;; are going to replace the file data, so we need to touch the old
- ;; referenced storage object and avoid possible leaks
- (when (feat.fdata/offloaded? file)
- (sto/touch-object! storage (:data-ref-id file)))
-
- ;; In the same way, on reseting the file data, we need to restore
- ;; the applied migrations on the moment of taking the snapshot
- (reset-migrations! conn file)
-
- (db/update! conn :file
- {:data (:data snapshot)
- :revn (inc (:revn file))
- :vern vern
- :version (:version snapshot)
- :data-backend nil
- :data-ref-id nil
- :has-media-trimmed false
- :features (:features snapshot)}
- {:id file-id})
-
- ;; clean object thumbnails
- (let [sql (str "update file_tagged_object_thumbnail "
- " set deleted_at = now() "
- " where file_id=? returning media_id")
- res (db/exec! conn [sql file-id])]
- (doseq [media-id (into #{} (keep :media-id) res)]
- (sto/touch-object! storage media-id)))
-
- ;; clean file thumbnails
- (let [sql (str "update file_thumbnail "
- " set deleted_at = now() "
- " where file_id=? returning media_id")
- res (db/exec! conn [sql file-id])]
- (doseq [media-id (into #{} (keep :media-id) res)]
- (sto/touch-object! storage media-id)))
-
- ;; Send to the clients a notification to reload the file
- (mbus/pub! msgbus
- :topic (:id file)
- :message {:type :file-restore
- :file-id (:id file)
- :vern vern})
- {:id (:id snapshot)
- :label (:label snapshot)}))
+ (fsnap/create! cfg file
+ {:label label
+ :profile-id profile-id
+ :created-by "user"})))
(def ^:private schema:restore-file-snapshot
[:map {:title "restore-file-snapshot"}
@@ -253,88 +69,76 @@
(sv/defmethod ::restore-file-snapshot
{::doc/added "1.20"
- ::sm/params schema:restore-file-snapshot}
- [cfg {:keys [::rpc/profile-id file-id id] :as params}]
- (db/tx-run! cfg
- (fn [{:keys [::db/conn] :as cfg}]
- (files/check-edition-permissions! conn profile-id file-id)
- (let [file (bfc/get-file cfg file-id)]
- (create-file-snapshot! cfg file
- {:profile-id profile-id
- :created-by :system})
- (restore-file-snapshot! cfg file-id id)))))
+ ::sm/params schema:restore-file-snapshot
+ ::db/transaction true}
+ [{:keys [::db/conn ::mbus/msgbus] :as cfg} {:keys [::rpc/profile-id file-id id] :as params}]
+ (files/check-edition-permissions! conn profile-id file-id)
+ (let [file (bfc/get-file cfg file-id)
+ team (teams/get-team conn
+ :profile-id profile-id
+ :file-id file-id)
+ delay (ldel/get-deletion-delay team)]
+
+ (fsnap/create! cfg file
+ {:profile-id profile-id
+ :deleted-at (ct/in-future delay)
+ :created-by "system"})
+
+ (let [vern (fsnap/restore! cfg file-id id)]
+ ;; Send to the clients a notification to reload the file
+ (mbus/pub! msgbus
+ :topic (:id file)
+ :message {:type :file-restore
+ :file-id (:id file)
+ :vern vern})
+ nil)))
(def ^:private schema:update-file-snapshot
[:map {:title "update-file-snapshot"}
[:id ::sm/uuid]
[:label ::sm/text]])
-(defn- update-file-snapshot!
- [conn snapshot-id label]
- (-> (db/update! conn :file-change
- {:label label
- :created-by "user"
- :deleted-at nil}
- {:id snapshot-id}
- {::db/return-keys true})
- (dissoc :data :features :migrations)))
-
-(defn- get-snapshot
- "Get a minimal snapshot from database and lock for update"
- [conn id]
- (db/get conn :file-change
- {:id id}
- {::sql/columns [:id :file-id :created-by :deleted-at :profile-id :locked-by]
- ::db/for-update true}))
-
(sv/defmethod ::update-file-snapshot
{::doc/added "1.20"
- ::sm/params schema:update-file-snapshot}
- [cfg {:keys [::rpc/profile-id id label]}]
- (db/tx-run! cfg
- (fn [{:keys [::db/conn]}]
- (let [snapshot (get-snapshot conn id)]
- (files/check-edition-permissions! conn profile-id (:file-id snapshot))
- (update-file-snapshot! conn id label)))))
+ ::sm/params schema:update-file-snapshot
+ ::db/transaction true}
+ [{:keys [::db/conn]} {:keys [::rpc/profile-id id label]}]
+ (let [snapshot (fsnap/get-minimal-snapshot conn id)]
+ (files/check-edition-permissions! conn profile-id (:file-id snapshot))
+ (fsnap/update! conn (assoc snapshot :label label))))
(def ^:private schema:remove-file-snapshot
[:map {:title "remove-file-snapshot"}
[:id ::sm/uuid]])
-(defn- delete-file-snapshot!
- [conn snapshot-id]
- (db/update! conn :file-change
- {:deleted-at (ct/now)}
- {:id snapshot-id}
- {::db/return-keys false})
- nil)
-
(sv/defmethod ::delete-file-snapshot
{::doc/added "1.20"
- ::sm/params schema:remove-file-snapshot}
- [cfg {:keys [::rpc/profile-id id]}]
- (db/tx-run! cfg
- (fn [{:keys [::db/conn]}]
- (let [snapshot (get-snapshot conn id)]
- (files/check-edition-permissions! conn profile-id (:file-id snapshot))
+ ::sm/params schema:remove-file-snapshot
+ ::db/transaction true}
+ [{:keys [::db/conn]} {:keys [::rpc/profile-id id]}]
+ (let [snapshot (fsnap/get-minimal-snapshot conn id)]
+ (files/check-edition-permissions! conn profile-id (:file-id snapshot))
- (when (not= (:created-by snapshot) "user")
- (ex/raise :type :validation
- :code :system-snapshots-cant-be-deleted
- :snapshot-id id
- :profile-id profile-id))
+ (when (not= (:created-by snapshot) "user")
+ (ex/raise :type :validation
+ :code :system-snapshots-cant-be-deleted
+ :file-id (:file-id snapshot)
+ :snapshot-id id
+ :profile-id profile-id))
- ;; Check if version is locked by someone else
- (when (and (:locked-by snapshot)
- (not= (:locked-by snapshot) profile-id))
- (ex/raise :type :validation
- :code :snapshot-is-locked
- :hint "Cannot delete a locked version"
- :snapshot-id id
- :profile-id profile-id
- :locked-by (:locked-by snapshot)))
+ (when (and (some? (:locked-by snapshot))
+ (not= (:locked-by snapshot) profile-id))
+ (ex/raise :type :validation
+ :code :snapshot-is-locked
+ :file-id (:file-id snapshot)
+ :snapshot-id id
+ :profile-id profile-id))
- (delete-file-snapshot! conn id)))))
+ (let [team (teams/get-team conn
+ :profile-id profile-id
+ :file-id (:file-id snapshot))
+ delay (ldel/get-deletion-delay team)]
+ (fsnap/delete! conn (assoc snapshot :deleted-at (ct/in-future delay))))))
;;; Lock/unlock version endpoints
@@ -342,93 +146,75 @@
[:map {:title "lock-file-snapshot"}
[:id ::sm/uuid]])
-(defn- lock-file-snapshot!
- [conn snapshot-id profile-id]
- (db/update! conn :file-change
- {:locked-by profile-id}
- {:id snapshot-id}
- {::db/return-keys false})
- nil)
-
(sv/defmethod ::lock-file-snapshot
{::doc/added "1.20"
- ::sm/params schema:lock-file-snapshot}
- [cfg {:keys [::rpc/profile-id id]}]
- (db/tx-run! cfg
- (fn [{:keys [::db/conn]}]
- (let [snapshot (get-snapshot conn id)]
- (files/check-edition-permissions! conn profile-id (:file-id snapshot))
+ ::sm/params schema:lock-file-snapshot
+ ::db/transaction true}
+ [{:keys [::db/conn]} {:keys [::rpc/profile-id id]}]
+ (let [snapshot (fsnap/get-minimal-snapshot conn id)]
+ (files/check-edition-permissions! conn profile-id (:file-id snapshot))
- (when (not= (:created-by snapshot) "user")
- (ex/raise :type :validation
- :code :system-snapshots-cant-be-locked
- :hint "Only user-created versions can be locked"
- :snapshot-id id
- :profile-id profile-id))
+ (when (not= (:created-by snapshot) "user")
+ (ex/raise :type :validation
+ :code :system-snapshots-cant-be-locked
+ :hint "Only user-created versions can be locked"
+ :snapshot-id id
+ :profile-id profile-id))
- ;; Only the creator can lock their own version
- (when (not= (:profile-id snapshot) profile-id)
- (ex/raise :type :validation
- :code :only-creator-can-lock
- :hint "Only the version creator can lock it"
- :snapshot-id id
- :profile-id profile-id
- :creator-id (:profile-id snapshot)))
+ ;; Only the creator can lock their own version
+ (when (not= (:profile-id snapshot) profile-id)
+ (ex/raise :type :validation
+ :code :only-creator-can-lock
+ :hint "Only the version creator can lock it"
+ :snapshot-id id
+ :profile-id profile-id
+ :creator-id (:profile-id snapshot)))
- ;; Check if already locked
- (when (:locked-by snapshot)
- (ex/raise :type :validation
- :code :snapshot-already-locked
- :hint "Version is already locked"
- :snapshot-id id
- :profile-id profile-id
- :locked-by (:locked-by snapshot)))
+ ;; Check if already locked
+ (when (:locked-by snapshot)
+ (ex/raise :type :validation
+ :code :snapshot-already-locked
+ :hint "Version is already locked"
+ :snapshot-id id
+ :profile-id profile-id
+ :locked-by (:locked-by snapshot)))
- (lock-file-snapshot! conn id profile-id)))))
+ (fsnap/lock-by! conn id profile-id)))
(def ^:private schema:unlock-file-snapshot
[:map {:title "unlock-file-snapshot"}
[:id ::sm/uuid]])
-(defn- unlock-file-snapshot!
- [conn snapshot-id]
- (db/update! conn :file-change
- {:locked-by nil}
- {:id snapshot-id}
- {::db/return-keys false})
- nil)
-
(sv/defmethod ::unlock-file-snapshot
{::doc/added "1.20"
- ::sm/params schema:unlock-file-snapshot}
- [cfg {:keys [::rpc/profile-id id]}]
- (db/tx-run! cfg
- (fn [{:keys [::db/conn]}]
- (let [snapshot (get-snapshot conn id)]
- (files/check-edition-permissions! conn profile-id (:file-id snapshot))
+ ::sm/params schema:unlock-file-snapshot
+ ::db/transaction true}
+ [{:keys [::db/conn]} {:keys [::rpc/profile-id id]}]
+ (let [snapshot (fsnap/get-minimal-snapshot conn id)]
+ (files/check-edition-permissions! conn profile-id (:file-id snapshot))
- (when (not= (:created-by snapshot) "user")
- (ex/raise :type :validation
- :code :system-snapshots-cant-be-unlocked
- :hint "Only user-created versions can be unlocked"
- :snapshot-id id
- :profile-id profile-id))
+ (when (not= (:created-by snapshot) "user")
+ (ex/raise :type :validation
+ :code :system-snapshots-cant-be-unlocked
+ :hint "Only user-created versions can be unlocked"
+ :snapshot-id id
+ :profile-id profile-id))
- ;; Only the creator can unlock their own version
- (when (not= (:profile-id snapshot) profile-id)
- (ex/raise :type :validation
- :code :only-creator-can-unlock
- :hint "Only the version creator can unlock it"
- :snapshot-id id
- :profile-id profile-id
- :creator-id (:profile-id snapshot)))
+ ;; Only the creator can unlock their own version
+ (when (not= (:profile-id snapshot) profile-id)
+ (ex/raise :type :validation
+ :code :only-creator-can-unlock
+ :hint "Only the version creator can unlock it"
+ :snapshot-id id
+ :profile-id profile-id
+ :creator-id (:profile-id snapshot)))
- ;; Check if not locked
- (when (not (:locked-by snapshot))
- (ex/raise :type :validation
- :code :snapshot-not-locked
- :hint "Version is not locked"
- :snapshot-id id
- :profile-id profile-id))
+ ;; Check if not locked
+ (when (not (:locked-by snapshot))
+ (ex/raise :type :validation
+ :code :snapshot-not-locked
+ :hint "Version is not locked"
+ :snapshot-id id
+ :profile-id profile-id))
- (unlock-file-snapshot! conn id)))))
+ (fsnap/unlock! conn id)))
diff --git a/backend/src/app/rpc/commands/files_temp.clj b/backend/src/app/rpc/commands/files_temp.clj
deleted file mode 100644
index 5446505d0c..0000000000
--- a/backend/src/app/rpc/commands/files_temp.clj
+++ /dev/null
@@ -1,160 +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.rpc.commands.files-temp
- (:require
- [app.common.exceptions :as ex]
- [app.common.features :as cfeat]
- [app.common.files.changes :as cpc]
- [app.common.schema :as sm]
- [app.common.time :as ct]
- [app.common.uuid :as uuid]
- [app.config :as cf]
- [app.db :as db]
- [app.db.sql :as sql]
- [app.features.fdata :as fdata]
- [app.loggers.audit :as audit]
- [app.rpc :as-alias rpc]
- [app.rpc.commands.files :as files]
- [app.rpc.commands.files-create :as files.create]
- [app.rpc.commands.files-update :as-alias files.update]
- [app.rpc.commands.projects :as projects]
- [app.rpc.commands.teams :as teams]
- [app.rpc.doc :as-alias doc]
- [app.rpc.helpers :as rph]
- [app.util.blob :as blob]
- [app.util.pointer-map :as pmap]
- [app.util.services :as sv]
- [clojure.set :as set]))
-
-;; --- MUTATION COMMAND: create-temp-file
-
-(def ^:private schema:create-temp-file
- [:map {:title "create-temp-file"}
- [:name [:string {:max 250}]]
- [:project-id ::sm/uuid]
- [:id {:optional true} ::sm/uuid]
- [:is-shared ::sm/boolean]
- [:features ::cfeat/features]
- [:create-page ::sm/boolean]])
-
-(sv/defmethod ::create-temp-file
- {::doc/added "1.17"
- ::doc/module :files
- ::sm/params schema:create-temp-file
- ::db/transaction true}
- [{:keys [::db/conn] :as cfg} {:keys [::rpc/profile-id project-id] :as params}]
- (projects/check-edition-permissions! conn profile-id project-id)
- (let [team (teams/get-team conn :profile-id profile-id :project-id project-id)
- ;; When we create files, we only need to respect the team
- ;; features, because some features can be enabled
- ;; globally, but the team is still not migrated properly.
- input-features
- (:features params #{})
-
- ;; If the imported project doesn't contain v2 we need to remove it
- team-features
- (cond-> (cfeat/get-team-enabled-features cf/flags team)
- (not (contains? input-features "components/v2"))
- (disj "components/v2"))
-
- ;; We also include all no migration features declared by
- ;; client; that enables the ability to enable a runtime
- ;; feature on frontend and make it permanent on file
- features
- (-> input-features
- (set/intersection cfeat/no-migration-features)
- (set/union team-features))
-
- params
- (-> params
- (assoc :profile-id profile-id)
- (assoc :deleted-at (ct/in-future {:days 1}))
- (assoc :features features))]
-
- (files.create/create-file cfg params)))
-
-;; --- MUTATION COMMAND: update-temp-file
-
-(def ^:private schema:update-temp-file
- [:map {:title "update-temp-file"}
- [:changes [:vector cpc/schema:change]]
- [:revn [::sm/int {:min 0}]]
- [:session-id ::sm/uuid]
- [:id ::sm/uuid]])
-
-(sv/defmethod ::update-temp-file
- {::doc/added "1.17"
- ::doc/module :files
- ::sm/params schema:update-temp-file}
- [cfg {:keys [::rpc/profile-id session-id id revn changes] :as params}]
- (db/tx-run! cfg (fn [{:keys [::db/conn]}]
- (db/insert! conn :file-change
- {:id (uuid/next)
- :session-id session-id
- :profile-id profile-id
- :created-at (ct/now)
- :file-id id
- :revn revn
- :data nil
- :changes (blob/encode changes)})
- (rph/with-meta (rph/wrap nil)
- {::audit/replace-props {:file-id id
- :revn revn}}))))
-
-;; --- MUTATION COMMAND: persist-temp-file
-
-(defn persist-temp-file
- [{:keys [::db/conn] :as cfg} {:keys [id] :as params}]
- (let [file (files/get-file cfg id
- :migrate? false
- :lock-for-update? true)]
-
- (when (nil? (:deleted-at file))
- (ex/raise :type :validation
- :code :cant-persist-already-persisted-file))
-
- (let [changes (->> (db/cursor conn
- (sql/select :file-change {:file-id id}
- {:order-by [[:revn :asc]]})
- {:chunk-size 10})
- (sequence (mapcat (comp blob/decode :changes))))
-
- file (update file :data cpc/process-changes changes)
-
- file (if (contains? (:features file) "fdata/objects-map")
- (fdata/enable-objects-map file)
- file)
-
- file (if (contains? (:features file) "fdata/pointer-map")
- (binding [pmap/*tracked* (pmap/create-tracked)]
- (let [file (fdata/enable-pointer-map file)]
- (fdata/persist-pointers! cfg id)
- file))
- file)]
-
- ;; Delete changes from the changes history
- (db/delete! conn :file-change {:file-id id})
-
- (db/update! conn :file
- {:deleted-at nil
- :revn 1
- :data (blob/encode (:data file))}
- {:id id})
- nil)))
-
-(def ^:private schema:persist-temp-file
- [:map {:title "persist-temp-file"}
- [:id ::sm/uuid]])
-
-(sv/defmethod ::persist-temp-file
- {::doc/added "1.17"
- ::doc/module :files
- ::sm/params schema:persist-temp-file}
- [cfg {:keys [::rpc/profile-id id] :as params}]
- (db/tx-run! cfg (fn [{:keys [::db/conn] :as cfg}]
- (files/check-edition-permissions! conn profile-id id)
- (persist-temp-file cfg params))))
diff --git a/backend/src/app/rpc/commands/files_thumbnails.clj b/backend/src/app/rpc/commands/files_thumbnails.clj
index af5b62e6b6..40f124f307 100644
--- a/backend/src/app/rpc/commands/files_thumbnails.clj
+++ b/backend/src/app/rpc/commands/files_thumbnails.clj
@@ -6,6 +6,7 @@
(ns app.rpc.commands.files-thumbnails
(:require
+ [app.binfile.common :as bfc]
[app.common.data :as d]
[app.common.data.macros :as dm]
[app.common.features :as cfeat]
@@ -202,9 +203,9 @@
:profile-id profile-id
:file-id file-id)
- file (files/get-file cfg file-id
- :preload-pointers? true
- :read-only? true)]
+ file (bfc/get-file cfg file-id
+ :realize? true
+ :read-only? true)]
(-> (cfeat/get-team-enabled-features cf/flags team)
(cfeat/check-file-features! (:features file)))
@@ -339,6 +340,7 @@
data (-> (sto/content path)
(sto/wrap-with-hash hash))
tnow (ct/now)
+
media (sto/put-object! storage
{::sto/content data
::sto/deduplicate? true
diff --git a/backend/src/app/rpc/commands/files_update.clj b/backend/src/app/rpc/commands/files_update.clj
index 95f90e678f..94d1f90096 100644
--- a/backend/src/app/rpc/commands/files_update.clj
+++ b/backend/src/app/rpc/commands/files_update.clj
@@ -19,27 +19,25 @@
[app.common.uuid :as uuid]
[app.config :as cf]
[app.db :as db]
- [app.features.fdata :as feat.fdata]
- [app.features.file-migrations :as feat.fmigr]
+ [app.features.fdata :as fdata]
+ [app.features.file-snapshots :as fsnap]
[app.features.logical-deletion :as ldel]
[app.http.errors :as errors]
[app.loggers.audit :as audit]
[app.loggers.webhooks :as webhooks]
[app.metrics :as mtx]
[app.msgbus :as mbus]
+ [app.redis :as rds]
[app.rpc :as-alias rpc]
[app.rpc.climit :as climit]
[app.rpc.commands.files :as files]
[app.rpc.commands.teams :as teams]
[app.rpc.doc :as-alias doc]
[app.rpc.helpers :as rph]
- [app.storage :as sto]
[app.util.blob :as blob]
[app.util.pointer-map :as pmap]
[app.util.services :as sv]
- [app.worker :as wrk]
- [clojure.set :as set]
- [promesa.exec :as px]))
+ [clojure.set :as set]))
(declare ^:private get-lagged-changes)
(declare ^:private send-notifications!)
@@ -47,6 +45,7 @@
(declare ^:private update-file*)
(declare ^:private process-changes-and-validate)
(declare ^:private take-snapshot?)
+(declare ^:private invalidate-caches!)
;; PUBLIC API; intended to be used outside of this module
(declare update-file!)
@@ -129,76 +128,78 @@
::sm/params schema:update-file
::sm/result schema:update-file-result
::doc/module :files
- ::doc/added "1.17"}
- [{:keys [::mtx/metrics] :as cfg}
+ ::doc/added "1.17"
+ ::db/transaction true}
+ [{:keys [::mtx/metrics ::db/conn] :as cfg}
{:keys [::rpc/profile-id id changes changes-with-metadata] :as params}]
- (db/tx-run! cfg (fn [{:keys [::db/conn] :as cfg}]
- (files/check-edition-permissions! conn profile-id id)
- (db/xact-lock! conn id)
- (let [file (get-file conn id)
- team (teams/get-team conn
- :profile-id profile-id
- :team-id (:team-id file))
+ (files/check-edition-permissions! conn profile-id id)
+ (db/xact-lock! conn id)
- features (-> (cfeat/get-team-enabled-features cf/flags team)
- (cfeat/check-client-features! (:features params))
- (cfeat/check-file-features! (:features file)))
+ (let [file (get-file cfg id)
+ team (teams/get-team conn
+ :profile-id profile-id
+ :team-id (:team-id file))
- changes (if changes-with-metadata
- (->> changes-with-metadata (mapcat :changes) vec)
- (vec changes))
+ features (-> (cfeat/get-team-enabled-features cf/flags team)
+ (cfeat/check-client-features! (:features params))
+ (cfeat/check-file-features! (:features file)))
- params (-> params
- (assoc :profile-id profile-id)
- (assoc :features (set/difference features cfeat/frontend-only-features))
- (assoc :team team)
- (assoc :file file)
- (assoc :changes changes))
+ changes (if changes-with-metadata
+ (->> changes-with-metadata (mapcat :changes) vec)
+ (vec changes))
- cfg (assoc cfg ::timestamp (ct/now))
+ params (-> params
+ (assoc :profile-id profile-id)
+ (assoc :features (set/difference features cfeat/frontend-only-features))
+ (assoc :team team)
+ (assoc :file file)
+ (assoc :changes changes))
- tpoint (ct/tpoint)]
+ cfg (assoc cfg ::timestamp (ct/now))
- (when (not= (:vern params)
- (:vern file))
- (ex/raise :type :validation
- :code :vern-conflict
- :hint "A different version has been restored for the file."
- :context {:incoming-revn (:revn params)
- :stored-revn (:revn file)}))
+ tpoint (ct/tpoint)]
- (when (> (:revn params)
- (:revn file))
- (ex/raise :type :validation
- :code :revn-conflict
- :hint "The incoming revision number is greater that stored version."
- :context {:incoming-revn (:revn params)
- :stored-revn (:revn file)}))
+ (when (not= (:vern params)
+ (:vern file))
+ (ex/raise :type :validation
+ :code :vern-conflict
+ :hint "A different version has been restored for the file."
+ :context {:incoming-revn (:revn params)
+ :stored-revn (:revn file)}))
- ;; When newly computed features does not match exactly with
- ;; the features defined on team row, we update it
- (when-let [features (-> features
- (set/difference (:features team))
- (set/difference cfeat/no-team-inheritable-features)
- (not-empty))]
- (let [features (-> features
- (set/union (:features team))
- (set/difference cfeat/no-team-inheritable-features)
- (into-array))]
- (db/update! conn :team
- {:features features}
- {:id (:id team)}
- {::db/return-keys false})))
+ (when (> (:revn params)
+ (:revn file))
+ (ex/raise :type :validation
+ :code :revn-conflict
+ :hint "The incoming revision number is greater that stored version."
+ :context {:incoming-revn (:revn params)
+ :stored-revn (:revn file)}))
- (mtx/run! metrics {:id :update-file-changes :inc (count changes)})
+ ;; When newly computed features does not match exactly with the
+ ;; features defined on team row, we update it
+ (when-let [features (-> features
+ (set/difference (:features team))
+ (set/difference cfeat/no-team-inheritable-features)
+ (not-empty))]
+ (let [features (-> features
+ (set/union (:features team))
+ (set/difference cfeat/no-team-inheritable-features)
+ (into-array))]
+ (db/update! conn :team
+ {:features features}
+ {:id (:id team)}
+ {::db/return-keys false})))
- (binding [l/*context* (some-> (meta params)
- (get :app.http/request)
- (errors/request->context))]
- (-> (update-file* cfg params)
- (rph/with-defer #(let [elapsed (tpoint)]
- (l/trace :hint "update-file" :time (ct/format-duration elapsed))))))))))
+
+ (mtx/run! metrics {:id :update-file-changes :inc (count changes)})
+
+ (binding [l/*context* (some-> (meta params)
+ (get :app.http/request)
+ (errors/request->context))]
+ (-> (update-file* cfg params)
+ (rph/with-defer #(let [elapsed (tpoint)]
+ (l/trace :hint "update-file" :time (ct/format-duration elapsed))))))))
(defn- update-file*
"Internal function, part of the update-file process, that encapsulates
@@ -208,31 +209,41 @@
Follow the inner implementation to `update-file-data!` function.
Only intended for internal use on this module."
- [{:keys [::db/conn ::wrk/executor ::timestamp] :as cfg}
+ [{:keys [::db/conn ::timestamp] :as cfg}
{:keys [profile-id file team features changes session-id skip-validate] :as params}]
- (let [;; Retrieve the file data
- file (feat.fmigr/resolve-applied-migrations cfg file)
- file (feat.fdata/resolve-file-data cfg file)
- file (assoc file :features
- (-> features
- (set/difference cfeat/frontend-only-features)
- (set/union (:features file))))]
+ (binding [pmap/*tracked* (pmap/create-tracked)
+ pmap/*load-fn* (partial fdata/load-pointer cfg (:id file))]
- ;; We create a new lexycal scope for clearly delimit the result of
- ;; executing this update file operation and all its side effects
- (let [file (px/invoke! executor
- (fn []
- ;; Process the file data on separated thread for avoid to do
- ;; the CPU intensive operation on vthread.
- (binding [cfeat/*current* features
- cfeat/*previous* (:features file)]
- (update-file-data! cfg file
- process-changes-and-validate
- changes skip-validate))))]
+ (let [file (assoc file :features
+ (-> features
+ (set/difference cfeat/frontend-only-features)
+ (set/union (:features file))))
- (feat.fmigr/upsert-migrations! conn file)
- (persist-file! cfg file)
+ ;; We need to preserve the original revn for the response
+ revn
+ (get file :revn)
+
+ file
+ (binding [cfeat/*current* features
+ cfeat/*previous* (:features file)]
+ (update-file-data! cfg file
+ process-changes-and-validate
+ changes skip-validate))
+
+ deleted-at
+ (ct/plus timestamp (ct/duration {:hours 1}))]
+
+ (when-let [file (::snapshot file)]
+ (let [deleted-at (ct/plus timestamp (ldel/get-deletion-delay team))
+ label (str "internal/snapshot/" revn)]
+
+ (fsnap/create! cfg file
+ {:label label
+ :created-by "system"
+ :deleted-at deleted-at
+ :profile-id profile-id
+ :session-id session-id})))
;; Insert change (xlog) with deleted_at in a future data for
;; make them automatically eleggible for GC once they expires
@@ -242,87 +253,71 @@
:profile-id profile-id
:created-at timestamp
:updated-at timestamp
- :deleted-at (if (::snapshot-data file)
- (ct/plus timestamp (ldel/get-deletion-delay team))
- (ct/plus timestamp (ct/duration {:hours 1})))
+ :deleted-at deleted-at
:file-id (:id file)
:revn (:revn file)
:version (:version file)
- :features (:features file)
- :label (::snapshot-label file)
- :data (::snapshot-data file)
+ :features (into-array (:features file))
:changes (blob/encode changes)}
{::db/return-keys false})
+ (persist-file! cfg file)
+
+ (when (contains? cf/flags :redis-cache)
+ (invalidate-caches! cfg file))
+
;; Send asynchronous notifications
- (send-notifications! cfg params file))
+ (send-notifications! cfg params file)
- (when (feat.fdata/offloaded? file)
- (let [storage (sto/resolve cfg ::db/reuse-conn true)]
- (some->> (:data-ref-id file) (sto/touch-object! storage))))
-
- (let [response {:revn (:revn file)
- :lagged (get-lagged-changes conn params)}]
- (vary-meta response assoc ::audit/replace-props
- {:id (:id file)
- :name (:name file)
- :features (:features file)
- :project-id (:project-id file)
- :team-id (:team-id file)}))))
-
-(defn update-file!
- "A public api that allows apply a transformation to a file with all context setup."
- [{:keys [::db/conn] :as cfg} file-id update-fn & args]
- (let [file (get-file cfg file-id)
- file (apply update-file-data! cfg file update-fn args)]
- (feat.fmigr/upsert-migrations! conn file)
- (persist-file! cfg file)))
-
-(def ^:private sql:get-file
- "SELECT f.*, p.team_id
- FROM file AS f
- JOIN project AS p ON (p.id = f.project_id)
- WHERE f.id = ?
- AND (f.deleted_at IS NULL OR
- f.deleted_at > now())
- FOR KEY SHARE")
+ (with-meta {:revn revn :lagged (get-lagged-changes conn params)}
+ {::audit/replace-props
+ {:id (:id file)
+ :name (:name file)
+ :features (:features file)
+ :project-id (:project-id file)
+ :team-id (:team-id file)}}))))
(defn get-file
"Get not-decoded file, only decodes the features set."
- [conn id]
- (let [file (db/exec-one! conn [sql:get-file id])]
- (when-not file
- (ex/raise :type :not-found
- :code :object-not-found
- :hint (format "file with id '%s' does not exists" id)))
- (update file :features db/decode-pgarray #{})))
+ [cfg id]
+ (bfc/get-file cfg id :decode? false :lock-for-share? true))
(defn persist-file!
"Function responsible of persisting already encoded file. Should be
used together with `get-file` and `update-file-data!`.
It also updates the project modified-at attr."
- [{:keys [::db/conn ::timestamp]} file]
+ [{:keys [::db/conn ::timestamp] :as cfg} file]
(let [;; The timestamp can be nil because this function is also
;; intended to be used outside of this module
- modified-at (or timestamp (ct/now))]
+ modified-at
+ (or timestamp (ct/now))
+
+ file
+ (-> file
+ (dissoc ::snapshot)
+ (assoc :modified-at modified-at)
+ (assoc :has-media-trimmed false))]
(db/update! conn :project
{:modified-at modified-at}
{:id (:project-id file)}
{::db/return-keys false})
- (db/update! conn :file
- {:revn (:revn file)
- :data (:data file)
- :version (:version file)
- :features (:features file)
- :data-backend nil
- :data-ref-id nil
- :modified-at modified-at
- :has-media-trimmed false}
- {:id (:id file)}
- {::db/return-keys false})))
+ (bfc/update-file! cfg file)))
+
+(defn- invalidate-caches!
+ [cfg {:keys [id] :as file}]
+ (rds/run! cfg (fn [{:keys [::rds/conn]}]
+ (let [key (str files/file-summary-cache-key-prefix id)]
+ (rds/del conn key)))))
+
+(defn- attach-snapshot
+ "Attach snapshot data to the file. This should be called before the
+ upcoming file operations are applied to the file."
+ [cfg migrated? file]
+ (let [snapshot (if migrated? file (fdata/realize cfg file))]
+ (assoc file ::snapshot snapshot)))
(defn- update-file-data!
"Perform a file data transformation in with all update context setup.
@@ -334,52 +329,35 @@
fdata/pointer-map modified fragments."
[cfg {:keys [id] :as file} update-fn & args]
- (binding [pmap/*tracked* (pmap/create-tracked)
- pmap/*load-fn* (partial feat.fdata/load-pointer cfg id)]
- (let [file (update file :data (fn [data]
- (-> data
- (blob/decode)
- (assoc :id (:id file)))))
- libs (delay (bfc/get-resolved-file-libraries cfg file))
+ (let [file (update file :data (fn [data]
+ (-> data
+ (blob/decode)
+ (assoc :id id))))
+ libs (delay (bfc/get-resolved-file-libraries cfg file))
- ;; For avoid unnecesary overhead of creating multiple pointers
- ;; and handly internally with objects map in their worst
- ;; case (when probably all shapes and all pointers will be
- ;; readed in any case), we just realize/resolve them before
- ;; applying the migration to the file
- file (if (fmg/need-migration? file)
- (-> file
- (update :data feat.fdata/process-pointers deref)
- (update :data feat.fdata/process-objects (partial into {}))
- (fmg/migrate-file libs))
- file)
+ need-migration?
+ (fmg/need-migration? file)
- file (apply update-fn cfg file args)
+ take-snapshot?
+ (take-snapshot? file)
- ;; TODO: reuse operations if file is migrated
- ;; TODO: move encoding to a separated thread
- file (if (take-snapshot? file)
- (let [tpoint (ct/tpoint)
- snapshot (-> (:data file)
- (feat.fdata/process-pointers deref)
- (feat.fdata/process-objects (partial into {}))
- (blob/encode))
- elapsed (tpoint)
- label (str "internal/snapshot/" (:revn file))]
+ ;; For avoid unnecesary overhead of creating multiple
+ ;; pointers and handly internally with objects map in their
+ ;; worst case (when probably all shapes and all pointers
+ ;; will be readed in any case), we just realize/resolve them
+ ;; before applying the migration to the file
+ file
+ (cond-> file
+ ;; need-migration?
+ ;; (->> (fdata/realize cfg))
- (l/trc :hint "take snapshot"
- :file-id (str (:id file))
- :revn (:revn file)
- :label label
- :elapsed (ct/format-duration elapsed))
+ need-migration?
+ (fmg/migrate-file libs)
- (-> file
- (assoc ::snapshot-data snapshot)
- (assoc ::snapshot-label label)))
- file)]
-
- (bfc/encode-file cfg file))))
+ take-snapshot?
+ (->> (attach-snapshot cfg need-migration?)))]
+ (apply update-fn cfg file args)))
(defn- soft-validate-file-schema!
[file]
@@ -468,8 +446,9 @@
(defn- get-lagged-changes
[conn {:keys [id revn] :as params}]
(->> (db/exec! conn [sql:lagged-changes id revn])
- (map files/decode-row)
- (vec)))
+ (filter :changes)
+ (mapv (fn [row]
+ (update row :changes blob/decode)))))
(defn- send-notifications!
[cfg {:keys [team changes session-id] :as params} file]
diff --git a/backend/src/app/rpc/commands/fonts.clj b/backend/src/app/rpc/commands/fonts.clj
index c417c28f1a..535d868f95 100644
--- a/backend/src/app/rpc/commands/fonts.clj
+++ b/backend/src/app/rpc/commands/fonts.clj
@@ -26,9 +26,7 @@
[app.rpc.helpers :as rph]
[app.rpc.quotes :as quotes]
[app.storage :as sto]
- [app.util.services :as sv]
- [app.worker :as-alias wrk]
- [promesa.exec :as px]))
+ [app.util.services :as sv]))
(def valid-weight #{100 200 300 400 500 600 700 800 900 950})
(def valid-style #{"normal" "italic"})
@@ -105,7 +103,7 @@
(create-font-variant cfg (assoc params :profile-id profile-id)))))
(defn create-font-variant
- [{:keys [::sto/storage ::db/conn ::wrk/executor]} {:keys [data] :as params}]
+ [{:keys [::sto/storage ::db/conn]} {:keys [data] :as params}]
(letfn [(generate-missing! [data]
(let [data (media/run {:cmd :generate-fonts :input data})]
(when (and (not (contains? data "font/otf"))
@@ -157,7 +155,7 @@
:otf-file-id (:id otf)
:ttf-file-id (:id ttf)}))]
- (let [data (px/invoke! executor (partial generate-missing! data))
+ (let [data (generate-missing! data)
assets (persist-fonts-files! data)
result (insert-font-variant! assets)]
(vary-meta result assoc ::audit/replace-props (update params :data (comp vec keys))))))
diff --git a/backend/src/app/rpc/commands/ldap.clj b/backend/src/app/rpc/commands/ldap.clj
index 0829987d4d..26524f208f 100644
--- a/backend/src/app/rpc/commands/ldap.clj
+++ b/backend/src/app/rpc/commands/ldap.clj
@@ -38,7 +38,7 @@
::doc/added "1.15"
::doc/module :auth
::sm/params schema:login-with-ldap}
- [{:keys [::setup/props ::ldap/provider] :as cfg} params]
+ [{:keys [::ldap/provider] :as cfg} params]
(when-not provider
(ex/raise :type :restriction
:code :ldap-not-initialized
@@ -60,11 +60,11 @@
;; user comes from team-invitation process; in this case,
;; regenerate token and send back to the user a new invitation
;; token (and mark current session as logged).
- (let [claims (tokens/verify props {:token token :iss :team-invitation})
+ (let [claims (tokens/verify cfg {:token token :iss :team-invitation})
claims (assoc claims
:member-id (:id profile)
:member-email (:email profile))
- token (tokens/generate props claims)]
+ token (tokens/generate cfg claims)]
(-> {:invitation-token token}
(rph/with-transform (session/create-fn cfg (:id profile)))
(rph/with-meta {::audit/props (:props profile)
diff --git a/backend/src/app/rpc/commands/management.clj b/backend/src/app/rpc/commands/management.clj
index ca46a8f824..0908b358d7 100644
--- a/backend/src/app/rpc/commands/management.clj
+++ b/backend/src/app/rpc/commands/management.clj
@@ -28,16 +28,14 @@
[app.setup :as-alias setup]
[app.setup.templates :as tmpl]
[app.storage.tmp :as tmp]
- [app.util.services :as sv]
- [app.worker :as-alias wrk]
- [promesa.exec :as px]))
+ [app.util.services :as sv]))
;; --- COMMAND: Duplicate File
(defn duplicate-file
[{:keys [::db/conn ::bfc/timestamp] :as cfg} {:keys [profile-id file-id name reset-shared-flag] :as params}]
(let [;; We don't touch the original file on duplication
- file (bfc/get-file cfg file-id)
+ file (bfc/get-file cfg file-id :realize? true)
project-id (:project-id file)
file (-> file
(update :id bfc/lookup-index)
@@ -313,15 +311,14 @@
;; Update the modification date of the all affected projects
;; ensuring that the destination project is the most recent one.
- (doseq [project-id (into (list project-id) source)]
-
- ;; NOTE: as this is executed on virtual thread, sleeping does
- ;; not causes major issues, and allows an easy way to set a
- ;; trully different modification date to each file.
- (px/sleep 10)
- (db/update! conn :project
- {:modified-at (ct/now)}
- {:id project-id}))
+ (loop [project-ids (into (list project-id) source)
+ modified-at (ct/now)]
+ (when-let [project-id (first project-ids)]
+ (db/update! conn :project
+ {:modified-at modified-at}
+ {:id project-id})
+ (recur (rest project-ids)
+ (ct/plus modified-at 10))))
nil))
@@ -396,12 +393,7 @@
;; --- COMMAND: Clone Template
(defn clone-template
- [{:keys [::db/pool ::wrk/executor] :as cfg} {:keys [project-id profile-id] :as params} template]
-
- ;; NOTE: the importation process performs some operations
- ;; that are not very friendly with virtual threads, and for
- ;; avoid unexpected blocking of other concurrent operations
- ;; we dispatch that operation to a dedicated executor.
+ [{:keys [::db/pool] :as cfg} {:keys [project-id profile-id] :as params} template]
(let [template (tmp/tempfile-from template
:prefix "penpot.template."
:suffix ""
@@ -419,8 +411,8 @@
(assoc ::bfc/features (cfeat/get-team-enabled-features cf/flags team)))
result (if (= format :binfile-v3)
- (px/invoke! executor (partial bf.v3/import-files! cfg))
- (px/invoke! executor (partial bf.v1/import-files! cfg)))]
+ (bf.v3/import-files! cfg)
+ (bf.v1/import-files! cfg))]
(db/tx-run! cfg
(fn [{:keys [::db/conn] :as cfg}]
diff --git a/backend/src/app/rpc/commands/media.clj b/backend/src/app/rpc/commands/media.clj
index 5fa70e9837..63793742a0 100644
--- a/backend/src/app/rpc/commands/media.clj
+++ b/backend/src/app/rpc/commands/media.clj
@@ -24,10 +24,8 @@
[app.storage :as sto]
[app.storage.tmp :as tmp]
[app.util.services :as sv]
- [app.worker :as-alias wrk]
[cuerdas.core :as str]
- [datoteka.io :as io]
- [promesa.exec :as px]))
+ [datoteka.io :as io]))
(def default-max-file-size
(* 1024 1024 10)) ; 10 MiB
@@ -153,9 +151,9 @@
(assoc ::image (process-main-image info)))))
(defn- create-file-media-object
- [{:keys [::sto/storage ::db/conn ::wrk/executor] :as cfg}
+ [{:keys [::sto/storage ::db/conn] :as cfg}
{:keys [id file-id is-local name content]}]
- (let [result (px/invoke! executor (partial process-image content))
+ (let [result (process-image content)
image (sto/put-object! storage (::image result))
thumb (when-let [params (::thumb result)]
(sto/put-object! storage params))]
diff --git a/backend/src/app/rpc/commands/profile.clj b/backend/src/app/rpc/commands/profile.clj
index 7735c68928..4207db2d22 100644
--- a/backend/src/app/rpc/commands/profile.clj
+++ b/backend/src/app/rpc/commands/profile.clj
@@ -30,16 +30,13 @@
[app.tokens :as tokens]
[app.util.services :as sv]
[app.worker :as wrk]
- [cuerdas.core :as str]
- [promesa.exec :as px]))
+ [cuerdas.core :as str]))
(declare check-profile-existence!)
(declare decode-row)
-(declare derive-password)
(declare filter-props)
(declare get-profile)
(declare strip-private-attrs)
-(declare verify-password)
(def schema:props-notifications
[:map {:title "props-notifications"}
@@ -110,7 +107,9 @@
(defn get-profile
"Get profile by id. Throws not-found exception if no profile found."
[conn id & {:as opts}]
- (-> (db/get-by-id conn :profile id opts)
+ ;; NOTE: We need to set ::db/remove-deleted to false because demo profiles
+ ;; are created with a set deleted-at value
+ (-> (db/get-by-id conn :profile id (assoc opts ::db/remove-deleted false))
(decode-row)))
;; --- MUTATION: Update Profile (own)
@@ -192,7 +191,7 @@
[{:keys [::db/conn] :as cfg} {:keys [profile-id old-password] :as params}]
(let [profile (db/get-by-id conn :profile profile-id ::sql/for-update true)]
(when (and (not= (:password profile) "!")
- (not (:valid (verify-password cfg old-password (:password profile)))))
+ (not (:valid (auth/verify-password old-password (:password profile)))))
(ex/raise :type :validation
:code :old-password-not-match))
profile))
@@ -201,7 +200,7 @@
[{:keys [::db/conn] :as cfg} {:keys [id password] :as profile}]
(when-not (db/read-only? conn)
(db/update! conn :profile
- {:password (derive-password cfg password)}
+ {:password (auth/derive-password password)}
{:id id})
nil))
@@ -303,12 +302,11 @@
:content-type (:mtype thumb)}))
(defn upload-photo
- [{:keys [::sto/storage ::wrk/executor] :as cfg} {:keys [file] :as params}]
+ [{:keys [::sto/storage] :as cfg} {:keys [file] :as params}]
(let [params (-> cfg
(assoc ::climit/id [[:process-image/by-profile (:profile-id params)]
[:process-image/global]])
(assoc ::climit/label "upload-photo")
- (assoc ::climit/executor executor)
(climit/invoke! generate-thumbnail! file))]
(sto/put-object! storage params)))
@@ -349,12 +347,12 @@
(defn- request-email-change!
[{:keys [::db/conn] :as cfg} {:keys [profile email] :as params}]
- (let [token (tokens/generate (::setup/props cfg)
+ (let [token (tokens/generate cfg
{:iss :change-email
:exp (ct/in-future "15m")
:profile-id (:id profile)
:email email})
- ptoken (tokens/generate (::setup/props cfg)
+ ptoken (tokens/generate cfg
{:iss :profile-identity
:profile-id (:id profile)
:exp (ct/in-future {:days 30})})]
@@ -477,13 +475,16 @@
p.fullname AS name,
p.email AS email
FROM team_profile_rel AS tpr1
+ JOIN team as t
+ ON tpr1.team_id = t.id
JOIN team_profile_rel AS tpr2
ON (tpr1.team_id = tpr2.team_id)
JOIN profile AS p
ON (tpr2.profile_id = p.id)
WHERE tpr1.profile_id = ?
AND tpr1.is_owner IS true
- AND tpr2.can_edit IS true")
+ AND tpr2.can_edit IS true
+ AND t.deleted_at IS NULL")
(sv/defmethod ::get-subscription-usage
{::doc/added "2.9"}
@@ -548,15 +549,6 @@
[props]
(into {} (filter (fn [[k _]] (simple-ident? k))) props))
-(defn derive-password
- [{:keys [::wrk/executor]} password]
- (when password
- (px/invoke! executor (partial auth/derive-password password))))
-
-(defn verify-password
- [{:keys [::wrk/executor]} password password-data]
- (px/invoke! executor (partial auth/verify-password password password-data)))
-
(defn decode-row
[{:keys [props] :as row}]
(cond-> row
diff --git a/backend/src/app/rpc/commands/teams.clj b/backend/src/app/rpc/commands/teams.clj
index 18f1f1b5f5..3cd69c5b76 100644
--- a/backend/src/app/rpc/commands/teams.clj
+++ b/backend/src/app/rpc/commands/teams.clj
@@ -37,14 +37,14 @@
;; --- Helpers & Specs
(def ^:private sql:team-permissions
- "select tpr.is_owner,
+ "SELECT tpr.is_owner,
tpr.is_admin,
tpr.can_edit
- from team_profile_rel as tpr
- join team as t on (t.id = tpr.team_id)
- where tpr.profile_id = ?
- and tpr.team_id = ?
- and t.deleted_at is null")
+ FROM team_profile_rel AS tpr
+ JOIN team AS t ON (t.id = tpr.team_id)
+ WHERE tpr.profile_id = ?
+ AND tpr.team_id = ?
+ AND t.deleted_at IS NULL")
(defn get-permissions
[conn profile-id team-id]
@@ -443,13 +443,18 @@
[:team-id ::sm/uuid]])
(def sql:team-invitations
- "select email_to as email, role, (valid_until < now()) as expired
- from team_invitation where team_id = ? order by valid_until desc, created_at desc")
+ "SELECT email_to AS email,
+ role,
+ (valid_until < ?::timestamptz) AS expired
+ FROM team_invitation
+ WHERE team_id = ?
+ ORDER BY valid_until DESC, created_at DESC")
(defn get-team-invitations
[conn team-id]
- (->> (db/exec! conn [sql:team-invitations team-id])
- (mapv #(update % :role keyword))))
+ (let [now (ct/now)]
+ (->> (db/exec! conn [sql:team-invitations now team-id])
+ (mapv #(update % :role keyword)))))
(sv/defmethod ::get-team-invitations
{::doc/added "1.17"
diff --git a/backend/src/app/rpc/commands/teams_invitations.clj b/backend/src/app/rpc/commands/teams_invitations.clj
index 3559a3e7ed..b4bc676acf 100644
--- a/backend/src/app/rpc/commands/teams_invitations.clj
+++ b/backend/src/app/rpc/commands/teams_invitations.clj
@@ -6,6 +6,7 @@
(ns app.rpc.commands.teams-invitations
(:require
+ [app.binfile.common :as bfc]
[app.common.data :as d]
[app.common.data.macros :as dm]
[app.common.exceptions :as ex]
@@ -21,7 +22,6 @@
[app.loggers.audit :as audit]
[app.main :as-alias main]
[app.rpc :as-alias rpc]
- [app.rpc.commands.files :as files]
[app.rpc.commands.profile :as profile]
[app.rpc.commands.teams :as teams]
[app.rpc.doc :as-alias doc]
@@ -43,7 +43,7 @@
(defn- create-invitation-token
[cfg {:keys [profile-id valid-until team-id member-id member-email role]}]
- (tokens/generate (::setup/props cfg)
+ (tokens/generate cfg
{:iss :team-invitation
:exp valid-until
:profile-id profile-id
@@ -54,12 +54,8 @@
(defn- create-profile-identity-token
[cfg profile-id]
-
- (dm/assert!
- "expected valid uuid for profile-id"
- (uuid? profile-id))
-
- (tokens/generate (::setup/props cfg)
+ (assert (uuid? profile-id) "expected valid uuid for profile-id")
+ (tokens/generate cfg
{:iss :profile-identity
:profile-id profile-id
:exp (ct/in-future {:days 30})}))
@@ -224,62 +220,112 @@
(def ^:private xf:map-email (map :email))
(defn- create-team-invitations
- [{:keys [::db/conn] :as cfg} {:keys [profile team role emails] :as params}]
- (let [emails (set emails)
+ "Unified function to handle both create and resend team invitations.
+ Accepts either:
+ - emails (set) + role (single role for all emails)
+ - invitations (vector of {:email :role} maps)"
+ [{:keys [::db/conn] :as cfg} {:keys [profile team role emails invitations] :as params}]
+ (let [;; Normalize input to a consistent format: [{:email :role}]
+ invitation-data (cond
+ ;; Case 1: emails + single role (create invitations style)
+ (and emails role)
+ (map (fn [email] {:email email :role role}) emails)
- join-requests (->> (get-valid-access-request-profiles conn (:id team))
- (d/index-by :email))
+ ;; Case 2: invitations with individual roles (resend invitations style)
+ (some? invitations)
+ invitations
- team-members (into #{} xf:map-email
- (teams/get-team-members conn (:id team)))
+ :else
+ (throw (ex-info "Invalid parameters: must provide either emails+role or invitations" {})))
- invitations (into #{}
- (comp
- ;; We don't re-send inviation to
- ;; already existing members
- (remove team-members)
+ invitation-emails (into #{} (map :email) invitation-data)
+
+ join-requests (->> (get-valid-access-request-profiles conn (:id team))
+ (d/index-by :email))
+
+ team-members (into #{} xf:map-email
+ (teams/get-team-members conn (:id team)))
+
+ invitations (into #{}
+ (comp
+ ;; We don't re-send invitations to
+ ;; already existing members
+ (remove #(contains? team-members (:email %)))
;; We don't send invitations to
;; join-requested members
- (remove join-requests)
- (map (fn [email] (assoc params :email email)))
- (keep (partial create-invitation cfg)))
- emails)]
+ (remove #(contains? join-requests (:email %)))
+ (map (fn [{:keys [email role]}]
+ (create-invitation cfg
+ (-> params
+ (assoc :email email)
+ (assoc :role role)))))
+ (remove nil?))
+ invitation-data)]
;; For requested invitations, do not send invitation emails, add
;; the user directly to the team
(->> join-requests
- (filter #(contains? emails (key %)))
- (map val)
- (run! (partial add-member-to-team conn profile team role)))
+ (filter #(contains? invitation-emails (key %)))
+ (map (fn [[email member]]
+ (let [role (:role (first (filter #(= (:email %) email) invitation-data)))]
+ (add-member-to-team conn profile team role member))))
+ (doall))
invitations))
(def ^:private schema:create-team-invitations
- [:map {:title "create-team-invitations"}
- [:team-id ::sm/uuid]
- [:role types.team/schema:role]
- [:emails [::sm/set ::sm/email]]])
+ [:and
+ [:map {:title "create-team-invitations"}
+ [:team-id ::sm/uuid]
+ ;; Support both formats:
+ ;; 1. emails (set) + role (single role for all)
+ ;; 2. invitations (vector of {:email :role} maps)
+ [:emails {:optional true} [::sm/set ::sm/email]]
+ [:role {:optional true} types.team/schema:role]
+ [:invitations {:optional true} [:vector [:map
+ [:email ::sm/email]
+ [:role types.team/schema:role]]]]]
+
+ ;; Ensure exactly one format is provided
+ [:fn (fn [params]
+ (let [has-emails-role (and (contains? params :emails)
+ (contains? params :role))
+ has-invitations (contains? params :invitations)]
+ (and (or has-emails-role has-invitations)
+ (not (and has-emails-role has-invitations)))))]])
(def ^:private max-invitations-by-request-threshold
"The number of invitations can be sent in a single rpc request"
25)
(sv/defmethod ::create-team-invitations
- "A rpc call that allow to send a single or multiple invitations to
- join the team."
+ "A rpc call that allows to send single or multiple invitations to join the team.
+
+ Supports two parameter formats:
+ 1. emails (set) + role (single role for all emails)
+ 2. invitations (vector of {:email :role} maps for individual roles)"
{::doc/added "1.17"
::doc/module :teams
::sm/params schema:create-team-invitations}
- [cfg {:keys [::rpc/profile-id team-id emails] :as params}]
+ [cfg {:keys [::rpc/profile-id team-id role emails] :as params}]
(let [perms (teams/get-permissions cfg profile-id team-id)
profile (db/get-by-id cfg :profile profile-id)
- emails (into #{} (map profile/clean-email) emails)]
+ ;; Determine which format is being used
+ using-emails-format? (and emails role)
+ ;; Handle both parameter formats
+ emails (if using-emails-format?
+ (into #{} (map profile/clean-email) emails)
+ #{})
+ ;; Calculate total invitation count for both formats
+ invitation-count (if using-emails-format?
+ (count emails)
+ (count (:invitations params)))]
(when-not (:is-admin perms)
(ex/raise :type :validation
:code :insufficient-permissions))
- (when (> (count emails) max-invitations-by-request-threshold)
+ (when (> invitation-count max-invitations-by-request-threshold)
(ex/raise :type :validation
:code :max-invitations-by-request
:hint "the maximum of invitation on single request is reached"
@@ -288,7 +334,7 @@
(-> cfg
(assoc ::quotes/profile-id profile-id)
(assoc ::quotes/team-id team-id)
- (assoc ::quotes/incr (count emails))
+ (assoc ::quotes/incr invitation-count)
(quotes/check! {::quotes/id ::quotes/invitations-per-team}
{::quotes/id ::quotes/profiles-per-team}))
@@ -304,7 +350,12 @@
(-> params
(assoc :profile profile)
(assoc :team team)
- (assoc :emails emails)))]
+ ;; Pass parameters in the correct format for the unified function
+ (cond-> using-emails-format?
+ ;; If using emails+role format, ensure both are present
+ (assoc :emails emails :role role)
+ ;; If using invitations format, the :invitations key is already in params
+ (not using-emails-format?) identity)))]
(with-meta {:total (count invitations)
:invitations invitations}
@@ -467,7 +518,7 @@
(defn- check-existing-team-access-request
"Checks if an existing team access request is still valid"
- [conn team-id profile-id]
+ [{:keys [::db/conn]} team-id profile-id]
(when-let [request (db/get* conn :team-access-request
{:team-id team-id
:requester-id profile-id})]
@@ -485,8 +536,8 @@
(defn- upsert-team-access-request
"Create or update team access request for provided team and profile-id"
- [conn team-id requester-id]
- (check-existing-team-access-request conn team-id requester-id)
+ [{:keys [::db/conn] :as cfg} team-id requester-id]
+ (check-existing-team-access-request cfg team-id requester-id)
(let [valid-until (ct/in-future {:hours 24})
auto-join-until (ct/in-future {:days 7})
request-id (uuid/next)]
@@ -499,7 +550,7 @@
"A specific method for obtain a file with name and page-id used for
team request access procediment"
[cfg file-id]
- (let [file (files/get-file cfg file-id :migrate? false)]
+ (let [file (bfc/get-file cfg file-id :migrate? false)]
(-> file
(dissoc :data)
(dissoc :deleted-at)
@@ -548,7 +599,7 @@
(teams/check-email-bounce conn (:email team-owner) false)
(teams/check-email-spam conn (:email team-owner) true)
- (let [request (upsert-team-access-request conn team-id profile-id)
+ (let [request (upsert-team-access-request cfg team-id profile-id)
factory (cond
(and (some? file) (:is-default team) is-viewer)
eml/request-file-access-yourpenpot-view
diff --git a/backend/src/app/rpc/commands/verify_token.clj b/backend/src/app/rpc/commands/verify_token.clj
index ff59a5eead..b650e6a8b9 100644
--- a/backend/src/app/rpc/commands/verify_token.clj
+++ b/backend/src/app/rpc/commands/verify_token.clj
@@ -38,7 +38,7 @@
::doc/module :auth
::sm/params schema:verify-token}
[cfg {:keys [token] :as params}]
- (let [claims (tokens/verify (::setup/props cfg) {:token token})]
+ (let [claims (tokens/verify cfg {:token token})]
(db/tx-run! cfg process-token params claims)))
(defmethod process-token :change-email
diff --git a/backend/src/app/rpc/commands/viewer.clj b/backend/src/app/rpc/commands/viewer.clj
index db8cb7a80f..a1025b6dbf 100644
--- a/backend/src/app/rpc/commands/viewer.clj
+++ b/backend/src/app/rpc/commands/viewer.clj
@@ -51,7 +51,7 @@
(defn- get-view-only-bundle
[{:keys [::db/conn] :as cfg} {:keys [profile-id file-id ::perms] :as params}]
- (let [file (files/get-file cfg file-id)
+ (let [file (bfc/get-file cfg file-id)
project (db/get conn :project
{:id (:project-id file)}
@@ -81,7 +81,7 @@
libs (->> (bfc/get-file-libraries conn file-id)
(mapv (fn [{:keys [id] :as lib}]
- (merge lib (files/get-file cfg id)))))
+ (merge lib (bfc/get-file cfg id)))))
links (->> (db/query conn :share-link {:file-id file-id})
(mapv (fn [row]
diff --git a/backend/src/app/rpc/rlimit.clj b/backend/src/app/rpc/rlimit.clj
index bb2ccededa..d181b843fe 100644
--- a/backend/src/app/rpc/rlimit.clj
+++ b/backend/src/app/rpc/rlimit.clj
@@ -66,13 +66,6 @@
[integrant.core :as ig]
[promesa.exec :as px]))
-(def ^:private default-timeout
- (ct/duration 400))
-
-(def ^:private default-options
- {:codec rds/string-codec
- :timeout default-timeout})
-
(def ^:private bucket-rate-limit-script
{::rscript/name ::bucket-rate-limit
::rscript/path "app/rpc/rlimit/bucket.lua"})
@@ -177,11 +170,11 @@
:hint (str/ffmt "looks like '%' does not have a valid format" opts))))
(defmethod process-limit :bucket
- [redis user-id now {:keys [::key ::params ::service ::capacity ::interval ::rate] :as limit}]
+ [rconn user-id now {:keys [::key ::params ::service ::capacity ::interval ::rate] :as limit}]
(let [script (-> bucket-rate-limit-script
(assoc ::rscript/keys [(str key "." service "." user-id)])
(assoc ::rscript/vals (conj params (->seconds now))))
- result (rds/eval redis script)
+ result (rds/eval rconn script)
allowed? (boolean (nth result 0))
remaining (nth result 1)
reset (* (/ (inst-ms interval) rate)
@@ -199,13 +192,13 @@
(assoc ::lresult/remaining remaining))))
(defmethod process-limit :window
- [redis user-id now {:keys [::nreq ::unit ::key ::service] :as limit}]
+ [rconn user-id now {:keys [::nreq ::unit ::key ::service] :as limit}]
(let [ts (ct/truncate now unit)
ttl (ct/diff now (ct/plus ts {unit 1}))
script (-> window-rate-limit-script
(assoc ::rscript/keys [(str key "." service "." user-id "." (ct/format-inst ts))])
(assoc ::rscript/vals [nreq (->seconds ttl)]))
- result (rds/eval redis script)
+ result (rds/eval rconn script)
allowed? (boolean (nth result 0))
remaining (nth result 1)]
(l/trace :hint "limit processed"
@@ -220,9 +213,9 @@
(assoc ::lresult/remaining remaining)
(assoc ::lresult/reset (ct/plus ts {unit 1})))))
-(defn- process-limits!
- [redis user-id limits now]
- (let [results (into [] (map (partial process-limit redis user-id now)) limits)
+(defn- process-limits
+ [rconn user-id limits now]
+ (let [results (into [] (map (partial process-limit rconn user-id now)) limits)
remaining (->> results
(d/index-by ::name ::lresult/remaining)
(uri/map->query-string))
@@ -259,34 +252,25 @@
(some-> request inet/parse-request)
uuid/zero)))
-(defn process-request!
- [{:keys [::rpc/rlimit ::rds/redis ::skey ::sname] :as cfg} params]
- (when-let [limits (get-limits rlimit skey sname)]
- (let [redis (rds/get-or-connect redis ::rpc/rlimit default-options)
- uid (get-uid params)
- ;; FIXME: why not clasic try/catch?
- result (ex/try! (process-limits! redis uid limits (ct/now)))]
-
- (l/trc :hint "process-limits"
- :service sname
- :remaining (::remaingin result)
- :reset (::reset result))
-
- (cond
- (ex/exception? result)
- (do
- (l/error :hint "error on processing rate-limit" :cause result)
- {::enabled false})
-
- (contains? cf/flags :soft-rpc-rlimit)
+(defn- process-request'
+ [{:keys [::rds/conn] :as cfg} limits params]
+ (try
+ (let [uid (get-uid params)
+ result (process-limits conn uid limits (ct/now))]
+ (if (contains? cf/flags :soft-rpc-rlimit)
{::enabled false}
+ result))
+ (catch Throwable cause
+ (l/error :hint "error on processing rate-limit" :cause cause)
+ {::enabled false})))
- :else
- result))))
+(defn- process-request
+ [{:keys [::rpc/rlimit ::skey ::sname] :as cfg} params]
+ (when-let [limits (get-limits rlimit skey sname)]
+ (rds/run! cfg process-request' limits params)))
(defn wrap
- [{:keys [::rpc/rlimit ::rds/redis] :as cfg} f mdata]
- (assert (rds/redis? redis) "expected a valid redis instance")
+ [{:keys [::rpc/rlimit] :as cfg} f mdata]
(assert (or (nil? rlimit) (valid-rlimit-instance? rlimit)) "expected a valid rlimit instance")
(if rlimit
@@ -298,7 +282,7 @@
(fn [hcfg params]
(if @enabled
- (let [result (process-request! cfg params)]
+ (let [result (process-request cfg params)]
(if (::enabled result)
(if (::allowed result)
(-> (f hcfg params)
@@ -399,7 +383,7 @@
(when-let [path (cf/get :rpc-rlimit-config)]
(and (fs/exists? path) (fs/regular-file? path) path)))
-(defmethod ig/assert-key :app.rpc/rlimit
+(defmethod ig/assert-key ::rpc/rlimit
[_ {:keys [::wrk/executor]}]
(assert (sm/valid? ::wrk/executor executor) "expect valid executor"))
diff --git a/backend/src/app/setup/clock.clj b/backend/src/app/setup/clock.clj
new file mode 100644
index 0000000000..09ab991856
--- /dev/null
+++ b/backend/src/app/setup/clock.clj
@@ -0,0 +1,48 @@
+;; 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.setup.clock
+ "A service/module that manages the system clock and allows runtime
+ modification of time offset (useful for testing and time adjustments)."
+ (:require
+ [app.common.logging :as l]
+ [app.common.time :as ct]
+ [app.setup :as-alias setup]
+ [integrant.core :as ig])
+ (:import
+ java.time.Clock
+ java.time.Duration))
+
+(defonce current
+ (atom {:clock (Clock/systemDefaultZone)
+ :offset nil}))
+
+(defmethod ig/init-key ::setup/clock
+ [_ _]
+ (add-watch current ::common
+ (fn [_ _ _ {:keys [clock offset]}]
+ (let [clock (if (ct/duration? offset)
+ (Clock/offset ^Clock clock
+ ^Duration offset)
+ clock)]
+ (l/wrn :hint "altering clock" :clock (str clock))
+ (alter-var-root #'ct/*clock* (constantly clock))))))
+
+
+(defmethod ig/halt-key! ::setup/clock
+ [_ _]
+ (remove-watch current ::common))
+
+(defn set-offset!
+ [duration]
+ (swap! current assoc :offset (some-> duration ct/duration)))
+
+(defn set-clock!
+ ([]
+ (swap! current assoc :clock (Clock/systemDefaultZone)))
+ ([clock]
+ (when (instance? Clock clock)
+ (swap! current assoc :clock clock))))
diff --git a/backend/src/app/srepl/cli.clj b/backend/src/app/srepl/cli.clj
index 22139f5631..4df356752d 100644
--- a/backend/src/app/srepl/cli.clj
+++ b/backend/src/app/srepl/cli.clj
@@ -7,7 +7,7 @@
(ns app.srepl.cli
"PREPL API for external usage (CLI or ADMIN)"
(:require
- [app.auth :as auth]
+ [app.auth :refer [derive-password]]
[app.common.exceptions :as ex]
[app.common.schema :as sm]
[app.common.schema.generators :as sg]
@@ -54,7 +54,7 @@
(some-> (get-current-system)
(db/tx-run!
(fn [{:keys [::db/conn] :as system}]
- (let [password (cmd.profile/derive-password system password)
+ (let [password (derive-password password)
params {:id (uuid/next)
:email email
:fullname fullname
@@ -74,7 +74,7 @@
(assoc :fullname fullname)
(some? password)
- (assoc :password (auth/derive-password password))
+ (assoc :password (derive-password password))
(some? is-active)
(assoc :is-active is-active))]
@@ -124,13 +124,12 @@
(defmethod exec-command "derive-password"
[{:keys [password]}]
- (auth/derive-password password))
+ (derive-password password))
(defmethod exec-command "authenticate"
[{:keys [token]}]
(when-let [system (get-current-system)]
- (let [props (get system ::setup/props)]
- (tokens/verify props {:token token :iss "authentication"}))))
+ (tokens/verify system {:token token :iss "authentication"})))
(def ^:private schema:get-customer
[:map [:id ::sm/uuid]])
diff --git a/backend/src/app/srepl/fixes.clj b/backend/src/app/srepl/fixes.clj
deleted file mode 100644
index 18d849603b..0000000000
--- a/backend/src/app/srepl/fixes.clj
+++ /dev/null
@@ -1,278 +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.srepl.fixes
- "A misc of fix functions"
- (:refer-clojure :exclude [parse-uuid])
- (:require
- [app.binfile.common :as bfc]
- [app.common.data :as d]
- [app.common.data.macros :as dm]
- [app.common.files.changes :as cpc]
- [app.common.files.helpers :as cfh]
- [app.common.files.repair :as cfr]
- [app.common.files.validate :as cfv]
- [app.common.logging :as l]
- [app.common.types.component :as ctk]
- [app.common.types.container :as ctn]
- [app.common.types.file :as ctf]
- [app.common.uuid :as uuid]
- [app.db :as db]
- [app.features.fdata :as feat.fdata]
- [app.srepl.helpers :as h]))
-
-(defn disable-fdata-features
- [{:keys [id features] :as file} _]
- (when (or (contains? features "fdata/pointer-map")
- (contains? features "fdata/objects-map"))
- (l/warn :hint "disable fdata features" :file-id (str id))
- (-> file
- (update :data feat.fdata/process-pointers deref)
- (update :data feat.fdata/process-objects (partial into {}))
- (update :features disj "fdata/pointer-map" "fdata/objects-map"))))
-
-(def sql:get-fdata-files
- "SELECT id FROM file
- WHERE deleted_at is NULL
- AND (features @> '{fdata/pointer-map}' OR
- features @> '{fdata/objects-map}')
- ORDER BY created_at DESC")
-
-(defn find-fdata-pointers
- [{:keys [id features data] :as file} _]
- (when (contains? features "fdata/pointer-map")
- (let [pointers (feat.fdata/get-used-pointer-ids data)]
- (l/warn :hint "found pointers" :file-id (str id) :pointers pointers)
- nil)))
-
-(defn repair-file-media
- "A helper intended to be used with `srepl.main/process-files!` that
- fixes all not propertly referenced file-media-object for a file"
- [{:keys [id data] :as file} & _]
- (let [conn (db/get-connection h/*system*)
- used (cfh/collect-used-media data)
- ids (db/create-array conn "uuid" used)
- sql "SELECT * FROM file_media_object WHERE id = ANY(?)"
- rows (db/exec! conn [sql ids])
- index (reduce (fn [index media]
- (if (not= (:file-id media) id)
- (let [media-id (uuid/next)]
- (l/wrn :hint "found not referenced media"
- :file-id (str id)
- :media-id (str (:id media)))
-
- (db/insert! conn :file-media-object
- (-> media
- (assoc :file-id id)
- (assoc :id media-id)))
- (assoc index (:id media) media-id))
- index))
- {}
- rows)]
-
- (when (seq index)
- (binding [bfc/*state* (atom {:index index})]
- (update file :data (fn [fdata]
- (-> fdata
- (update :pages-index #'bfc/relink-shapes)
- (update :components #'bfc/relink-shapes)
- (update :media #'bfc/relink-media)
- (d/without-nils))))))))
-
-
-(defn repair-file
- "Internal helper for validate and repair the file. The operation is
- applied multiple times untile file is fixed or max iteration counter
- is reached (default 10)"
- [file libs & {:keys [max-iterations] :or {max-iterations 10}}]
-
- (let [validate-and-repair
- (fn [file libs iteration]
- (when-let [errors (not-empty (cfv/validate-file file libs))]
- (l/trc :hint "repairing file"
- :file-id (str (:id file))
- :iteration iteration
- :errors (count errors))
- (let [changes (cfr/repair-file file libs errors)]
- (-> file
- (update :revn inc)
- (update :data cpc/process-changes changes)))))
-
- process-file
- (fn [file libs]
- (loop [file file
- iteration 0]
- (if (< iteration max-iterations)
- (if-let [file (validate-and-repair file libs iteration)]
- (recur file (inc iteration))
- file)
- (do
- (l/wrn :hint "max retry num reached on repairing file"
- :file-id (str (:id file))
- :iteration iteration)
- file))))
-
- file'
- (process-file file libs)]
-
- (when (not= (:revn file) (:revn file'))
- (l/trc :hint "file repaired" :file-id (str (:id file))))
-
- file'))
-
-(defn fix-touched-shapes-group
- [file _]
- ;; Remove :shapes-group from the touched elements
- (letfn [(fix-fdata [data]
- (-> data
- (update :pages-index update-vals fix-container)))
-
- (fix-container [container]
- (d/update-when container :objects update-vals fix-shape))
-
- (fix-shape [shape]
- (d/update-when shape :touched
- (fn [touched]
- (disj touched :shapes-group))))]
- file (-> file
- (update :data fix-fdata))))
-
-(defn add-swap-slots
- [file libs _opts]
- ;; Detect swapped copies and try to generate a valid swap-slot.
- (letfn [(process-fdata [data]
- ;; Walk through all containers in the file, both pages and deleted components.
- (reduce process-container data (ctf/object-containers-seq data)))
-
- (process-container [data container]
- ;; Walk through all shapes in depth-first tree order.
- (l/dbg :hint "Processing container" :type (:type container) :name (:name container))
- (let [root-shape (ctn/get-container-root container)]
- (ctf/update-container data
- container
- #(reduce process-shape % (ctn/get-direct-children container root-shape)))))
-
- (process-shape [container shape]
- ;; Look for head copies in the first level (either component roots or inside main components).
- ;; Even if they have been swapped, we don't add slot to them because there is no way to know
- ;; the original shape. Only children.
- (if (and (ctk/instance-head? shape)
- (ctk/in-component-copy? shape)
- (nil? (ctk/get-swap-slot shape)))
- (process-copy-head container shape)
- (reduce process-shape container (ctn/get-direct-children container shape))))
-
- (process-copy-head [container head-shape]
- ;; Process recursively all children, comparing each one with the corresponding child in the main
- ;; component, looking by position. If the shape-ref does not point to the found child, then it has
- ;; been swapped and need to set up a slot.
- (l/trc :hint "Processing copy-head" :id (:id head-shape) :name (:name head-shape))
- (let [component-shape (ctf/find-ref-shape file container libs head-shape :include-deleted? true :with-context? true)
- component-container (:container (meta component-shape))]
- (loop [container container
- children (map #(ctn/get-shape container %) (:shapes head-shape))
- component-children (map #(ctn/get-shape component-container %) (:shapes component-shape))]
- (let [child (first children)
- component-child (first component-children)]
- (if (or (nil? child) (nil? component-child))
- container
- (let [container (if (and (not (ctk/is-main-of? component-child child))
- (nil? (ctk/get-swap-slot child))
- (ctk/instance-head? child))
- (let [slot (guess-swap-slot component-child component-container)]
- (l/dbg :hint "child" :id (:id child) :name (:name child) :slot slot)
- (ctn/update-shape container (:id child) #(ctk/set-swap-slot % slot)))
- container)]
- (recur (process-copy-head container child)
- (rest children)
- (rest component-children))))))))
-
- (guess-swap-slot [shape container]
- ;; To guess the slot, we must follow the chain until we find the definitive main. But
- ;; we cannot navigate by shape-ref, because main shapes may also have been swapped. So
- ;; chain by position, too.
- (if-let [slot (ctk/get-swap-slot shape)]
- slot
- (if-not (ctk/in-component-copy? shape)
- (:id shape)
- (let [head-copy (ctn/get-component-shape (:objects container) shape)]
- (if (= (:id head-copy) (:id shape))
- (:id shape)
- (let [head-main (ctf/find-ref-shape file
- container
- libs
- head-copy
- :include-deleted? true
- :with-context? true)
- container-main (:container (meta head-main))
- shape-main (find-match-by-position shape
- head-copy
- container
- head-main
- container-main)]
- (guess-swap-slot shape-main container-main)))))))
-
- (find-match-by-position [shape-copy head-copy container-copy head-main container-main]
- ;; Find the shape in the main that has the same position under its parent than
- ;; the copy under its one. To get the parent we must process recursively until
- ;; the component head, because mains may also have been swapped.
- (let [parent-copy (ctn/get-shape container-copy (:parent-id shape-copy))
- parent-main (if (= (:id parent-copy) (:id head-copy))
- head-main
- (find-match-by-position parent-copy
- head-copy
- container-copy
- head-main
- container-main))
- index (cfh/get-position-on-parent (:objects container-copy)
- (:id shape-copy))
- shape-main-id (dm/get-in parent-main [:shapes index])]
- (ctn/get-shape container-main shape-main-id)))]
-
- file (-> file
- (update :data process-fdata))))
-
-
-
-(defn fix-find-duplicated-slots
- [file _]
- ;; Find the shapes whose children have duplicated slots
- (let [check-duplicate-swap-slot
- (fn [shape page]
- (let [shapes (map #(get (:objects page) %) (:shapes shape))
- slots (->> (map #(ctk/get-swap-slot %) shapes)
- (remove nil?))
- counts (frequencies slots)]
- #_(when (some (fn [[_ count]] (> count 1)) counts)
- (l/trc :info "This shape has children with the same swap slot" :id (:id shape) :file-id (str (:id file))))
- (some (fn [[_ count]] (> count 1)) counts)))
-
- count-slots-shape
- (fn [page shape]
- (if (ctk/instance-root? shape)
- (check-duplicate-swap-slot shape page)
- false))
-
- count-slots-page
- (fn [page]
- (->> (:objects page)
- (vals)
- (mapv #(count-slots-shape page %))
- (filter true?)
- count))
-
- count-slots-data
- (fn [data]
- (->> (:pages-index data)
- (vals)
- (mapv count-slots-page)
- (reduce +)))
-
- num-missing-slots (count-slots-data (:data file))]
-
- (when (pos? num-missing-slots)
- (l/trc :info (str "Shapes with children with the same swap slot: " num-missing-slots) :file-id (str (:id file))))
- file))
diff --git a/backend/src/app/srepl/fixes/lost_colors.clj b/backend/src/app/srepl/fixes/lost_colors.clj
deleted file mode 100644
index d1aea9a1d1..0000000000
--- a/backend/src/app/srepl/fixes/lost_colors.clj
+++ /dev/null
@@ -1,88 +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.srepl.fixes.lost-colors
- "A collection of adhoc fixes scripts."
- (:require
- [app.binfile.common :as bfc]
- [app.common.logging :as l]
- [app.common.types.color :as types.color]
- [app.db :as db]
- [app.srepl.helpers :as h]))
-
-(def sql:get-affected-files
- "SELECT fm.file_id AS id FROM file_migration AS fm WHERE fm.name = '0008-fix-library-colors-v2'")
-
-(def sql:get-matching-snapshot
- "SELECT * FROM file_change
- WHERE file_id = ?
- AND created_at <= ?
- AND label IS NOT NULL
- AND data IS NOT NULL
- ORDER BY created_at DESC
- LIMIT 2")
-
-(defn get-affected-migration
- [conn file-id]
- (db/get* conn :file-migration
- {:name "0008-fix-library-colors-v2"
- :file-id file-id}))
-
-(defn get-last-valid-snapshot
- [conn migration]
- (let [[snapshot] (db/exec! conn [sql:get-matching-snapshot
- (:file-id migration)
- (:created-at migration)])]
- (when snapshot
- (let [snapshot (assoc snapshot :id (:file-id snapshot))]
- (bfc/decode-file h/*system* snapshot)))))
-
-(defn restore-color
- [{:keys [data] :as snapshot} color]
- (when-let [scolor (get-in data [:colors (:id color)])]
- (-> (select-keys scolor types.color/library-color-attrs)
- (types.color/check-library-color))))
-
-(defn restore-missing-colors
- [{:keys [id] :as file} & _opts]
- (l/inf :hint "process file" :file-id (str id) :name (:name file) :has-colors (-> file :data :colors not-empty boolean))
- (if-let [colors (-> file :data :colors not-empty)]
- (let [migration (get-affected-migration h/*system* id)]
- (if-let [snapshot (get-last-valid-snapshot h/*system* migration)]
- (do
- (l/inf :hint "using snapshot" :snapshot (:label snapshot))
- (let [colors (reduce-kv (fn [colors color-id color]
- (if-let [result (restore-color snapshot color)]
- (do
- (l/inf :hint "restored color" :file-id (str id) :color-id (str color-id))
- (assoc colors color-id result))
- (do
- (l/wrn :hint "ignoring color" :file-id (str id) :color (pr-str color))
- colors)))
- colors
- colors)
- file (-> file
- (update :data assoc :colors colors)
- (update :migrations disj "0008-fix-library-colors-v2"))]
-
- (db/delete! h/*system* :file-migration
- {:name "0008-fix-library-colors-v2"
- :file-id (:id file)})
- file))
-
- (do
- (db/delete! h/*system* :file-migration
- {:name "0008-fix-library-colors-v2"
- :file-id (:id file)})
- nil)))
-
- (do
- (db/delete! h/*system* :file-migration
- {:name "0008-fix-library-colors-v2"
- :file-id (:id file)})
- nil)))
-
-
diff --git a/backend/src/app/srepl/helpers.clj b/backend/src/app/srepl/helpers.clj
index cb1d54e2fa..3e870e2d61 100644
--- a/backend/src/app/srepl/helpers.clj
+++ b/backend/src/app/srepl/helpers.clj
@@ -14,9 +14,8 @@
[app.common.files.validate :as cfv]
[app.common.time :as ct]
[app.db :as db]
- [app.main :as main]
- [app.rpc.commands.files :as files]
- [app.rpc.commands.files-snapshot :as fsnap]))
+ [app.features.file-snapshots :as fsnap]
+ [app.main :as main]))
(def ^:dynamic *system* nil)
@@ -48,7 +47,7 @@
([system id]
(db/run! system
(fn [system]
- (files/get-file system id :migrate? false)))))
+ (bfc/get-file system id :decode? false)))))
(defn update-team!
[system {:keys [id] :as team}]
@@ -118,10 +117,10 @@
(let [conn (db/get-connection system)]
(->> (get-and-lock-team-files conn team-id)
(reduce (fn [result file-id]
- (let [file (fsnap/get-file-snapshots system file-id)]
- (fsnap/create-file-snapshot! system file
- {:label label
- :created-by :admin})
+ (let [file (bfc/get-file system file-id :realize? true :lock-for-update? true)]
+ (fsnap/create! system file
+ {:label label
+ :created-by "admin"})
(inc result)))
0))))
@@ -132,21 +131,34 @@
(into #{}))
snap (search-file-snapshots conn ids label)
-
ids' (into #{} (map :file-id) snap)]
(when (not= ids ids')
(throw (RuntimeException. "no uniform snapshot available")))
(reduce (fn [result {:keys [file-id id]}]
- (fsnap/restore-file-snapshot! system file-id id)
+ (fsnap/restore! system file-id id)
(inc result))
0
snap)))
+(defn mark-migrated!
+ "A helper that inserts an entry in the file migration table for make
+ file migrated for the specified migration label."
+ [system file-id label]
+ (db/insert! system :file-migration
+ {:file-id file-id
+ :name label}
+ {::db/return-keys false}))
+
(defn process-file!
- [system file-id update-fn & {:keys [label validate? with-libraries?] :or {validate? true} :as opts}]
- (let [file (bfc/get-file system file-id ::db/for-update true)
+ [system file-id update-fn
+ & {:keys [::snapshot-label ::validate? ::with-libraries?]
+ :or {validate? true} :as opts}]
+ (let [file (bfc/get-file system file-id
+ :lock-for-update? true
+ :realize? true)
+
libs (when with-libraries?
(bfc/get-resolved-file-libraries system file))
@@ -162,12 +174,12 @@
(when validate?
(cfv/validate-file-schema! file'))
- (when (string? label)
- (fsnap/create-file-snapshot! system file
- {:label label
- :deleted-at (ct/in-future {:days 30})
- :created-by :admin}))
+ (when (string? snapshot-label)
+ (fsnap/create! system file
+ {:label snapshot-label
+ :deleted-at (ct/in-future {:days 30})
+ :created-by "admin"}))
(let [file' (update file' :revn inc)]
- (bfc/update-file! system file')
+ (bfc/update-file! system file' opts)
true))))
diff --git a/backend/src/app/srepl/main.clj b/backend/src/app/srepl/main.clj
index 69d6008021..f2286013aa 100644
--- a/backend/src/app/srepl/main.clj
+++ b/backend/src/app/srepl/main.clj
@@ -5,7 +5,6 @@
;; Copyright (c) KALEIDOS INC
(ns app.srepl.main
- "A collection of adhoc fixes scripts."
#_:clj-kondo/ignore
(:require
[app.auth :refer [derive-password]]
@@ -24,19 +23,19 @@
[app.config :as cf]
[app.db :as db]
[app.db.sql :as-alias sql]
- [app.features.fdata :as feat.fdata]
+ [app.features.fdata :as fdata]
+ [app.features.file-snapshots :as fsnap]
[app.loggers.audit :as audit]
[app.main :as main]
[app.msgbus :as mbus]
[app.rpc.commands.auth :as auth]
[app.rpc.commands.files :as files]
- [app.rpc.commands.files-snapshot :as fsnap]
[app.rpc.commands.management :as mgmt]
[app.rpc.commands.profile :as profile]
[app.rpc.commands.projects :as projects]
[app.rpc.commands.teams :as teams]
- [app.srepl.fixes :as fixes]
[app.srepl.helpers :as h]
+ [app.srepl.procs.file-repair :as procs.file-repair]
[app.util.blob :as blob]
[app.util.pointer-map :as pmap]
[app.worker :as wrk]
@@ -48,6 +47,7 @@
[cuerdas.core :as str]
[datoteka.fs :as fs]
[promesa.exec :as px]
+ [promesa.exec.csp :as sp]
[promesa.exec.semaphore :as ps]
[promesa.util :as pu]))
@@ -147,25 +147,6 @@
;; FEATURES
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(declare process-file!)
-
-(defn enable-objects-map-feature-on-file!
- [file-id & {:as opts}]
- (process-file! file-id feat.fdata/enable-objects-map opts))
-
-(defn enable-pointer-map-feature-on-file!
- [file-id & {:as opts}]
- (process-file! file-id feat.fdata/enable-pointer-map opts))
-
-(defn enable-path-data-feature-on-file!
- [file-id & {:as opts}]
- (process-file! file-id feat.fdata/enable-path-data opts))
-
-(defn enable-storage-features-on-file!
- [file-id & {:as opts}]
- (enable-objects-map-feature-on-file! file-id opts)
- (enable-pointer-map-feature-on-file! file-id opts))
-
(defn enable-team-feature!
[team-id feature & {:keys [skip-check] :or {skip-check false}}]
(when (and (not skip-check) (not (contains? cfeat/supported-features feature)))
@@ -339,7 +320,10 @@
collectable file-changes entry."
[& {:keys [file-id label]}]
(let [file-id (h/parse-uuid file-id)]
- (db/tx-run! main/system fsnap/create-file-snapshot! {:file-id file-id :label label})))
+ (db/tx-run! main/system
+ (fn [cfg]
+ (let [file (bfc/get-file cfg file-id :realize? true)]
+ (fsnap/create! cfg file {:label label :created-by "admin"}))))))
(defn restore-file-snapshot!
[file-id & {:keys [label id]}]
@@ -349,13 +333,13 @@
(fn [{:keys [::db/conn] :as system}]
(cond
(uuid? snapshot-id)
- (fsnap/restore-file-snapshot! system file-id snapshot-id)
+ (fsnap/restore! system file-id snapshot-id)
(string? label)
(->> (h/search-file-snapshots conn #{file-id} label)
(map :id)
(first)
- (fsnap/restore-file-snapshot! system file-id))
+ (fsnap/restore! system file-id))
:else
(throw (ex-info "snapshot id or label should be provided" {})))))))
@@ -364,9 +348,9 @@
[file-id & {:as _}]
(let [file-id (h/parse-uuid file-id)]
(db/tx-run! main/system
- (fn [{:keys [::db/conn]}]
- (->> (fsnap/get-file-snapshots conn file-id)
- (print-table [:label :id :revn :created-at]))))))
+ (fn [cfg]
+ (->> (fsnap/get-visible-snapshots cfg file-id)
+ (print-table [:label :id :revn :created-at :created-by]))))))
(defn take-team-snapshot!
[team-id & {:keys [label rollback?] :or {rollback? true}}]
@@ -413,24 +397,19 @@
(println (sm/humanize-explain explain))
(ex/print-throwable cause))))))))
-(defn repair-file!
- "Repair the list of errors detected by validation."
- [file-id & {:keys [rollback?] :or {rollback? true} :as opts}]
- (let [system (assoc main/system ::db/rollback rollback?)
- file-id (h/parse-uuid file-id)
- opts (assoc opts :with-libraries? true)]
- (db/tx-run! system h/process-file! file-id fixes/repair-file opts)))
-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; PROCESSING
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(def sql:get-files
- "SELECT id FROM file
- WHERE deleted_at is NULL
- ORDER BY created_at DESC")
+(defn repair-file!
+ "Repair the list of errors detected by validation."
+ [file-id & {:keys [rollback?] :or {rollback? true} :as options}]
+ (let [system (assoc main/system ::db/rollback rollback?)
+ file-id (h/parse-uuid file-id)
+ options (assoc options ::h/with-libraries? true)]
+ (db/tx-run! system h/process-file! file-id procs.file-repair/repair-file options)))
-(defn process-file!
+(defn update-file!
"Apply a function to the file. Optionally save the changes or not.
The function receives the decoded and migrated file data."
[file-id update-fn & {:keys [rollback?] :or {rollback? true} :as opts}]
@@ -441,114 +420,117 @@
db/*conn* (db/get-connection system)]
(h/process-file! system file-id update-fn opts))))))
-(defn process-team-files!
- "Apply a function to each file of the specified team."
- [team-id update-fn & {:keys [rollback? label] :or {rollback? true} :as opts}]
- (let [team-id (h/parse-uuid team-id)
- opts (dissoc opts :label)]
- (db/tx-run! (assoc main/system ::db/rollback rollback?)
- (fn [{:keys [::db/conn] :as system}]
- (when (string? label)
- (h/take-team-snapshot! system team-id label))
+(defn process!
+ [& {:keys [max-items
+ max-jobs
+ rollback?
+ query
+ proc-fn
+ buffer]
+ :or {max-items Long/MAX_VALUE
+ rollback? true
+ max-jobs 1
+ buffer 128}
+ :as opts}]
- (binding [h/*system* system
- db/*conn* (db/get-connection system)]
- (->> (h/get-and-lock-team-files conn team-id)
- (reduce (fn [result file-id]
- (if (h/process-file! system file-id update-fn opts)
- (inc result)
- result))
- 0)))))))
-
-(defn process-files!
- "Apply a function to all files in the database"
- [update-fn & {:keys [max-items
- max-jobs
- rollback?
- query]
- :or {max-jobs 1
- max-items Long/MAX_VALUE
- rollback? true
- query sql:get-files}
- :as opts}]
-
- (l/dbg :hint "process:start"
+ (l/inf :hint "process start"
:rollback rollback?
:max-jobs max-jobs
:max-items max-items)
(let [tpoint (ct/tpoint)
- factory (px/thread-factory :virtual false :prefix "penpot/file-process/")
- executor (px/cached-executor :factory factory)
- sjobs (ps/create :permits max-jobs)
+ max-jobs (or max-jobs (px/get-available-processors))
+ query (or query
+ (:query (meta proc-fn))
+ (throw (ex-info "missing query" {})))
+ query (if (vector? query) query [query])
- process-file
- (fn [file-id idx tpoint]
- (let [thread-id (px/get-thread-id)]
- (try
- (l/trc :hint "process:file:start"
- :tid thread-id
- :file-id (str file-id)
- :index idx)
- (let [system (assoc main/system ::db/rollback rollback?)]
- (db/tx-run! system (fn [system]
- (binding [h/*system* system
- db/*conn* (db/get-connection system)]
- (h/process-file! system file-id update-fn opts)))))
+ proc-fn (if (var? proc-fn)
+ (deref proc-fn)
+ proc-fn)
- (catch Throwable cause
- (l/wrn :hint "unexpected error on processing file (skiping)"
- :tid thread-id
- :file-id (str file-id)
- :index idx
- :cause cause))
- (finally
- (when-let [pause (:pause opts)]
- (Thread/sleep (int pause)))
+ in-ch (sp/chan :buf buffer)
- (ps/release! sjobs)
- (let [elapsed (ct/format-duration (tpoint))]
- (l/trc :hint "process:file:end"
- :tid thread-id
- :file-id (str file-id)
- :index idx
- :elapsed elapsed))))))
+ worker-fn
+ (fn [worker-id]
+ (l/dbg :hint "worker started"
+ :id worker-id)
- process-file*
- (fn [idx file-id]
- (ps/acquire! sjobs)
- (px/run! executor (partial process-file file-id idx (ct/tpoint)))
- (inc idx))
+ (loop []
+ (when-let [[index item] (sp/ main/system
+ (assoc ::db/rollback rollback?)
+ (db/tx-run! (fn [system]
+ (binding [h/*system* system
+ db/*conn* (db/get-connection system)]
+ (proc-fn system item opts)))))
- process-files
+ (catch Throwable cause
+ (l/wrn :hint "unexpected error on processing item (skiping)"
+ :worker-id worker-id
+ :item item
+ :cause cause))
+ (finally
+ (when-let [pause (:pause opts)]
+ (Thread/sleep (int pause)))))
+
+ (recur)))
+
+ (l/dbg :hint "worker stoped"
+ :id worker-id))
+
+ enqueue-item
+ (fn [index row]
+ (sp/>! in-ch [index (into {} row)])
+ (inc index))
+
+ process-items
(fn [{:keys [::db/conn] :as system}]
(db/exec! conn ["SET statement_timeout = 0"])
(db/exec! conn ["SET idle_in_transaction_session_timeout = 0"])
- (try
- (->> (db/plan conn [query])
- (transduce (comp
- (take max-items)
- (map :id))
- (completing process-file*)
- 0))
- (finally
- ;; Close and await tasks
- (pu/close! executor))))]
+ (->> (db/plan conn query {:fetch-size (* max-jobs 3)})
+ (transduce (take max-items)
+ (completing enqueue-item)
+ 0))
+ (sp/close! in-ch))
+
+ threads
+ (->> (range max-jobs)
+ (map (fn [idx]
+ (px/fn->thread (partial worker-fn idx)
+ :name (str "pentpot/process/" idx))))
+ (doall))]
(try
- (db/tx-run! main/system process-files)
+ (db/tx-run! main/system process-items)
+
+ ;; Await threads termination
+ (doseq [thread threads]
+ (px/await! thread))
(catch Throwable cause
(l/dbg :hint "process:error" :cause cause))
(finally
(let [elapsed (ct/format-duration (tpoint))]
- (l/dbg :hint "process:end"
+ (l/inf :hint "process end"
:rollback rollback?
:elapsed elapsed))))))
+(defn process-file!
+ "A specialized, file specific process! alternative"
+ [& {:keys [id] :as opts}]
+ (let [id (h/parse-uuid id)]
+ (-> opts
+ (assoc :query ["select id from file where id = ?" id])
+ (assoc :max-items 1)
+ (assoc :max-jobs 1)
+ (process!))))
+
(defn mark-file-as-trimmed
[id]
(let [id (h/parse-uuid id)]
@@ -590,25 +572,34 @@
(db/update! conn :file
{:deleted-at nil
:has-media-trimmed false}
- {:id file-id})
-
- ;; Fragments are not handled here because they
- ;; use the database cascade operation and they
- ;; are not marked for deletion with objects-gc
- ;; task
+ {:id file-id}
+ {::db/return-keys false})
(db/update! conn :file-media-object
{:deleted-at nil}
- {:file-id file-id})
+ {:file-id file-id}
+ {::db/return-keys false})
+
+ (db/update! conn :file-change
+ {:deleted-at nil}
+ {:file-id file-id}
+ {::db/return-keys false})
+
+ (db/update! conn :file-data
+ {:deleted-at nil}
+ {:file-id file-id}
+ {::db/return-keys false})
;; Mark thumbnails to be deleted
(db/update! conn :file-thumbnail
{:deleted-at nil}
- {:file-id file-id})
+ {:file-id file-id}
+ {::db/return-keys false})
(db/update! conn :file-tagged-object-thumbnail
{:deleted-at nil}
- {:file-id file-id})
+ {:file-id file-id}
+ {::db/return-keys false})
:restored)
@@ -618,11 +609,10 @@
(let [file-id (h/parse-uuid file-id)]
(db/tx-run! main/system
(fn [system]
- (when-let [file (some-> (db/get* system :file
- {:id file-id}
- {::db/remove-deleted false
- ::sql/columns [:id :name]})
- (files/decode-row))]
+ (when-let [file (db/get* system :file
+ {:id file-id}
+ {::db/remove-deleted false
+ ::sql/columns [:id :name]})]
(audit/insert! system
{::audit/name "restore-file"
::audit/type "action"
diff --git a/backend/src/app/srepl/procs/fdata_storage.clj b/backend/src/app/srepl/procs/fdata_storage.clj
new file mode 100644
index 0000000000..e0833acd8d
--- /dev/null
+++ b/backend/src/app/srepl/procs/fdata_storage.clj
@@ -0,0 +1,141 @@
+;; 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.srepl.procs.fdata-storage
+ (:require
+ [app.common.logging :as l]
+ [app.db :as db]))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; SNAPSHOTS
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(def sql:get-unmigrated-snapshots
+ "SELECT fc.id, fc.file_id
+ FROM file_change AS fc
+ WHERE fc.data IS NOT NULL
+ AND fc.label IS NOT NULL
+ ORDER BY fc.id ASC")
+
+(def sql:get-migrated-snapshots
+ "SELECT f.id, f.file_id
+ FROM file_data AS f
+ WHERE f.data IS NOT NULL
+ AND f.type = 'snapshot'
+ AND f.id != f.file_id
+ ORDER BY f.id ASC")
+
+(defn migrate-snapshot-to-storage
+ "Migrate the current existing files to store data in new storage
+ tables."
+ {:query sql:get-unmigrated-snapshots}
+ [{:keys [::db/conn]} {:keys [id file-id]} & {:as options}]
+ (let [{:keys [id file-id data created-at updated-at]}
+ (db/get* conn :file-change {:id id :file-id file-id}
+ ::db/for-update true
+ ::db/remove-deleted false)]
+ (when data
+ (l/inf :hint "migrating snapshot" :file-id (str file-id) :id (str id))
+ (db/update! conn :file-change
+ {:data nil}
+ {:id id :file-id file-id}
+ {::db/return-keys false})
+ (db/insert! conn :file-data
+ {:backend "db"
+ :metadata nil
+ :type "snapshot"
+ :data data
+ :created-at created-at
+ :modified-at updated-at
+ :file-id file-id
+ :id id}
+ {::db/return-keys false}))))
+
+(defn rollback-snapshot-from-storage
+ "Migrate back to the file table storage."
+ {:query sql:get-unmigrated-snapshots}
+ [{:keys [::db/conn]} {:keys [id file-id]} & {:as opts}]
+ (when-let [{:keys [id file-id data]}
+ (db/get* conn :file-data {:id id :file-id file-id :type "snapshot"}
+ ::db/for-update true
+ ::db/remove-deleted false)]
+ (l/inf :hint "rollback snapshot" :file-id (str file-id) :id (str id))
+ (db/update! conn :file-change
+ {:data data}
+ {:id id :file-id file-id}
+ {::db/return-keys false})
+ (db/delete! conn :file-data
+ {:id id :file-id file-id :type "snapshot"}
+ {::db/return-keys false})))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; FILES
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(def sql:get-unmigrated-files
+ "SELECT f.id
+ FROM file AS f
+ WHERE f.data IS NOT NULL
+ ORDER BY f.modified_at ASC")
+
+(def sql:get-migrated-files
+ "SELECT f.id, f.file_id
+ FROM file_data AS f
+ WHERE f.data IS NOT NULL
+ AND f.id = f.file_id
+ ORDER BY f.id ASC")
+
+(defn migrate-file-to-storage
+ "Migrate the current existing files to store data in new storage
+ tables."
+ {:query sql:get-unmigrated-files}
+ [{:keys [::db/conn] :as cfg} {:keys [id]} & {:as opts}]
+ (let [{:keys [id data created-at modified-at]}
+ (db/get* conn :file {:id id}
+ ::db/for-update true
+ ::db/remove-deleted false)]
+
+ (when data
+ (l/inf :hint "migrating file" :file-id (str id))
+
+ (db/update! conn :file {:data nil} {:id id} ::db/return-keys false)
+ (db/insert! conn :file-data
+ {:backend "db"
+ :metadata nil
+ :type "main"
+ :data data
+ :created-at created-at
+ :modified-at modified-at
+ :file-id id
+ :id id}
+ {::db/return-keys false}))
+
+ (let [snapshots-sql
+ (str "WITH snapshots AS (" sql:get-unmigrated-snapshots ") "
+ "SELECT s.* FROM snapshots AS s WHERE s.file_id = ?")]
+ (run! (fn [params]
+ (migrate-snapshot-to-storage cfg params opts))
+ (db/plan cfg [snapshots-sql id])))))
+
+
+(defn rollback-file-from-storage
+ "Migrate back to the file table storage."
+ {:query sql:get-migrated-files}
+ [{:keys [::db/conn] :as cfg} {:keys [id]} & {:as opts}]
+ (when-let [{:keys [id data]}
+ (db/get* conn :file-data {:id id :file-id id :type "main"}
+ ::db/for-update true
+ ::db/remove-deleted false)]
+ (l/inf :hint "rollback file" :file-id (str id))
+ (db/update! conn :file {:data data} {:id id} ::db/return-keys false)
+ (db/delete! conn :file-data {:file-id id :id id :type "main"} ::db/return-keys false)
+
+ (let [snapshots-sql
+ (str "WITH snapshots AS (" sql:get-migrated-snapshots ") "
+ "SELECT s.* FROM snapshots AS s WHERE s.file_id = ?")]
+ (run! (fn [params]
+ (rollback-snapshot-from-storage cfg params opts))
+ (db/plan cfg [snapshots-sql id])))))
diff --git a/backend/src/app/srepl/procs/file_repair.clj b/backend/src/app/srepl/procs/file_repair.clj
new file mode 100644
index 0000000000..d259a8156b
--- /dev/null
+++ b/backend/src/app/srepl/procs/file_repair.clj
@@ -0,0 +1,60 @@
+;; 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.srepl.procs.file-repair
+ (:require
+ [app.common.files.changes :as cfc]
+ [app.common.files.repair :as cfr]
+ [app.common.files.validate :as cfv]
+ [app.common.logging :as l]))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; GENERAL PURPOSE REPAIR
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defn repair-file
+ "Internal helper for validate and repair the file. The operation is
+ applied multiple times untile file is fixed or max iteration counter
+ is reached (default 10).
+
+ This function should not be used directly, it is used throught the
+ app.srepl.main/repair-file! helper. In practical terms this function
+ is private and implementation detail."
+ [file libs & {:keys [max-iterations] :or {max-iterations 10}}]
+
+ (let [validate-and-repair
+ (fn [file libs iteration]
+ (when-let [errors (not-empty (cfv/validate-file file libs))]
+ (l/trc :hint "repairing file"
+ :file-id (str (:id file))
+ :iteration iteration
+ :errors (count errors))
+ (let [changes (cfr/repair-file file libs errors)]
+ (-> file
+ (update :revn inc)
+ (update :data cfc/process-changes changes)))))
+
+ process-file
+ (fn [file libs]
+ (loop [file file
+ iteration 0]
+ (if (< iteration max-iterations)
+ (if-let [file (validate-and-repair file libs iteration)]
+ (recur file (inc iteration))
+ file)
+ (do
+ (l/wrn :hint "max retry num reached on repairing file"
+ :file-id (str (:id file))
+ :iteration iteration)
+ file))))
+
+ file'
+ (process-file file libs)]
+
+ (when (not= (:revn file) (:revn file'))
+ (l/trc :hint "file repaired" :file-id (str (:id file))))
+
+ file'))
diff --git a/backend/src/app/srepl/fixes/media_refs.clj b/backend/src/app/srepl/procs/media_refs.clj
similarity index 66%
rename from backend/src/app/srepl/fixes/media_refs.clj
rename to backend/src/app/srepl/procs/media_refs.clj
index 44d3cc6e0c..1e60490f16 100644
--- a/backend/src/app/srepl/fixes/media_refs.clj
+++ b/backend/src/app/srepl/procs/media_refs.clj
@@ -4,10 +4,11 @@
;;
;; Copyright (c) KALEIDOS INC
-(ns app.srepl.fixes.media-refs
+(ns app.srepl.procs.media-refs
(:require
[app.binfile.common :as bfc]
[app.common.files.helpers :as cfh]
+ [app.common.logging :as l]
[app.srepl.helpers :as h]))
(defn- collect-media-refs
@@ -37,7 +38,22 @@
(let [media-refs (collect-media-refs (:data file))]
(bfc/update-media-references! cfg file media-refs)))
-(defn process-file
- [file _opts]
- (let [system (h/get-current-system)]
- (update-all-media-references system file)))
+(def ^:private sql:get-files
+ "SELECT f.id
+ FROM file AS f
+ LEFT JOIN file_migration AS fm ON (fm.file_id = f.id AND fm.name = 'internal/procs/media-refs')
+ WHERE fm.name IS NULL
+ ORDER BY f.project_id")
+
+(defn fix-media-refs
+ {:query sql:get-files}
+ [cfg {:keys [id]} & {:as options}]
+ (l/inf :hint "processing file" :id (str id))
+
+ (h/process-file! cfg id
+ (fn [file _opts]
+ (update-all-media-references cfg file))
+ (assoc options
+ ::bfc/reset-migrations? true
+ ::h/validate? false))
+ (h/mark-migrated! cfg id "internal/procs/media-refs"))
diff --git a/backend/src/app/srepl/procs/path_data.clj b/backend/src/app/srepl/procs/path_data.clj
new file mode 100644
index 0000000000..6b72d39719
--- /dev/null
+++ b/backend/src/app/srepl/procs/path_data.clj
@@ -0,0 +1,57 @@
+;; 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.srepl.procs.path-data
+ (:require
+ [app.binfile.common :as bfc]
+ [app.common.data :as d]
+ [app.common.files.helpers :as cfh]
+ [app.common.logging :as l]
+ [app.srepl.helpers :as h]))
+
+(def ^:private sql:get-files-with-path-data
+ "SELECT id FROM file WHERE features @> '{fdata/path-data}'")
+
+(defn disable
+ "A script responsible for remove the path data type from file data and
+ allow file to be open in older penpot versions.
+
+ Should be used only in cases when you want to downgrade to an older
+ penpot version for some reason."
+ {:query sql:get-files-with-path-data}
+ [cfg {:keys [id]} & {:as options}]
+
+ (l/inf :hint "disabling path-data" :file-id (str id))
+
+ (let [update-object
+ (fn [object]
+ (if (or (cfh/path-shape? object)
+ (cfh/bool-shape? object))
+ (update object :content vec)
+ object))
+
+ update-container
+ (fn [container]
+ (d/update-when container :objects d/update-vals update-object))
+
+ update-file
+ (fn [file & _opts]
+ (-> file
+ (update :data (fn [data]
+ (-> data
+ (update :pages-index d/update-vals update-container)
+ (d/update-when :components d/update-vals update-container))))
+ (update :features disj "fdata/path-data")
+ (update :migrations disj
+ "0003-convert-path-content-v2"
+ "0003-convert-path-content")))
+
+ options
+ (-> options
+ (assoc ::bfc/reset-migrations? true)
+ (assoc ::h/validate? false))]
+
+ (h/process-file! cfg id update-file options)))
diff --git a/backend/src/app/storage.clj b/backend/src/app/storage.clj
index f92f2ac7ef..08ddfd76f7 100644
--- a/backend/src/app/storage.clj
+++ b/backend/src/app/storage.clj
@@ -27,7 +27,9 @@
(defn get-legacy-backend
[]
- (let [name (cf/get :assets-storage-backend)]
+ (when-let [name (cf/get :assets-storage-backend)]
+ (l/wrn :hint "using deprecated configuration, please read 2.11 release notes"
+ :href "https://github.com/penpot/penpot/releases/tag/2.11.0")
(case name
:assets-fs :fs
:assets-s3 :s3
@@ -113,13 +115,10 @@
(defn- create-database-object
[{:keys [::backend ::db/connectable]} {:keys [::content ::expired-at ::touched-at ::touch] :as params}]
- (let [id (or (:id params) (uuid/random))
+ (let [id (or (::id params) (uuid/random))
mdata (cond-> (get-metadata params)
(satisfies? impl/IContentHash content)
- (assoc :hash (impl/get-hash content))
-
- :always
- (dissoc :id))
+ (assoc :hash (impl/get-hash content)))
touched-at (if touch
(or touched-at (ct/now))
diff --git a/backend/src/app/storage/gc_touched.clj b/backend/src/app/storage/gc_touched.clj
index 199d0c6b74..c828a69cb3 100644
--- a/backend/src/app/storage/gc_touched.clj
+++ b/backend/src/app/storage/gc_touched.clj
@@ -34,7 +34,7 @@
(SELECT EXISTS (SELECT 1 FROM team_font_variant WHERE ttf_file_id = ?))) AS has_refs")
(defn- has-team-font-variant-refs?
- [conn id]
+ [conn {:keys [id]}]
(-> (db/exec-one! conn [sql:has-team-font-variant-refs id id id id])
(get :has-refs)))
@@ -44,7 +44,7 @@
(SELECT EXISTS (SELECT 1 FROM file_media_object WHERE thumbnail_id = ?))) AS has_refs")
(defn- has-file-media-object-refs?
- [conn id]
+ [conn {:keys [id]}]
(-> (db/exec-one! conn [sql:has-file-media-object-refs id id])
(get :has-refs)))
@@ -53,7 +53,7 @@
(SELECT EXISTS (SELECT 1 FROM team WHERE photo_id = ?))) AS has_refs")
(defn- has-profile-refs?
- [conn id]
+ [conn {:keys [id]}]
(-> (db/exec-one! conn [sql:has-profile-refs id id])
(get :has-refs)))
@@ -62,7 +62,7 @@
"SELECT EXISTS (SELECT 1 FROM file_tagged_object_thumbnail WHERE media_id = ?) AS has_refs")
(defn- has-file-object-thumbnails-refs?
- [conn id]
+ [conn {:keys [id]}]
(-> (db/exec-one! conn [sql:has-file-object-thumbnail-refs id])
(get :has-refs)))
@@ -71,36 +71,23 @@
"SELECT EXISTS (SELECT 1 FROM file_thumbnail WHERE media_id = ?) AS has_refs")
(defn- has-file-thumbnails-refs?
- [conn id]
+ [conn {:keys [id]}]
(-> (db/exec-one! conn [sql:has-file-thumbnail-refs id])
(get :has-refs)))
-(def ^:private
- sql:has-file-data-refs
- "SELECT EXISTS (SELECT 1 FROM file WHERE data_ref_id = ?) AS has_refs")
+(def sql:exists-file-data-refs
+ "SELECT EXISTS (
+ SELECT 1 FROM file_data
+ WHERE file_id = ?
+ AND id = ?
+ AND metadata->>'storage-ref-id' = ?::text
+ ) AS has_refs")
(defn- has-file-data-refs?
- [conn id]
- (-> (db/exec-one! conn [sql:has-file-data-refs id])
- (get :has-refs)))
-
-(def ^:private
- sql:has-file-data-fragment-refs
- "SELECT EXISTS (SELECT 1 FROM file_data_fragment WHERE data_ref_id = ?) AS has_refs")
-
-(defn- has-file-data-fragment-refs?
- [conn id]
- (-> (db/exec-one! conn [sql:has-file-data-fragment-refs id])
- (get :has-refs)))
-
-(def ^:private
- sql:has-file-change-refs
- "SELECT EXISTS (SELECT 1 FROM file_change WHERE data_ref_id = ?) AS has_refs")
-
-(defn- has-file-change-refs?
- [conn id]
- (-> (db/exec-one! conn [sql:has-file-change-refs id])
- (get :has-refs)))
+ [conn sobject]
+ (let [{:keys [file-id id]} (:metadata sobject)]
+ (-> (db/exec-one! conn [sql:exists-file-data-refs file-id id (:id sobject)])
+ (get :has-refs))))
(def ^:private sql:mark-freeze-in-bulk
"UPDATE storage_object
@@ -143,52 +130,48 @@
"file-media-object"))
(defn- process-objects!
- [conn has-refs? ids bucket]
+ [conn has-refs? bucket objects]
(loop [to-freeze #{}
to-delete #{}
- ids (seq ids)]
- (if-let [id (first ids)]
- (if (has-refs? conn id)
+ objects (seq objects)]
+ (if-let [{:keys [id] :as object} (first objects)]
+ (if (has-refs? conn object)
(do
- (l/debug :hint "processing object"
- :id (str id)
+ (l/debug :id (str id)
:status "freeze"
:bucket bucket)
- (recur (conj to-freeze id) to-delete (rest ids)))
+ (recur (conj to-freeze id) to-delete (rest objects)))
(do
- (l/debug :hint "processing object"
- :id (str id)
+ (l/debug :id (str id)
:status "delete"
:bucket bucket)
- (recur to-freeze (conj to-delete id) (rest ids))))
+ (recur to-freeze (conj to-delete id) (rest objects))))
(do
(some->> (seq to-freeze) (mark-freeze-in-bulk! conn))
(some->> (seq to-delete) (mark-delete-in-bulk! conn))
[(count to-freeze) (count to-delete)]))))
(defn- process-bucket!
- [conn bucket ids]
+ [conn bucket objects]
(case bucket
- "file-media-object" (process-objects! conn has-file-media-object-refs? ids bucket)
- "team-font-variant" (process-objects! conn has-team-font-variant-refs? ids bucket)
- "file-object-thumbnail" (process-objects! conn has-file-object-thumbnails-refs? ids bucket)
- "file-thumbnail" (process-objects! conn has-file-thumbnails-refs? ids bucket)
- "profile" (process-objects! conn has-profile-refs? ids bucket)
- "file-data" (process-objects! conn has-file-data-refs? ids bucket)
- "file-data-fragment" (process-objects! conn has-file-data-fragment-refs? ids bucket)
- "file-change" (process-objects! conn has-file-change-refs? ids bucket)
+ "file-media-object" (process-objects! conn has-file-media-object-refs? bucket objects)
+ "team-font-variant" (process-objects! conn has-team-font-variant-refs? bucket objects)
+ "file-object-thumbnail" (process-objects! conn has-file-object-thumbnails-refs? bucket objects)
+ "file-thumbnail" (process-objects! conn has-file-thumbnails-refs? bucket objects)
+ "profile" (process-objects! conn has-profile-refs? bucket objects)
+ "file-data" (process-objects! conn has-file-data-refs? bucket objects)
(ex/raise :type :internal
:code :unexpected-unknown-reference
:hint (dm/fmt "unknown reference '%'" bucket))))
(defn process-chunk!
[{:keys [::db/conn]} chunk]
- (reduce-kv (fn [[nfo ndo] bucket ids]
- (let [[nfo' ndo'] (process-bucket! conn bucket ids)]
+ (reduce-kv (fn [[nfo ndo] bucket objects]
+ (let [[nfo' ndo'] (process-bucket! conn bucket objects)]
[(+ nfo nfo')
(+ ndo ndo')]))
[0 0]
- (d/group-by lookup-bucket :id #{} chunk)))
+ (d/group-by lookup-bucket identity #{} chunk)))
(def ^:private
sql:get-touched-storage-objects
@@ -214,12 +197,7 @@
(let [[nfo ndo] (db/tx-run! cfg process-chunk! chunk)]
(recur (long (+ freezed nfo))
(long (+ deleted ndo))))
- (do
- (l/inf :hint "task finished"
- :to-freeze freezed
- :to-delete deleted)
-
- {:freeze freezed :delete deleted}))))
+ {:freeze freezed :delete deleted})))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; HANDLER
diff --git a/backend/src/app/storage/s3.clj b/backend/src/app/storage/s3.clj
index 73929c1639..8d28a9a9f3 100644
--- a/backend/src/app/storage/s3.clj
+++ b/backend/src/app/storage/s3.clj
@@ -31,13 +31,13 @@
java.time.Duration
java.util.Collection
java.util.Optional
+ java.util.concurrent.atomic.AtomicLong
org.reactivestreams.Subscriber
software.amazon.awssdk.core.ResponseBytes
software.amazon.awssdk.core.async.AsyncRequestBody
software.amazon.awssdk.core.async.AsyncResponseTransformer
software.amazon.awssdk.core.async.BlockingInputStreamAsyncRequestBody
software.amazon.awssdk.core.client.config.ClientAsyncConfiguration
- software.amazon.awssdk.core.client.config.SdkAdvancedAsyncClientOption
software.amazon.awssdk.http.nio.netty.NettyNioAsyncHttpClient
software.amazon.awssdk.http.nio.netty.SdkEventLoopGroup
software.amazon.awssdk.regions.Region
@@ -87,12 +87,11 @@
(def ^:private schema:config
[:map {:title "s3-backend-config"}
- ::wrk/executor
+ ::wrk/netty-io-executor
[::region {:optional true} :keyword]
[::bucket {:optional true} ::sm/text]
[::prefix {:optional true} ::sm/text]
- [::endpoint {:optional true} ::sm/uri]
- [::io-threads {:optional true} ::sm/int]])
+ [::endpoint {:optional true} ::sm/uri]])
(defmethod ig/expand-key ::backend
[k v]
@@ -110,6 +109,7 @@
presigner (build-s3-presigner params)]
(assoc params
::sto/type :s3
+ ::counter (AtomicLong. 0)
::client @client
::presigner presigner
::close-fn #(.close ^java.lang.AutoCloseable client)))))
@@ -121,7 +121,7 @@
(defmethod ig/halt-key! ::backend
[_ {:keys [::close-fn]}]
(when (fn? close-fn)
- (px/run! close-fn)))
+ (close-fn)))
(def ^:private schema:backend
[:map {:title "s3-backend"}
@@ -198,19 +198,16 @@
(Region/of (name region)))
(defn- build-s3-client
- [{:keys [::region ::endpoint ::io-threads ::wrk/executor]}]
+ [{:keys [::region ::endpoint ::wrk/netty-io-executor]}]
(let [aconfig (-> (ClientAsyncConfiguration/builder)
- (.advancedOption SdkAdvancedAsyncClientOption/FUTURE_COMPLETION_EXECUTOR executor)
(.build))
sconfig (-> (S3Configuration/builder)
(cond-> (some? endpoint) (.pathStyleAccessEnabled true))
(.build))
- thr-num (or io-threads (min 16 (px/get-available-processors)))
hclient (-> (NettyNioAsyncHttpClient/builder)
- (.eventLoopGroupBuilder (-> (SdkEventLoopGroup/builder)
- (.numberOfThreads (int thr-num))))
+ (.eventLoopGroup (SdkEventLoopGroup/create netty-io-executor))
(.connectionAcquisitionTimeout default-timeout)
(.connectionTimeout default-timeout)
(.readTimeout default-timeout)
@@ -262,7 +259,7 @@
(.close ^InputStream input))))
(defn- make-request-body
- [executor content]
+ [counter content]
(let [size (impl/get-size content)]
(reify
AsyncRequestBody
@@ -272,16 +269,19 @@
(^void subscribe [_ ^Subscriber subscriber]
(let [delegate (AsyncRequestBody/forBlockingInputStream (long size))
input (io/input-stream content)]
- (px/run! executor (partial write-input-stream delegate input))
+
+ (px/thread-call (partial write-input-stream delegate input)
+ {:name (str "penpot/storage/" (.getAndIncrement ^AtomicLong counter))})
+
(.subscribe ^BlockingInputStreamAsyncRequestBody delegate
^Subscriber subscriber))))))
(defn- put-object
- [{:keys [::client ::bucket ::prefix ::wrk/executor]} {:keys [id] :as object} content]
+ [{:keys [::client ::bucket ::prefix ::counter]} {:keys [id] :as object} content]
(let [path (dm/str prefix (impl/id->path id))
mdata (meta object)
mtype (:content-type mdata "application/octet-stream")
- rbody (make-request-body executor content)
+ rbody (make-request-body counter content)
request (.. (PutObjectRequest/builder)
(bucket bucket)
(contentType mtype)
diff --git a/backend/src/app/storage/tmp.clj b/backend/src/app/storage/tmp.clj
index 915195fbb2..4bbff4a72d 100644
--- a/backend/src/app/storage/tmp.clj
+++ b/backend/src/app/storage/tmp.clj
@@ -44,7 +44,7 @@
[_ cfg]
(fs/create-dir default-tmp-dir)
(px/fn->thread (partial io-loop cfg)
- {:name "penpot/storage/tmp-cleaner" :virtual true}))
+ {:name "penpot/storage/tmp-cleaner"}))
(defmethod ig/halt-key! ::cleaner
[_ thread]
diff --git a/backend/src/app/tasks/delete_object.clj b/backend/src/app/tasks/delete_object.clj
index a9e50921ae..61282e4134 100644
--- a/backend/src/app/tasks/delete_object.clj
+++ b/backend/src/app/tasks/delete_object.clj
@@ -10,6 +10,7 @@
[app.common.logging :as l]
[app.common.time :as ct]
[app.db :as db]
+ [app.db.sql :as-alias sql]
[app.rpc.commands.files :as files]
[app.rpc.commands.profile :as profile]
[integrant.core :as ig]))
@@ -19,10 +20,28 @@
(defmulti delete-object
(fn [_ props] (:object props)))
+(defmethod delete-object :snapshot
+ [{:keys [::db/conn] :as cfg} {:keys [id file-id deleted-at]}]
+ (l/trc :obj "snapshot" :id (str id) :file-id (str file-id)
+ :deleted-at (ct/format-inst deleted-at))
+
+ (db/update! conn :file-change
+ {:deleted-at deleted-at}
+ {:id id :file-id file-id}
+ {::db/return-keys false})
+
+ (db/update! conn :file-data
+ {:deleted-at deleted-at}
+ {:id id :file-id file-id :type "snapshot"}
+ {::db/return-keys false}))
+
(defmethod delete-object :file
[{:keys [::db/conn] :as cfg} {:keys [id deleted-at]}]
- (when-let [file (db/get* conn :file {:id id} {::db/remove-deleted false})]
- (l/trc :hint "marking for deletion" :rel "file" :id (str id)
+ (when-let [file (db/get* conn :file {:id id}
+ {::db/remove-deleted false
+ ::sql/columns [:id :is-shared]})]
+
+ (l/trc :obj "file" :id (str id)
:deleted-at (ct/format-inst deleted-at))
(db/update! conn :file
@@ -43,25 +62,35 @@
;; Mark file change to be deleted
(db/update! conn :file-change
{:deleted-at deleted-at}
- {:file-id id})
+ {:file-id id}
+ {::db/return-keys false})
+
+ ;; Mark file data fragment to be deleted
+ (db/update! conn :file-data
+ {:deleted-at deleted-at}
+ {:file-id id}
+ {::db/return-keys false})
;; Mark file media objects to be deleted
(db/update! conn :file-media-object
{:deleted-at deleted-at}
- {:file-id id})
+ {:file-id id}
+ {::db/return-keys false})
;; Mark thumbnails to be deleted
(db/update! conn :file-thumbnail
{:deleted-at deleted-at}
- {:file-id id})
+ {:file-id id}
+ {::db/return-keys false})
(db/update! conn :file-tagged-object-thumbnail
{:deleted-at deleted-at}
- {:file-id id})))
+ {:file-id id}
+ {::db/return-keys false})))
(defmethod delete-object :project
[{:keys [::db/conn] :as cfg} {:keys [id deleted-at]}]
- (l/trc :hint "marking for deletion" :rel "project" :id (str id)
+ (l/trc :obj "project" :id (str id)
:deleted-at (ct/format-inst deleted-at))
(db/update! conn :project
@@ -78,7 +107,7 @@
(defmethod delete-object :team
[{:keys [::db/conn] :as cfg} {:keys [id deleted-at]}]
- (l/trc :hint "marking for deletion" :rel "team" :id (str id)
+ (l/trc :obj "team" :id (str id)
:deleted-at (ct/format-inst deleted-at))
(db/update! conn :team
{:deleted-at deleted-at}
@@ -100,7 +129,7 @@
(defmethod delete-object :profile
[{:keys [::db/conn] :as cfg} {:keys [id deleted-at]}]
- (l/trc :hint "marking for deletion" :rel "profile" :id (str id)
+ (l/trc :obj "profile" :id (str id)
:deleted-at (ct/format-inst deleted-at))
(db/update! conn :profile
@@ -115,7 +144,7 @@
(defmethod delete-object :default
[_cfg props]
- (l/wrn :hint "not implementation found" :rel (:object props)))
+ (l/wrn :obj (:object props) :hint "not implementation found"))
(defmethod ig/assert-key ::handler
[_ params]
diff --git a/backend/src/app/tasks/file_gc.clj b/backend/src/app/tasks/file_gc.clj
index 0201f194c8..946b9aa42b 100644
--- a/backend/src/app/tasks/file_gc.clj
+++ b/backend/src/app/tasks/file_gc.clj
@@ -23,29 +23,16 @@
[app.config :as cf]
[app.db :as db]
[app.features.fdata :as feat.fdata]
+ [app.features.file-snapshots :as fsnap]
[app.storage :as sto]
[app.worker :as wrk]
[integrant.core :as ig]))
(declare get-file)
-(def sql:get-snapshots
- "SELECT fc.file_id AS id,
- fc.id AS snapshot_id,
- fc.data,
- fc.revn,
- fc.version,
- fc.features,
- fc.data_backend,
- fc.data_ref_id
- FROM file_change AS fc
- WHERE fc.file_id = ?
- AND fc.data IS NOT NULL
- ORDER BY fc.created_at ASC")
-
(def ^:private sql:mark-file-media-object-deleted
"UPDATE file_media_object
- SET deleted_at = now()
+ SET deleted_at = ?
WHERE file_id = ? AND id != ALL(?::uuid[])
RETURNING id")
@@ -56,37 +43,35 @@
(defn- clean-file-media!
"Performs the garbage collection of file media objects."
- [{:keys [::db/conn] :as cfg} {:keys [id] :as file}]
- (let [xform (comp
- (map (partial bfc/decode-file cfg))
- xf:collect-used-media)
+ [{:keys [::db/conn ::timestamp] :as cfg} {:keys [id] :as file}]
+ (let [used-media
+ (fsnap/reduce-snapshots cfg id xf:collect-used-media conj #{})
- used (->> (db/plan conn [sql:get-snapshots id] {:fetch-size 1})
- (transduce xform conj #{}))
- used (into used xf:collect-used-media [file])
+ used-media
+ (into used-media xf:collect-used-media [file])
- ids (db/create-array conn "uuid" used)
- unused (->> (db/exec! conn [sql:mark-file-media-object-deleted id ids])
- (into #{} (map :id)))]
+ used-media
+ (db/create-array conn "uuid" used-media)
- (l/dbg :hint "clean" :rel "file-media-object" :file-id (str id) :total (count unused))
+ unused-media
+ (->> (db/exec! conn [sql:mark-file-media-object-deleted timestamp id used-media])
+ (into #{} (map :id)))]
- (doseq [id unused]
- (l/trc :hint "mark deleted"
- :rel "file-media-object"
- :id (str id)
- :file-id (str id)))
+ (doseq [id unused-media]
+ (l/trc :obj "media-object"
+ :file-id (str id)
+ :id (str id)))
file))
(def ^:private sql:mark-file-object-thumbnails-deleted
"UPDATE file_tagged_object_thumbnail
- SET deleted_at = now()
+ SET deleted_at = ?
WHERE file_id = ? AND object_id != ALL(?::text[])
RETURNING object_id")
(defn- clean-file-object-thumbnails!
- [{:keys [::db/conn]} {:keys [data] :as file}]
+ [{:keys [::db/conn ::timestamp]} {:keys [data] :as file}]
(let [file-id (:id file)
using (->> (vals (:pages-index data))
(into #{} (comp
@@ -98,49 +83,37 @@
(thc/fmt-object-id file-id page-id id "frame")
(thc/fmt-object-id file-id page-id id "component")))))))
- ids (db/create-array conn "text" using)
- unused (->> (db/exec! conn [sql:mark-file-object-thumbnails-deleted file-id ids])
+ ids (into-array String using)
+ unused (->> (db/exec! conn [sql:mark-file-object-thumbnails-deleted timestamp file-id ids])
(into #{} (map :object-id)))]
- (l/dbg :hint "clean" :rel "file-object-thumbnail" :file-id (str file-id) :total (count unused))
-
(doseq [object-id unused]
- (l/trc :hint "mark deleted"
- :rel "file-tagged-object-thumbnail"
- :object-id object-id
- :file-id (str file-id)))
+ (l/trc :obj "object-thumbnail"
+ :file-id (str file-id)
+ :id object-id))
file))
(def ^:private sql:mark-file-thumbnails-deleted
"UPDATE file_thumbnail
- SET deleted_at = now()
+ SET deleted_at = ?
WHERE file_id = ? AND revn < ?
RETURNING revn")
(defn- clean-file-thumbnails!
- [{:keys [::db/conn]} {:keys [id revn] :as file}]
- (let [unused (->> (db/exec! conn [sql:mark-file-thumbnails-deleted id revn])
+ [{:keys [::db/conn ::timestamp]} {:keys [id revn] :as file}]
+ (let [unused (->> (db/exec! conn [sql:mark-file-thumbnails-deleted timestamp id revn])
(into #{} (map :revn)))]
- (l/dbg :hint "clean" :rel "file-thumbnail" :file-id (str id) :total (count unused))
-
(doseq [revn unused]
- (l/trc :hint "mark deleted"
- :rel "file-thumbnail"
- :revn revn
- :file-id (str id)))
+ (l/trc :obj "thumbnail"
+ :file-id (str id)
+ :revn revn))
file))
(def ^:private sql:get-files-for-library
- "SELECT f.id,
- f.data,
- f.modified_at,
- f.features,
- f.version,
- f.data_backend,
- f.data_ref_id
+ "SELECT f.id
FROM file AS f
LEFT JOIN file_library_rel AS fl ON (fl.file_id = f.id)
WHERE fl.library_file_id = ?
@@ -161,15 +134,21 @@
deleted-components
(ctkl/deleted-components-seq data)
- xform
+ file-xform
(mapcat (partial get-used-components deleted-components file-id))
+ library-xform
+ (comp
+ (map :id)
+ (map #(bfc/get-file cfg % :realize? true :read-only? true))
+ file-xform)
+
used-remote
(->> (db/plan conn [sql:get-files-for-library file-id] {:fetch-size 1})
- (transduce (comp (map (partial bfc/decode-file cfg)) xform) conj #{}))
+ (transduce library-xform conj #{}))
used-local
- (into #{} xform [file])
+ (into #{} file-xform [file])
unused
(transduce bfc/xf-map-id disj
@@ -180,21 +159,21 @@
(update file :data
(fn [data]
(reduce (fn [data id]
- (l/trc :hint "delete component"
- :component-id (str id)
- :file-id (str file-id))
+ (l/trc :obj "component"
+ :file-id (str file-id)
+ :id (str id))
(ctkl/delete-component data id))
data
unused)))]
- (l/dbg :hint "clean" :rel "components" :file-id (str file-id) :total (count unused))
file))
(def ^:private sql:mark-deleted-data-fragments
- "UPDATE file_data_fragment
- SET deleted_at = now()
+ "UPDATE file_data
+ SET deleted_at = ?
WHERE file_id = ?
AND id != ALL(?::uuid[])
+ AND type = 'fragment'
AND deleted_at IS NULL
RETURNING id")
@@ -203,19 +182,16 @@
(mapcat feat.fdata/get-used-pointer-ids)))
(defn- clean-fragments!
- [{:keys [::db/conn]} {:keys [id] :as file}]
+ [{:keys [::db/conn ::timestamp]} {:keys [id] :as file}]
(let [used (into #{} xf:collect-pointers [file])
-
- unused (->> (db/exec! conn [sql:mark-deleted-data-fragments id
+ unused (->> (db/exec! conn [sql:mark-deleted-data-fragments timestamp id
(db/create-array conn "uuid" used)])
(into #{} bfc/xf-map-id))]
- (l/dbg :hint "clean" :rel "file-data-fragment" :file-id (str id) :total (count unused))
(doseq [id unused]
- (l/trc :hint "mark deleted"
- :rel "file-data-fragment"
- :id (str id)
- :file-id (str id)))
+ (l/trc :obj "fragment"
+ :file-id (str id)
+ :id (str id)))
file))
@@ -229,36 +205,23 @@
(cfv/validate-file-schema! file)
file))
-(def ^:private sql:get-file
- "SELECT f.id,
- f.data,
- f.revn,
- f.version,
- f.features,
- f.modified_at,
- f.data_backend,
- f.data_ref_id
- FROM file AS f
- WHERE f.has_media_trimmed IS false
- AND f.modified_at < now() - ?::interval
- AND f.deleted_at IS NULL
- AND f.id = ?
- FOR UPDATE
- SKIP LOCKED")
-
(defn get-file
- [{:keys [::db/conn ::min-age]} file-id]
- (let [min-age (if min-age
- (db/interval min-age)
- (db/interval 0))]
- (->> (db/exec! conn [sql:get-file min-age file-id])
- (first))))
+ [cfg {:keys [file-id revn]}]
+ (let [file (bfc/get-file cfg file-id
+ :realize? true
+ :skip-locked? true
+ :lock-for-update? true)]
+
+ ;; We should ensure that the scheduled file and the procesing file
+ ;; has not changed since schedule, for this reason we check the
+ ;; revn from props with the revn from retrieved file from database
+ (when (or (nil? revn) (= revn (:revn file)))
+ file)))
(defn- process-file!
- [cfg file-id]
- (if-let [file (get-file cfg file-id)]
+ [cfg {:keys [file-id] :as props}]
+ (if-let [file (get-file cfg props)]
(let [file (->> file
- (bfc/decode-file cfg)
(bfl/clean-file)
(clean-media! cfg)
(clean-fragments! cfg))
@@ -267,7 +230,7 @@
true)
(do
- (l/dbg :hint "skip" :file-id (str file-id))
+ (l/dbg :hint "skip cleaning, criteria does not match" :file-id (str file-id))
false)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -282,26 +245,23 @@
(defmethod ig/init-key ::handler
[_ cfg]
(fn [{:keys [props] :as task}]
- (let [min-age (ct/duration (or (:min-age props)
- (cf/get-deletion-delay)))
- file-id (get props :file-id)
- cfg (-> cfg
- (assoc ::db/rollback (:rollback? props))
- (assoc ::min-age min-age))]
+ (try
+ (-> cfg
+ (assoc ::db/rollback (:rollback? props))
+ (db/tx-run! (fn [{:keys [::db/conn] :as cfg}]
+ (let [cfg (-> cfg
+ (update ::sto/storage sto/configure conn)
+ (assoc ::timestamp (ct/now)))
+ processed? (process-file! cfg props)]
- (try
- (db/tx-run! cfg (fn [{:keys [::db/conn] :as cfg}]
- (let [cfg (update cfg ::sto/storage sto/configure conn)
- processed? (process-file! cfg file-id)]
- (when (and processed? (contains? cf/flags :tiered-file-data-storage))
- (wrk/submit! (-> cfg
- (assoc ::wrk/task :offload-file-data)
- (assoc ::wrk/params props)
- (assoc ::wrk/priority 10)
- (assoc ::wrk/delay 1000))))
- processed?)))
-
- (catch Throwable cause
- (l/err :hint "error on cleaning file"
- :file-id (str (:file-id props))
- :cause cause))))))
+ (when (and processed? (contains? cf/flags :tiered-file-data-storage))
+ (wrk/submit! (-> cfg
+ (assoc ::wrk/task :offload-file-data)
+ (assoc ::wrk/params props)
+ (assoc ::wrk/priority 10)
+ (assoc ::wrk/delay 1000))))
+ processed?))))
+ (catch Throwable cause
+ (l/err :hint "error on cleaning file"
+ :file-id (str (:file-id props))
+ :cause cause)))))
diff --git a/backend/src/app/tasks/file_gc_scheduler.clj b/backend/src/app/tasks/file_gc_scheduler.clj
index 5dd732f404..32c1d4152c 100644
--- a/backend/src/app/tasks/file_gc_scheduler.clj
+++ b/backend/src/app/tasks/file_gc_scheduler.clj
@@ -17,29 +17,29 @@
(def ^:private
sql:get-candidates
"SELECT f.id,
+ f.revn,
f.modified_at
FROM file AS f
WHERE f.has_media_trimmed IS false
AND f.modified_at < now() - ?::interval
AND f.deleted_at IS NULL
ORDER BY f.modified_at DESC
- FOR UPDATE
+ FOR UPDATE OF f
SKIP LOCKED")
(defn- get-candidates
[{:keys [::db/conn ::min-age] :as cfg}]
(let [min-age (db/interval min-age)]
- (db/cursor conn [sql:get-candidates min-age] {:chunk-size 10})))
+ (db/plan conn [sql:get-candidates min-age] {:fetch-size 10})))
(defn- schedule!
- [{:keys [::min-age] :as cfg}]
- (let [total (reduce (fn [total {:keys [id]}]
- (let [params {:file-id id :min-age min-age}]
+ [cfg]
+ (let [total (reduce (fn [total {:keys [id modified-at revn]}]
+ (let [params {:file-id id :modified-at modified-at :revn revn}]
(wrk/submit! (assoc cfg ::wrk/params params))
(inc total)))
0
(get-candidates cfg))]
-
{:processed total}))
(defmethod ig/assert-key ::handler
@@ -48,7 +48,7 @@
(defmethod ig/expand-key ::handler
[k v]
- {k (assoc v ::min-age (cf/get-deletion-delay))})
+ {k (assoc v ::min-age (cf/get-file-clean-delay))})
(defmethod ig/init-key ::handler
[_ cfg]
diff --git a/backend/src/app/tasks/objects_gc.clj b/backend/src/app/tasks/objects_gc.clj
index 319ef2f526..75b9c70065 100644
--- a/backend/src/app/tasks/objects_gc.clj
+++ b/backend/src/app/tasks/objects_gc.clj
@@ -11,6 +11,7 @@
[app.common.logging :as l]
[app.common.time :as ct]
[app.db :as db]
+ [app.features.fdata :as fdata]
[app.storage :as sto]
[integrant.core :as ig]))
@@ -27,14 +28,14 @@
[{:keys [::db/conn ::deletion-threshold ::chunk-size ::sto/storage] :as cfg}]
(->> (db/plan conn [sql:get-profiles deletion-threshold chunk-size] {:fetch-size 5})
(reduce (fn [total {:keys [id photo-id]}]
- (l/trc :hint "permanently delete" :rel "profile" :id (str id))
+ (l/trc :obj "profile" :id (str id))
;; Mark as deleted the storage object
(some->> photo-id (sto/touch-object! storage))
- (db/delete! conn :profile {:id id})
-
- (inc total))
+ (let [affected (-> (db/delete! conn :profile {:id id})
+ (db/get-update-count))]
+ (+ total affected)))
0)))
(def ^:private sql:get-teams
@@ -50,8 +51,7 @@
[{:keys [::db/conn ::deletion-threshold ::chunk-size ::sto/storage] :as cfg}]
(->> (db/plan conn [sql:get-teams deletion-threshold chunk-size] {:fetch-size 5})
(reduce (fn [total {:keys [id photo-id deleted-at]}]
- (l/trc :hint "permanently delete"
- :rel "team"
+ (l/trc :obj "team"
:id (str id)
:deleted-at (ct/format-inst deleted-at))
@@ -59,9 +59,9 @@
(some->> photo-id (sto/touch-object! storage))
;; And finally, permanently delete the team.
- (db/delete! conn :team {:id id})
-
- (inc total))
+ (let [affected (-> (db/delete! conn :team {:id id})
+ (db/get-update-count))]
+ (+ total affected)))
0)))
(def ^:private sql:get-fonts
@@ -78,8 +78,7 @@
[{:keys [::db/conn ::deletion-threshold ::chunk-size ::sto/storage] :as cfg}]
(->> (db/plan conn [sql:get-fonts deletion-threshold chunk-size] {:fetch-size 5})
(reduce (fn [total {:keys [id team-id deleted-at] :as font}]
- (l/trc :hint "permanently delete"
- :rel "team-font-variant"
+ (l/trc :obj "font-variant"
:id (str id)
:team-id (str team-id)
:deleted-at (ct/format-inst deleted-at))
@@ -90,10 +89,9 @@
(some->> (:otf-file-id font) (sto/touch-object! storage))
(some->> (:ttf-file-id font) (sto/touch-object! storage))
- ;; And finally, permanently delete the team font variant
- (db/delete! conn :team-font-variant {:id id})
-
- (inc total))
+ (let [affected (-> (db/delete! conn :team-font-variant {:id id})
+ (db/get-update-count))]
+ (+ total affected)))
0)))
(def ^:private sql:get-projects
@@ -110,45 +108,40 @@
[{:keys [::db/conn ::deletion-threshold ::chunk-size] :as cfg}]
(->> (db/plan conn [sql:get-projects deletion-threshold chunk-size] {:fetch-size 5})
(reduce (fn [total {:keys [id team-id deleted-at]}]
- (l/trc :hint "permanently delete"
- :rel "project"
+ (l/trc :obj "project"
:id (str id)
:team-id (str team-id)
:deleted-at (ct/format-inst deleted-at))
- ;; And finally, permanently delete the project.
- (db/delete! conn :project {:id id})
-
- (inc total))
+ (let [affected (-> (db/delete! conn :project {:id id})
+ (db/get-update-count))]
+ (+ total affected)))
0)))
(def ^:private sql:get-files
- "SELECT id, deleted_at, project_id, data_backend, data_ref_id
- FROM file
- WHERE deleted_at IS NOT NULL
- AND deleted_at < now() + ?::interval
- ORDER BY deleted_at ASC
+ "SELECT f.id,
+ f.deleted_at,
+ f.project_id
+ FROM file AS f
+ WHERE f.deleted_at IS NOT NULL
+ AND f.deleted_at < now() + ?::interval
+ ORDER BY f.deleted_at ASC
LIMIT ?
FOR UPDATE
SKIP LOCKED")
(defn- delete-files!
- [{:keys [::db/conn ::sto/storage ::deletion-threshold ::chunk-size] :as cfg}]
+ [{:keys [::db/conn ::deletion-threshold ::chunk-size] :as cfg}]
(->> (db/plan conn [sql:get-files deletion-threshold chunk-size] {:fetch-size 5})
(reduce (fn [total {:keys [id deleted-at project-id] :as file}]
- (l/trc :hint "permanently delete"
- :rel "file"
+ (l/trc :obj "file"
:id (str id)
:project-id (str project-id)
:deleted-at (ct/format-inst deleted-at))
- (when (= "objects-storage" (:data-backend file))
- (sto/touch-object! storage (:data-ref-id file)))
-
- ;; And finally, permanently delete the file.
- (db/delete! conn :file {:id id})
-
- (inc total))
+ (let [affected (-> (db/delete! conn :file {:id id})
+ (db/get-update-count))]
+ (+ total affected)))
0)))
(def ^:private sql:get-file-thumbnails
@@ -165,8 +158,7 @@
[{:keys [::db/conn ::deletion-threshold ::chunk-size ::sto/storage] :as cfg}]
(->> (db/plan conn [sql:get-file-thumbnails deletion-threshold chunk-size] {:fetch-size 5})
(reduce (fn [total {:keys [file-id revn media-id deleted-at]}]
- (l/trc :hint "permanently delete"
- :rel "file-thumbnail"
+ (l/trc :obj "file-thumbnail"
:file-id (str file-id)
:revn revn
:deleted-at (ct/format-inst deleted-at))
@@ -174,10 +166,9 @@
;; Mark as deleted the storage object
(some->> media-id (sto/touch-object! storage))
- ;; And finally, permanently delete the object
- (db/delete! conn :file-thumbnail {:file-id file-id :revn revn})
-
- (inc total))
+ (let [affected (-> (db/delete! conn :file-thumbnail {:file-id file-id :revn revn})
+ (db/get-update-count))]
+ (+ total affected)))
0)))
(def ^:private sql:get-file-object-thumbnails
@@ -194,8 +185,7 @@
[{:keys [::db/conn ::deletion-threshold ::chunk-size ::sto/storage] :as cfg}]
(->> (db/plan conn [sql:get-file-object-thumbnails deletion-threshold chunk-size] {:fetch-size 5})
(reduce (fn [total {:keys [file-id object-id media-id deleted-at]}]
- (l/trc :hint "permanently delete"
- :rel "file-tagged-object-thumbnail"
+ (l/trc :obj "file-object-thumbnail"
:file-id (str file-id)
:object-id object-id
:deleted-at (ct/format-inst deleted-at))
@@ -203,36 +193,10 @@
;; Mark as deleted the storage object
(some->> media-id (sto/touch-object! storage))
- ;; And finally, permanently delete the object
- (db/delete! conn :file-tagged-object-thumbnail {:file-id file-id :object-id object-id})
-
- (inc total))
- 0)))
-
-(def ^:private sql:get-file-data-fragments
- "SELECT file_id, id, deleted_at, data_ref_id
- FROM file_data_fragment
- WHERE deleted_at IS NOT NULL
- AND deleted_at < now() + ?::interval
- ORDER BY deleted_at ASC
- LIMIT ?
- FOR UPDATE
- SKIP LOCKED")
-
-(defn- delete-file-data-fragments!
- [{:keys [::db/conn ::sto/storage ::deletion-threshold ::chunk-size] :as cfg}]
- (->> (db/plan conn [sql:get-file-data-fragments deletion-threshold chunk-size] {:fetch-size 5})
- (reduce (fn [total {:keys [file-id id deleted-at data-ref-id]}]
- (l/trc :hint "permanently delete"
- :rel "file-data-fragment"
- :id (str id)
- :file-id (str file-id)
- :deleted-at (ct/format-inst deleted-at))
-
- (some->> data-ref-id (sto/touch-object! storage))
- (db/delete! conn :file-data-fragment {:file-id file-id :id id})
-
- (inc total))
+ (let [affected (-> (db/delete! conn :file-tagged-object-thumbnail
+ {:file-id file-id :object-id object-id})
+ (db/get-update-count))]
+ (+ total affected)))
0)))
(def ^:private sql:get-file-media-objects
@@ -249,8 +213,7 @@
[{:keys [::db/conn ::deletion-threshold ::chunk-size ::sto/storage] :as cfg}]
(->> (db/plan conn [sql:get-file-media-objects deletion-threshold chunk-size] {:fetch-size 5})
(reduce (fn [total {:keys [id file-id deleted-at] :as fmo}]
- (l/trc :hint "permanently delete"
- :rel "file-media-object"
+ (l/trc :obj "file-media-object"
:id (str id)
:file-id (str file-id)
:deleted-at (ct/format-inst deleted-at))
@@ -259,13 +222,48 @@
(some->> (:media-id fmo) (sto/touch-object! storage))
(some->> (:thumbnail-id fmo) (sto/touch-object! storage))
- (db/delete! conn :file-media-object {:id id})
+ (let [affected (-> (db/delete! conn :file-media-object {:id id})
+ (db/get-update-count))]
+ (+ total affected)))
+ 0)))
- (inc total))
+(def ^:private sql:get-file-data
+ "SELECT file_id, id, type, deleted_at, metadata, backend
+ FROM file_data
+ WHERE deleted_at IS NOT NULL
+ AND deleted_at < now() + ?::interval
+ ORDER BY deleted_at ASC
+ LIMIT ?
+ FOR UPDATE
+ SKIP LOCKED")
+
+(defn- delete-file-data!
+ [{:keys [::db/conn ::deletion-threshold ::chunk-size] :as cfg}]
+
+ (->> (db/plan conn [sql:get-file-data deletion-threshold chunk-size] {:fetch-size 5})
+ (reduce (fn [total {:keys [file-id id type deleted-at metadata backend]}]
+
+ (some->> metadata
+ (fdata/decode-metadata)
+ (fdata/process-metadata cfg))
+
+ (l/trc :obj "file-data"
+ :id (str id)
+ :file-id (str file-id)
+ :type type
+ :backend backend
+ :deleted-at (ct/format-inst deleted-at))
+
+ (let [affected (-> (db/delete! conn :file-data
+ {:file-id file-id
+ :id id
+ :type type})
+ (db/get-update-count))]
+ (+ total affected)))
0)))
(def ^:private sql:get-file-change
- "SELECT id, file_id, deleted_at, data_backend, data_ref_id
+ "SELECT id, file_id, deleted_at
FROM file_change
WHERE deleted_at IS NOT NULL
AND deleted_at < now() + ?::interval
@@ -275,29 +273,25 @@
SKIP LOCKED")
(defn- delete-file-changes!
- [{:keys [::db/conn ::deletion-threshold ::chunk-size ::sto/storage] :as cfg}]
+ [{:keys [::db/conn ::deletion-threshold ::chunk-size] :as cfg}]
(->> (db/plan conn [sql:get-file-change deletion-threshold chunk-size] {:fetch-size 5})
(reduce (fn [total {:keys [id file-id deleted-at] :as xlog}]
- (l/trc :hint "permanently delete"
- :rel "file-change"
+ (l/trc :obj "file-change"
:id (str id)
:file-id (str file-id)
:deleted-at (ct/format-inst deleted-at))
- (when (= "objects-storage" (:data-backend xlog))
- (sto/touch-object! storage (:data-ref-id xlog)))
-
- (db/delete! conn :file-change {:id id})
-
- (inc total))
+ (let [affected (-> (db/delete! conn :file-change {:id id})
+ (db/get-update-count))]
+ (+ total affected)))
0)))
(def ^:private deletion-proc-vars
[#'delete-profiles!
#'delete-file-media-objects!
- #'delete-file-data-fragments!
#'delete-file-object-thumbnails!
#'delete-file-thumbnails!
+ #'delete-file-data!
#'delete-file-changes!
#'delete-files!
#'delete-projects!
@@ -309,9 +303,10 @@
until 0 results is returned"
[cfg proc-fn]
(loop [total 0]
- (let [result (db/tx-run! cfg (fn [{:keys [::db/conn] :as cfg}]
- (db/exec-one! conn ["SET LOCAL rules.deletion_protection TO off"])
- (proc-fn cfg)))]
+ (let [result (db/tx-run! cfg
+ (fn [{:keys [::db/conn] :as cfg}]
+ (db/exec-one! conn ["SET LOCAL rules.deletion_protection TO off"])
+ (proc-fn cfg)))]
(if (pos? result)
(recur (long (+ total result)))
total))))
@@ -336,6 +331,4 @@
(let [result (execute-proc! cfg proc-fn)]
(recur (rest procs)
(long (+ total result))))
- (do
- (l/inf :hint "task finished" :deleted total)
- {:processed total}))))))
+ {:processed total})))))
diff --git a/backend/src/app/tasks/offload_file_data.clj b/backend/src/app/tasks/offload_file_data.clj
index c6ea5b0f88..965fff1e9b 100644
--- a/backend/src/app/tasks/offload_file_data.clj
+++ b/backend/src/app/tasks/offload_file_data.clj
@@ -8,101 +8,25 @@
"A maintenance task responsible of moving file data from hot
storage (the database row) to a cold storage (fs or s3)."
(:require
- [app.common.exceptions :as ex]
[app.common.logging :as l]
[app.db :as db]
- [app.db.sql :as-alias sql]
+ [app.features.fdata :as fdata]
[app.storage :as sto]
[integrant.core :as ig]))
-(defn- offload-file-data!
- [{:keys [::db/conn ::sto/storage ::file-id] :as cfg}]
- (let [file (db/get conn :file {:id file-id}
- {::sql/for-update true})]
- (when (nil? (:data file))
- (ex/raise :hint "file already offloaded"
- :type :internal
- :code :file-already-offloaded
- :file-id file-id))
+(def ^:private sql:get-file-data
+ "SELECT fd.*
+ FROM file_data AS fd
+ WHERE fd.file_id = ?
+ AND fd.backend = 'db'
+ AND fd.deleted_at IS NULL")
- (let [data (sto/content (:data file))
- sobj (sto/put-object! storage
- {::sto/content data
- ::sto/touch true
- :bucket "file-data"
- :content-type "application/octet-stream"
- :file-id file-id})]
-
- (l/trc :hint "offload file data"
- :file-id (str file-id)
- :storage-id (str (:id sobj)))
-
- (db/update! conn :file
- {:data-backend "objects-storage"
- :data-ref-id (:id sobj)
- :data nil}
- {:id file-id}
- {::db/return-keys false}))))
-
-(defn- offload-file-data-fragments!
- [{:keys [::db/conn ::sto/storage ::file-id] :as cfg}]
- (doseq [fragment (db/query conn :file-data-fragment
- {:file-id file-id
- :deleted-at nil
- :data-backend nil}
- {::db/for-update true})]
- (let [data (sto/content (:data fragment))
- sobj (sto/put-object! storage
- {::sto/content data
- ::sto/touch true
- :bucket "file-data-fragment"
- :content-type "application/octet-stream"
- :file-id file-id
- :file-fragment-id (:id fragment)})]
-
- (l/trc :hint "offload file data fragment"
- :file-id (str file-id)
- :file-fragment-id (str (:id fragment))
- :storage-id (str (:id sobj)))
-
- (db/update! conn :file-data-fragment
- {:data-backend "objects-storage"
- :data-ref-id (:id sobj)
- :data nil}
- {:id (:id fragment)}
- {::db/return-keys false}))))
-
-(def sql:get-snapshots
- "SELECT fc.*
- FROM file_change AS fc
- WHERE fc.file_id = ?
- AND fc.label IS NOT NULL
- AND fc.data IS NOT NULL
- AND fc.data_backend IS NULL")
-
-(defn- offload-file-snapshots!
- [{:keys [::db/conn ::sto/storage ::file-id] :as cfg}]
- (doseq [snapshot (db/exec! conn [sql:get-snapshots file-id])]
- (let [data (sto/content (:data snapshot))
- sobj (sto/put-object! storage
- {::sto/content data
- ::sto/touch true
- :bucket "file-change"
- :content-type "application/octet-stream"
- :file-id file-id
- :file-change-id (:id snapshot)})]
-
- (l/trc :hint "offload file change"
- :file-id (str file-id)
- :file-change-id (str (:id snapshot))
- :storage-id (str (:id sobj)))
-
- (db/update! conn :file-change
- {:data-backend "objects-storage"
- :data-ref-id (:id sobj)
- :data nil}
- {:id (:id snapshot)}
- {::db/return-keys false}))))
+(defn- offload-file-data
+ [cfg {:keys [id file-id type] :as fdata}]
+ (fdata/upsert! cfg (assoc fdata :backend "storage"))
+ (l/trc :file-id (str file-id)
+ :id (str id)
+ :type type))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; HANDLER
@@ -116,10 +40,9 @@
(defmethod ig/init-key ::handler
[_ cfg]
(fn [{:keys [props] :as task}]
- (-> cfg
- (assoc ::db/rollback (:rollback? props))
- (assoc ::file-id (:file-id props))
- (db/tx-run! (fn [cfg]
- (offload-file-data! cfg)
- (offload-file-data-fragments! cfg)
- (offload-file-snapshots! cfg))))))
+ (let [file-id (:file-id props)]
+ (-> cfg
+ (assoc ::db/rollback (:rollback? props))
+ (db/tx-run! (fn [{:keys [::db/conn] :as cfg}]
+ (run! (partial offload-file-data cfg)
+ (db/plan conn [sql:get-file-data file-id]))))))))
diff --git a/backend/src/app/tokens.clj b/backend/src/app/tokens.clj
index 14415d0892..d08b8be58f 100644
--- a/backend/src/app/tokens.clj
+++ b/backend/src/app/tokens.clj
@@ -8,33 +8,40 @@
"Tokens generation API."
(:require
[app.common.data :as d]
- [app.common.data.macros :as dm]
[app.common.exceptions :as ex]
[app.common.time :as ct]
[app.common.transit :as t]
+ [app.setup :as-alias setup]
[buddy.sign.jwe :as jwe]))
(defn generate
- [{:keys [tokens-key]} claims]
+ [{:keys [::setup/props] :as cfg} claims]
+ (assert (contains? cfg ::setup/props))
- (dm/assert!
- "expexted token-key to be bytes instance"
- (bytes? tokens-key))
+ (let [tokens-key
+ (get props :tokens-key)
+
+ payload
+ (-> claims
+ (update :iat (fn [v] (or v (ct/now))))
+ (d/without-nils)
+ (t/encode))]
- (let [payload (-> claims
- (assoc :iat (ct/now))
- (d/without-nils)
- (t/encode))]
(jwe/encrypt payload tokens-key {:alg :a256kw :enc :a256gcm})))
(defn decode
- [{:keys [tokens-key]} token]
- (let [payload (jwe/decrypt token tokens-key {:alg :a256kw :enc :a256gcm})]
+ [{:keys [::setup/props] :as cfg} token]
+ (let [tokens-key
+ (get props :tokens-key)
+
+ payload
+ (jwe/decrypt token tokens-key {:alg :a256kw :enc :a256gcm})]
+
(t/decode payload)))
(defn verify
- [sprops {:keys [token] :as params}]
- (let [claims (decode sprops token)]
+ [cfg {:keys [token] :as params}]
+ (let [claims (decode cfg token)]
(when (and (ct/inst? (:exp claims))
(ct/is-before? (:exp claims) (ct/now)))
(ex/raise :type :validation
diff --git a/backend/src/app/util/events.clj b/backend/src/app/util/events.clj
index b26810cb04..5fd8b6474c 100644
--- a/backend/src/app/util/events.clj
+++ b/backend/src/app/util/events.clj
@@ -27,7 +27,7 @@
(sp/put! channel [type data])
nil)))
-(defn start-listener
+(defn spawn-listener
[channel on-event on-close]
(assert (sp/chan? channel) "expected active events channel")
@@ -51,7 +51,7 @@
[f on-event]
(binding [*channel* (sp/chan :buf 32)]
- (let [listener (start-listener *channel* on-event (constantly nil))]
+ (let [listener (spawn-listener *channel* on-event (constantly nil))]
(try
(f)
(finally
diff --git a/backend/src/app/worker/dispatcher.clj b/backend/src/app/worker/dispatcher.clj
index 3d1ed18707..f95ade8e1c 100644
--- a/backend/src/app/worker/dispatcher.clj
+++ b/backend/src/app/worker/dispatcher.clj
@@ -7,7 +7,6 @@
(ns app.worker.dispatcher
(:require
[app.common.data :as d]
- [app.common.data.macros :as dm]
[app.common.logging :as l]
[app.common.schema :as sm]
[app.common.time :as ct]
@@ -18,7 +17,9 @@
[app.worker :as-alias wrk]
[cuerdas.core :as str]
[integrant.core :as ig]
- [promesa.exec :as px]))
+ [promesa.exec :as px])
+ (:import
+ java.lang.AutoCloseable))
(set! *warn-on-reflection* true)
@@ -27,7 +28,7 @@
[::wrk/tenant ::sm/text]
::mtx/metrics
::db/pool
- ::rds/redis])
+ ::rds/client])
(defmethod ig/expand-key ::wrk/dispatcher
[k v]
@@ -41,67 +42,136 @@
(assert (sm/check schema:dispatcher cfg)))
(def ^:private sql:select-next-tasks
- "select id, queue from task as t
- where t.scheduled_at <= now()
- and (t.status = 'new' or t.status = 'retry')
- and queue ~~* ?::text
- order by t.priority desc, t.scheduled_at
- limit ?
- for update skip locked")
+ "SELECT id, queue, scheduled_at from task AS t
+ WHERE t.scheduled_at <= ?::timestamptz
+ AND (t.status = 'new' OR t.status = 'retry')
+ AND queue ~~* ?::text
+ ORDER BY t.priority DESC, t.scheduled_at
+ LIMIT ?
+ FOR UPDATE
+ SKIP LOCKED")
+
+(def ^:private sql:mark-task-scheduled
+ "UPDATE task SET status = 'scheduled'
+ WHERE id = ANY(?)")
+
+(def ^:private sql:reschedule-lost
+ "UPDATE task
+ SET status='new', scheduled_at=?::timestamptz
+ FROM (SELECT t.id
+ FROM task AS t
+ WHERE status = 'scheduled'
+ AND (?::timestamptz - t.scheduled_at) > '5 min'::interval) AS subquery
+ WHERE task.id=subquery.id
+RETURNING task.id, task.queue")
+
+(def ^:private sql:clean-orphan
+ "UPDATE task
+ SET status='failed', modified_at=?::timestamptz,
+ error='orphan with running status'
+ FROM (SELECT t.id
+ FROM task AS t
+ WHERE status = 'running'
+ AND (?::timestamptz - t.modified_at) > '24 hour'::interval) AS subquery
+ WHERE task.id=subquery.id
+RETURNING task.id, task.queue")
(defmethod ig/init-key ::wrk/dispatcher
- [_ {:keys [::db/pool ::rds/redis ::wrk/tenant ::batch-size ::timeout] :as cfg}]
- (letfn [(get-tasks [conn]
- (let [prefix (str tenant ":%")]
- (seq (db/exec! conn [sql:select-next-tasks prefix batch-size]))))
+ [_ {:keys [::db/pool ::wrk/tenant ::batch-size ::timeout] :as cfg}]
+ (letfn [(reschedule-lost-tasks [{:keys [::db/conn ::timestamp]}]
+ (doseq [{:keys [id queue]} (db/exec! conn [sql:reschedule-lost timestamp timestamp]
+ {:return-keys true})]
+ (l/wrn :hint "reschedule"
+ :id (str id)
+ :queue queue)))
- (push-tasks! [conn rconn [queue tasks]]
- (let [ids (mapv :id tasks)
- key (str/ffmt "taskq:%" queue)
- res (rds/rpush rconn key (mapv t/encode ids))
- sql [(str "update task set status = 'scheduled'"
- " where id = ANY(?)")
+ (clean-orphan [{:keys [::db/conn ::timestamp]}]
+ (doseq [{:keys [id queue]} (db/exec! conn [sql:clean-orphan timestamp timestamp]
+ {:return-keys true})]
+ (l/wrn :hint "mark as orphan failed"
+ :id (str id)
+ :queue queue)))
+
+ (get-tasks [{:keys [::db/conn ::timestamp] :as cfg}]
+ (let [prefix (str tenant ":%")
+ result (db/exec! conn [sql:select-next-tasks timestamp prefix batch-size])]
+ (not-empty result)))
+
+ (mark-as-scheduled [{:keys [::db/conn]} items]
+ (let [ids (map :id items)
+ sql [sql:mark-task-scheduled
(db/create-array conn "uuid" ids)]]
+ (db/exec-one! conn sql)))
- (db/exec-one! conn sql)
- (l/trc :hist "enqueue tasks on redis"
- :queue queue
- :tasks (count ids)
- :queued res)))
+ (push-tasks [{:keys [::rds/conn] :as cfg} [queue tasks]]
+ (let [items (mapv (juxt :id :scheduled-at) tasks)
+ key (str/ffmt "penpot.worker.queue:%" queue)]
- (run-batch! [rconn]
- (try
- (db/tx-run! cfg (fn [{:keys [::db/conn]}]
- (if-let [tasks (get-tasks conn)]
- (->> (group-by :queue tasks)
- (run! (partial push-tasks! conn rconn)))
- ;; FIXME: this sleep should be outside the transaction
- (px/sleep (::wait-duration cfg)))))
- (catch InterruptedException cause
- (throw cause))
- (catch Exception cause
- (cond
- (rds/exception? cause)
- (do
- (l/wrn :hint "redis exception (will retry in an instant)" :cause cause)
- (px/sleep timeout))
+ (rds/rpush conn key (mapv t/encode-str items))
+ (mark-as-scheduled cfg tasks)
- (db/sql-exception? cause)
- (do
- (l/wrn :hint "database exception (will retry in an instant)" :cause cause)
- (px/sleep timeout))
+ (doseq [{:keys [id queue]} tasks]
+ (l/trc :hist "schedule"
+ :id (str id)
+ :queue queue))))
- :else
- (do
- (l/err :hint "unhandled exception (will retry in an instant)" :cause cause)
- (px/sleep timeout))))))
+ (run-batch' [cfg]
+ (let [cfg (assoc cfg ::timestamp (ct/now))]
+ ;; Reschedule lost in transit tasks (can happen when
+ ;; redis server is restarted just after task is pushed)
+ (reschedule-lost-tasks cfg)
+
+ ;; Mark as failed all tasks that are still marked as
+ ;; running but it's been more than 24 hours since its
+ ;; last modification
+ (clean-orphan cfg)
+
+ ;; Then, schedule the next tasks in queue
+ (if-let [tasks (get-tasks cfg)]
+ (->> (group-by :queue tasks)
+ (run! (partial push-tasks cfg)))
+
+ ;; If no tasks found on this batch run, we signal the
+ ;; run-loop to wait for some time before start running
+ ;; the next batch interation
+ ::wait)))
+
+ (run-batch []
+ (let [rconn (rds/connect cfg)]
+ (try
+ (-> cfg
+ (assoc ::rds/conn rconn)
+ (db/tx-run! run-batch'))
+
+ (catch InterruptedException cause
+ (throw cause))
+ (catch Exception cause
+ (cond
+ (rds/exception? cause)
+ (do
+ (l/wrn :hint "redis exception (will retry in an instant)" :cause cause)
+ (px/sleep timeout))
+
+ (db/sql-exception? cause)
+ (do
+ (l/wrn :hint "database exception (will retry in an instant)" :cause cause)
+ (px/sleep timeout))
+
+ :else
+ (do
+ (l/err :hint "unhandled exception (will retry in an instant)" :cause cause)
+ (px/sleep timeout))))
+
+ (finally
+ (.close ^AutoCloseable rconn)))))
(dispatcher []
(l/inf :hint "started")
(try
- (dm/with-open [rconn (rds/connect redis)]
- (loop []
- (run-batch! rconn)
+ (loop []
+ (let [result (run-batch)]
+ (when (= result ::wait)
+ (px/sleep (::wait-duration cfg)))
(recur)))
(catch InterruptedException _
(l/trc :hint "interrupted"))
@@ -112,7 +182,7 @@
(if (db/read-only? pool)
(l/wrn :hint "not started (db is read-only)")
- (px/fn->thread dispatcher :name "penpot/worker/dispatcher" :virtual false))))
+ (px/fn->thread dispatcher :name "penpot/worker-dispatcher"))))
(defmethod ig/halt-key! ::wrk/dispatcher
[_ thread]
diff --git a/backend/src/app/worker/executor.clj b/backend/src/app/worker/executor.clj
index acd6290bba..7d9526be10 100644
--- a/backend/src/app/worker/executor.clj
+++ b/backend/src/app/worker/executor.clj
@@ -7,97 +7,83 @@
(ns app.worker.executor
"Async tasks abstraction (impl)."
(:require
- [app.common.data :as d]
[app.common.logging :as l]
+ [app.common.math :as mth]
[app.common.schema :as sm]
- [app.common.time :as ct]
- [app.metrics :as mtx]
[app.worker :as-alias wrk]
[integrant.core :as ig]
[promesa.exec :as px])
(:import
- java.util.concurrent.ThreadPoolExecutor))
+ io.netty.channel.nio.NioEventLoopGroup
+ io.netty.util.concurrent.DefaultEventExecutorGroup
+ java.util.concurrent.ExecutorService
+ java.util.concurrent.ThreadFactory
+ java.util.concurrent.TimeUnit))
(set! *warn-on-reflection* true)
(sm/register!
{:type ::wrk/executor
- :pred #(instance? ThreadPoolExecutor %)
+ :pred #(instance? ExecutorService %)
:type-properties
{:title "executor"
- :description "Instance of ThreadPoolExecutor"}})
+ :description "Instance of ExecutorService"}})
+
+(sm/register!
+ {:type ::wrk/netty-io-executor
+ :pred #(instance? NioEventLoopGroup %)
+ :type-properties
+ {:title "executor"
+ :description "Instance of NioEventLoopGroup"}})
+
+(sm/register!
+ {:type ::wrk/netty-executor
+ :pred #(instance? DefaultEventExecutorGroup %)
+ :type-properties
+ {:title "executor"
+ :description "Instance of DefaultEventExecutorGroup"}})
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; EXECUTOR
+;; IO Executor
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defmethod ig/init-key ::wrk/executor
- [_ _]
- (let [factory (px/thread-factory :prefix "penpot/default/")
- executor (px/cached-executor :factory factory :keepalive 60000)]
- (l/inf :hint "executor started")
- executor))
+(defmethod ig/assert-key ::wrk/netty-io-executor
+ [_ {:keys [threads]}]
+ (assert (or (nil? threads) (int? threads))
+ "expected valid threads value, revisit PENPOT_NETTY_IO_THREADS environment variable"))
-(defmethod ig/halt-key! ::wrk/executor
+(defmethod ig/init-key ::wrk/netty-io-executor
+ [_ {:keys [threads]}]
+ (let [factory (px/thread-factory :prefix "penpot/netty-io/")
+ nthreads (or threads (mth/round (/ (px/get-available-processors) 2)))
+ nthreads (max 2 nthreads)]
+ (l/inf :hint "start netty io executor" :threads nthreads)
+ (NioEventLoopGroup. (int nthreads) ^ThreadFactory factory)))
+
+(defmethod ig/halt-key! ::wrk/netty-io-executor
+ [_ instance]
+ (deref (.shutdownGracefully ^NioEventLoopGroup instance
+ (long 100)
+ (long 1000)
+ TimeUnit/MILLISECONDS)))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; IO Offload Executor
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defmethod ig/assert-key ::wrk/netty-executor
+ [_ {:keys [threads]}]
+ (assert (or (nil? threads) (int? threads))
+ "expected valid threads value, revisit PENPOT_EXEC_THREADS environment variable"))
+
+(defmethod ig/init-key ::wrk/netty-executor
+ [_ {:keys [threads]}]
+ (let [factory (px/thread-factory :prefix "penpot/exec/")
+ nthreads (or threads (mth/round (/ (px/get-available-processors) 2)))
+ nthreads (max 2 nthreads)]
+ (l/inf :hint "start default executor" :threads nthreads)
+ (DefaultEventExecutorGroup. (int nthreads) ^ThreadFactory factory)))
+
+(defmethod ig/halt-key! ::wrk/netty-executor
[_ instance]
(px/shutdown! instance))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; MONITOR
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defn- get-stats
- [^ThreadPoolExecutor executor]
- {:active (.getPoolSize ^ThreadPoolExecutor executor)
- :running (.getActiveCount ^ThreadPoolExecutor executor)
- :completed (.getCompletedTaskCount ^ThreadPoolExecutor executor)})
-
-(defmethod ig/expand-key ::wrk/monitor
- [k v]
- {k (-> (d/without-nils v)
- (assoc ::interval (ct/duration "2s")))})
-
-(defmethod ig/init-key ::wrk/monitor
- [_ {:keys [::wrk/executor ::mtx/metrics ::interval ::wrk/name]}]
- (letfn [(monitor! [executor prev-completed]
- (let [labels (into-array String [(d/name name)])
- stats (get-stats executor)
-
- completed (:completed stats)
- completed-inc (- completed prev-completed)
- completed-inc (if (neg? completed-inc) 0 completed-inc)]
-
- (mtx/run! metrics
- :id :executor-active-threads
- :labels labels
- :val (:active stats))
-
- (mtx/run! metrics
- :id :executor-running-threads
- :labels labels
- :val (:running stats))
-
- (mtx/run! metrics
- :id :executors-completed-tasks
- :labels labels
- :inc completed-inc)
-
- completed-inc))]
-
- (px/thread
- {:name "penpot/executors-monitor" :virtual true}
- (l/inf :hint "monitor started" :name name)
- (try
- (loop [completed 0]
- (px/sleep interval)
- (recur (long (monitor! executor completed))))
- (catch InterruptedException _cause
- (l/trc :hint "monitor: interrupted" :name name))
- (catch Throwable cause
- (l/err :hint "monitor: unexpected error" :name name :cause cause))
- (finally
- (l/inf :hint "monitor: terminated" :name name))))))
-
-(defmethod ig/halt-key! ::wrk/monitor
- [_ thread]
- (px/interrupt! thread))
diff --git a/backend/src/app/worker/runner.clj b/backend/src/app/worker/runner.clj
index ce9b7ee5a9..ea8cd08cf2 100644
--- a/backend/src/app/worker/runner.clj
+++ b/backend/src/app/worker/runner.clj
@@ -8,7 +8,6 @@
"Async tasks abstraction (impl)."
(:require
[app.common.data :as d]
- [app.common.data.macros :as dm]
[app.common.exceptions :as ex]
[app.common.logging :as l]
[app.common.schema :as sm]
@@ -20,7 +19,9 @@
[app.worker :as wrk]
[cuerdas.core :as str]
[integrant.core :as ig]
- [promesa.exec :as px]))
+ [promesa.exec :as px])
+ (:import
+ java.lang.AutoCloseable))
(set! *warn-on-reflection* true)
@@ -37,7 +38,7 @@
[:max-retries :int]
[:retry-num :int]
[:priority :int]
- [:status [:enum "scheduled" "completed" "new" "retry" "failed"]]
+ [:status [:enum "scheduled" "running" "completed" "new" "retry" "failed"]]
[:label {:optional true} :string]
[:props :map]])
@@ -68,7 +69,7 @@
(decode-task-row))))
(defn- run-task
- [{:keys [::wrk/registry ::id ::queue] :as cfg} task]
+ [{:keys [::db/pool ::wrk/registry ::id ::queue] :as cfg} task]
(try
(l/dbg :hint "start"
:name (:name task)
@@ -76,6 +77,14 @@
:queue queue
:runner-id id
:retry (:retry-num task))
+
+ ;; Mark task as running
+ (db/update! pool :task
+ {:status "running"
+ :modified-at (ct/now)}
+ {:id (:id task)}
+ {::db/return-keys false})
+
(let [tpoint (ct/tpoint)
task-fn (wrk/get-task registry (:name task))
result (when task-fn (task-fn task))
@@ -119,7 +128,7 @@
{:status "retry" :error cause})))))))
(defn- run-task!
- [{:keys [::id ::timeout] :as cfg} task-id]
+ [{:keys [::id ::timeout] :as cfg} task-id scheduled-at]
(loop [task (get-task cfg task-id)]
(cond
(ex/exception? task)
@@ -127,20 +136,26 @@
(db/serialization-error? task))
(do
(l/wrn :hint "connection error on retrieving task from database (retrying in some instants)"
- :id id
+ :runner-id id
:cause task)
(px/sleep timeout)
(recur (get-task cfg task-id)))
(do
(l/err :hint "unhandled exception on retrieving task from database (retrying in some instants)"
- :id id
+ :runner-id id
:cause task)
(px/sleep timeout)
(recur (get-task cfg task-id))))
+ (not= (inst-ms scheduled-at)
+ (inst-ms (:scheduled-at task)))
+ (l/wrn :hint "skiping task, rescheduled"
+ :task-id task-id
+ :runner-id id)
+
(nil? task)
(l/wrn :hint "no task found on the database"
- :id id
+ :runner-id id
:task-id task-id)
:else
@@ -149,7 +164,7 @@
{::task task})))))
(defn- run-worker-loop!
- [{:keys [::db/pool ::rds/rconn ::timeout ::queue] :as cfg}]
+ [{:keys [::db/pool ::rds/conn ::timeout ::queue] :as cfg}]
(letfn [(handle-task-retry [{:keys [error inc-by delay] :or {inc-by 1 delay 1000} :as result}]
(let [explain (if (ex/exception? error)
(ex-message error)
@@ -183,21 +198,23 @@
(db/update! pool :task
{:completed-at now
:modified-at now
+ :error nil
:status "completed"}
{:id (:id task)})
nil))
- (decode-payload [^bytes payload]
+ (decode-payload [payload]
(try
- (let [task-id (t/decode payload)]
- (if (uuid? task-id)
- task-id
- (l/err :hint "received unexpected payload (uuid expected)"
- :payload task-id)))
+ (let [[task-id scheduled-at :as payload] (t/decode-str payload)]
+ (if (and (uuid? task-id)
+ (ct/inst? scheduled-at))
+ payload
+ (l/err :hint "received unexpected payload"
+ :payload payload)))
(catch Throwable cause
(l/err :hint "unable to decode payload"
:payload payload
- :length (alength payload)
+ :length (alength ^String/1 payload)
:cause cause))))
(process-result [{:keys [status] :as result}]
@@ -209,8 +226,8 @@
(throw (IllegalArgumentException.
(str "invalid status received: " status))))))
- (run-task-loop [task-id]
- (loop [result (run-task! cfg task-id)]
+ (run-task-loop [[task-id scheduled-at]]
+ (loop [result (run-task! cfg task-id scheduled-at)]
(when-let [cause (process-result result)]
(if (or (db/connection-error? cause)
(db/serialization-error? cause))
@@ -220,14 +237,12 @@
(px/sleep timeout)
(recur result))
(do
- (l/err :hint "unhandled exception on processing task result (retrying in some instants)"
- :cause cause)
- (px/sleep timeout)
- (recur result))))))]
+ (l/err :hint "unhandled exception on processing task result"
+ :cause cause))))))]
(try
- (let [key (str/ffmt "taskq:%" queue)
- [_ payload] (rds/blpop rconn timeout [key])]
+ (let [key (str/ffmt "penpot.worker.queue:%" queue)
+ [_ payload] (rds/blpop conn [key] timeout)]
(some-> payload
decode-payload
run-task-loop))
@@ -246,36 +261,37 @@
(l/err :hint "unhandled exception" :cause cause))))))
(defn- start-thread!
- [{:keys [::rds/redis ::id ::queue ::wrk/tenant] :as cfg}]
+ [{:keys [::id ::queue ::wrk/tenant] :as cfg}]
(px/thread
- {:name (format "penpot/worker/runner:%s" id)}
+ {:name (str "penpot/job-runner/" id)}
(l/inf :hint "started" :id id :queue queue)
- (try
- (dm/with-open [rconn (rds/connect redis)]
- (let [cfg (-> cfg
- (assoc ::rds/rconn rconn)
- (assoc ::queue (str/ffmt "%:%" tenant queue))
- (assoc ::timeout (ct/duration "5s")))]
- (loop []
- (when (px/interrupted?)
- (throw (InterruptedException. "interrupted")))
- (run-worker-loop! cfg)
- (recur))))
+ (let [rconn (rds/connect cfg)]
+ (try
+ (loop [cfg (-> cfg
+ (assoc ::rds/conn rconn)
+ (assoc ::queue (str/ffmt "%:%" tenant queue))
+ (assoc ::timeout (ct/duration "5s")))]
+ (when (px/interrupted?)
+ (throw (InterruptedException. "interrupted")))
- (catch InterruptedException _
- (l/dbg :hint "interrupted"
- :id id
- :queue queue))
- (catch Throwable cause
- (l/err :hint "unexpected exception"
- :id id
- :queue queue
- :cause cause))
- (finally
- (l/inf :hint "terminated"
- :id id
- :queue queue)))))
+ (run-worker-loop! cfg)
+ (recur cfg))
+
+ (catch InterruptedException _
+ (l/dbg :hint "interrupted"
+ :id id
+ :queue queue))
+ (catch Throwable cause
+ (l/err :hint "unexpected exception"
+ :id id
+ :queue queue
+ :cause cause))
+ (finally
+ (.close ^AutoCloseable rconn)
+ (l/inf :hint "terminated"
+ :id id
+ :queue queue))))))
(def ^:private schema:params
[:map
@@ -285,7 +301,7 @@
::wrk/registry
::mtx/metrics
::db/pool
- ::rds/redis])
+ ::rds/client])
(defmethod ig/assert-key ::wrk/runner
[_ params]
@@ -303,7 +319,7 @@
(l/wrn :hint "not started (db is read-only)" :queue queue :parallelism parallelism)
(doall
(->> (range parallelism)
- (map #(assoc cfg ::id %))
+ (map #(assoc cfg ::id (str queue "/" %)))
(map start-thread!))))))
(defmethod ig/halt-key! ::wrk/runner
diff --git a/backend/src/data_readers.clj b/backend/src/data_readers.clj
index e32d7c506c..dd94d1aae7 100644
--- a/backend/src/data_readers.clj
+++ b/backend/src/data_readers.clj
@@ -4,7 +4,7 @@
penpot/path-data app.common.types.path/from-string
penpot/matrix app.common.geom.matrix/decode-matrix
penpot/point app.common.geom.point/decode-point
- penpot/token-lib app.common.types.tokens-lib/parse-multi-set-dtcg-json
+ penpot/tokens-lib app.common.types.tokens-lib/parse-multi-set-dtcg-json
penpot/token-set app.common.types.tokens-lib/make-token-set
penpot/token-theme app.common.types.tokens-lib/make-token-theme
penpot/token app.common.types.tokens-lib/make-token}
diff --git a/backend/test/backend_tests/bounce_handling_test.clj b/backend/test/backend_tests/bounce_handling_test.clj
index 3df4789ad7..bef06ad6ff 100644
--- a/backend/test/backend_tests/bounce_handling_test.clj
+++ b/backend/test/backend_tests/bounce_handling_test.clj
@@ -101,12 +101,10 @@
(t/deftest test-parse-bounce-report
(let [profile (th/create-profile* 1)
- props (:app.setup/props th/*system*)
- cfg {:app.setup/props props}
- report (bounce-report {:token (tokens/generate props
+ report (bounce-report {:token (tokens/generate th/*system*
{:iss :profile-identity
:profile-id (:id profile)})})
- result (#'awsns/parse-notification cfg report)]
+ result (#'awsns/parse-notification th/*system* report)]
;; (pprint result)
(t/is (= "bounce" (:type result)))
@@ -117,12 +115,10 @@
(t/deftest test-parse-complaint-report
(let [profile (th/create-profile* 1)
- props (:app.setup/props th/*system*)
- cfg {:app.setup/props props}
- report (complaint-report {:token (tokens/generate props
+ report (complaint-report {:token (tokens/generate th/*system*
{:iss :profile-identity
:profile-id (:id profile)})})
- result (#'awsns/parse-notification cfg report)]
+ result (#'awsns/parse-notification th/*system* report)]
;; (pprint result)
(t/is (= "complaint" (:type result)))
(t/is (= "abuse" (:kind result)))
@@ -143,15 +139,13 @@
(t/deftest test-process-bounce-report
(let [profile (th/create-profile* 1)
- props (:app.setup/props th/*system*)
pool (:app.db/pool th/*system*)
- cfg {:app.setup/props props :app.db/pool pool}
- report (bounce-report {:token (tokens/generate props
+ report (bounce-report {:token (tokens/generate th/*system*
{:iss :profile-identity
:profile-id (:id profile)})})
- report (#'awsns/parse-notification cfg report)]
+ report (#'awsns/parse-notification th/*system* report)]
- (#'awsns/process-report cfg report)
+ (#'awsns/process-report th/*system* report)
(let [rows (->> (db/query pool :profile-complaint-report {:profile-id (:id profile)})
(mapv decode-row))]
@@ -170,16 +164,13 @@
(t/deftest test-process-complaint-report
(let [profile (th/create-profile* 1)
- props (:app.setup/props th/*system*)
pool (:app.db/pool th/*system*)
- cfg {:app.setup/props props
- :app.db/pool pool}
- report (complaint-report {:token (tokens/generate props
+ report (complaint-report {:token (tokens/generate th/*system*
{:iss :profile-identity
:profile-id (:id profile)})})
- report (#'awsns/parse-notification cfg report)]
+ report (#'awsns/parse-notification th/*system* report)]
- (#'awsns/process-report cfg report)
+ (#'awsns/process-report th/*system* report)
(let [rows (->> (db/query pool :profile-complaint-report {:profile-id (:id profile)})
(mapv decode-row))]
@@ -200,16 +191,14 @@
(t/deftest test-process-bounce-report-to-self
(let [profile (th/create-profile* 1)
- props (:app.setup/props th/*system*)
pool (:app.db/pool th/*system*)
- cfg {:app.setup/props props :app.db/pool pool}
report (bounce-report {:email (:email profile)
- :token (tokens/generate props
+ :token (tokens/generate th/*system*
{:iss :profile-identity
:profile-id (:id profile)})})
- report (#'awsns/parse-notification cfg report)]
+ report (#'awsns/parse-notification th/*system* report)]
- (#'awsns/process-report cfg report)
+ (#'awsns/process-report th/*system* report)
(let [rows (db/query pool :profile-complaint-report {:profile-id (:id profile)})]
(t/is (= 1 (count rows))))
@@ -222,16 +211,14 @@
(t/deftest test-process-complaint-report-to-self
(let [profile (th/create-profile* 1)
- props (:app.setup/props th/*system*)
pool (:app.db/pool th/*system*)
- cfg {:app.setup/props props :app.db/pool pool}
report (complaint-report {:email (:email profile)
- :token (tokens/generate props
+ :token (tokens/generate th/*system*
{:iss :profile-identity
:profile-id (:id profile)})})
- report (#'awsns/parse-notification cfg report)]
+ report (#'awsns/parse-notification th/*system* report)]
- (#'awsns/process-report cfg report)
+ (#'awsns/process-report th/*system* report)
(let [rows (db/query pool :profile-complaint-report {:profile-id (:id profile)})]
(t/is (= 1 (count rows))))
diff --git a/backend/test/backend_tests/helpers.clj b/backend/test/backend_tests/helpers.clj
index a589c6fe7e..d504e05aa8 100644
--- a/backend/test/backend_tests/helpers.clj
+++ b/backend/test/backend_tests/helpers.clj
@@ -62,7 +62,8 @@
(def default
{:database-uri "postgresql://postgres/penpot_test"
:redis-uri "redis://redis/1"
- :auto-file-snapshot-every 1})
+ :auto-file-snapshot-every 1
+ :file-data-backend "db"})
(def config
(cf/read-config :prefix "penpot-test"
@@ -74,9 +75,6 @@
:enable-smtp
:enable-quotes
:enable-rpc-climit
- :enable-feature-fdata-pointer-map
- :enable-feature-fdata-objets-map
- :enable-feature-components-v2
:enable-auto-file-snapshot
:disable-file-validation])
@@ -99,7 +97,7 @@
:thumbnail-uri "test"
:path (-> "backend_tests/test_files/template.penpot" io/resource fs/path)}]
system (-> (merge main/system-config main/worker-config)
- (assoc-in [:app.redis/redis :app.redis/uri] (:redis-uri config))
+ (assoc-in [:app.redis/client :app.redis/uri] (:redis-uri config))
(assoc-in [::db/pool ::db/uri] (:database-uri config))
(assoc-in [::db/pool ::db/username] (:database-username config))
(assoc-in [::db/pool ::db/password] (:database-password config))
@@ -113,7 +111,6 @@
:app.auth.oidc.providers/generic
:app.setup/templates
:app.auth.oidc/routes
- :app.worker/monitor
:app.http.oauth/handler
:app.notifications/handler
:app.loggers.mattermost/reporter
diff --git a/backend/test/backend_tests/http_management_test.clj b/backend/test/backend_tests/http_management_test.clj
index a02bbe20d6..9e8f554017 100644
--- a/backend/test/backend_tests/http_management_test.clj
+++ b/backend/test/backend_tests/http_management_test.clj
@@ -25,8 +25,7 @@
(t/deftest authenticate-method
(let [profile (th/create-profile* 1)
- props (get th/*system* :app.setup/props)
- token (#'sess/gen-token props {:profile-id (:id profile)})
+ token (#'sess/gen-token th/*system* {:profile-id (:id profile)})
request {:params {:token token}}
response (#'mgmt/authenticate th/*system* request)]
diff --git a/backend/test/backend_tests/http_middleware_security.clj b/backend/test/backend_tests/http_middleware_security.clj
new file mode 100644
index 0000000000..3804f2186e
--- /dev/null
+++ b/backend/test/backend_tests/http_middleware_security.clj
@@ -0,0 +1,59 @@
+;; 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 backend-tests.http-middleware-security
+ (:require
+ [app.http.security :as sec]
+ [clojure.test :as t]
+ [yetti.request :as yreq]
+ [yetti.response :as yres]))
+
+(defn- mock-request
+ [method value]
+ (reify yreq/IRequest
+ (method [_]
+ method)
+ (get-header [_ _]
+ value)))
+
+(t/deftest sec-fetch-metadata
+ (let [request1 (mock-request :get "same-origin")
+ request2 (mock-request :post "same-origin")
+ request3 (mock-request :get "same-site")
+ request4 (mock-request :post "same-site")
+ request5 (mock-request :get "cross-site")
+ request6 (mock-request :post "cross-site")
+
+ handler (fn [request]
+ {::yres/status 200})
+ handler (#'sec/wrap-sec-fetch-metadata handler)
+ resp1 (handler request1)
+ resp2 (handler request2)
+ resp3 (handler request3)
+ resp4 (handler request4)
+ resp5 (handler request5)
+ resp6 (handler request6)]
+
+ (t/is (= 200 (::yres/status resp1)))
+ (t/is (= 200 (::yres/status resp2)))
+ (t/is (= 200 (::yres/status resp3)))
+ (t/is (= 403 (::yres/status resp4)))
+ (t/is (= 200 (::yres/status resp5)))
+ (t/is (= 403 (::yres/status resp6)))))
+
+(t/deftest client-header-check
+ (let [request1 (mock-request :get "some")
+ request2 (mock-request :post nil)
+
+ handler (fn [request]
+ {::yres/status 200})
+ handler (#'sec/wrap-client-header-check handler)
+ resp1 (handler request1)
+ resp2 (handler request2)]
+
+ (t/is (= 200 (::yres/status resp1)))
+ (t/is (= 403 (::yres/status resp2)))))
+
diff --git a/backend/test/backend_tests/rpc_comment_test.clj b/backend/test/backend_tests/rpc_comment_test.clj
index 1822d28e0e..69e6322842 100644
--- a/backend/test/backend_tests/rpc_comment_test.clj
+++ b/backend/test/backend_tests/rpc_comment_test.clj
@@ -144,7 +144,6 @@
(t/is (not= (:modified-at comment) (:modified-at comment')))
(t/is (= (:content data) (:content comment'))))))
-
(t/testing "retrieve threads"
(let [data {::th/type :get-comment-threads
::rpc/profile-id (:id profile-1)
diff --git a/backend/test/backend_tests/rpc_doc_test.clj b/backend/test/backend_tests/rpc_doc_test.clj
index fb6c2c106d..43a934a289 100644
--- a/backend/test/backend_tests/rpc_doc_test.clj
+++ b/backend/test/backend_tests/rpc_doc_test.clj
@@ -29,7 +29,7 @@
true
(catch Throwable _cause
false)))
- {:num 30}))
+ {:num 15}))
diff --git a/backend/test/backend_tests/rpc_file_snapshot_test.clj b/backend/test/backend_tests/rpc_file_snapshot_test.clj
index 113fad771c..e2c8248815 100644
--- a/backend/test/backend_tests/rpc_file_snapshot_test.clj
+++ b/backend/test/backend_tests/rpc_file_snapshot_test.clj
@@ -8,10 +8,10 @@
(:require
[app.common.features :as cfeat]
[app.common.pprint :as pp]
- [app.common.pprint :as pp]
[app.common.thumbnails :as thc]
[app.common.types.shape :as cts]
[app.common.uuid :as uuid]
+ [app.config :as cf]
[app.db :as db]
[app.db.sql :as sql]
[app.http :as http]
@@ -87,10 +87,7 @@
;; (th/print-result! out)
(t/is (nil? (:error out)))
-
- (let [result (:result out)]
- (t/is (= "label1" (:label result)))
- (t/is (uuid? (:id result)))))
+ (t/is (nil? (:result out))))
(let [[row1 row2 :as rows]
(th/db-query :file-change
@@ -116,7 +113,7 @@
;; (th/print-result! out)
(t/is (nil? (:error out)))
- (t/is (nil? (:result out)))))
+ (t/is (true? (:result out)))))
(t/testing "delete system created snapshot"
(let [params {::th/type :delete-file-snapshot
@@ -130,7 +127,14 @@
data (ex-data error)]
(t/is (th/ex-info? error))
(t/is (= (:type data) :validation))
- (t/is (= (:code data) :system-snapshots-cant-be-deleted)))))))))
+ (t/is (= (:code data) :system-snapshots-cant-be-deleted)))))
+
+ ;; this will run pending task triggered by deleting user snapshot
+ (th/run-pending-tasks!)
+
+ (let [res (th/run-task! :objects-gc {:deletion-threshold (cf/get-deletion-delay)})]
+ ;; delete 2 snapshots and 2 file data entries
+ (t/is (= 4 (:processed res))))))))
(t/deftest snapshots-locking
(let [profile-1 (th/create-profile* 1 {:is-active true})
@@ -172,9 +176,9 @@
out (th/command! params)]
;; (th/print-result! out)
(t/is (nil? (:error out)))
- (t/is (nil? (:result out)))
+ (t/is (true? (:result out)))
- (let [snapshot (th/db-get :file-change {:id (:id snapshot)})]
+ (let [snapshot (th/db-get :file-change {:id (:id snapshot)} {::db/remove-deleted false})]
(t/is (= (:id profile-1) (:locked-by snapshot))))))
(t/testing "delete locked snapshot"
@@ -199,7 +203,7 @@
out (th/command! params)]
;; (th/print-result! out)
(t/is (nil? (:error out)))
- (t/is (nil? (:result out)))
+ (t/is (true? (:result out)))
(let [snapshot (th/db-get :file-change {:id (:id snapshot)})]
(t/is (= nil (:locked-by snapshot))))))
@@ -213,4 +217,4 @@
;; (th/print-result! out)
(t/is (nil? (:error out)))
- (t/is (nil? (:result out)))))))
+ (t/is (true? (:result out)))))))
diff --git a/backend/test/backend_tests/rpc_file_test.clj b/backend/test/backend_tests/rpc_file_test.clj
index 2443d76737..f8701a0c1c 100644
--- a/backend/test/backend_tests/rpc_file_test.clj
+++ b/backend/test/backend_tests/rpc_file_test.clj
@@ -15,6 +15,7 @@
[app.config :as cf]
[app.db :as db]
[app.db.sql :as sql]
+ [app.features.fdata :as fdata]
[app.http :as http]
[app.rpc :as-alias rpc]
[app.rpc.commands.files :as files]
@@ -116,29 +117,8 @@
(t/is (nil? (:error out)))
(t/is (nil? (:result out)))))
+
(t/testing "query single file after delete"
- (let [data {::th/type :get-file
- ::rpc/profile-id (:id prof)
- :id file-id
- :components-v2 true}
- out (th/command! data)]
-
-
- ;; (th/print-result! out)
- (t/is (nil? (:error out)))
-
- (let [result (:result out)]
- (t/is (some? (:deleted-at result)))
- (t/is (= file-id (:id result)))
- (t/is (= "new name" (:name result)))
- (t/is (= 1 (count (get-in result [:data :pages]))))
- (t/is (nil? (:users result))))))
-
- (th/db-update! :file
- {:deleted-at (ct/now)}
- {:id file-id})
-
- (t/testing "query single file after delete and wait"
(let [data {::th/type :get-file
::rpc/profile-id (:id prof)
:id file-id
@@ -185,10 +165,10 @@
shape-id (uuid/random)]
;; Preventive file-gc
- (t/is (true? (th/run-task! :file-gc {:min-age 0 :file-id (:id file)})))
+ (t/is (true? (th/run-task! :file-gc {:file-id (:id file) :revn (:revn file)})))
;; Check the number of fragments before adding the page
- (let [rows (th/db-query :file-data-fragment {:file-id (:id file)})]
+ (let [rows (th/db-query :file-data {:file-id (:id file) :type "fragment"})]
(t/is (= 2 (count rows))))
;; Add page
@@ -203,22 +183,23 @@
:id page-id}])
;; Check the number of fragments before adding the page
- (let [rows (th/db-query :file-data-fragment {:file-id (:id file)})]
+ (let [rows (th/db-query :file-data {:file-id (:id file) :type "fragment"})]
(t/is (= 3 (count rows))))
;; The file-gc should mark for remove unused fragments
- (t/is (true? (th/run-task! :file-gc {:min-age 0 :file-id (:id file)})))
+ (t/is (true? (th/run-task! :file-gc {:file-id (:id file)})))
;; Check the number of fragments
- (let [rows (th/db-query :file-data-fragment {:file-id (:id file)})]
- (t/is (= 5 (count rows))))
+ (let [rows (th/db-query :file-data {:file-id (:id file) :type "fragment"})]
+ (t/is (= 5 (count rows)))
+ (t/is (= 3 (count (filterv :deleted-at rows)))))
;; The objects-gc should remove unused fragments
(let [res (th/run-task! :objects-gc {})]
(t/is (= 3 (:processed res))))
;; Check the number of fragments
- (let [rows (th/db-query :file-data-fragment {:file-id (:id file)})]
+ (let [rows (th/db-query :file-data {:file-id (:id file) :type "fragment"})]
(t/is (= 2 (count rows))))
;; Add shape to page that should add a new fragment
@@ -242,44 +223,47 @@
:type :rect})}])
;; Check the number of fragments
- (let [rows (th/db-query :file-data-fragment {:file-id (:id file)})]
+ (let [rows (th/db-query :file-data {:file-id (:id file) :type "fragment"})]
(t/is (= 3 (count rows))))
;; The file-gc should mark for remove unused fragments
- (t/is (true? (th/run-task! :file-gc {:min-age 0 :file-id (:id file)})))
+ (t/is (true? (th/run-task! :file-gc {:file-id (:id file)})))
;; The objects-gc should remove unused fragments
(let [res (th/run-task! :objects-gc {})]
(t/is (= 3 (:processed res))))
;; Check the number of fragments;
- (let [rows (th/db-query :file-data-fragment {:file-id (:id file)
- :deleted-at nil})]
+ (let [rows (th/db-query :file-data {:file-id (:id file)
+ :type "fragment"
+ :deleted-at nil})]
(t/is (= 2 (count rows))))
;; Lets proceed to delete all changes
(th/db-delete! :file-change {:file-id (:id file)})
+ (th/db-delete! :file-data {:file-id (:id file) :type "snapshot"})
+
(th/db-update! :file
{:has-media-trimmed false}
{:id (:id file)})
;; The file-gc should remove fragments related to changes
;; snapshots previously deleted.
- (t/is (true? (th/run-task! :file-gc {:min-age 0 :file-id (:id file)})))
+ (t/is (true? (th/run-task! :file-gc {:file-id (:id file)})))
;; Check the number of fragments;
- (let [rows (th/db-query :file-data-fragment {:file-id (:id file)})]
+ (let [rows (th/db-query :file-data {:file-id (:id file) :type "fragment"})]
;; (pp/pprint rows)
(t/is (= 4 (count rows)))
- (t/is (= 2 (count (remove (comp some? :deleted-at) rows)))))
+ (t/is (= 2 (count (remove :deleted-at rows)))))
(let [res (th/run-task! :objects-gc {})]
(t/is (= 2 (:processed res))))
- (let [rows (th/db-query :file-data-fragment {:file-id (:id file)})]
+ (let [rows (th/db-query :file-data {:file-id (:id file) :type "fragment"})]
(t/is (= 2 (count rows)))))))
-(t/deftest file-gc-task-with-thumbnails
+(t/deftest file-gc-with-thumbnails
(letfn [(add-file-media-object [& {:keys [profile-id file-id]}]
(let [mfile {:filename "sample.jpg"
:path (th/tempfile "backend_tests/test_files/sample.jpg")
@@ -347,7 +331,7 @@
:fills [{:fill-opacity 1
:fill-image {:id (:id fmo1) :width 100 :height 100 :mtype "image/jpeg"}}]})}])
- ;; Check that reference storage objects on filemediaobjects
+ ;; Check that reference storage objects on file_media_objects
;; are the same because of deduplication feature.
(t/is (= (:media-id fmo1) (:media-id fmo2)))
(t/is (= (:thumbnail-id fmo1) (:thumbnail-id fmo2)))
@@ -360,32 +344,33 @@
(t/is (= 2 (:freeze res)))
(t/is (= 0 (:delete res))))
- ;; run the file-gc task immediately without forced min-age
- (t/is (false? (th/run-task! :file-gc {:file-id (:id file)})))
-
;; run the task again
- (t/is (true? (th/run-task! :file-gc {:min-age 0 :file-id (:id file)})))
+ (t/is (true? (th/run-task! :file-gc {:file-id (:id file)})))
;; retrieve file and check trimmed attribute
(let [row (th/db-get :file {:id (:id file)})]
(t/is (true? (:has-media-trimmed row))))
;; check file media objects
- (let [rows (th/db-query :file-media-object {:file-id (:id file)})]
- (t/is (= 2 (count rows)))
- (t/is (= 1 (count (remove (comp some? :deleted-at) rows)))))
+ (let [[row1 row2 :as rows]
+ (th/db-query :file-media-object
+ {:file-id (:id file)}
+ {:order-by [:created-at]})]
+
+ (t/is (= (:id fmo1) (:id row1)))
+ (t/is (= (:id fmo2) (:id row2)))
+ (t/is (ct/inst? (:deleted-at row2))))
(let [res (th/run-task! :objects-gc {})]
+ ;; delete 2 fragments and 1 media object
(t/is (= 3 (:processed res))))
;; check file media objects
(let [rows (th/db-query :file-media-object {:file-id (:id file)})]
(t/is (= 1 (count rows)))
- (t/is (= 1 (count (remove (comp some? :deleted-at) rows)))))
+ (t/is (= 1 (count (remove :deleted-at rows)))))
;; The underlying storage objects are still available.
- (t/is (some? (sto/get-object storage (:media-id fmo2))))
- (t/is (some? (sto/get-object storage (:thumbnail-id fmo2))))
(t/is (some? (sto/get-object storage (:media-id fmo1))))
(t/is (some? (sto/get-object storage (:thumbnail-id fmo1))))
@@ -402,34 +387,40 @@
;; Now, we have deleted the usage of pointers to the
;; file-media-objects, if we paste file-gc, they should be marked
;; as deleted.
- (t/is (true? (th/run-task! :file-gc {:min-age 0 :file-id (:id file)})))
+ (t/is (true? (th/run-task! :file-gc {:file-id (:id file)})))
;; This only clears fragments, the file media objects still referenced because
;; snapshots are preserved
(let [res (th/run-task! :objects-gc {})]
(t/is (= 2 (:processed res))))
- ;; Mark all snapshots to be a non-snapshot file change
- (th/db-exec! ["update file_change set data = null where file_id = ?" (:id file)])
+ ;; Delete all snapshots
+ (th/db-exec! ["update file_data set deleted_at = now() where file_id = ? and type = 'snapshot'" (:id file)])
+ (th/db-exec! ["update file_change set deleted_at = now() where file_id = ? and label is not null" (:id file)])
(th/db-exec! ["update file set has_media_trimmed = false where id = ?" (:id file)])
+ (let [res (th/run-task! :objects-gc {:deletion-threshold 0})]
+ ;; this will remove the file change and file data entries for two snapshots
+ (t/is (= 4 (:processed res))))
+
;; Rerun the file-gc and objects-gc
- (t/is (true? (th/run-task! :file-gc {:min-age 0 :file-id (:id file)})))
- (let [res (th/run-task! :objects-gc {})]
+ (t/is (true? (th/run-task! :file-gc {:file-id (:id file)})))
+
+ (let [res (th/run-task! :objects-gc {:deletion-threshold 0})]
+ ;; this will remove the file media objects marked as deleted
+ ;; on prev file-gc
(t/is (= 2 (:processed res))))
;; Now that file-gc have deleted the file-media-object usage,
;; lets execute the touched-gc task, we should see that two of
- ;; them are marked to be deleted.
+ ;; them are marked to be deleted
(let [res (th/run-task! :storage-gc-touched {:min-age 0})]
(t/is (= 0 (:freeze res)))
(t/is (= 2 (:delete res))))
;; Finally, check that some of the objects that are marked as
;; deleted we are unable to retrieve them using standard storage
- ;; public api.
- (t/is (nil? (sto/get-object storage (:media-id fmo2))))
- (t/is (nil? (sto/get-object storage (:thumbnail-id fmo2))))
+ ;; public api
(t/is (nil? (sto/get-object storage (:media-id fmo1))))
(t/is (nil? (sto/get-object storage (:thumbnail-id fmo1)))))))
@@ -470,8 +461,9 @@
page-id (first (get-in file [:data :pages]))]
- (let [rows (th/db-query :file-data-fragment {:file-id (:id file)
- :deleted-at nil})]
+ (let [rows (th/db-query :file-data {:file-id (:id file)
+ :type "fragment"
+ :deleted-at nil})]
(t/is (= (count rows) 1)))
;; Update file inserting a new image object
@@ -536,17 +528,15 @@
:strokes [{:stroke-opacity 1 :stroke-image {:id (:id fmo5) :width 100 :height 100 :mtype "image/jpeg"}}]})}])
- ;; run the file-gc task immediately without forced min-age
- (t/is (false? (th/run-task! :file-gc {:file-id (:id file)})))
-
;; run the task again
- (t/is (true? (th/run-task! :file-gc {:min-age 0 :file-id (:id file)})))
+ (t/is (true? (th/run-task! :file-gc {:file-id (:id file)})))
(let [res (th/run-task! :objects-gc {})]
(t/is (= 2 (:processed res))))
- (let [rows (th/db-query :file-data-fragment {:file-id (:id file)
- :deleted-at nil})]
+ (let [rows (th/db-query :file-data {:file-id (:id file)
+ :type "fragment"
+ :deleted-at nil})]
(t/is (= (count rows) 1)))
;; retrieve file and check trimmed attribute
@@ -583,7 +573,7 @@
;; Now, we have deleted the usage of pointers to the
;; file-media-objects, if we paste file-gc, they should be marked
;; as deleted.
- (t/is (true? (th/run-task! :file-gc {:min-age 0 :file-id (:id file)})))
+ (t/is (true? (th/run-task! :file-gc {:file-id (:id file)})))
;; This only removes unused fragments, file media are still
;; referenced on snapshots.
@@ -592,16 +582,18 @@
;; Mark all snapshots to be a non-snapshot file change
(th/db-exec! ["update file set has_media_trimmed = false where id = ?" (:id file)])
- (th/db-exec! ["update file_change set data = null where file_id = ?" (:id file)])
+ (th/db-delete! :file-data {:file-id (:id file)
+ :type "snapshot"})
;; Rerun file-gc and objects-gc task for the same file once all snapshots are
;; "expired/deleted"
- (t/is (true? (th/run-task! :file-gc {:min-age 0 :file-id (:id file)})))
+ (t/is (true? (th/run-task! :file-gc {:file-id (:id file)})))
(let [res (th/run-task! :objects-gc {})]
(t/is (= 6 (:processed res))))
- (let [rows (th/db-query :file-data-fragment {:file-id (:id file)
- :deleted-at nil})]
+ (let [rows (th/db-query :file-data {:file-id (:id file)
+ :type "fragment"
+ :deleted-at nil})]
(t/is (= (count rows) 1)))
;; Now that file-gc have deleted the file-media-object usage,
@@ -620,7 +612,7 @@
(t/is (nil? (sto/get-object storage (:media-id fmo2))))
(t/is (nil? (sto/get-object storage (:media-id fmo1)))))))
-(t/deftest file-gc-task-with-object-thumbnails
+(t/deftest file-gc-with-object-thumbnails
(letfn [(insert-file-object-thumbnail! [& {:keys [profile-id file-id page-id frame-id]}]
(let [object-id (thc/fmt-object-id file-id page-id frame-id "frame")
mfile {:filename "sample.jpg"
@@ -704,11 +696,7 @@
(t/is (= 1 (:freeze res)))
(t/is (= 0 (:delete res))))
- ;; run the file-gc task immediately without forced min-age
- (t/is (false? (th/run-task! :file-gc {:file-id (:id file)})))
-
- ;; run the task again
- (t/is (true? (th/run-task! :file-gc {:min-age 0 :file-id (:id file)})))
+ (t/is (true? (th/run-task! :file-gc {:file-id (:id file)})))
;; retrieve file and check trimmed attribute
(let [row (th/db-get :file {:id (:id file)})]
@@ -738,7 +726,7 @@
:page-id page-id
:id frame-id-2}])
- (t/is (true? (th/run-task! :file-gc {:min-age 0 :file-id (:id file)})))
+ (t/is (true? (th/run-task! :file-gc {:file-id (:id file)})))
(let [rows (th/db-query :file-tagged-object-thumbnail {:file-id file-id})]
(t/is (= 2 (count rows)))
@@ -772,7 +760,7 @@
:page-id page-id
:id frame-id-1}])
- (t/is (true? (th/run-task! :file-gc {:min-age 0 :file-id (:id file)})))
+ (t/is (true? (th/run-task! :file-gc {:file-id (:id file)})))
(let [rows (th/db-query :file-tagged-object-thumbnail {:file-id file-id})]
(t/is (= 1 (count rows)))
@@ -933,6 +921,8 @@
out (th/command! params)]
(t/is (nil? (:error out))))
+ (th/run-pending-tasks!)
+
;; query the list of files after soft deletion
(let [data {::th/type :get-project-files
::rpc/profile-id (:id profile1)
@@ -943,23 +933,24 @@
(let [result (:result out)]
(t/is (= 0 (count result)))))
- ;; run permanent deletion (should be noop)
- (let [result (th/run-task! :objects-gc {})]
- (t/is (= 0 (:processed result))))
-
- ;; query the list of file libraries of a after hard deletion
(let [data {::th/type :get-file-libraries
::rpc/profile-id (:id profile1)
:file-id (:id file)}
out (th/command! data)]
;; (th/print-result! out)
- (t/is (nil? (:error out)))
- (let [result (:result out)]
- (t/is (= 0 (count result)))))
+
+ (let [error (:error out)
+ error-data (ex-data error)]
+ (t/is (th/ex-info? error))
+ (t/is (= (:type error-data) :not-found))))
+
+ ;; run permanent deletion (should be noop)
+ (let [result (th/run-task! :objects-gc {})]
+ (t/is (= 0 (:processed result))))
;; run permanent deletion
(let [result (th/run-task! :objects-gc {:deletion-threshold (cf/get-deletion-delay)})]
- (t/is (= 1 (:processed result))))
+ (t/is (= 3 (:processed result))))
;; query the list of file libraries of a after hard deletion
(let [data {::th/type :get-file-libraries
@@ -972,7 +963,6 @@
(t/is (th/ex-info? error))
(t/is (= (:type error-data) :not-found))))))
-
(t/deftest object-thumbnails-ops
(let [prof (th/create-profile* 1 {:is-active true})
file (th/create-file* 1 {:profile-id (:id prof)
@@ -1282,17 +1272,19 @@
:is-shared false})
page-id (uuid/random)
- shape-id (uuid/random)]
+ shape-id (uuid/random)
+ sobject (volatile! nil)]
- ;; Preventive file-gc
- (t/is (true? (th/run-task! :file-gc {:min-age 0 :file-id (:id file)})))
+ ;; Preventive file-gc
+ (t/is (true? (th/run-task! :file-gc {:file-id (:id file)})))
- ;; Preventive objects-gc
+ ;; Preventive objects-gc
(let [result (th/run-task! :objects-gc {})]
+ ;; deletes the fragment created by file-gc
(t/is (= 1 (:processed result))))
- ;; Check the number of fragments before adding the page
- (let [rows (th/db-query :file-data-fragment {:file-id (:id file)})]
+ ;; Check the number of fragments before adding the page
+ (let [rows (th/db-query :file-data {:file-id (:id file) :type "fragment"})]
(t/is (= 1 (count rows)))
(t/is (every? #(some? (:data %)) rows)))
@@ -1301,35 +1293,42 @@
{:has-media-trimmed false}
{:id (:id file)})
- ;; Run FileGC again, with tiered storage activated
+ ;; Run FileGC again, with tiered storage activated
(with-redefs [app.config/flags (conj app.config/flags :tiered-file-data-storage)]
- (t/is (true? (th/run-task! :file-gc {:min-age 0 :file-id (:id file)})))
+ (t/is (true? (th/run-task! :file-gc {:file-id (:id file)}))))
- ;; The FileGC task will schedule an inner taskq
- (th/run-pending-tasks!))
+ ;; The FileGC task will schedule an inner taskq
+ (th/run-pending-tasks!)
- ;; Clean objects after file-gc
+ (let [res (th/run-task! :storage-gc-touched {:min-age 0})]
+ (t/is (= 2 (:freeze res)))
+ (t/is (= 0 (:delete res))))
+
+ ;; Clean objects after file-gc
(let [result (th/run-task! :objects-gc {})]
(t/is (= 1 (:processed result))))
- ;; Check the number of fragments before adding the page
- (let [rows (th/db-query :file-data-fragment {:file-id (:id file)})]
+ ;; Check the number of fragments before adding the page
+ (let [rows (th/db-query :file-data {:file-id (:id file) :type "fragment"})]
+ ;; (pp/pprint rows)
(t/is (= 1 (count rows)))
(t/is (every? #(nil? (:data %)) rows))
- (t/is (every? #(uuid? (:data-ref-id %)) rows))
- (t/is (every? #(= "objects-storage" (:data-backend %)) rows)))
+ (t/is (every? #(= "storage" (:backend %)) rows)))
- (let [file (th/db-get :file {:id (:id file)})
+ (let [file (-> (th/db-get :file-data {:id (:id file) :type "main"})
+ (update :metadata fdata/decode-metadata))
storage (sto/resolve th/*system*)]
- (t/is (= "objects-storage" (:data-backend file)))
+ ;; (pp/pprint file)
+ (t/is (= "storage" (:backend file)))
(t/is (nil? (:data file)))
- (t/is (uuid? (:data-ref-id file)))
- (let [sobj (sto/get-object storage (:data-ref-id file))]
+ (let [sobj (sto/get-object storage (-> file :metadata :storage-ref-id))]
+ (vreset! sobject sobj)
+ ;; (pp/pprint (meta sobj))
(t/is (= "file-data" (:bucket (meta sobj))))
(t/is (= (:id file) (:file-id (meta sobj))))))
- ;; Add shape to page that should load from cold storage again into the hot storage (db)
+ ;; Add shape to page that should load from cold storage again into the hot storage (db)
(update-file!
:file-id (:id file)
:profile-id (:id profile)
@@ -1340,36 +1339,68 @@
:name "test"
:id page-id}])
- ;; Check the number of fragments
- (let [rows (th/db-query :file-data-fragment {:file-id (:id file)})]
- (t/is (= 2 (count rows))))
-
- ;; Check the number of fragments
+ ;; Check the number of fragments
(let [[row1 row2 :as rows]
- (th/db-query :file-data-fragment
+ (th/db-query :file-data
{:file-id (:id file)
- :deleted-at nil}
+ :type "fragment"}
{:order-by [:created-at]})]
;; (pp/pprint rows)
(t/is (= 2 (count rows)))
(t/is (nil? (:data row1)))
- (t/is (= "objects-storage" (:data-backend row1)))
+ (t/is (= "storage" (:backend row1)))
(t/is (bytes? (:data row2)))
- (t/is (nil? (:data-backend row2))))
+ (t/is (= "db" (:backend row2))))
- ;; The file-gc should mark for remove unused fragments
- (t/is (true? (th/run-task! :file-gc {:min-age 0 :file-id (:id file)})))
- ;; The objects-gc should remove unused fragments
+ ;; The file-gc should mark for remove unused fragments
+ (t/is (true? (th/run-task! :file-gc {:file-id (:id file)})))
+
+ ;; The file-gc task, recreates all fragments, so after it we have
+ ;; now the double of fragments, and the old ones are marked as
+ ;; deleted, and the new ones are on DB
+ (let [[row1 row2 row3 row4 :as rows]
+ (th/db-query :file-data
+ {:file-id (:id file)
+ :type "fragment"}
+ {:order-by [:created-at]})]
+ ;; (pp/pprint rows)
+ (t/is (= 4 (count rows)))
+
+ (t/is (nil? (:data row1)))
+ (t/is (ct/inst? (:deleted-at row1)))
+ (t/is (= "storage" (:backend row1)))
+
+ (t/is (bytes? (:data row2)))
+ (t/is (= "db" (:backend row2)))
+ (t/is (ct/inst? (:deleted-at row2)))
+
+ (t/is (bytes? (:data row3)))
+ (t/is (= "db" (:backend row3)))
+ (t/is (nil? (:deleted-at row3)))
+
+ (t/is (bytes? (:data row4)))
+ (t/is (= "db" (:backend row4)))
+ (t/is (nil? (:deleted-at row4))))
+
+ ;; The objects-gc should remove the marked to delete fragments
(let [res (th/run-task! :objects-gc {})]
(t/is (= 2 (:processed res))))
- ;; Check the number of fragments before adding the page
- (let [rows (th/db-query :file-data-fragment {:file-id (:id file)})]
+ (let [rows (th/db-query :file-data {:file-id (:id file) :type "fragment"})]
(t/is (= 2 (count rows)))
(t/is (every? #(bytes? (:data %)) rows))
- (t/is (every? #(nil? (:data-ref-id %)) rows))
- (t/is (every? #(nil? (:data-backend %)) rows)))))
+ (t/is (every? #(= "db" (:backend %)) rows)))
+
+ ;; we ensure that once object-gc is passed and marked two storage
+ ;; objects to delete
+ (let [res (th/run-task! :storage-gc-touched {:min-age 0})]
+ (t/is (= 0 (:freeze res)))
+ (t/is (= 2 (:delete res))))
+
+ (let [storage (sto/resolve th/*system*)]
+ (t/is (uuid? (:id @sobject)))
+ (t/is (nil? (sto/get-object storage (:id @sobject)))))))
(t/deftest file-gc-with-components-1
(let [storage (:app.storage/storage th/*system*)
@@ -1384,8 +1415,9 @@
page-id (first (get-in file [:data :pages]))]
- (let [rows (th/db-query :file-data-fragment {:file-id (:id file)
- :deleted-at nil})]
+ (let [rows (th/db-query :file-data {:file-id (:id file)
+ :type "fragment"
+ :deleted-at nil})]
(t/is (= (count rows) 1)))
;; Update file inserting new component
@@ -1437,11 +1469,8 @@
:id c-id
:anotation nil}])
- ;; Run the file-gc task immediately without forced min-age
- (t/is (false? (th/run-task! :file-gc {:file-id (:id file)})))
-
;; Run the task again
- (t/is (true? (th/run-task! :file-gc {:min-age 0 :file-id (:id file)})))
+ (t/is (true? (th/run-task! :file-gc {:file-id (:id file)})))
;; Retrieve file and check trimmed attribute
(let [row (th/db-get :file {:id (:id file)})]
@@ -1651,8 +1680,7 @@
(t/is (some? (not-empty (:objects component))))))
;; Re-run the file-gc task
- (t/is (true? (th/run-task! :file-gc {:min-age 0 :file-id (:id file-1)})))
- (t/is (false? (th/run-task! :file-gc {:min-age 0 :file-id (:id file-2)})))
+ (t/is (true? (th/run-task! :file-gc {:file-id (:id file-1)})))
;; Check that component is still there after file-gc task
(let [data {::th/type :get-file
diff --git a/backend/test/backend_tests/rpc_management_test.clj b/backend/test/backend_tests/rpc_management_test.clj
index 19c3acc827..2506d02de4 100644
--- a/backend/test/backend_tests/rpc_management_test.clj
+++ b/backend/test/backend_tests/rpc_management_test.clj
@@ -39,8 +39,6 @@
(t/is (nil? (:error out)))
(:result out)))
-;; TODO: migrate to commands
-
(t/deftest duplicate-file
(let [storage (-> (:app.storage/storage th/*system*)
(configure-storage-backend))
@@ -233,15 +231,7 @@
;; check that the both files are equivalent
(doseq [[fa fb] (map vector p1-files p2-files)]
(t/is (not= (:id fa) (:id fb)))
- (t/is (= (:name fa) (:name fb)))
-
- (when (= (:id fa) (:id file1))
- (t/is (false? (b/equals? (:data fa)
- (:data fb)))))
-
- (when (= (:id fa) (:id file2))
- (t/is (false? (b/equals? (:data fa)
- (:data fb)))))))))))
+ (t/is (= (:name fa) (:name fb)))))))))
(t/deftest duplicate-project-with-deleted-files
(let [storage (-> (:app.storage/storage th/*system*)
@@ -297,15 +287,7 @@
;; check that the both files are equivalent
(doseq [[fa fb] (map vector (rest p1-files) p2-files)]
(t/is (not= (:id fa) (:id fb)))
- (t/is (= (:name fa) (:name fb)))
-
- (when (= (:id fa) (:id file1))
- (t/is (false? (b/equals? (:data fa)
- (:data fb)))))
-
- (when (= (:id fa) (:id file2))
- (t/is (false? (b/equals? (:data fa)
- (:data fb)))))))))))
+ (t/is (= (:name fa) (:name fb)))))))))
(t/deftest move-file-on-same-team
(let [profile (th/create-profile* 1 {:is-active true})
diff --git a/backend/test/backend_tests/rpc_profile_test.clj b/backend/test/backend_tests/rpc_profile_test.clj
index 226df0dc61..eb700936dd 100644
--- a/backend/test/backend_tests/rpc_profile_test.clj
+++ b/backend/test/backend_tests/rpc_profile_test.clj
@@ -162,7 +162,7 @@
;; execute permanent deletion task
(let [result (th/run-task! :objects-gc {:min-age 0})]
- (t/is (= 4 (:processed result))))
+ (t/is (= 6 (:processed result))))
(let [row (th/db-get :team
{:id (:default-team-id prof)}
@@ -324,7 +324,7 @@
;; execute permanent deletion task
(let [result (th/run-task! :objects-gc {:min-age 0})]
- (t/is (= 4 (:processed result))))
+ (t/is (= 6 (:processed result))))
(let [row (th/db-get :team
{:id (:default-team-id prof1)}
@@ -363,7 +363,7 @@
;; execute permanent deletion task
(let [result (th/run-task! :objects-gc {:min-age 0})]
- (t/is (= 8 (:processed result))))))
+ (t/is (= 10 (:processed result))))))
(t/deftest email-blacklist-1
@@ -514,8 +514,7 @@
(t/is (= 0 (:call-count @mock))))))))
(t/deftest prepare-and-register-with-invitation-and-enabled-registration-1
- (let [sprops (:app.setup/props th/*system*)
- itoken (tokens/generate sprops
+ (let [itoken (tokens/generate th/*system*
{:iss :team-invitation
:exp (ct/in-future "48h")
:role :editor
@@ -543,8 +542,7 @@
(t/is (string? (:invitation-token result))))))
(t/deftest prepare-and-register-with-invitation-and-enabled-registration-2
- (let [sprops (:app.setup/props th/*system*)
- itoken (tokens/generate sprops
+ (let [itoken (tokens/generate th/*system*
{:iss :team-invitation
:exp (ct/in-future "48h")
:role :editor
@@ -565,8 +563,7 @@
(t/deftest prepare-and-register-with-invitation-and-disabled-registration-1
(with-redefs [app.config/flags [:disable-registration]]
- (let [sprops (:app.setup/props th/*system*)
- itoken (tokens/generate sprops
+ (let [itoken (tokens/generate th/*system*
{:iss :team-invitation
:exp (ct/in-future "48h")
:role :editor
@@ -586,8 +583,7 @@
(t/deftest prepare-and-register-with-invitation-and-disabled-registration-2
(with-redefs [app.config/flags [:disable-registration]]
- (let [sprops (:app.setup/props th/*system*)
- itoken (tokens/generate sprops
+ (let [itoken (tokens/generate th/*system*
{:iss :team-invitation
:exp (ct/in-future "48h")
:role :editor
@@ -608,8 +604,7 @@
(t/deftest prepare-and-register-with-invitation-and-disabled-login-with-password
(with-redefs [app.config/flags [:disable-login-with-password]]
- (let [sprops (:app.setup/props th/*system*)
- itoken (tokens/generate sprops
+ (let [itoken (tokens/generate th/*system*
{:iss :team-invitation
:exp (ct/in-future "48h")
:role :editor
diff --git a/backend/test/backend_tests/rpc_team_test.clj b/backend/test/backend_tests/rpc_team_test.clj
index 516abc824b..7df7ab7d95 100644
--- a/backend/test/backend_tests/rpc_team_test.clj
+++ b/backend/test/backend_tests/rpc_team_test.clj
@@ -208,8 +208,6 @@
profile2 (th/create-profile* 2 {:is-active true})
team (th/create-team* 1 {:profile-id (:id profile1)})
-
- sprops (:app.setup/props th/*system*)
pool (:app.db/pool th/*system*)]
;; Try to invite a not existing user
@@ -226,7 +224,7 @@
(t/is (= 1 (-> out :result :total)))
(let [token (-> out :result :invitations first)
- claims (tokens/decode sprops token)]
+ claims (tokens/decode th/*system* token)]
(t/is (= :team-invitation (:iss claims)))
(t/is (= (:id profile1) (:profile-id claims)))
(t/is (= :editor (:role claims)))
@@ -250,7 +248,7 @@
(t/is (= 1 (-> out :result :total)))
(let [token (-> out :result :invitations first)
- claims (tokens/decode sprops token)]
+ claims (tokens/decode th/*system* token)]
(t/is (= :team-invitation (:iss claims)))
(t/is (= (:id profile1) (:profile-id claims)))
(t/is (= :editor (:role claims)))
@@ -266,10 +264,9 @@
team (th/create-team* 1 {:profile-id (:id profile1)})
- sprops (:app.setup/props th/*system*)
pool (:app.db/pool th/*system*)]
- (let [token (tokens/generate sprops
+ (let [token (tokens/generate th/*system*
{:iss :team-invitation
:exp (ct/in-future "1h")
:profile-id (:id profile1)
@@ -585,7 +582,7 @@
(t/is (ct/inst? (:deleted-at (first rows)))))
(let [result (th/run-task! :objects-gc {:deletion-threshold (cf/get-deletion-delay)})]
- (t/is (= 5 (:processed result))))))
+ (t/is (= 7 (:processed result))))))
(t/deftest create-team-access-request
(with-mocks [mock {:target 'app.email/send! :return nil}]
diff --git a/common/deps.edn b/common/deps.edn
index f15f313030..dcdf4fe0a8 100644
--- a/common/deps.edn
+++ b/common/deps.edn
@@ -6,26 +6,28 @@
org.clojure/data.fressian {:mvn/version "1.1.0"}
org.clojure/clojurescript {:mvn/version "1.12.42"}
+ org.apache.commons/commons-pool2 {:mvn/version "2.12.1"}
+
;; Logging
- org.apache.logging.log4j/log4j-api {:mvn/version "2.24.3"}
- org.apache.logging.log4j/log4j-core {:mvn/version "2.24.3"}
- org.apache.logging.log4j/log4j-web {:mvn/version "2.24.3"}
- org.apache.logging.log4j/log4j-jul {:mvn/version "2.24.3"}
- org.apache.logging.log4j/log4j-slf4j2-impl {:mvn/version "2.24.3"}
+ org.apache.logging.log4j/log4j-api {:mvn/version "2.25.1"}
+ org.apache.logging.log4j/log4j-core {:mvn/version "2.25.1"}
+ org.apache.logging.log4j/log4j-web {:mvn/version "2.25.1"}
+ org.apache.logging.log4j/log4j-jul {:mvn/version "2.25.1"}
+ org.apache.logging.log4j/log4j-slf4j2-impl {:mvn/version "2.25.1"}
org.slf4j/slf4j-api {:mvn/version "2.0.17"}
- pl.tkowalcz.tjahzi/log4j2-appender {:mvn/version "0.9.32"}
+ pl.tkowalcz.tjahzi/log4j2-appender {:mvn/version "0.9.40"}
selmer/selmer {:mvn/version "1.12.62"}
criterium/criterium {:mvn/version "0.4.6"}
metosin/jsonista {:mvn/version "0.3.13"}
- metosin/malli {:mvn/version "0.18.0"}
+ metosin/malli {:mvn/version "0.19.1"}
expound/expound {:mvn/version "0.9.0"}
com.cognitect/transit-clj {:mvn/version "1.0.333"}
com.cognitect/transit-cljs {:mvn/version "0.8.280"}
java-http-clj/java-http-clj {:mvn/version "0.4.3"}
- integrant/integrant {:mvn/version "0.13.1"}
+ integrant/integrant {:mvn/version "1.0.0"}
funcool/tubax {:mvn/version "2021.05.20-0"}
funcool/cuerdas {:mvn/version "2025.06.16-414"}
@@ -47,7 +49,7 @@
org.la4j/la4j {:mvn/version "0.6.0"}
;; exception printing
- fipp/fipp {:mvn/version "0.6.27"}
+ fipp/fipp {:mvn/version "0.6.29"}
me.flowthing/pp {:mvn/version "2024-11-13.77"}
@@ -59,7 +61,7 @@
{:dev
{:extra-deps
{org.clojure/tools.namespace {:mvn/version "RELEASE"}
- thheller/shadow-cljs {:mvn/version "3.1.5"}
+ thheller/shadow-cljs {:mvn/version "3.2.0"}
com.clojure-goes-fast/clj-async-profiler {:mvn/version "RELEASE"}
com.bhauman/rebel-readline {:mvn/version "RELEASE"}
criterium/criterium {:mvn/version "RELEASE"}
@@ -68,7 +70,7 @@
:build
{:extra-deps
- {io.github.clojure/tools.build {:git/tag "v0.10.9" :git/sha "e405aac"}}
+ {io.github.clojure/tools.build {:mvn/version "0.10.10"}}
:ns-default build}
:test
diff --git a/common/src/app/common/buffer.cljc b/common/src/app/common/buffer.cljc
index c04bd46239..07cf5e6853 100644
--- a/common/src/app/common/buffer.cljc
+++ b/common/src/app/common/buffer.cljc
@@ -50,6 +50,13 @@
(let [target (with-meta target {:tag 'java.nio.ByteBuffer})]
`(long (.getInt ~target (unchecked-int ~offset))))))
+(defmacro read-long
+ [target offset]
+ (if (:ns &env)
+ `(.getInt64 ~target ~offset true)
+ (let [target (with-meta target {:tag 'java.nio.ByteBuffer})]
+ `(.getLong ~target (unchecked-int ~offset)))))
+
(defmacro read-float
[target offset]
(if (:ns &env)
@@ -75,6 +82,40 @@
(finally
(.order ~target ByteOrder/LITTLE_ENDIAN))))))
+(defmacro read-bytes
+ "Get a byte array from buffer. It is potentially unsafe because on
+ JS/CLJS it returns a subarray without doing any copy of data."
+ [target offset size]
+ (if (:ns &env)
+ `(new js/Uint8Array
+ (.-buffer ~target)
+ (+ (.-byteOffset ~target) ~offset)
+ ~size)
+ (let [target (with-meta target {:tag 'java.nio.ByteBuffer})
+ bbuf (with-meta (gensym "bbuf") {:tag bytes})]
+ `(let [~bbuf (byte-array ~size)]
+ (.get ~target
+ (unchecked-int ~offset)
+ ~bbuf
+ 0
+ ~size)
+ ~bbuf))))
+
+;; FIXME: implement in cljs
+(defmacro write-bytes
+ ([target offset src size]
+ `(write-bytes ~target ~offset ~src 0 ~size))
+ ([target offset src src-offset size]
+ (if (:ns &env)
+ (throw (ex-info "not implemented" {}))
+ (let [target (with-meta target {:tag 'java.nio.ByteBuffer})
+ src (with-meta src {:tag 'bytes})]
+ `(.put ~target
+ (unchecked-int ~offset)
+ ~src
+ (unchecked-int ~src-offset)
+ (unchecked-int ~size))))))
+
(defmacro write-byte
[target offset value]
(if (:ns &env)
@@ -144,13 +185,15 @@
(.setUint32 ~target (+ ~offset 12) (aget barray# 3) true))
(let [target (with-meta target {:tag 'java.nio.ByteBuffer})
- value (with-meta value {:tag 'java.util.UUID})]
- `(try
- (.order ~target ByteOrder/BIG_ENDIAN)
- (.putLong ~target (unchecked-int (+ ~offset 0)) (.getMostSignificantBits ~value))
- (.putLong ~target (unchecked-int (+ ~offset 8)) (.getLeastSignificantBits ~value))
- (finally
- (.order ~target ByteOrder/LITTLE_ENDIAN))))))
+ value (with-meta value {:tag 'java.util.UUID})
+ prev (with-meta (gensym "prev-") {:tag 'java.nio.ByteOrder})]
+ `(let [~prev (.order ~target)]
+ (try
+ (.order ~target ByteOrder/BIG_ENDIAN)
+ (.putLong ~target (unchecked-int (+ ~offset 0)) (.getMostSignificantBits ~value))
+ (.putLong ~target (unchecked-int (+ ~offset 8)) (.getLeastSignificantBits ~value))
+ (finally
+ (.order ~target ~prev)))))))
(defn wrap
[data]
@@ -160,7 +203,7 @@
(defn allocate
[size]
- #?(:clj (let [buffer (ByteBuffer/allocate (int size))]
+ #?(:clj (let [buffer (ByteBuffer/allocate (unchecked-int size))]
(.order buffer ByteOrder/LITTLE_ENDIAN))
:cljs (new js/DataView (new js/ArrayBuffer size))))
@@ -181,6 +224,14 @@
(.set dst-view src-view)
(js/DataView. dst-buff))))
+;; FIXME: cljs impl
+#?(:clj
+ (defn copy-bytes
+ [src src-offset size dst dst-offset]
+ (let [tmp (byte-array size)]
+ (.get ^ByteBuffer src src-offset tmp 0 size)
+ (.put ^ByteBuffer dst dst-offset tmp 0 size))))
+
(defn equals?
[buffer-a buffer-b]
#?(:clj
@@ -208,3 +259,18 @@
[o]
#?(:clj (instance? ByteBuffer o)
:cljs (instance? js/DataView o)))
+
+(defn slice
+ [buffer offset size]
+ #?(:cljs
+ (let [offset (+ (.-byteOffset buffer) offset)]
+ (new js/DataView (.-buffer buffer) offset size))
+
+ :clj
+ (-> (.slice ^ByteBuffer buffer (unchecked-int offset) (unchecked-int size))
+ (.order ByteOrder/LITTLE_ENDIAN))))
+
+(defn size
+ [o]
+ #?(:cljs (.-byteLength ^js o)
+ :clj (.capacity ^ByteBuffer o)))
diff --git a/common/src/app/common/data.cljc b/common/src/app/common/data.cljc
index d06da2ae4c..ea81ca238d 100644
--- a/common/src/app/common/data.cljc
+++ b/common/src/app/common/data.cljc
@@ -1024,6 +1024,29 @@
:clj
(sort comp-fn items))))
+(defn reorder
+ "Reorder a vector by moving one of their items from some position to some space between positions.
+ It clamps the position numbers to a valid range."
+ [v from-pos to-space-between-pos]
+ (let [max-space-pos (count v)
+ max-prop-pos (dec max-space-pos)
+
+ from-pos (max 0 (min max-prop-pos from-pos))
+ to-space-between-pos (max 0 (min max-space-pos to-space-between-pos))]
+
+ (if (= from-pos to-space-between-pos)
+ v
+ (let [elem (nth v from-pos)
+ without-elem (-> []
+ (into (subvec v 0 from-pos))
+ (into (subvec v (inc from-pos))))
+ insert-pos (if (< from-pos to-space-between-pos)
+ (dec to-space-between-pos)
+ to-space-between-pos)]
+ (-> []
+ (into (subvec without-elem 0 insert-pos))
+ (into [elem])
+ (into (subvec without-elem insert-pos)))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; String Functions
diff --git a/common/src/app/common/features.cljc b/common/src/app/common/features.cljc
index ab99a95d69..87d637cfed 100644
--- a/common/src/app/common/features.cljc
+++ b/common/src/app/common/features.cljc
@@ -51,6 +51,7 @@
"styles/v2"
"layout/grid"
"plugins/runtime"
+ "tokens/numeric-input"
"design-tokens/v1"
"text-editor/v2"
"render-wasm/v1"
@@ -75,6 +76,7 @@
#{"styles/v2"
"plugins/runtime"
"text-editor/v2"
+ "tokens/numeric-input"
"render-wasm/v1"})
;; Features that are mainly backend only or there are a proper
@@ -98,17 +100,19 @@
"design-tokens/v1"
"fdata/shape-data-type"
"fdata/path-data"
+ "tokens/numeric-input"
"variants/v1"}
(into frontend-only-features)
(into backend-only-features)))
-(sm/register!
- ^{::sm/type ::features}
- [:schema
- {:title "FileFeatures"
- ::smdj/inline true
- :gen/gen (smg/subseq supported-features)}
- [::sm/set :string]])
+(def schema:features
+ (sm/register!
+ ^{::sm/type ::features}
+ [:schema
+ {:title "FileFeatures"
+ ::smdj/inline true
+ :gen/gen (smg/subseq supported-features)}
+ [::sm/set :string]]))
(defn- flag->feature
"Translate a flag to a feature name"
@@ -122,6 +126,7 @@
:feature-text-editor-v2 "text-editor/v2"
:feature-render-wasm "render-wasm/v1"
:feature-variants "variants/v1"
+ :feature-token-input "tokens/numeric-input"
nil))
(defn migrate-legacy-features
diff --git a/common/src/app/common/files/builder.cljc b/common/src/app/common/files/builder.cljc
index 181824c672..4536fb7cba 100644
--- a/common/src/app/common/files/builder.cljc
+++ b/common/src/app/common/files/builder.cljc
@@ -8,11 +8,11 @@
"Internal implementation of file builder. Mainly used as base impl
for penpot library"
(:require
+ ;; [app.common.features :as cfeat]
[app.common.data :as d]
[app.common.data.macros :as dm]
[app.common.exceptions :as ex]
[app.common.files.changes :as ch]
- ;; [app.common.features :as cfeat]
[app.common.files.helpers :as cph]
[app.common.files.migrations :as fmig]
[app.common.geom.shapes :as gsh]
@@ -26,6 +26,7 @@
[app.common.types.path :as types.path]
[app.common.types.shape :as types.shape]
[app.common.types.typography :as types.typography]
+ [app.common.types.variant :as types.variant]
[app.common.uuid :as uuid]
[cuerdas.core :as str]))
@@ -126,10 +127,12 @@
[:map
[:component-id ::sm/uuid]
[:file-id {:optional true} ::sm/uuid]
- [:name {:optional true} ::sm/text]
- [:path {:optional true} ::sm/text]
+ [:page-id {:optional true} ::sm/uuid]
[:frame-id {:optional true} ::sm/uuid]
- [:page-id {:optional true} ::sm/uuid]])
+ [:name {:optional true} :string]
+ [:path {:optional true} :string]
+ [:variant-id {:optional true} ::sm/uuid]
+ [:variant-properties {:optional true} [:vector types.variant/schema:variant-property]]])
(def ^:private check-add-component
(sm/check-fn schema:add-component
@@ -200,7 +203,8 @@
"layout/grid"
"components/v2"
"plugins/runtime"
- "design-tokens/v1"})
+ "design-tokens/v1"
+ "variants/v1"})
;; WORKAROUND: the same as features
(def available-migrations
@@ -443,7 +447,7 @@
(defn add-component
[state params]
- (let [{:keys [component-id file-id page-id frame-id name path]}
+ (let [{:keys [component-id file-id page-id frame-id name path variant-id variant-properties]}
(-> (check-add-component params)
(update :component-id default-uuid))
@@ -461,9 +465,11 @@
{:type :add-component
:id component-id
:name (or name "anonmous")
- :path path
+ :path (d/nilv path "")
:main-instance-id frame-id
- :main-instance-page page-id})
+ :main-instance-page page-id
+ :variant-id variant-id
+ :variant-properties variant-properties})
change2
{:type :mod-obj
diff --git a/common/src/app/common/files/changes.cljc b/common/src/app/common/files/changes.cljc
index 73f48f5661..0d12396f3c 100644
--- a/common/src/app/common/files/changes.cljc
+++ b/common/src/app/common/files/changes.cljc
@@ -317,17 +317,19 @@
[:type [:= :add-component]]
[:id ::sm/uuid]
[:name :string]
- [:shapes {:optional true} [:vector {:gen/max 3} ::sm/any]]
- [:path {:optional true} :string]
+ [:path :string]
[:main-instance-id ::sm/uuid]
- [:main-instance-page ::sm/uuid]]]
+ [:main-instance-page ::sm/uuid]
+ ;; Only used by external processes (like Penpot SDK)
+ [:variant-id {:optional true} ::sm/uuid]
+ [:variant-properties {:optional true} [:vector ctv/schema:variant-property]]]]
[:mod-component
- [:map {:title "ModCompoenentChange"}
+ [:map {:title "ModComponentChange"}
[:type [:= :mod-component]]
[:id ::sm/uuid]
- [:shapes {:optional true} [:vector {:gen/max 3} ::sm/any]]
[:name {:optional true} :string]
+ [:path {:optional true} :string]
[:variant-id {:optional true} ::sm/uuid]
[:variant-properties {:optional true} [:vector ctv/schema:variant-property]]]]
@@ -366,9 +368,33 @@
[:type [:= :del-typography]]
[:id ::sm/uuid]]]
- [:update-active-token-themes
- [:map {:title "UpdateActiveTokenThemes"}
- [:type [:= :update-active-token-themes]]
+ [:set-tokens-lib
+ [:map {:title "SetTokensLib"}
+ [:type [:= :set-tokens-lib]]
+ [:tokens-lib ::sm/any]]] ;; TODO: we should define a plain object schema for tokens-lib
+
+ [:set-token
+ [:map {:title "SetTokenChange"}
+ [:type [:= :set-token]]
+ [:set-id ::sm/uuid]
+ [:token-id ::sm/uuid]
+ [:attrs [:maybe ctob/schema:token-attrs]]]]
+
+ [:set-token-set
+ [:map {:title "SetTokenSetChange"}
+ [:type [:= :set-token-set]]
+ [:id ::sm/uuid]
+ [:attrs [:maybe ctob/schema:token-set-attrs]]]]
+
+ [:set-token-theme
+ [:map {:title "SetTokenThemeChange"}
+ [:type [:= :set-token-theme]]
+ [:id ::sm/uuid]
+ [:attrs [:maybe ctob/schema:token-theme-attrs]]]]
+
+ [:set-active-token-themes
+ [:map {:title "SetActiveTokenThemes"}
+ [:type [:= :set-active-token-themes]]
[:theme-paths [:set :string]]]]
[:rename-token-set-group
@@ -393,39 +419,6 @@
[:before-path [:maybe [:vector :string]]]
[:before-group [:maybe :boolean]]]]
- [:set-token-theme
- [:map {:title "SetTokenThemeChange"}
- [:type [:= :set-token-theme]]
- [:theme-name :string]
- [:group :string]
- [:theme [:maybe ctob/schema:token-theme-attrs]]]]
-
- [:set-tokens-lib
- [:map {:title "SetTokensLib"}
- [:type [:= :set-tokens-lib]]
- [:tokens-lib ::sm/any]]]
-
- [:set-token-set
- [:map {:title "SetTokenSetChange"}
- [:type [:= :set-token-set]]
- [:set-name :string]
- [:group? :boolean]
-
- ;; FIXME: we should not pass private types as part of changes
- ;; protocol, the changes protocol should reflect a
- ;; method/protocol for perform surgical operations on file data,
- ;; this has nothing todo with internal types of a file data
- ;; structure.
- [:token-set {:gen/gen (sg/generator ctob/schema:token-set)}
- [:maybe [:fn ctob/token-set?]]]]]
-
- [:set-token
- [:map {:title "SetTokenChange"}
- [:type [:= :set-token]]
- [:set-name :string]
- [:token-id ::sm/uuid]
- [:token [:maybe ctob/schema:token-attrs]]]]
-
[:set-base-font-size
[:map {:title "ModBaseFontSize"}
[:type [:= :set-base-font-size]]
@@ -978,64 +971,63 @@
[data {:keys [id]}]
(ctyl/delete-typography data id))
-;; -- Tokens
+;; -- Design Tokens
(defmethod process-change :set-tokens-lib
[data {:keys [tokens-lib]}]
(assoc data :tokens-lib tokens-lib))
(defmethod process-change :set-token
- [data {:keys [set-name token-id token]}]
+ [data {:keys [set-id token-id attrs]}]
(update data :tokens-lib
(fn [lib]
(let [lib' (ctob/ensure-tokens-lib lib)]
(cond
- (not token)
- (ctob/delete-token-from-set lib' set-name token-id)
+ (not attrs)
+ (ctob/delete-token lib' set-id token-id)
- (not (ctob/get-token-in-set lib' set-name token-id))
- (ctob/add-token-in-set lib' set-name (ctob/make-token token))
+ (not (ctob/get-token lib' set-id token-id))
+ (ctob/add-token lib' set-id (ctob/make-token attrs))
:else
- (ctob/update-token-in-set lib' set-name token-id (fn [prev-token]
- (ctob/make-token (merge prev-token token)))))))))
+ (ctob/update-token lib' set-id token-id
+ (fn [prev-token]
+ (ctob/make-token (merge prev-token attrs)))))))))
(defmethod process-change :set-token-set
- [data {:keys [set-name group? token-set]}]
+ [data {:keys [id attrs]}]
(update data :tokens-lib
(fn [lib]
(let [lib' (ctob/ensure-tokens-lib lib)]
(cond
- (not token-set)
- (if group?
- (ctob/delete-set-group lib' set-name)
- (ctob/delete-set lib' set-name))
+ (not attrs)
+ (ctob/delete-set lib' id)
- (not (ctob/get-set lib' set-name))
- (ctob/add-set lib' token-set)
+ (not (ctob/get-set lib' id))
+ (ctob/add-set lib' (ctob/make-token-set attrs))
:else
- (ctob/update-set lib' set-name (fn [_] token-set)))))))
+ (ctob/update-set lib' id (fn [_] (ctob/make-token-set attrs))))))))
(defmethod process-change :set-token-theme
- [data {:keys [group theme-name theme]}]
+ [data {:keys [id attrs]}]
(update data :tokens-lib
(fn [lib]
(let [lib' (ctob/ensure-tokens-lib lib)]
(cond
- (not theme)
- (ctob/delete-theme lib' group theme-name)
+ (not attrs)
+ (ctob/delete-theme lib' id)
- (not (ctob/get-theme lib' group theme-name))
- (ctob/add-theme lib' (ctob/make-token-theme theme))
+ (not (ctob/get-theme lib' id))
+ (ctob/add-theme lib' (ctob/make-token-theme attrs))
:else
(ctob/update-theme lib'
- group theme-name
+ id
(fn [prev-token-theme]
- (ctob/make-token-theme (merge prev-token-theme theme)))))))))
+ (ctob/make-token-theme (merge prev-token-theme attrs)))))))))
-(defmethod process-change :update-active-token-themes
+(defmethod process-change :set-active-token-themes
[data {:keys [theme-paths]}]
(update data :tokens-lib #(-> % (ctob/ensure-tokens-lib)
(ctob/set-active-themes theme-paths))))
@@ -1059,7 +1051,7 @@
(ctob/ensure-tokens-lib)
(ctob/move-set-group from-path to-path before-path before-group))))
-;; === Base font size
+;; === Design Tokens configuration
(defmethod process-change :set-base-font-size
[data {:keys [base-font-size]}]
diff --git a/common/src/app/common/files/changes_builder.cljc b/common/src/app/common/files/changes_builder.cljc
index 473bcf5bef..e27940ef1b 100644
--- a/common/src/app/common/files/changes_builder.cljc
+++ b/common/src/app/common/files/changes_builder.cljc
@@ -21,7 +21,8 @@
[app.common.types.path :as path]
[app.common.types.shape.layout :as ctl]
[app.common.types.tokens-lib :as ctob]
- [app.common.uuid :as uuid]))
+ [app.common.uuid :as uuid]
+ [clojure.datafy :refer [datafy]]))
;; Auxiliary functions to help create a set of changes (undo + redo)
;; TODO: this is a duplicate schema
@@ -717,6 +718,7 @@
(reduce resize-parent changes all-parents)))
;; Library changes
+
(defn add-color
[changes color]
(-> changes
@@ -798,160 +800,6 @@
(update :undo-changes conj {:type :add-typography :typography prev-typography})
(apply-changes-local))))
-(defn update-active-token-themes
- [changes active-theme-paths prev-active-theme-paths]
- (-> changes
- (update :redo-changes conj {:type :update-active-token-themes :theme-paths active-theme-paths})
- (update :undo-changes conj {:type :update-active-token-themes :theme-paths prev-active-theme-paths})
- (apply-changes-local)))
-
-(defn set-token-theme [changes group theme-name theme]
- (assert-library! changes)
- (let [library-data (::library-data (meta changes))
- prev-theme (some-> (get library-data :tokens-lib)
- (ctob/get-theme group theme-name))]
- (-> changes
- (update :redo-changes conj {:type :set-token-theme
- :theme-name theme-name
- :group group
- :theme theme})
- (update :undo-changes conj (if prev-theme
- {:type :set-token-theme
- :group group
- :theme-name (or
- ;; Undo of edit
- (:name theme)
- ;; Undo of delete
- theme-name)
- :theme prev-theme}
- ;; Undo of create
- {:type :set-token-theme
- :group group
- :theme-name theme-name
- :theme nil}))
- (apply-changes-local))))
-
-(defn rename-token-set-group
- [changes set-group-path set-group-fname]
- (let [undo-path (ctob/replace-last-path-name set-group-path set-group-fname)
- undo-fname (last set-group-path)]
- (-> changes
- (update :redo-changes conj {:type :rename-token-set-group :set-group-path set-group-path :set-group-fname set-group-fname})
- (update :undo-changes conj {:type :rename-token-set-group :set-group-path undo-path :set-group-fname undo-fname})
- (apply-changes-local))))
-
-(defn move-token-set
- [changes {:keys [from-path to-path before-path before-group? prev-before-path prev-before-group?] :as opts}]
- (-> changes
- (update :redo-changes conj {:type :move-token-set
- :from-path from-path
- :to-path to-path
- :before-path before-path
- :before-group before-group?})
- (update :undo-changes conj {:type :move-token-set
- :from-path to-path
- :to-path from-path
- :before-path prev-before-path
- :before-group prev-before-group?})
- (apply-changes-local)))
-
-(defn move-token-set-group
- [changes {:keys [from-path to-path before-path before-group? prev-before-path prev-before-group?]}]
- (-> changes
- (update :redo-changes conj {:type :move-token-set-group
- :from-path from-path
- :to-path to-path
- :before-path before-path
- :before-group before-group?})
- (update :undo-changes conj {:type :move-token-set-group
- :from-path to-path
- :to-path from-path
- :before-path prev-before-path
- :before-group prev-before-group?})
- (apply-changes-local)))
-
-(defn set-tokens-lib
- [changes tokens-lib]
- (assert-library! changes)
- (let [library-data (::library-data (meta changes))
- prev-tokens-lib (get library-data :tokens-lib)]
- (-> changes
- (update :redo-changes conj {:type :set-tokens-lib :tokens-lib tokens-lib})
- (update :undo-changes conj {:type :set-tokens-lib :tokens-lib prev-tokens-lib})
- (apply-changes-local))))
-
-(defn set-token [changes set-name token-id token]
- (assert-library! changes)
- (let [library-data (::library-data (meta changes))
- prev-token (some-> (get library-data :tokens-lib)
- (ctob/get-set set-name)
- (ctob/get-token token-id))]
- (-> changes
- (update :redo-changes conj {:type :set-token
- :set-name set-name
- :token-id token-id
- :token token})
- (update :undo-changes conj (if prev-token
- {:type :set-token
- :set-name set-name
- :token-id (or
- ;; Undo of edit
- (:id token)
- ;; Undo of delete
- token-id)
- :token prev-token}
- ;; Undo of create token
- {:type :set-token
- :set-name set-name
- :token-id token-id
- :token nil}))
- (apply-changes-local))))
-
-(defn rename-token-set
- [changes name new-name]
-
- (assert-library! changes)
- (let [library-data (::library-data (meta changes))
- prev-token-set (some-> (get library-data :tokens-lib)
- (ctob/get-set name))]
- (-> changes
- (update :redo-changes conj {:type :set-token-set
- :set-name name
- :token-set (ctob/rename prev-token-set new-name)
- :group? false})
- (update :undo-changes conj {:type :set-token-set
- :set-name new-name
- :token-set prev-token-set
- :group? false})
- (apply-changes-local))))
-
-(defn set-token-set
- [changes set-name group? token-set]
- (assert-library! changes)
- (let [library-data (::library-data (meta changes))
- prev-token-set (some-> (get library-data :tokens-lib)
- (ctob/get-set set-name))]
- (-> changes
- (update :redo-changes conj {:type :set-token-set
- :set-name set-name
- :token-set token-set
- :group? group?})
- (update :undo-changes conj (if prev-token-set
- {:type :set-token-set
- :set-name (if token-set
- ;; Undo of edit
- (ctob/get-name token-set)
- ;; Undo of delete
- set-name)
- :token-set prev-token-set
- :group? group?}
- ;; Undo of create
- {:type :set-token-set
- :set-name set-name
- :token-set nil
- :group? group?}))
- (apply-changes-local))))
-
(defn add-component
([changes id path name updated-shapes main-instance-id main-instance-page]
(add-component changes id path name updated-shapes main-instance-id main-instance-page nil nil nil))
@@ -1081,6 +929,144 @@
:id id
:delta delta})))
+;; Design Tokens changes
+
+(defn set-tokens-lib
+ [changes tokens-lib]
+ (assert-library! changes)
+ (let [library-data (::library-data (meta changes))
+ prev-tokens-lib (get library-data :tokens-lib)]
+ (-> changes
+ (update :redo-changes conj {:type :set-tokens-lib :tokens-lib tokens-lib})
+ (update :undo-changes conj {:type :set-tokens-lib :tokens-lib prev-tokens-lib})
+ (apply-changes-local))))
+
+(defn set-token [changes set-id token-id token]
+ (assert-library! changes)
+ (let [library-data (::library-data (meta changes))
+ prev-token (some-> (get library-data :tokens-lib)
+ (ctob/get-token set-id token-id))]
+ (-> changes
+ (update :redo-changes conj {:type :set-token
+ :set-id set-id
+ :token-id token-id
+ :attrs (datafy token)})
+ (update :undo-changes conj {:type :set-token
+ :set-id set-id
+ :token-id token-id
+ :attrs (datafy prev-token)})
+ (apply-changes-local))))
+
+(defn set-token-set
+ [changes id token-set]
+ (assert-library! changes)
+ (let [library-data (::library-data (meta changes))
+ prev-token-set (some-> (get library-data :tokens-lib)
+ (ctob/get-set id))]
+ (-> changes
+ (update :redo-changes conj {:type :set-token-set
+ :id id
+ :attrs (datafy token-set)})
+ (update :undo-changes conj {:type :set-token-set
+ :id id
+ :attrs (datafy prev-token-set)})
+ (apply-changes-local))))
+
+(defn rename-token-set
+ [changes id new-name]
+ (assert-library! changes)
+ (let [library-data (::library-data (meta changes))
+ prev-token-set (some-> (get library-data :tokens-lib)
+ (ctob/get-set id))]
+ (-> changes
+ (update :redo-changes conj {:type :set-token-set
+ :id id
+ :attrs (datafy (ctob/rename prev-token-set new-name))})
+ (update :undo-changes conj {:type :set-token-set
+ :id id
+ :attrs (datafy prev-token-set)})
+ (apply-changes-local))))
+
+(defn set-token-theme [changes id theme]
+ (assert-library! changes)
+ (let [library-data (::library-data (meta changes))
+ prev-theme (some-> (get library-data :tokens-lib)
+ (ctob/get-theme id))]
+ (-> changes
+ (update :redo-changes conj {:type :set-token-theme
+ :id id
+ :attrs (datafy theme)})
+ (update :undo-changes conj {:type :set-token-theme
+ :id id
+ :attrs (datafy prev-theme)})
+ (apply-changes-local))))
+
+(defn set-active-token-themes
+ [changes active-theme-paths]
+ (assert-library! changes)
+ (let [library-data (::library-data (meta changes))
+ prev-active-theme-paths (d/nilv (some-> (get library-data :tokens-lib)
+ (ctob/get-active-theme-paths))
+ #{})]
+ (-> changes
+ (update :redo-changes conj {:type :set-active-token-themes :theme-paths active-theme-paths})
+ (update :undo-changes conj {:type :set-active-token-themes :theme-paths prev-active-theme-paths})
+ (apply-changes-local))))
+
+(defn rename-token-set-group
+ [changes set-group-path set-group-fname]
+ (let [undo-path (ctob/replace-last-path-name set-group-path set-group-fname)
+ undo-fname (last set-group-path)]
+ (-> changes
+ (update :redo-changes conj {:type :rename-token-set-group :set-group-path set-group-path :set-group-fname set-group-fname})
+ (update :undo-changes conj {:type :rename-token-set-group :set-group-path undo-path :set-group-fname undo-fname})
+ (apply-changes-local))))
+
+(defn move-token-set
+ [changes {:keys [from-path to-path before-path before-group? prev-before-path prev-before-group?] :as opts}]
+ (-> changes
+ (update :redo-changes conj {:type :move-token-set
+ :from-path from-path
+ :to-path to-path
+ :before-path before-path
+ :before-group before-group?})
+ (update :undo-changes conj {:type :move-token-set
+ :from-path to-path
+ :to-path from-path
+ :before-path prev-before-path
+ :before-group prev-before-group?})
+ (apply-changes-local)))
+
+(defn move-token-set-group
+ [changes {:keys [from-path to-path before-path before-group? prev-before-path prev-before-group?]}]
+ (-> changes
+ (update :redo-changes conj {:type :move-token-set-group
+ :from-path from-path
+ :to-path to-path
+ :before-path before-path
+ :before-group before-group?})
+ (update :undo-changes conj {:type :move-token-set-group
+ :from-path to-path
+ :to-path from-path
+ :before-path prev-before-path
+ :before-group prev-before-group?})
+ (apply-changes-local)))
+
+(defn set-base-font-size
+ [changes new-base-font-size]
+ (assert-file-data! changes)
+ (let [file-data (::file-data (meta changes))
+ previous-font-size (ctf/get-base-font-size file-data)]
+ (-> changes
+ (update :redo-changes conj {:type :set-base-font-size
+ :base-font-size new-base-font-size})
+
+ (update :undo-changes conj {:type :set-base-font-size
+ :base-font-size previous-font-size})
+ (apply-changes-local))))
+
+;; Misc changes
+
(defn reorder-children
[changes id children]
(assert-page-id! changes)
@@ -1163,15 +1149,3 @@
[changes]
(::page-id (meta changes)))
-(defn set-base-font-size
- [changes new-base-font-size]
- (assert-file-data! changes)
- (let [file-data (::file-data (meta changes))
- previous-font-size (ctf/get-base-font-size file-data)]
- (-> changes
- (update :redo-changes conj {:type :set-base-font-size
- :base-font-size new-base-font-size})
-
- (update :undo-changes conj {:type :set-base-font-size
- :base-font-size previous-font-size})
- (apply-changes-local))))
diff --git a/common/src/app/common/files/helpers.cljc b/common/src/app/common/files/helpers.cljc
index fe16c9daa4..2e6ae5dc5f 100644
--- a/common/src/app/common/files/helpers.cljc
+++ b/common/src/app/common/files/helpers.cljc
@@ -692,129 +692,9 @@
(walk/postwalk process-form data)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; SHAPES ORGANIZATION (PATH MANAGEMENT)
+;; SHAPES ORGANIZATION
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defn split-path
- "Decompose a string in the form 'one / two / three' into
- a vector of strings, normalizing spaces."
- [path]
- (let [xf (comp (map str/trim)
- (remove str/empty?))]
- (->> (str/split path "/")
- (into [] xf))))
-
-(defn join-path
- "Regenerate a path as a string, from a vector."
- [path-vec]
- (str/join " / " path-vec))
-
-(defn join-path-with-dot
- "Regenerate a path as a string, from a vector."
- [path-vec]
- (str/join "\u00A0\u2022\u00A0" path-vec))
-
-(defn clean-path
- "Remove empty items from the path."
- [path]
- (->> (split-path path)
- (join-path)))
-
-(defn parse-path-name
- "Parse a string in the form 'group / subgroup / name'.
- Retrieve the path and the name in separated values, normalizing spaces."
- [path-name]
- (let [path-name-split (split-path path-name)
- path (str/join " / " (butlast path-name-split))
- name (or (last path-name-split) "")]
- [path name]))
-
-(defn merge-path-item
- "Put the item at the end of the path."
- [path name]
- (if-not (empty? path)
- (if-not (empty? name)
- (str path " / " name)
- path)
- name))
-
-(defn merge-path-item-with-dot
- "Put the item at the end of the path."
- [path name]
- (if-not (empty? path)
- (if-not (empty? name)
- (str path "\u00A0\u2022\u00A0" name)
- path)
- name))
-
-(defn compact-path
- "Separate last item of the path, and truncate the others if too long:
- 'one' -> ['' 'one' false]
- 'one / two / three' -> ['one / two' 'three' false]
- 'one / two / three / four' -> ['one / two / ...' 'four' true]
- 'one-item-but-very-long / two' -> ['...' 'two' true] "
- [path max-length dot?]
- (let [path-split (split-path path)
- last-item (last path-split)
- merge-path (if dot?
- merge-path-item-with-dot
- merge-path-item)]
- (loop [other-items (seq (butlast path-split))
- other-path ""]
- (if-let [item (first other-items)]
- (let [full-path (-> other-path
- (merge-path item)
- (merge-path last-item))]
- (if (> (count full-path) max-length)
- [(merge-path other-path "...") last-item true]
- (recur (next other-items)
- (merge-path other-path item))))
- [other-path last-item false]))))
-
-(defn butlast-path
- "Remove the last item of the path."
- [path]
- (let [split (split-path path)]
- (if (= 1 (count split))
- ""
- (join-path (butlast split)))))
-
-(defn butlast-path-with-dots
- "Remove the last item of the path."
- [path]
- (let [split (split-path path)]
- (if (= 1 (count split))
- ""
- (join-path-with-dot (butlast split)))))
-
-(defn last-path
- "Returns the last item of the path."
- [path]
- (last (split-path path)))
-
-(defn compact-name
- "Append the first item of the path and the name."
- [path name]
- (let [path-split (split-path path)]
- (merge-path-item (first path-split) name)))
-
-(defn inside-path? [child parent]
- (let [child-path (split-path child)
- parent-path (split-path parent)]
- (and (<= (count parent-path) (count child-path))
- (= parent-path (take (count parent-path) child-path)))))
-
-
-
-(defn split-by-last-period
- "Splits a string into two parts:
- the text before and including the last period,
- and the text after the last period."
- [s]
- (if-let [last-period (str/last-index-of s ".")]
- [(subs s 0 (inc last-period)) (subs s (inc last-period))]
- [s ""]))
-
(defn get-frame-objects
"Retrieves a new objects map only with the objects under frame-id (with frame-id)"
[objects frame-id]
diff --git a/common/src/app/common/files/migrations.cljc b/common/src/app/common/files/migrations.cljc
index e5cb43386c..87c9c90da5 100644
--- a/common/src/app/common/files/migrations.cljc
+++ b/common/src/app/common/files/migrations.cljc
@@ -33,6 +33,7 @@
[app.common.types.shape.shadow :as ctss]
[app.common.types.shape.text :as ctst]
[app.common.types.text :as types.text]
+ [app.common.types.tokens-lib :as types.tokens-lib]
[app.common.uuid :as uuid]
[clojure.set :as set]
[cuerdas.core :as str]))
@@ -74,7 +75,9 @@
data
(-> data
(assoc :id id)
- (dissoc :version :libs))]
+ (dissoc :version)
+ (dissoc :libs)
+ (ctf/check-file-data))]
(-> file
(assoc :data data)
@@ -1538,6 +1541,13 @@
(update :pages-index d/update-vals update-container)
(d/update-when :components d/update-vals update-container))))
+(defmethod migrate-data "0013-fix-component-path"
+ [data _]
+ (let [update-component
+ (fn [component]
+ (update component :path #(d/nilv % "")))]
+ (d/update-when data :components d/update-vals update-component)))
+
(def ^:private valid-stroke?
(sm/lazy-validator cts/schema:stroke))
@@ -1608,6 +1618,10 @@
(update :pages-index d/update-vals update-container)
(d/update-when :components d/update-vals update-container))))
+(defmethod migrate-data "0014-fix-tokens-lib-duplicate-ids"
+ [data _]
+ (d/update-when data :tokens-lib types.tokens-lib/fix-duplicate-token-set-ids))
+
(defmethod migrate-data "0014-clear-components-nil-objects"
[data _]
;; Because of a bug in migrations, several files have migrations
@@ -1684,5 +1698,7 @@
"0010-fix-swap-slots-pointing-non-existent-shapes"
"0011-fix-invalid-text-touched-flags"
"0012-fix-position-data"
+ "0013-fix-component-path"
"0013-clear-invalid-strokes-and-fills"
+ "0014-fix-tokens-lib-duplicate-ids"
"0014-clear-components-nil-objects"]))
diff --git a/common/src/app/common/files/repair.cljc b/common/src/app/common/files/repair.cljc
index 945b0c1f57..eaa70209a2 100644
--- a/common/src/app/common/files/repair.cljc
+++ b/common/src/app/common/files/repair.cljc
@@ -320,6 +320,31 @@
(pcb/with-file-data file-data)
(pcb/update-shapes shape-ids detach-shape))))))
+(defmethod repair-error :ref-shape-is-not-head
+ [_ {:keys [shape page-id] :as error} file-data _]
+ (let [repair-shape
+ (fn [shape]
+ ; Convert shape in a normal copy, removing nested copy status
+ (log/debug :hint " -> unhead shape")
+ (ctk/unhead-shape shape))]
+
+ (log/dbg :hint "repairing shape :shape-ref-is-not-head" :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
+ (fn [shape]
+ ; Convert shape in a nested head, adding component info
+ (log/debug :hint " -> reroot shape")
+ (ctk/rehead-shape shape (:component-file args) (:component-id args)))]
+
+ (log/dbg :hint "repairing shape :shape-ref-is-head" :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 :shape-ref-cycle
[_ {:keys [shape args] :as error} file-data _]
diff --git a/common/src/app/common/files/validate.cljc b/common/src/app/common/files/validate.cljc
index 44a98ee8f8..5b0e1d74d4 100644
--- a/common/src/app/common/files/validate.cljc
+++ b/common/src/app/common/files/validate.cljc
@@ -11,6 +11,7 @@
[app.common.exceptions :as ex]
[app.common.files.helpers :as cfh]
[app.common.files.variant :as cfv]
+ [app.common.path-names :as cpn]
[app.common.schema :as sm]
[app.common.types.component :as ctk]
[app.common.types.components-list :as ctkl]
@@ -47,6 +48,8 @@
:should-be-component-root
:should-not-be-component-root
:ref-shape-not-found
+ :ref-shape-is-head
+ :ref-shape-is-not-head
:shape-ref-in-main
:root-main-not-allowed
:nested-main-not-allowed
@@ -301,6 +304,28 @@
"Shape inside main instance should not have shape-ref"
shape file page)))
+(defn- check-ref-is-not-head
+ "Validate that the referenced shape is not a nested copy root."
+ [shape file page libraries]
+ (let [ref-shape (ctf/find-ref-shape file page libraries shape :include-deleted? true)]
+ (when (and (some? ref-shape)
+ (ctk/instance-head? ref-shape))
+ (report-error :ref-shape-is-head
+ (str/ffmt "Referenced shape % is a component, so the copy must also be" (:shape-ref shape))
+ shape file page))))
+
+(defn- check-ref-is-head
+ "Validate that the referenced shape is a nested copy root."
+ [shape file page libraries]
+ (let [ref-shape (ctf/find-ref-shape file page libraries shape :include-deleted? true)]
+ (when (and (some? ref-shape)
+ (not (ctk/instance-head? ref-shape)))
+ (report-error :ref-shape-is-not-head
+ (str/ffmt "Referenced shape % of a head copy must also be a head" (:shape-ref shape))
+ shape file page
+ :component-file (:component-file ref-shape)
+ :component-id (:component-id ref-shape)))))
+
(defn- check-empty-swap-slot
"Validate that this shape does not have any swap slot."
[shape file page]
@@ -378,6 +403,7 @@
(check-component-not-main-head shape file page libraries)
(check-component-root shape file page)
(check-component-ref shape file page libraries)
+ (check-ref-is-head shape file page libraries)
(check-empty-swap-slot shape file page)
(check-duplicate-swap-slot shape file page)
(check-valid-touched shape file page)
@@ -395,7 +421,8 @@
;; 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
- (check-component-ref shape file page libraries))
+ (check-component-ref shape file page libraries)
+ (check-ref-is-head shape file page libraries))
(run! #(check-shape % file page libraries :context :copy-nested) (:shapes shape)))
(defn- check-shape-main-not-root
@@ -413,6 +440,7 @@
(check-component-not-main-not-head shape file page)
(check-component-not-root shape file page)
(check-component-ref shape file page libraries)
+ (check-ref-is-not-head shape file page libraries)
(check-empty-swap-slot shape file page)
(check-valid-touched shape file page)
(run! #(check-shape % file page libraries :context :copy-any) (:shapes shape)))
@@ -481,7 +509,7 @@
(report-error :variant-bad-name
(str/ffmt "Variant % has an invalid name" (:id shape))
shape file page))
- (when-not (= (:name parent) (cfh/merge-path-item (:path component) (:name component)))
+ (when-not (= (:name parent) (cpn/merge-path-item (:path component) (:name component)))
(report-error :variant-component-bad-name
(str/ffmt "Component % has an invalid name" (:id shape))
shape file page))
@@ -540,7 +568,7 @@
;; mains can't be nested into mains
(if (or (= context :not-component) (= context :main-top))
(report-error :nested-main-not-allowed
- "Nested main component only allowed inside other component"
+ "Component main not allowed inside other component"
shape file page)
(check-shape-main-root-nested shape file page libraries))
@@ -606,6 +634,20 @@
(str/ffmt "Shape % should be a variant" (:id main-component))
main-component file component-page))))
+(defn- check-main-inside-main
+ [component file]
+ (let [component-page (ctf/get-component-page (:data file) component)
+ main-instance (ctst/get-shape component-page (:main-instance-id component))
+ main-parents? (->> main-instance
+ :id
+ (cfh/get-parents (:objects component-page))
+ (some ctk/main-instance?)
+ boolean)]
+ (when main-parents?
+ (report-error :nested-main-not-allowed
+ "Component main not allowed inside other component"
+ main-instance file component-page))))
+
(defn- check-component
"Validate semantic coherence of a component. Report all errors found."
[component file]
@@ -613,6 +655,8 @@
(report-error :component-nil-objects-not-allowed
"Objects list cannot be nil"
component file nil))
+ (when-not (:deleted component)
+ (check-main-inside-main component file))
(when (:deleted component)
(check-component-duplicate-swap-slot component file)
(check-ref-cycles component file))
diff --git a/common/src/app/common/flags.cljc b/common/src/app/common/flags.cljc
index c8ce46085b..37e6268b3d 100644
--- a/common/src/app/common/flags.cljc
+++ b/common/src/app/common/flags.cljc
@@ -120,6 +120,7 @@
:tiered-file-data-storage
:token-units
:token-base-font-size
+ :token-color
:token-typography-types
:token-typography-composite
:transit-readable-response
@@ -133,8 +134,19 @@
:hide-release-modal
:subscriptions
:subscriptions-old
- :frontend-binary-fills
- :inspect-styles})
+ :inspect-styles
+
+ ;; Security layer middleware that filters request by fetch
+ ;; metadata headers
+ :sec-fetch-metadata-middleware
+
+ ;; Security layer middleware that check the precense of x-client
+ ;; http headers and enables an addtional csrf protection
+ :client-header-check-middleware
+
+ ;; A temporal flag, enables backend code use more extensivelly
+ ;; redis for caching data
+ :redis-cache})
(def all-flags
(set/union email login varia))
@@ -159,6 +171,7 @@
:enable-render-wasm-dpr
:enable-token-units
:enable-token-typography-types
+ :enable-token-typography-composite
:enable-feature-fdata-objects-map])
(defn parse
diff --git a/common/src/app/common/generic_pool.clj b/common/src/app/common/generic_pool.clj
new file mode 100644
index 0000000000..bccf0b06ec
--- /dev/null
+++ b/common/src/app/common/generic_pool.clj
@@ -0,0 +1,58 @@
+;; 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.common.generic-pool
+ (:refer-clojure :exclude [get])
+ (:import
+ java.lang.AutoCloseable
+ org.apache.commons.pool2.ObjectPool
+ org.apache.commons.pool2.PooledObject
+ org.apache.commons.pool2.PooledObjectFactory
+ org.apache.commons.pool2.impl.DefaultPooledObject
+ org.apache.commons.pool2.impl.SoftReferenceObjectPool))
+
+(defn pool?
+ [o]
+ (instance? ObjectPool o))
+
+(defn create
+ [& {:keys [create-fn destroy-fn validate-fn dispose-fn]}]
+ (SoftReferenceObjectPool.
+ (reify PooledObjectFactory
+ (activateObject [_ _])
+ (destroyObject [_ o]
+ (let [object (.getObject ^PooledObject o)]
+ (destroy-fn object)))
+
+ (destroyObject [_ o _]
+ (let [object (.getObject ^PooledObject o)]
+ (destroy-fn object)))
+
+ (passivateObject [_ o]
+ (when (fn? dispose-fn)
+ (let [object (.getObject ^PooledObject o)]
+ (dispose-fn object))))
+
+ (validateObject [_ o]
+ (if (fn? validate-fn)
+ (let [object (.getObject ^PooledObject o)]
+ (validate-fn object))
+ true))
+
+ (makeObject [_]
+ (let [object (create-fn)]
+ (DefaultPooledObject. object))))))
+
+(defn get
+ [^ObjectPool pool]
+ (let [object (.borrowObject pool)]
+ (reify
+ clojure.lang.IDeref
+ (deref [_] object)
+
+ AutoCloseable
+ (close [_]
+ (.returnObject pool object)))))
diff --git a/common/src/app/common/geom/shapes/bounds.cljc b/common/src/app/common/geom/shapes/bounds.cljc
index 3117e20adf..a6a6608ba4 100644
--- a/common/src/app/common/geom/shapes/bounds.cljc
+++ b/common/src/app/common/geom/shapes/bounds.cljc
@@ -88,8 +88,11 @@
([shape]
(get-shape-filter-bounds shape false))
([shape ignore-shadow-margin?]
- (if (and (cfh/svg-raw-shape? shape)
- (not= :svg (dm/get-in shape [:content :tag])))
+ (if (or (and (cfh/svg-raw-shape? shape)
+ (not= :svg (dm/get-in shape [:content :tag])))
+ ;; If no shadows or blur, we return the selrect as is
+ (and (empty? (-> shape :shadow))
+ (zero? (-> shape :blur :value (or 0)))))
(dm/get-prop shape :selrect)
(let [filters (shape->filters shape)
blur-value (or (-> shape :blur :value) 0)
diff --git a/common/src/app/common/logging.cljc b/common/src/app/common/logging.cljc
index 7a4df8ebef..e678152b12 100644
--- a/common/src/app/common/logging.cljc
+++ b/common/src/app/common/logging.cljc
@@ -49,6 +49,7 @@
[app.common.exceptions :as ex]
[app.common.pprint :as pp]
[app.common.schema :as sm]
+ [app.common.time :as ct]
[app.common.uuid :as uuid]
[cuerdas.core :as str]
[promesa.exec :as px]
@@ -221,36 +222,42 @@
#?(:clj (inst-ms (java.time.Instant/now))
:cljs (js/Date.now)))
+(defn emit-log
+ [props cause context logger level sync?]
+ (let [props (cond-> props sync? deref)
+ ts (current-timestamp)
+ gcontext *context*
+ logfn (fn []
+ (let [props (if sync? props (deref props))
+ props (into (d/ordered-map) props)
+ context (if (and (empty? gcontext)
+ (empty? context))
+ {}
+ (d/without-nils (merge gcontext context)))
+
+ lrecord {::id (uuid/next)
+ ::timestamp ts
+ ::message (delay (build-message props))
+ ::props props
+ ::context context
+ ::level level
+ ::logger logger}
+ lrecord (cond-> lrecord
+ (some? cause)
+ (assoc ::cause cause
+ ::trace (delay (build-stack-trace cause))))]
+ (swap! log-record (constantly lrecord))))]
+ (if sync?
+ (logfn)
+ (px/exec! *default-executor* logfn))))
+
(defmacro log!
"Emit a new log record to the global log-record state (asynchronously). "
[& props]
(let [{:keys [::level ::logger ::context ::sync? cause] :or {sync? false}} props
props (into [] msg-props-xf props)]
`(when (enabled? ~logger ~level)
- (let [props# (cond-> (delay ~props) ~sync? deref)
- ts# (current-timestamp)
- context# *context*
- logfn# (fn []
- (let [props# (if ~sync? props# (deref props#))
- props# (into (d/ordered-map) props#)
- cause# ~cause
- context# (d/without-nils
- (merge context# ~context))
- lrecord# {::id (uuid/next)
- ::timestamp ts#
- ::message (delay (build-message props#))
- ::props props#
- ::context context#
- ::level ~level
- ::logger ~logger}
- lrecord# (cond-> lrecord#
- (some? cause#)
- (assoc ::cause cause#
- ::trace (delay (build-stack-trace cause#))))]
- (swap! log-record (constantly lrecord#))))]
- (if ~sync?
- (logfn#)
- (px/exec! *default-executor* logfn#))))))
+ (emit-log (delay ~props) ~cause ~context ~logger ~level ~sync?))))
#?(:clj
(defn slf4j-log-handler
@@ -276,7 +283,8 @@
(when (enabled? logger level)
(let [hstyles (str/ffmt "font-weight: 600; color: %" (level->color level))
mstyles (str/ffmt "font-weight: 300; color: %" (level->color level))
- header (str/concat "%c" (level->name level) " [" logger "] ")
+ ts (ct/format-inst (ct/now) "kk:mm:ss.SSSS")
+ header (str/concat "%c" (level->name level) " " ts " [" logger "] ")
message (str/concat header "%c" @message)]
(js/console.group message hstyles mstyles)
diff --git a/common/src/app/common/logic/libraries.cljc b/common/src/app/common/logic/libraries.cljc
index 7beec359cb..95a87057be 100644
--- a/common/src/app/common/logic/libraries.cljc
+++ b/common/src/app/common/logic/libraries.cljc
@@ -11,11 +11,13 @@
[app.common.data.macros :as dm]
[app.common.files.changes-builder :as pcb]
[app.common.files.helpers :as cfh]
+ [app.common.files.variant :as cfv]
[app.common.geom.point :as gpt]
[app.common.geom.shapes :as gsh]
[app.common.logging :as log]
[app.common.logic.shapes :as cls]
[app.common.logic.variant-properties :as clvp]
+ [app.common.path-names :as cpn]
[app.common.spec :as us]
[app.common.types.component :as ctk]
[app.common.types.components-list :as ctkl]
@@ -553,13 +555,20 @@
(pcb/with-objects (:objects container)))]
(if-let [shape (first shapes)]
(recur (next shapes)
- (generate-sync-shape asset-type
- changes
- library-id
- container
- shape
- libraries
- current-file-id))
+ (let [objects' (pcb/get-objects changes)
+ shape' (get objects' (:id shape))]
+ ;; The shape could have been deleted in previous changes, if this nested component
+ ;; comes from components-v1 era or if there has been some error with the swap slot.
+ ;; In that case, we just skip it.
+ (if shape'
+ (generate-sync-shape asset-type
+ changes
+ library-id
+ container
+ shape'
+ libraries
+ current-file-id)
+ changes)))
changes))))
(defmulti uses-assets?
@@ -655,7 +664,8 @@
(if (= new-content old-content)
changes
- changes')))
+ (-> changes'
+ (pcb/apply-changes-local)))))
;; ---- Component synchronization helpers ----
@@ -985,7 +995,7 @@
(defn generate-rename-component
"Generate the changes for rename the component with the given id, in the current file library."
[changes id new-name library-data]
- (let [[path name] (cfh/parse-path-name new-name)]
+ (let [[path name] (cpn/split-group-name new-name)]
(-> changes
(pcb/with-library-data library-data)
(pcb/update-component id #(assoc % :path path :name name)))))
@@ -1178,6 +1188,7 @@
(let [child-inst (first children-inst)
child-main (first children-main)]
(shape-log :trace (:id shape-inst) container-inst
+ :msg "Comparing"
:main (str (:name child-main) " " (pretty-uuid (:id child-main)))
:inst (str (:name child-inst) " " (pretty-uuid (:id child-inst))))
(cond
@@ -1192,7 +1203,8 @@
:else
(if (or (ctk/is-main-of? child-main child-inst)
- (and (ctf/match-swap-slot? child-main child-inst container-inst container-main file libraries) (not reset?)))
+ (and (ctf/match-swap-slot? child-main child-inst container-inst container-main file libraries)
+ (not reset?)))
(recur (next children-inst)
(next children-main)
(if (ctk/is-main-of? child-main child-inst)
@@ -1200,10 +1212,12 @@
(swapped-cb changes child-inst child-main)))
(let [child-inst' (d/seek #(or (ctk/is-main-of? child-main %)
- (and (ctf/match-swap-slot? child-main % container-inst container-main file libraries) (not reset?)))
+ (and (ctf/match-swap-slot? child-main % container-inst container-main file libraries)
+ (not reset?)))
children-inst)
child-main' (d/seek #(or (ctk/is-main-of? % child-inst)
- (and (ctf/match-swap-slot? % child-inst container-inst container-main file libraries) (not reset?)))
+ (and (ctf/match-swap-slot? % child-inst container-inst container-main file libraries)
+ (not reset?)))
children-main)]
(cond
(nil? child-inst')
@@ -1313,7 +1327,8 @@
(if (and (ctk/touched-group? parent-shape :shapes-group) omit-touched?)
changes
- changes')))
+ (-> changes'
+ (pcb/apply-changes-local)))))
(defn- add-shape-to-main
[changes shape index component component-container page root-instance root-main]
@@ -1417,7 +1432,8 @@
changes' (reduce mod-obj-change changes' updated-shapes)
changes' (reduce del-obj-change changes' new-shapes)]
- changes'))
+ (-> changes'
+ (pcb/apply-changes-local))))
(defn- remove-shape
[changes shape container omit-touched?]
@@ -1470,7 +1486,8 @@
(if (and (ctk/touched-group? parent :shapes-group) omit-touched?)
changes
- changes')))
+ (-> changes'
+ (pcb/apply-changes-local)))))
(defn- move-shape
[changes shape index-before index-after container omit-touched?]
@@ -1507,7 +1524,8 @@
(if (and (ctk/touched-group? parent :shapes-group) omit-touched?)
changes
- changes')))
+ (-> changes'
+ (pcb/apply-changes-local)))))
(defn change-touched
[changes dest-shape origin-shape container
@@ -1551,7 +1569,8 @@
:id (:id dest-shape)
:operations
[{:type :set-touched
- :touched (:touched dest-shape)}]})))))))
+ :touched (:touched dest-shape)}]}))
+ (pcb/apply-changes-local))))))
(defn- change-remote-synced
[changes shape container remote-synced?]
@@ -1580,7 +1599,8 @@
:id (:id shape)
:operations
[{:type :set-remote-synced
- :remote-synced (:remote-synced shape)}]}))))))
+ :remote-synced (:remote-synced shape)}]}))
+ (pcb/apply-changes-local)))))
(defn- update-tokens
"Token synchronization algorithm. Copy the applied tokens that have changed
@@ -1618,10 +1638,12 @@
:operations [{:type :set
:attr :applied-tokens
:val dest-tokens
- :ignore-touched true}]}))))))
+ :ignore-touched true}]}))
+ (pcb/apply-changes-local)))))
(defn- generate-update-tokens
- [changes container dest-shape origin-shape touched omit-touched?]
+ [changes container dest-shape origin-shape touched omit-touched? valid-attrs]
+ ;; valid-attrs is a set of attrs to consider on the update. If it is nil, it will consider all the attrs
(let [attrs (->> (seq (keys ctk/sync-attrs))
;; We don't update the flex-child attrs
(remove #(= :layout-grid-cells %)))
@@ -1629,8 +1651,8 @@
applied-tokens (reduce (fn [applied-tokens attr]
(let [attr-group (get ctk/sync-attrs attr)
token-attrs (cto/shape-attr->token-attrs attr)]
- (if (not (and (touched attr-group)
- omit-touched?))
+ (if (and (or (not omit-touched?) (not (touched attr-group)))
+ (or (empty? valid-attrs) (contains? valid-attrs attr)))
(into applied-tokens token-attrs)
applied-tokens)))
#{}
@@ -1661,7 +1683,8 @@
(update :undo-changes concat [(make-change
container
{:type :reg-objects
- :shapes all-parents})]))))
+ :shapes all-parents})])
+ (pcb/apply-changes-local))))
(defn- text-change-value
@@ -1733,6 +1756,17 @@
[(conj roperations roperation)
(conj uoperations uoperation)]))
+(defn- check-detached-main
+ [changes dest-shape origin-shape]
+ ;; Only for direct updates (from main to copy). Check if the main shape
+ ;; has been detached. If so, the copy shape must be unheaded (i.e. converted
+ ;; into a normal copy and not a nested instance).
+ (if (and (= (:shape-ref dest-shape) (:id origin-shape))
+ (ctk/subcopy-head? dest-shape)
+ (not (ctk/instance-head? origin-shape)))
+ (pcb/update-shapes changes [(:id dest-shape)] ctk/unhead-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.
@@ -1773,7 +1807,9 @@
(seq roperations)
(add-update-attr-changes dest-shape container roperations uoperations)
:always
- (generate-update-tokens container dest-shape origin-shape touched omit-touched?))
+ (check-detached-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)
;; position-data is a special case because can be affected by
@@ -1796,7 +1832,6 @@
(= :content attr)
(touched attr-group))
-
skip-operations?
(or (= (get origin-shape attr) (get dest-shape attr))
(and (touched attr-group)
@@ -1995,10 +2030,14 @@
reset-pos-data? (and
(not skip-operations?)
(cfh/text-shape? previous-shape)
- (= attr :position-data)
+ (or (= attr :position-data) (= attr :selrect))
(not= (:position-data previous-shape) (:position-data current-shape))
(touched :geometry-group))
+ skip-operations? (or skip-operations?
+ ;; If we are going to reset the position data, skip the selrect attr
+ (and reset-pos-data? (= attr :selrect)))
+
attr-val
(when-not skip-operations?
(cond
@@ -2044,12 +2083,14 @@
(recur (next attrs)
roperations'
uoperations'))
- (cond-> changes
- (> (count roperations) 1)
- (add-update-attr-changes current-shape container roperations uoperations)
- :always
- (generate-update-tokens container current-shape previous-shape touched false))))))
+ (let [updated-attrs (into #{} (comp (filter #(= :set (:type %)))
+ (map :attr))
+ roperations)]
+ (cond-> changes
+ (> (count roperations) 1)
+ (-> (add-update-attr-changes current-shape container roperations uoperations)
+ (generate-update-tokens container current-shape previous-shape touched false updated-attrs))))))))
(defn- propagate-attrs
"Helper that puts the origin attributes (attrs) into dest but only if
@@ -2222,7 +2263,7 @@
variant-id (when (ctk/is-variant? root) (:parent-id root))
props (when (ctk/is-variant? root) (get variant-props (:component-id root)))
- [path name] (cfh/parse-path-name name)
+ [path name] (cpn/split-group-name name)
[root-shape updated-shapes]
(ctn/convert-shape-in-component root objects file-id)
@@ -2514,9 +2555,10 @@
frames)))
(defn- duplicate-variant
- [changes library component base-pos parent-id page-id]
+ [changes library component base-pos parent page-id into-new-variant?]
(let [component-page (ctpl/get-page (:data library) (:main-instance-page component))
- component-shape (dm/get-in component-page [:objects (:main-instance-id component)])
+ objects (:objects component-page)
+ component-shape (get objects (:main-instance-id component))
orig-pos (gpt/point (:x component-shape) (:y component-shape))
delta (gpt/subtract base-pos orig-pos)
new-component-id (uuid/next)
@@ -2526,11 +2568,27 @@
new-component-id
{:apply-changes-local-library? true
:delta delta
- :new-variant-id parent-id
- :page-id page-id})]
+ :new-variant-id (if into-new-variant? nil (:id parent))
+ :page-id page-id})
+ value (when into-new-variant?
+ (str ctv/value-prefix
+ (-> (cfv/extract-properties-values (:data library) objects (:id parent))
+ last
+ :value
+ count
+ inc)))]
+
[shape
- (-> changes
- (pcb/change-parent parent-id [shape]))]))
+ (cond-> changes
+ into-new-variant?
+ (clvp/generate-make-shapes-variant [shape] parent)
+
+ ;; If it has the same parent, update the value of the last property
+ (and into-new-variant? (= (:variant-id component) (:id parent)))
+ (clvp/generate-update-property-value new-component-id (-> component :variant-properties count dec) value)
+
+ :always
+ (pcb/change-parent (:id parent) [shape] 0))]))
(defn generate-duplicate-component-change
@@ -2542,11 +2600,13 @@
pos (as-> (gsh/move main delta) $
(gpt/point (:x $) (:y $)))
+ parent (get objects parent-id)
+
+
;; When we duplicate a variant alone, we will instanciate it
;; When we duplicate a variant along with its variant-container, we will duplicate it
in-variant-container? (contains? ids-map (:variant-id main))
-
restore-component
#(let [{:keys [shape changes]}
(prepare-restore-component changes
@@ -2559,29 +2619,42 @@
frame-id)]
[shape changes])
- [_shape changes]
- (if (nil? component)
- (restore-component)
- (if (and (ctk/is-variant? main) in-variant-container?)
- (duplicate-variant changes
- (get libraries file-id)
- component
- pos
- parent-id
- (:id page))
- (generate-instantiate-component changes
- objects
- file-id
- component-id
- pos
- page
- libraries
- main-id
- parent-id
- frame-id
- ids-map
- {})))]
+ [_shape changes]
+ (cond
+ (nil? component)
+ (restore-component)
+
+ (and (ctk/is-variant? main) in-variant-container?)
+ (duplicate-variant changes
+ (get libraries file-id)
+ component
+ pos
+ parent
+ (:id page)
+ false)
+
+ (ctk/is-variant-container? parent)
+ (duplicate-variant changes
+ (get libraries file-id)
+ component
+ pos
+ parent
+ (:id page)
+ true)
+ :else
+ (generate-instantiate-component changes
+ objects
+ file-id
+ component-id
+ pos
+ page
+ libraries
+ main-id
+ parent-id
+ frame-id
+ ids-map
+ {}))]
changes))
(defn generate-duplicate-shape-change
@@ -2728,7 +2801,7 @@
(defn generate-duplicate-changes
"Prepare objects to duplicate: generate new id, give them unique names,
move to the desired position, and recalculate parents and frames as needed."
- [changes all-objects page ids delta libraries library-data file-id & {:keys [variant-props]}]
+ [changes all-objects page ids delta libraries library-data file-id & {:keys [variant-props alt-duplication?]}]
(let [shapes (map (d/getf all-objects) ids)
unames (volatile! (cfh/get-used-names (:objects page)))
update-unames! (fn [new-name] (vswap! unames conj new-name))
@@ -2738,9 +2811,22 @@
;; we calculate a new one because the components will have created new shapes.
ids-map (into {} (map #(vector % (uuid/next))) all-ids)
+
+ ;; If there is an alt-duplication of a variant, change its parent to root
+ ;; so the copy is made as a child of root
+ ;; This is because inside a variant-container can't be a copy
+ shapes (map (fn [shape]
+ (if (and alt-duplication? (ctk/is-variant? shape))
+ (assoc shape :parent-id uuid/zero :frame-id nil)
+ shape))
+ shapes)
+
+
changes (-> changes
(pcb/with-page page)
- (pcb/with-objects all-objects))
+ (pcb/with-objects all-objects)
+ (pcb/with-library-data library-data))
+
changes
(->> shapes
(reduce #(generate-duplicate-shape-change %1
diff --git a/common/src/app/common/logic/shapes.cljc b/common/src/app/common/logic/shapes.cljc
index bad3065ef4..d0958ccacd 100644
--- a/common/src/app/common/logic/shapes.cljc
+++ b/common/src/app/common/logic/shapes.cljc
@@ -185,15 +185,17 @@
interactions)))
(vals objects))
+ id-to-delete? (set ids-to-delete)
changes
- (reduce (fn [changes {:keys [id] :as flow}]
- (if (contains? ids-to-delete (:starting-frame flow))
- (-> changes
- (pcb/with-page page)
- (pcb/set-flow id nil))
- changes))
- changes
- (:flows page))
+ (->> (:flows page)
+ (reduce
+ (fn [changes [id flow]]
+ (if (id-to-delete? (:starting-frame flow))
+ (-> changes
+ (pcb/with-page page)
+ (pcb/set-flow id nil))
+ changes))
+ changes))
all-parents
diff --git a/common/src/app/common/logic/tokens.cljc b/common/src/app/common/logic/tokens.cljc
index b594d3c0aa..e5d6c086c7 100644
--- a/common/src/app/common/logic/tokens.cljc
+++ b/common/src/app/common/logic/tokens.cljc
@@ -17,18 +17,16 @@
Use this for managing sets active state without having to modify a
user created theme (\"no themes selected\" state in the ui)."
[changes tokens-lib update-theme-fn]
- (let [prev-active-token-themes (ctob/get-active-theme-paths tokens-lib)
- active-token-set-names (ctob/get-active-themes-set-names tokens-lib)
+ (let [active-token-set-names (ctob/get-active-themes-set-names tokens-lib)
- prev-hidden-theme (ctob/get-hidden-theme tokens-lib)
-
- hidden-theme (-> (some-> prev-hidden-theme (ctob/set-sets active-token-set-names))
- (update-theme-fn))]
+ hidden-theme (ctob/get-hidden-theme tokens-lib)
+ hidden-theme' (-> (some-> hidden-theme
+ (ctob/set-sets active-token-set-names))
+ (update-theme-fn))]
(-> changes
- (pcb/update-active-token-themes #{(ctob/theme-path hidden-theme)} prev-active-token-themes)
- (pcb/set-token-theme (:group prev-hidden-theme)
- (:name prev-hidden-theme)
- hidden-theme))))
+ (pcb/set-active-token-themes #{(ctob/get-theme-path hidden-theme')})
+ (pcb/set-token-theme (ctob/get-id hidden-theme)
+ hidden-theme'))))
(defn generate-toggle-token-set
"Toggle a token set at `set-name` in `tokens-lib` without modifying a
@@ -139,3 +137,12 @@
(if-let [params (calculate-move-token-set-or-set-group tokens-lib params)]
(pcb/move-token-set-group changes params)
changes))
+
+(defn generate-delete-token-set-group
+ "Create changes for deleting a token set group."
+ [changes tokens-lib path]
+ (let [sets (ctob/get-sets-at-path tokens-lib path)]
+ (reduce (fn [changes set]
+ (pcb/set-token-set changes (ctob/get-id set) nil))
+ changes
+ sets)))
\ No newline at end of file
diff --git a/common/src/app/common/logic/variant_properties.cljc b/common/src/app/common/logic/variant_properties.cljc
index e446fd84e9..5c2fddd44a 100644
--- a/common/src/app/common/logic/variant_properties.cljc
+++ b/common/src/app/common/logic/variant_properties.cljc
@@ -7,8 +7,8 @@
(:require
[app.common.data :as d]
[app.common.files.changes-builder :as pcb]
- [app.common.files.helpers :as cfh]
[app.common.files.variant :as cfv]
+ [app.common.path-names :as cpn]
[app.common.types.component :as ctk]
[app.common.types.components-list :as ctcl]
[app.common.types.variant :as ctv]
@@ -28,11 +28,7 @@
(pcb/update-component
changes (:id component)
(fn [component]
- (d/update-in-when component [:variant-properties pos]
- (fn [property]
- (-> property
- (assoc :name new-name)
- (with-meta nil)))))
+ (d/update-in-when component [:variant-properties pos] #(assoc % :name new-name)))
{:apply-changes-local-library? true}))
changes
related-components)))
@@ -81,6 +77,26 @@
#(assoc % :variant-error value))))))
+(defn generate-reorder-variant-poperties
+ [changes variant-id from-pos to-space-between-pos]
+ (let [data (pcb/get-library-data changes)
+ objects (pcb/get-objects changes)
+ related-components (cfv/find-variant-components data objects variant-id)]
+ (reduce (fn [changes component]
+ (let [props (:variant-properties component)
+ props (d/reorder props from-pos to-space-between-pos)
+ main-id (:main-instance-id component)
+ name (ctv/properties-to-name props)]
+ (-> changes
+ (pcb/update-component (:id component)
+ #(assoc % :variant-properties props)
+ {:apply-changes-local-library? true})
+ (pcb/update-shapes [main-id]
+ #(assoc % :variant-name name)))))
+ changes
+ related-components)))
+
+
(defn generate-add-new-property
[changes variant-id & {:keys [fill-values? editing? property-name property-value]}]
(let [data (pcb/get-library-data changes)
@@ -127,7 +143,7 @@
(defn- generate-make-shape-no-variant
[changes shape]
(let [new-name (ctv/variant-name-to-name shape)
- [cpath cname] (cfh/parse-path-name new-name)]
+ [cpath cname] (cpn/split-group-name new-name)]
(-> changes
(pcb/update-component (:component-id shape)
#(-> (dissoc % :variant-id :variant-properties)
@@ -146,8 +162,8 @@
(defn- create-new-properties-from-variant
[shape min-props data container-name base-properties]
(let [component (ctcl/get-component data (:component-id shape) true)
-
- add-name? (not= (:name component) container-name)
+ component-full-name (cpn/merge-path-item (:path component) (:name component))
+ add-name? (not= component-full-name container-name)
props (ctv/merge-properties base-properties
(:variant-properties component))
new-props (- min-props
@@ -188,7 +204,7 @@
(map #(assoc % :value "")))
num-base-props (count base-props)
- [cpath cname] (cfh/parse-path-name (:name variant-container))
+ [cpath cname] (cpn/split-group-name (:name variant-container))
container-name (:name variant-container)
create-new-properties
diff --git a/common/src/app/common/logic/variants.cljc b/common/src/app/common/logic/variants.cljc
index e8c14d5405..c0dc0409d0 100644
--- a/common/src/app/common/logic/variants.cljc
+++ b/common/src/app/common/logic/variants.cljc
@@ -11,7 +11,8 @@
[app.common.types.container :as ctn]
[app.common.types.file :as ctf]
[app.common.types.variant :as ctv]
- [app.common.uuid :as uuid]))
+ [app.common.uuid :as uuid]
+ [clojure.set :as set]))
(defn generate-add-new-variant
[changes shape variant-id new-component-id new-shape-id prop-num]
@@ -67,7 +68,6 @@
[[] {}]
shapes))))
-
(defn- keep-swapped-item
"As part of the keep-touched process on a switch, given a child on the original
copy that was swapped (orig-swapped-child), and its related shape on the new copy
@@ -88,7 +88,6 @@
current-parent (get objects (:parent-id related-shape-in-new))
pos (d/index-of (:shapes current-parent) (:id related-shape-in-new))]
-
(-> (pcb/concat-changes before-changes changes)
;; Move the previous shape to the new parent
@@ -122,6 +121,44 @@
(subvec (vec ancestors) 1 (dec num-ancestors)))]
(some ctk/get-swap-slot ancestors)))
+(defn- find-shape-ref-child-of
+ "Get the shape referenced by the shape-ref of the near main of the shape,
+ recursively repeated until find a shape-ref with parent-id as ancestor.
+ It will return the shape or nil if it doesn't found any"
+ [container libraries shape parent-id]
+ (let [ref-shape (ctf/find-ref-shape nil container libraries shape
+ :with-context? true)
+
+ ref-shape-container (when ref-shape (:container (meta ref-shape)))
+ ref-shape-parents-set (when ref-shape
+ (->> (cfh/get-parents (:objects ref-shape-container) (:id ref-shape))
+ (into #{} d/xf:map-id)))]
+
+ (if (or (nil? ref-shape) (contains? ref-shape-parents-set parent-id))
+ ref-shape
+ (find-shape-ref-child-of ref-shape-container libraries ref-shape parent-id))))
+
+(defn- get-ref-chain
+ "Returns a vector with the shape ref chain including itself"
+ [container libraries shape]
+ (loop [chain [shape]
+ current shape]
+ (if-let [ref (ctf/find-ref-shape nil container libraries current :with-context? true)]
+ (recur (conj chain ref) ref)
+ chain)))
+
+(defn- add-touched-from-ref-chain
+ "Adds to the :touched attr of a shape the content of
+ the :touched of all its chain of ref shapes"
+ [container libraries shape]
+ (let [chain (get-ref-chain container libraries shape)
+ more-touched (->> chain
+ (map :touched)
+ (remove nil?)
+ (apply set/union)
+ (remove ctk/swap-slot?)
+ set)]
+ (update shape :touched #(set/union (or % #{}) more-touched))))
(defn generate-keep-touched
"This is used as part of the switch process, when you switch from
@@ -141,7 +178,10 @@
;; Ignore children of swapped items, because
;; they will be moved without change when
;; managing their swapped ancestor
- orig-touched (->> (filter (comp seq :touched) original-shapes)
+ orig-touched (->> original-shapes
+ ;; Add to each shape also the touched of its ref chain
+ (map #(add-touched-from-ref-chain container libraries %))
+ (filter (comp seq :touched))
(remove
#(child-of-swapped? %
page-objects
@@ -158,7 +198,7 @@
;; The original-shape is in a copy. For the relation rules, we need the referenced
;; shape on the main component
- orig-ref-shape (ctf/find-ref-shape nil container libraries original-shape {:with-context? true})
+ orig-ref-shape (ctf/find-remote-shape container libraries original-shape {:with-context? true})
orig-ref-objects (:objects (:container (meta orig-ref-shape)))
;; Adds a :shape-path attribute to the children of the orig-ref-shape,
@@ -171,7 +211,6 @@
;; Creates a map to quickly find a child of the orig-ref-shape by its shape-path
o-ref-shapes-p-map (into {} (map (juxt :id :shape-path)) o-ref-shapes-wp)
-
;; Process each touched children of the original-shape
[changes parents-of-swapped]
(reduce
@@ -182,8 +221,7 @@
;; orig-child-touched is in a copy. Get the referenced shape on the main component
;; If there is a swap slot, we will get the referenced shape in another way
orig-ref-shape (when-not swap-slot
- ;; TODO Maybe just get it from o-ref-shapes-wp
- (ctf/find-ref-shape nil container libraries orig-child-touched))
+ (find-shape-ref-child-of container libraries orig-child-touched (:id orig-ref-shape)))
orig-ref-id (if swap-slot
;; If there is a swap slot, find the referenced shape id
@@ -196,6 +234,7 @@
;; Get its related shape in the children of new-shape: the one that
;; has the same shape-path
related-shape-in-new (get new-shapes-map shape-path)
+
parents-of-swapped (if related-shape-in-new
(conj parent-of-swapped (:parent-id related-shape-in-new))
parent-of-swapped)
diff --git a/common/src/app/common/path_names.cljc b/common/src/app/common/path_names.cljc
new file mode 100644
index 0000000000..6fdf1d1525
--- /dev/null
+++ b/common/src/app/common/path_names.cljc
@@ -0,0 +1,134 @@
+;; 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.common.path-names
+ (:require
+ [cuerdas.core :as str]))
+
+"Functions to manipulate entity names that represent groups with paths,
+ e.g. 'Group / Subgroup / Name'.
+
+Some naming conventions:
+ - Path string: the full string with groups and name, e.g. 'Group / Subgroup / Name'.
+ - Path: a vector of strings with the full path, e.g. ['Group' 'Subgroup' 'Name'].
+ - Group string: the group part of the path string, e.g. 'Group / Subgroup'.
+ - Group: a vector of strings with the group part of the path, e.g. ['Group' 'Subgroup'].
+ - Name: the final name part of the path, e.g. 'Name'."
+
+(defn split-path
+ "Decompose a path string in the form 'one / two / three' into a vector
+ of strings, trimming spaces (e.g. ['one' 'two' 'three'])."
+ [path-str & {:keys [separator] :or {separator "/"}}]
+ (let [xf (comp (map str/trim)
+ (remove str/empty?))]
+ (->> (str/split path-str separator)
+ (into [] xf))))
+
+(defn join-path
+ "Regenerate a path as a string, from a vector.
+ (e.g. ['one' 'two' 'three'] -> 'one / two / three')"
+ [path & {:keys [separator with-spaces?] :or {separator "/" with-spaces? true}}]
+ (if with-spaces?
+ (str/join (str " " separator " ") path)
+ (str/join separator path)))
+
+(defn split-group-name
+ "Parse a path string. Retrieve the group and the name in separated values,
+ normalizing spaces (e.g. 'group / subgroup / name' -> ['group / subgroup' 'name'])."
+ [path-str & {:keys [separator with-spaces?] :or {separator "/" with-spaces? true}}]
+ (let [path (split-path path-str :separator separator)
+ group-str (join-path (butlast path) :separator separator :with-spaces? with-spaces?)
+ name (or (last path) "")]
+ [group-str name]))
+
+(defn join-path-with-dot
+ "Regenerate a path as a string, from a vector."
+ [path-vec]
+ (str/join "\u00A0\u2022\u00A0" path-vec))
+
+(defn clean-path
+ "Remove empty items from the path."
+ [path]
+ (->> (split-path path)
+ (join-path)))
+
+(defn merge-path-item
+ "Put the item at the end of the path."
+ [path name]
+ (if-not (empty? path)
+ (if-not (empty? name)
+ (str path " / " name)
+ path)
+ name))
+
+(defn merge-path-item-with-dot
+ "Put the item at the end of the path."
+ [path name]
+ (if-not (empty? path)
+ (if-not (empty? name)
+ (str path "\u00A0\u2022\u00A0" name)
+ path)
+ name))
+
+(defn compact-path
+ "Separate last item of the path, and truncate the others if too long:
+ 'one' -> ['' 'one' false]
+ 'one / two / three' -> ['one / two' 'three' false]
+ 'one / two / three / four' -> ['one / two / ...' 'four' true]
+ 'one-item-but-very-long / two' -> ['...' 'two' true] "
+ [path max-length dot?]
+ (let [path-split (split-path path)
+ last-item (last path-split)
+ merge-path (if dot?
+ merge-path-item-with-dot
+ merge-path-item)]
+ (loop [other-items (seq (butlast path-split))
+ other-path ""]
+ (if-let [item (first other-items)]
+ (let [full-path (-> other-path
+ (merge-path item)
+ (merge-path last-item))]
+ (if (> (count full-path) max-length)
+ [(merge-path other-path "...") last-item true]
+ (recur (next other-items)
+ (merge-path other-path item))))
+ [other-path last-item false]))))
+
+(defn butlast-path
+ "Remove the last item of the path."
+ [path]
+ (let [split (split-path path)]
+ (if (= 1 (count split))
+ ""
+ (join-path (butlast split)))))
+
+(defn butlast-path-with-dots
+ "Remove the last item of the path."
+ [path]
+ (let [split (split-path path)]
+ (if (= 1 (count split))
+ ""
+ (join-path-with-dot (butlast split)))))
+
+(defn last-path
+ "Returns the last item of the path."
+ [path]
+ (last (split-path path)))
+
+(defn inside-path? [child parent]
+ (let [child-path (split-path child)
+ parent-path (split-path parent)]
+ (and (<= (count parent-path) (count child-path))
+ (= parent-path (take (count parent-path) child-path)))))
+
+(defn split-by-last-period
+ "Splits a string into two parts:
+ the text before and including the last period,
+ and the text after the last period."
+ [s]
+ (if-let [last-period (str/last-index-of s ".")]
+ [(subs s 0 (inc last-period)) (subs s (inc last-period))]
+ [s ""]))
diff --git a/common/src/app/common/schema.cljc b/common/src/app/common/schema.cljc
index 3bdaed2b88..c2523c8149 100644
--- a/common/src/app/common/schema.cljc
+++ b/common/src/app/common/schema.cljc
@@ -861,6 +861,11 @@
;; ::oapi/type "string"
;; ::oapi/format "number"}})
+#?(:clj
+ (register!
+ {:type ::atom
+ :pred #(instance? clojure.lang.Atom %)}))
+
(register!
{:type ::fn
:pred fn?})
@@ -922,6 +927,8 @@
:gen/gen (sg/uri)
:decode/string decode-uri
:decode/json decode-uri
+ :encode/json str
+ :encode/string str
::oapi/type "string"
::oapi/format "uri"}})
diff --git a/common/src/app/common/test_helpers/components.cljc b/common/src/app/common/test_helpers/components.cljc
index 4e82acd647..712f25f647 100644
--- a/common/src/app/common/test_helpers/components.cljc
+++ b/common/src/app/common/test_helpers/components.cljc
@@ -12,6 +12,7 @@
[app.common.files.helpers :as cfh]
[app.common.geom.point :as gpt]
[app.common.logic.libraries :as cll]
+ [app.common.path-names :as cpn]
[app.common.test-helpers.files :as thf]
[app.common.test-helpers.ids-map :as thi]
[app.common.test-helpers.shapes :as ths]
@@ -36,7 +37,7 @@
updated-root (first updated-shapes) ; Can't use new-root because it has a new id
- [path name] (cfh/parse-path-name (:name updated-root))]
+ [path name] (cpn/split-group-name (:name updated-root))]
(thi/set-id! label (:component-id updated-root))
(ctf/update-file-data
@@ -72,6 +73,10 @@
[file id]
(ctkl/get-component (:data file) id))
+(defn get-components
+ [file]
+ (ctkl/components (:data file)))
+
(defn- set-children-labels!
[file shape-label children-labels]
(doseq [[label id]
diff --git a/common/src/app/common/test_helpers/files.cljc b/common/src/app/common/test_helpers/files.cljc
index 5420a0c377..a80675b65a 100644
--- a/common/src/app/common/test_helpers/files.cljc
+++ b/common/src/app/common/test_helpers/files.cljc
@@ -108,7 +108,8 @@
page (if (some? page-label)
(:id (get-page file page-label))
(current-page-id file))
- libraries (or libraries {})]
+ libraries (or libraries
+ {(:id file) file})]
(ctf/dump-tree file page libraries params)))
diff --git a/common/src/app/common/test_helpers/tokens.cljc b/common/src/app/common/test_helpers/tokens.cljc
index e2c6cee4d1..5de4b827cf 100644
--- a/common/src/app/common/test_helpers/tokens.cljc
+++ b/common/src/app/common/test_helpers/tokens.cljc
@@ -28,12 +28,10 @@
(ctf/update-file-data file #(update % :tokens-lib f)))
(defn get-token
- [file set-name token-id]
+ [file set-id token-id]
(let [tokens-lib (:tokens-lib (:data file))]
(when tokens-lib
- (-> tokens-lib
- (ctob/get-set set-name)
- (ctob/get-token token-id)))))
+ (ctob/get-token tokens-lib set-id token-id))))
(defn token-data-eq?
"Compare token data without comparing unstable fields."
diff --git a/common/src/app/common/time.cljc b/common/src/app/common/time.cljc
index d32ecfbefe..53a44a23d9 100644
--- a/common/src/app/common/time.cljc
+++ b/common/src/app/common/time.cljc
@@ -52,6 +52,7 @@
[cuerdas.core :as str])
#?(:clj
(:import
+ java.time.Clock
java.time.Duration
java.time.Instant
java.time.OffsetDateTime
@@ -63,9 +64,11 @@
java.time.temporal.TemporalAmount
java.time.temporal.TemporalUnit)))
+#?(:clj (def ^:dynamic *clock* (Clock/systemDefaultZone)))
+
(defn now
[]
- #?(:clj (Instant/now)
+ #?(:clj (Instant/now *clock*)
:cljs (new js/Date)))
;; --- DURATION
@@ -130,7 +133,6 @@
ms-or-obj
(integer? ms-or-obj)
-
(Duration/ofMillis ms-or-obj)
:else
@@ -433,4 +435,4 @@
#?(:cljs
(extend-protocol cljs.core/IEncodeJS
js/Date
- (-clj->js [x] x)))
\ No newline at end of file
+ (-clj->js [x] x)))
diff --git a/common/src/app/common/types/component.cljc b/common/src/app/common/types/component.cljc
index a97c1d3b78..130bece565 100644
--- a/common/src/app/common/types/component.cljc
+++ b/common/src/app/common/types/component.cljc
@@ -23,7 +23,7 @@
[:map
[:id ::sm/uuid]
[:name :string]
- [:path {:optional true} [:maybe :string]]
+ [:path :string]
[:modified-at {:optional true} ::ct/inst]
[:objects {:gen/max 10 :optional true} ctp/schema:objects]
[:main-instance-id ::sm/uuid]
@@ -145,9 +145,12 @@
(defn component-attr?
"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."
+ route and thus they are not part of :sync-attrs.
+ 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)))
(defn instance-root?
@@ -217,19 +220,16 @@
(and (= shape-id (:main-instance-id component))
(= page-id (:main-instance-page component))))
-
(defn is-variant?
"Check if this shape or component is a variant component"
[item]
(some? (:variant-id item)))
-
(defn is-variant-container?
"Check if this shape is a variant container"
[shape]
(:is-variant-container shape))
-
(defn set-touched-group
[touched group]
(when group
@@ -256,7 +256,7 @@
(defn group->swap-slot
[group]
- (parse-uuid (subs (name group) 10)))
+ (parse-uuid (subs (name group) 10))) ;; 10 is the length of "swap-slot-"
(defn get-swap-slot
"If the shape has a :touched group in the form :swap-slot-, get the id."
@@ -286,7 +286,7 @@
(fn [touched]
(into #{} (remove #(str/starts-with? (name %) "swap-slot-") touched)))))
-(defn get-component-root
+(defn get-deleted-component-root
[component]
(if (some? (:main-instance-id component))
(get-in component [:objects (:main-instance-id component)])
@@ -310,6 +310,22 @@
:shape-ref
:touched))
+(defn unhead-shape
+ "Make the shape not be a component head, but keep its :shape-ref and :touched if it was a nested copy"
+ [shape]
+ (dissoc shape
+ :component-root
+ :component-file
+ :component-id
+ :main-instance))
+
+(defn rehead-shape
+ "Make the shape a component head, by adding component info"
+ [shape component-file component-id]
+ (assoc shape
+ :component-file component-file
+ :component-id component-id))
+
(defn- extract-ids [shape]
(if (map? shape)
(let [current-id (:id shape)
diff --git a/common/src/app/common/types/components_list.cljc b/common/src/app/common/types/components_list.cljc
index fd75341681..c4f3a66063 100644
--- a/common/src/app/common/types/components_list.cljc
+++ b/common/src/app/common/types/components_list.cljc
@@ -8,7 +8,6 @@
(:require
[app.common.data :as d]
[app.common.data.macros :as dm]
- [app.common.features :as cfeat]
[app.common.time :as dt]
[app.common.types.component :as ctk]
[clojure.set :as set]))
@@ -35,7 +34,7 @@
(defn add-component
[fdata {:keys [id name path main-instance-id main-instance-page annotation variant-id variant-properties]}]
- (let [fdata (update fdata :components assoc id (touch {:id id :name name :path path}))]
+ (let [fdata (update fdata :components assoc id (touch {:id id :name name :path path}))]
(cond-> (update-in fdata [:components id] assoc :main-instance-id main-instance-id :main-instance-page main-instance-page)
annotation (update-in [:components id] assoc :annotation annotation)
variant-id (update-in [:components id] assoc :variant-id variant-id)
@@ -43,53 +42,53 @@
(defn mod-component
[file-data {:keys [id name path main-instance-id main-instance-page objects annotation variant-id variant-properties modified-at]}]
- (let [wrap-objects-fn cfeat/*wrap-with-objects-map-fn*]
- (d/update-in-when file-data [:components id]
- (fn [component]
- (let [objects (some-> objects wrap-objects-fn)
- new-comp (cond-> component
- (some? name)
- (assoc :name name)
+ (d/update-in-when file-data [:components id]
+ (fn [component]
+ (let [new-comp (cond-> component
+ (some? name)
+ (assoc :name name)
- (some? path)
- (assoc :path path)
+ (some? path)
+ (assoc :path path)
- (some? main-instance-id)
- (assoc :main-instance-id main-instance-id)
+ (some? main-instance-id)
+ (assoc :main-instance-id main-instance-id)
- (some? main-instance-page)
- (assoc :main-instance-page main-instance-page)
+ (some? main-instance-page)
+ (assoc :main-instance-page main-instance-page)
- (some? objects)
- (assoc :objects objects)
+ (some? objects)
+ (assoc :objects objects)
- (some? modified-at)
- (assoc :modified-at modified-at)
+ (some? modified-at)
+ (assoc :modified-at modified-at)
- (some? annotation)
- (assoc :annotation annotation)
+ (some? annotation)
+ (assoc :annotation annotation)
- (nil? annotation)
- (dissoc :annotation)
+ (nil? annotation)
+ (dissoc :annotation)
- (some? variant-id)
- (assoc :variant-id variant-id)
+ (some? variant-id)
+ (assoc :variant-id variant-id)
- (nil? variant-id)
- (dissoc :variant-id)
+ (nil? variant-id)
+ (dissoc :variant-id)
- (some? variant-properties)
- (assoc :variant-properties variant-properties)
+ (some? variant-properties)
+ (assoc :variant-properties variant-properties)
- (nil? variant-properties)
- (dissoc :variant-properties))
- diff (set/difference
- (ctk/diff-components component new-comp)
- #{:annotation :modified-at :variant-id :variant-properties})] ;; The set of properties that doesn't mark a component as touched
+ (nil? variant-properties)
+ (dissoc :variant-properties))
- (if (empty? diff)
- new-comp
- (touch new-comp)))))))
+ ;; The set of properties that doesn't mark a component as touched
+ diff (set/difference
+ (ctk/diff-components component new-comp)
+ #{:annotation :modified-at :variant-id :variant-properties})]
+
+ (if (empty? diff)
+ new-comp
+ (touch new-comp))))))
(defn get-component
([file-data component-id]
diff --git a/common/src/app/common/types/container.cljc b/common/src/app/common/types/container.cljc
index 5e030ffb56..13daa4949c 100644
--- a/common/src/app/common/types/container.cljc
+++ b/common/src/app/common/types/container.cljc
@@ -7,7 +7,6 @@
(ns app.common.types.container
(:require
[app.common.data :as d]
- [app.common.data.macros :as dm]
[app.common.files.helpers :as cfh]
[app.common.geom.point :as gpt]
[app.common.geom.shapes :as gsh]
@@ -77,11 +76,8 @@
(defn get-shape
[container shape-id]
-
- (assert (check-container container))
(assert (uuid? shape-id)
"expected valid uuid for `shape-id`")
-
(-> container
(get :objects)
(get shape-id)))
@@ -494,29 +490,40 @@
all-main?
(every? ctk/main-instance? top-children)
+ ascendants (cfh/get-parents-with-self objects parent-id)
+ any-main-ascendant (some ctk/main-instance? ascendants)
+ any-variant-container-ascendant (some ctk/is-variant-container? ascendants)
+
+ get-variant-id (fn [shape]
+ (when (:component-id shape)
+ (-> (get-component-from-shape shape libraries)
+ :variant-id)))
+
+ descendants (mapcat #(cfh/get-children-with-self objects %) children-ids)
+ any-variant-container-descendant (some ctk/is-variant-container? descendants)
+ descendants-variant-ids-set (->> descendants
+ (map get-variant-id)
+ set)
any-main-descendant
(some
(fn [shape]
(some ctk/main-instance? (cfh/get-children-with-self objects (:id shape))))
- children)
+ children)]
- ;; Are all the top-children a main-instance of a cutted component?
- all-comp-cut?
- (when all-main?
- (->> top-children
- (map #(ctkl/get-component (dm/get-in libraries [(:component-file %) :data])
- (:component-id %)
- true))
- (every? :deleted)))]
(if (or no-changes?
(and (not (invalid-structure-for-component? objects parent children pasting? libraries))
- ;; If we are moving into a main component, no descendant can be main
- (or (nil? any-main-descendant) (not (ctk/main-instance? parent)))
- ;; If we are moving into a variant-container, all the items should be main
- ;; so if we are pasting, only allow main instances that are cut-and-pasted
- (or (not (ctk/is-variant-container? parent))
- (and (not pasting?) all-main?)
- all-comp-cut?)))
+ ;; If we are moving (not pasting) into a main component, no descendant can be main
+ (or pasting? (nil? any-main-descendant) (not (ctk/main-instance? parent)))
+ ;; Don't allow variant-container inside variant container nor main
+ (or (not any-variant-container-descendant)
+ (and (not any-variant-container-ascendant) (not any-main-ascendant)))
+ ;; If the parent is a variant-container, all the items should be main
+ (or (not (ctk/is-variant-container? parent)) all-main?)
+ ;; If we are pasting, the parent can't be a "brother" of any of the pasted items,
+ ;; so not have the same variant-id of any descendant
+ (or (not pasting?)
+ (not (ctk/is-variant? parent))
+ (not (contains? descendants-variant-ids-set (:variant-id parent))))))
[parent-id (get-frame parent-id)]
(recur (:parent-id parent) objects children pasting? libraries))))))
diff --git a/common/src/app/common/types/file.cljc b/common/src/app/common/types/file.cljc
index 066f048526..5a2deaabaa 100644
--- a/common/src/app/common/types/file.cljc
+++ b/common/src/app/common/types/file.cljc
@@ -114,10 +114,10 @@
(sm/register! ::typographies schema:typographies)
(def check-file
- (sm/check-fn schema:file :hint "check error on validating file"))
+ (sm/check-fn schema:file :hint "invalid file"))
(def check-file-data
- (sm/check-fn schema:data))
+ (sm/check-fn schema:data :hint "invalid file data"))
(def check-file-media
(sm/check-fn schema:media))
@@ -155,7 +155,7 @@
(defn make-file
[{:keys [id project-id name revn is-shared features migrations
- ignore-sync-until created-at modified-at deleted-at]
+ metadata backend ignore-sync-until created-at modified-at deleted-at]
:as params}
& {:keys [create-page with-data page-id]
@@ -186,8 +186,9 @@
:data data
:features features
:migrations migrations
+ :metadata metadata
+ :backend backend
:ignore-sync-until ignore-sync-until
- :has-media-trimmed false
:created-at created-at
:modified-at modified-at
:deleted-at deleted-at})]
@@ -275,7 +276,7 @@
(-> file-data
(get-component-page component)
(ctn/get-shape (:main-instance-id component)))
- (ctk/get-component-root component)))
+ (ctk/get-deleted-component-root component)))
(defn get-component-shape
"Retrieve one shape in the component by id. If with-context? is true, add the
@@ -354,7 +355,7 @@
(defn find-remote-shape
"Recursively go back by the :shape-ref of the shape until find the correct shape of the original component"
- [container libraries shape]
+ [container libraries shape & {:keys [with-context?] :or {with-context? false}}]
(let [top-instance (ctn/get-component-shape (:objects container) shape)
component-file (get-in libraries [(:component-file top-instance) :data])
component (ctkl/get-component component-file (:component-id top-instance) true)
@@ -374,8 +375,12 @@
(if (nil? remote-shape)
nil
(if (nil? (:shape-ref remote-shape))
- remote-shape
- (find-remote-shape component-container libraries remote-shape)))))
+ (cond-> remote-shape
+ (and remote-shape with-context?)
+ (with-meta {:file {:id (:id file-data)
+ :data file-data}
+ :container component-container}))
+ (find-remote-shape component-container libraries remote-shape :with-context? with-context?)))))
(defn direct-copy?
"Check if the shape is in a direct copy of the component (i.e. the shape-ref points to shapes inside
@@ -900,7 +905,7 @@
(println))
(when (seq (:objects component))
- (let [root (ctk/get-component-root component)]
+ (let [root (ctk/get-deleted-component-root component)]
(dump-shape (:id root)
1
(:objects component)
diff --git a/common/src/app/common/types/text.cljc b/common/src/app/common/types/text.cljc
index 651aee21fc..8f62324959 100644
--- a/common/src/app/common/types/text.cljc
+++ b/common/src/app/common/types/text.cljc
@@ -249,12 +249,16 @@
(defn equal-attrs?
"Given a text structure, and a map of attrs, check that all the internal attrs in
paragraphs and sentences have the same attrs"
- [item attrs]
- (let [item-attrs (dissoc item :text :type :key :children)]
- (and
- (or (empty? item-attrs)
- (= attrs (dissoc item :text :type :key :children)))
- (every? #(equal-attrs? % attrs) (:children item)))))
+ ([item attrs]
+ ;; Ignore the root attrs of the content. We only want to check paragraphs and sentences
+ (equal-attrs? item attrs true))
+ ([item attrs ignore?]
+ (let [item-attrs (dissoc item :text :type :key :children)]
+ (and
+ (or ignore?
+ (empty? item-attrs)
+ (= attrs (dissoc item :text :type :key :children)))
+ (every? #(equal-attrs? % attrs false) (:children item))))))
(defn get-first-paragraph-text-attrs
"Given a content text structure, extract it's first paragraph
diff --git a/common/src/app/common/types/token.cljc b/common/src/app/common/types/token.cljc
index 02904bdbee..41b0149e44 100644
--- a/common/src/app/common/types/token.cljc
+++ b/common/src/app/common/types/token.cljc
@@ -26,6 +26,27 @@
(mu/keys)
(into #{})))
+(defn find-token-value-references
+ "Returns set of token references found in `token-value`.
+
+ Used for checking if a token has a reference in the value.
+ Token references are strings delimited by curly braces.
+ E.g.: {foo.bar.baz} -> foo.bar.baz"
+ [token-value]
+ (if (string? token-value)
+ (some->> (re-seq #"\{([^}]*)\}" token-value)
+ (map second)
+ (into #{}))
+ #{}))
+
+(defn token-value-self-reference?
+ "Check if the token is self referencing with its `token-name` in `token-value`.
+ Simple 1 level check, doesn't account for circular self refernces across multiple tokens."
+ [token-name token-value]
+ (let [token-references (find-token-value-references token-value)
+ self-reference? (get token-references token-name)]
+ self-reference?))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; SCHEMA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -52,7 +73,24 @@
:typography "typography"})
(def dtcg-token-type->token-type
- (set/map-invert token-type->dtcg-token-type))
+ (-> (set/map-invert token-type->dtcg-token-type)
+ ;; Allow these properties to be imported with singular key names for backwards compability
+ (assoc "fontWeight" :font-weight
+ "fontSize" :font-size
+ "fontFamily" :font-family)))
+
+(def composite-token-type->dtcg-token-type
+ "Custom set of conversion keys for composite typography token with `:line-height` available.
+ (Penpot doesn't support `:line-height` token)"
+ (assoc token-type->dtcg-token-type
+ :line-height "lineHeights"))
+
+(def composite-dtcg-token-type->token-type
+ "Custom set of conversion keys for composite typography token with `:line-height` available.
+ (Penpot doesn't support `:line-height` token)"
+ (assoc dtcg-token-type->token-type
+ "lineHeights" :line-height
+ "lineHeight" :line-height))
(def token-types
(into #{} (keys token-type->dtcg-token-type)))
@@ -217,7 +255,8 @@
text-case-keys
text-decoration-keys
font-weight-keys
- typography-token-keys))
+ typography-token-keys
+ #{:line-height}))
;; TODO: Created to extract the font-size feature from the typography feature flag.
;; Delete this once the typography feature flag is removed.
@@ -289,6 +328,7 @@
(font-size-keys shape-attr) #{shape-attr :typography}
(letter-spacing-keys shape-attr) #{shape-attr :typography}
(font-family-keys shape-attr) #{shape-attr :typography}
+ (= :line-height shape-attr) #{:line-height :typography}
(= :text-transform shape-attr) #{:text-case :typography}
(text-decoration-keys shape-attr) #{shape-attr :typography}
(font-weight-keys shape-attr) #{shape-attr :typography}
@@ -468,3 +508,32 @@
(when (font-weight-values weight)
(cond-> {:weight weight}
italic? (assoc :style "italic")))))
+
+(defn typography-composite-token-reference?
+ "Predicate if a typography composite token is a reference value - a string pointing to another reference token."
+ [token-value]
+ (string? token-value))
+
+(def tokens-by-input
+ "A map from input name to applicable token for that input."
+ {:width #{:sizing :dimensions}
+ :height #{:sizing :dimensions}
+ :max-width #{:sizing :dimensions}
+ :max-height #{:sizing :dimensions}
+ :x #{:spacing :dimensions}
+ :y #{:spacing :dimensions}
+ :rotation #{:number :rotation}
+ :border-radius #{:border-radius :dimensions}
+ :row-gap #{:spacing :dimensions}
+ :column-gap #{:spacing :dimensions}
+ :horizontal-padding #{:spacing :dimensions}
+ :vertical-padding #{:spacing :dimensions}
+ :sided-paddings #{:spacing :dimensions}
+ :horizontal-margin #{:spacing :dimensions}
+ :vertical-margin #{:spacing :dimensions}
+ :sided-margins #{:spacing :dimensions}
+ :line-height #{:line-height :number}
+ :font-size #{:font-size}
+ :letter-spacing #{:letter-spacing}
+ :fill #{:color}
+ :stroke-color #{:color}})
diff --git a/common/src/app/common/types/tokens_lib.cljc b/common/src/app/common/types/tokens_lib.cljc
index be0525be68..df7aa38cf2 100644
--- a/common/src/app/common/types/tokens_lib.cljc
+++ b/common/src/app/common/types/tokens_lib.cljc
@@ -11,6 +11,7 @@
[app.common.data :as d]
[app.common.data.macros :as dm]
[app.common.files.helpers :as cfh]
+ [app.common.path-names :as cpn]
[app.common.schema :as sm]
[app.common.schema.generators :as sg]
[app.common.time :as ct]
@@ -24,52 +25,34 @@
[clojure.walk :as walk]
[cuerdas.core :as str]))
-;; === Groups handling
-
-;; TODO: add again the removed functions and refactor the rest of the module to use them
-
-(def ^:private xf-map-trim
- (comp
- (map str/trim)
- (remove str/empty?)))
-
-(defn split-path
- "Decompose a string in the form 'one.two.three' into a vector of strings, removing spaces."
- [path separator]
- (->> (str/split path separator)
- (into [] xf-map-trim)
- (not-empty)))
-
-(defn join-path
- "Regenerate a path as a string, from a vector."
- [path separator]
- (str/join separator path))
-
-(defn split-path-name
- "Decompose a string in the form 'one.two.three' into a vector with two elements: first the
- path and second the name, removing spaces (e.g. ['one.two' 'three'])."
- [path separator]
- (let [pathv (split-path path separator)]
- [(join-path (butlast pathv) separator)
- (last pathv)]))
-
-(defn get-path
- "Get the path of object by specified separator (E.g. with '.' separator, the
- 'group.subgroup.name' -> ['group' 'subgroup'])"
- [name separator]
- (->> (split-path name separator)
- (not-empty)))
-
;; === Common
+(defprotocol IValidation
+ (valid? [_] "check if this data structure is valid, returns true or false")
+ (check [_] "check if this data structure is valid, raises exception or self"))
+
(defprotocol INamedItem
- "Protocol for items that have a name, a description and a modified date."
+ "Protocol for items that have an id, a name, a description and a modified date."
+ (get-id [_] "Get the id of the item.")
(get-name [_] "Get the name of the item.")
(get-description [_] "Get the description of the item.")
(get-modified-at [_] "Get the description of the item.")
- (rename [_ new-name] "Set the name of the item.")
+ (rename [_ new-name] "Change the name of the item.")
+ (reid [_ new-id] "Change the id of the item.")
(set-description [_ new-description] "Set the description of the item."))
+;; Provide an implementation for nil type, so it works when functions are
+;; called with nil as argument.
+(extend-type nil
+ INamedItem
+ (get-id [_] nil)
+ (get-name [_] nil)
+ (get-description [_] nil)
+ (get-modified-at [_] nil)
+ (rename [_ _] nil)
+ (reid [_ _] nil)
+ (set-description [_ _] nil))
+
;; === Token
(defrecord Token [id name type value description modified-at]
@@ -77,6 +60,9 @@
(datafy [this] (into {} this))
INamedItem
+ (get-id [_]
+ id)
+
(get-name [_]
name)
@@ -89,6 +75,9 @@
(rename [this new-name]
(assoc this :name new-name))
+ (reid [this new-id]
+ (assoc this :id new-id))
+
(set-description [this new-description]
(assoc this :description new-description)))
@@ -160,28 +149,7 @@
(defn get-token-path
[token]
- (get-path (:name token) token-separator))
-
-(defn find-token-value-references
- "Returns set of token references found in `token-value`.
-
- Used for checking if a token has a reference in the value.
- Token references are strings delimited by curly braces.
- E.g.: {foo.bar.baz} -> foo.bar.baz"
- [token-value]
- (if (string? token-value)
- (some->> (re-seq #"\{([^}]*)\}" token-value)
- (map second)
- (into #{}))
- #{}))
-
-(defn token-value-self-reference?
- "Check if the token is self referencing with its `token-name` in `token-value`.
- Simple 1 level check, doesn't account for circular self refernces across multiple tokens."
- [token-name token-value]
- (let [token-references (find-token-value-references token-value)
- self-reference? (get token-references token-name)]
- self-reference?))
+ (cpn/split-path (:name token) :separator token-separator))
(defn group-by-type [tokens]
(let [tokens' (if (or (map? tokens)
@@ -193,14 +161,15 @@
;; === Token Set
(defprotocol ITokenSet
- (token-by-id [_ id] "get a token by its id")
- (token-by-name [_ id] "get a token by its name")
- (add-token [_ token] "add a token at the end of the list")
- (update-token [_ id f] "update a token in the list")
- (delete-token [_ id] "delete a token from the list")
- (get-token [_ id] "return token by id")
- (get-tokens [_] "return an ordered sequence of all tokens in the set")
- (get-tokens-map [_] "return a map of tokens in the set, indexed by token-name"))
+ ;; TODO: the tokens tree is planned to be moved to the TokensLib. So this protocol will be no
+ ;; longer needed. For now, it's kept but it should only be used internally in the TokensLib.
+ ;; The - suffix is to remind it.
+ (add-token- [_ token] "add a token at the end of the list")
+ (update-token- [_ id f] "update a token in the list")
+ (delete-token- [_ id] "delete a token from the list")
+ (get-token- [_ id] "get a token by its id")
+ (get-token-by-name- [_ name] "get a token by its name")
+ (get-tokens- [_] "return a map of tokens in the set, indexed by token-name"))
;; TODO: this structure is temporary. It's needed to be able to migrate TokensLib
;; from 1.2 to 1.3 when TokenSet datatype was changed to a deftype. This should
@@ -233,6 +202,9 @@
(-write [this writter options] (json/-write (datafy this) writter options))])
INamedItem
+ (get-id [_]
+ id)
+
(get-name [_]
name)
@@ -249,6 +221,13 @@
(ct/now)
tokens))
+ (reid [_ new-id]
+ (TokenSet. new-id
+ name
+ description
+ (ct/now)
+ tokens))
+
(set-description [_ new-description]
(TokenSet. id
name
@@ -257,14 +236,7 @@
tokens))
ITokenSet
- (token-by-id [_ id]
- (some #(when (= (:id %) id) %) ;; TODO: this will be made in an efficient way when
- (vals tokens))) ;; we refactor the tokens lib internal structure
-
- (token-by-name [_ name]
- (get tokens name))
-
- (add-token [_ token]
+ (add-token- [_ token]
(let [token (check-token token)]
(TokenSet. id
name
@@ -272,8 +244,9 @@
(ct/now)
(assoc tokens (:name token) token))))
- (update-token [this id f]
- (if-let [token (token-by-id this id)]
+ (update-token- [this token-id f]
+ (assert (uuid? token-id) "expected uuid for `token-id`")
+ (if-let [token (get-token- this token-id)]
(let [token' (-> (make-token (f token))
(assoc :modified-at (ct/now)))]
(TokenSet. id
@@ -287,21 +260,25 @@
(dissoc (:name token))))))
this))
- (delete-token [this id]
- (let [token (token-by-id this id)]
+ (delete-token- [this token-id]
+ (assert (uuid? token-id) "expected uuid for `token-id`")
+ (let [token (get-token- this token-id)]
(TokenSet. id
name
description
(ct/now)
(dissoc tokens (:name token)))))
- (get-token [this id]
- (token-by-id this id))
+ (get-token- [_ token-id]
+ (assert (uuid? token-id) "expected uuid for `token-id`")
+ (some #(when (= (:id %) token-id) %) ;; TODO: this will be made in an efficient way when
+ (vals tokens))) ;; we refactor the tokens lib internal structure
- (get-tokens [_]
- (vals tokens))
+ (get-token-by-name- [_ name]
+ (assert (string? name) "expected string for `name`")
+ (get tokens name))
- (get-tokens-map [_]
+ (get-tokens- [_]
tokens))
(defmethod pp/simple-dispatch TokenSet [^TokenSet obj]
@@ -379,19 +356,23 @@
(def check-token-set
(sm/check-fn schema:token-set :hint "expected valid token set"))
+(defn map->token-set
+ [& {:as attrs}]
+ (TokenSet. (:id attrs)
+ (:name attrs)
+ (:description attrs)
+ (:modified-at attrs)
+ (:tokens attrs)))
+
(defn make-token-set
[& {:as attrs}]
- (let [attrs (-> attrs
- (update :id #(or % (uuid/next)))
- (update :modified-at #(or % (ct/now)))
- (update :tokens #(into (d/ordered-map) %))
- (update :description d/nilv "")
- (check-token-set-attrs))]
- (TokenSet. (:id attrs)
- (:name attrs)
- (:description attrs)
- (:modified-at attrs)
- (:tokens attrs))))
+ (-> attrs
+ (update :id #(or % (uuid/next)))
+ (update :modified-at #(or % (ct/now)))
+ (update :tokens #(into (d/ordered-map) %))
+ (update :description d/nilv "")
+ (check-token-set-attrs)
+ (map->token-set)))
(def ^:private set-prefix "S-")
@@ -399,10 +380,39 @@
(def ^:private set-separator "/")
-(defn join-set-path [path]
- (join-path path set-separator))
+(defn get-set-path
+ [token-set]
+ (cpn/split-path (get-name token-set) :separator set-separator))
-(defn split-set-str-path-prefix
+(defn split-set-name
+ [name]
+ (cpn/split-path name :separator set-separator))
+
+(defn join-set-path [path]
+ (cpn/join-path path :separator set-separator :with-spaces? false))
+
+(defn normalize-set-name
+ "Normalize a set name (ensure that there are no extra spaces, like ' group / set' -> 'group/set').
+
+ If `relative-to` is provided, the normalized name will preserve the same group prefix as reference name."
+ ([name]
+ (-> (split-set-name name)
+ (cpn/join-path :separator set-separator :with-spaces? false)))
+ ([name relative-to]
+ (-> (concat (butlast (split-set-name relative-to))
+ (split-set-name name))
+ (cpn/join-path :separator set-separator :with-spaces? false))))
+
+(defn replace-last-path-name
+ "Replaces the last element in a `path` vector with `name`."
+ [path name]
+ (-> (into [] (drop-last path))
+ (conj name)))
+
+;; The following functions will be removed after refactoring the internal structure of TokensLib,
+;; since we'll no longer need group prefixes to differentiate between sets and set-groups.
+
+(defn- split-set-str-path-prefix
"Split set-path
E.g.: \"S-some-set\" -> [\"S-\" \"some-set\"]
@@ -412,13 +422,13 @@
(re-matches #"^([SG]-)(.*)")
(rest)))
-(defn add-set-path-prefix [set-name-str]
+(defn- add-set-path-prefix [set-name-str]
(str set-prefix set-name-str))
-(defn add-set-path-group-prefix [group-path-str]
+(defn- add-set-path-group-prefix [group-path-str]
(str set-group-prefix group-path-str))
-(defn set-full-path->set-prefixed-full-path
+(defn- set-full-path->set-prefixed-full-path
"Returns token-set paths with prefixes to differentiate between sets and set-groups.
Sets will be prefixed with `set-prefix` (S-).
@@ -428,12 +438,12 @@
set-name (add-set-path-prefix (last full-path))]
(conj set-path set-name)))
-(defn set-group-path->set-group-prefixed-path
+(defn- set-group-path->set-group-prefixed-path
"Adds `set-group-prefix` (G-) to the `path` vector elements."
[path]
(mapv add-set-path-group-prefix path))
-(defn set-group-path->set-group-prefixed-path-str
+(defn- set-group-path->set-group-prefixed-path-str
[path]
(-> (set-group-path->set-group-prefixed-path path)
(join-set-path)))
@@ -441,49 +451,14 @@
(defn add-set-group-prefix [group-path]
(str set-group-prefix group-path))
-(defn get-set-path
- [token-set]
- (get-path (get-name token-set) set-separator))
-
-(defn split-set-name
- [name]
- (split-path name set-separator))
-
-(defn normalize-set-name
- "Normalize a set name.
-
- If `relative-to` is provided, the normalized name will preserve the
- same group prefix as reference name"
- ([name]
- (->> (split-set-name name)
- (str/join set-separator)))
- ([name relative-to]
- (->> (concat (butlast (split-set-name relative-to))
- (split-set-name name))
- (str/join set-separator))))
-
-(defn set-name->prefixed-full-path [name-str]
+(defn- set-name->prefixed-full-path [name-str]
(-> (split-set-name name-str)
(set-full-path->set-prefixed-full-path)))
-(defn get-set-prefixed-path [token-set]
- (let [path (get-path (get-name token-set) set-separator)]
+(defn- get-set-prefixed-path [token-set]
+ (let [path (cpn/split-path (get-name token-set) :separator set-separator)]
(set-full-path->set-prefixed-full-path path)))
-(defn prefixed-set-path-string->set-name-string [path-str]
- (->> (split-set-name path-str)
- (map (fn [path-part]
- (or (-> (split-set-str-path-prefix path-part)
- (second))
- path-part)))
- (join-set-path)))
-
-(defn replace-last-path-name
- "Replaces the last element in a `path` vector with `name`."
- [path name]
- (-> (into [] (drop-last path))
- (conj name)))
-
(defn tokens-tree
"Convert tokens into a nested tree with their name as the path.
Optionally use `update-token-fn` option to transform the token."
@@ -513,35 +488,33 @@
;; === TokenSets (collection)
(defprotocol ITokenSets
- "Collection of sets and set groups.
-
- Naming conventions:
- Set name: the complete name as a string, without prefix \"some-group/some-subgroup/some-set\".
- Set final name or fname: the last part of the name \"some-set\".
- Set path: the groups part of the name, as a vector [\"some-group\" \"some-subgroup\"].
- Set path str: the set path as a string \"some-group/some-subgroup\".
- Set full path: the path including the fname, as a vector [\"some-group\", \"some-subgroup\", \"some-set\"].
- Set full path str: the set full path as a string \"some-group/some-subgroup/some-set\".
-
- Set prefix: the two-characters prefix added to a full path item \"G-\" / \"S-\".
- Prefixed set path or ppath: a path wit added prefixes [\"G-some-group\", \"G-some-subgroup\"].
- Prefixed set full path or pfpath: a full path wit prefixes [\"G-some-group\", \"G-some-subgroup\", \"S-some-set\"].
- Prefixed set final name or pfname: a final name with prefix \"S-some-set\"."
- (add-set [_ token-set] "add a set to the library, at the end")
- (update-set [_ set-name f] "modify a set in the library")
- (delete-set-path [_ set-path] "delete a set in the library")
- (delete-set [_ set-name] "delete a set at `set-name` in the library and disable the `set-name` in all themes")
- (delete-set-group [_ set-group-name] "delete a set group at `set-group-name` in the library and disable its child sets in all themes")
- (move-set [_ from-path to-path before-path before-group?] "Move token set at `from-path` to `to-path` and order it before `before-path` with `before-group?`.")
- (move-set-group [_ from-path to-path before-path before-group?] "Move token set group at `from-path` to `to-path` and order it before `before-path` with `before-group?`.")
- (set-count [_] "get the total number if sets in the library")
- (get-set-tree [_] "get a nested tree of all sets in the library")
- (get-sets [_] "get an ordered sequence of all sets in the library")
- (get-sets-at-prefix-path [_ prefixed-path-str] "get an ordered sequence of sets at `prefixed-path-str` in the library")
- (get-sets-at-path [_ path-str] "get an ordered sequence of sets at `path` in the library")
- (rename-set-group [_ from-path-str to-path-str] "renames set groups and all child set names from `from-path-str` to `to-path-str`")
- (get-ordered-set-names [_] "get an ordered sequence of all sets names in the library")
- (get-set [_ set-name] "get one set looking for name"))
+ "Collection of sets and set groups."
+ (add-set [_ token-set]
+ "Add a set to the library, at the end of the list")
+ (update-set [_ id f]
+ "Modify a set in the library")
+ (delete-set [_ id]
+ "Delete a set in the library and remove it from all themes")
+ (move-set [_ from-path to-path before-path before-group?]
+ "Move token set at `from-path` to `to-path` and order it before `before-path` with `before-group?`")
+ (move-set-group [_ from-path to-path before-path before-group?]
+ "Move token set group at `from-path` to `to-path` and order it before `before-path` with `before-group?`.")
+ (rename-set-group [_ from-path-str to-path-str]
+ "Renames set groups and all child set names from `from-path-str` to `to-path-str`")
+ (set-count [_]
+ "Get the total number if sets in the library")
+ (get-set [_ id]
+ "Get a set looking by id")
+ (get-set-by-name [_ name]
+ "Get a set looking by name")
+ (get-sets [_]
+ "Get an ordered sequence of all sets in the library")
+ (get-set-names [_]
+ "Get an ordered sequence of all sets names in the library")
+ (get-set-tree [_]
+ "Get a nested tree of all sets in the library")
+ (get-sets-at-path [_ path-str]
+ "Get an ordered sequence of sets under `path` in the library"))
(def ^:private schema:token-set-node
[:schema {:registry {::node
@@ -551,26 +524,37 @@
[:fn d/ordered-map?]]]}}
[:ref ::node]])
+(defn- not-repeated-ids
+ [sets]
+ ;; TODO: this check will not be necessary after refactoring the internal structure of TokensLib
+ ;; since we'll use a map of sets indexed by id. Thus, it should be removed.
+ (let [ids (->> (tree-seq d/ordered-map? vals sets)
+ (filter (partial instance? TokenSet))
+ (map get-id))
+ ids' (set ids)]
+ (= (count ids) (count ids'))))
+
(def ^:private schema:token-sets
[:and {:title "TokenSets"}
[:map-of :string schema:token-set-node]
- [:fn d/ordered-map?]])
-
-(def ^:private check-token-sets
- (sm/check-fn schema:token-sets :hint "expected valid token sets"))
-
-(def ^:private valid-token-sets?
- (sm/validator schema:token-sets))
+ [:fn d/ordered-map?]
+ [:fn not-repeated-ids]])
;; === TokenTheme
-(def ^:private theme-separator "/")
+(defprotocol ITokenTheme
+ (set-sets [_ set-names] "set the active token sets")
+ (enable-set [_ set-name] "enable one set in theme")
+ (enable-sets [_ set-names] "enable several sets in theme")
+ (disable-set [_ set-name] "disable one set in theme")
+ (disable-sets [_ set-names] "disable several sets in theme")
+ (toggle-set [_ set-name] "toggle a set enabled / disabled in the theme")
+ (update-set-name [_ prev-set-name set-name] "update set-name when it exists")
+ (theme-matches-group-name [_ group name] "if a theme matches the given group & name")
+ (hidden-theme? [_] "if a theme is the (from the user ui) hidden temporary theme"))
-(defn join-theme-path [group name]
- (join-path [group name] theme-separator))
-
-(defn split-theme-path [path]
- (split-path-name path theme-separator))
+(def hidden-theme-id
+ uuid/zero)
(def hidden-theme-group
"")
@@ -578,26 +562,14 @@
(def hidden-theme-name
"__PENPOT__HIDDEN__TOKEN__THEME__")
-(def hidden-theme-path
- (join-theme-path hidden-theme-group hidden-theme-name))
-
-(defprotocol ITokenTheme
- (set-sets [_ set-names] "set the active token sets")
- (enable-set [_ set-name] "enable set in theme")
- (enable-sets [_ set-names] "enable sets in theme")
- (disable-set [_ set-name] "disable set in theme")
- (disable-sets [_ set-names] "disable sets in theme")
- (toggle-set [_ set-name] "toggle a set enabled / disabled in the theme")
- (update-set-name [_ prev-set-name set-name] "update set-name from `prev-set-name` to `set-name` when it exists")
- (theme-path [_] "get `theme-path` from theme")
- (theme-matches-group-name [_ group name] "if a theme matches the given group & name")
- (hidden-theme? [_] "if a theme is the (from the user ui) hidden temporary theme"))
-
(defrecord TokenTheme [id name group description is-source external-id modified-at sets]
cp/Datafiable
(datafy [this] (into {} this))
INamedItem
+ (get-id [_]
+ id)
+
(get-name [_]
name)
@@ -610,6 +582,9 @@
(rename [this new-name]
(assoc this :name new-name))
+ (reid [this new-id]
+ (assoc this :id new-id))
+
(set-description [this new-description]
(assoc this :description new-description))
@@ -653,9 +628,6 @@
(conj (disj sets prev-set-name) set-name))
this))
- (theme-path [_]
- (join-theme-path group name))
-
(theme-matches-group-name [this group name]
(and (= (:group this) group)
(= (:name this) name)))
@@ -751,24 +723,42 @@
(assoc :name hidden-theme-name)
(make-token-theme)))
+(def ^:private theme-separator "/")
+
+(defn- join-theme-path [group name]
+ (cpn/join-path [group name] :separator theme-separator :with-spaces? false))
+
+(defn get-theme-path [theme]
+ (join-theme-path (:group theme) (:name theme)))
+
+(defn split-theme-path [path]
+ (cpn/split-group-name path
+ :separator theme-separator
+ :with-spaces? false))
+
+(def hidden-theme-path
+ (join-theme-path hidden-theme-group hidden-theme-name))
+
;; === TokenThemes (collection)
(defprotocol ITokenThemes
+ "Collection of themes in groups"
(add-theme [_ token-theme] "add a theme to the library, at the end")
- (update-theme [_ group name f] "modify a theme in the ilbrary")
- (delete-theme [_ group name] "delete a theme in the library")
+ (update-theme [_ id f] "modify a theme in the ilbrary")
+ (delete-theme [_ id] "delete a theme in the library")
(theme-count [_] "get the total number if themes in the library")
(get-theme-tree [_] "get a nested tree of all themes in the library")
(get-themes [_] "get an ordered sequence of all themes in the library")
- (get-theme [_ group name] "get one theme looking for name")
+ (get-theme [_ id] "get one theme looking for id")
+ (get-theme-by-name [_ group name] "get one theme looking for group and name")
(get-theme-groups [_] "get a sequence of group names by order")
(get-active-theme-paths [_] "get the active theme paths")
(get-active-themes [_] "get an ordered sequence of active themes in the library")
(set-active-themes [_ active-themes] "set active themes in library")
- (theme-active? [_ group name] "predicate if token theme is active")
- (activate-theme [_ group name] "adds theme from the active-themes")
- (deactivate-theme [_ group name] "removes theme from the active-themes")
- (toggle-theme-active? [_ group name] "toggles theme in the active-themes")
+ (theme-active? [_ id] "predicate if token theme is active")
+ (activate-theme [_ id] "adds theme from the active-themes")
+ (deactivate-theme [_ id] "removes theme from the active-themes")
+ (toggle-theme-active? [_ id] "toggles theme in the active-themes")
(get-hidden-theme [_] "get the hidden temporary theme"))
(def schema:token-themes
@@ -778,21 +768,9 @@
[:fn d/ordered-map?]]]
[:fn d/ordered-map?]])
-(def ^:private check-token-themes
- (sm/check-fn schema:token-themes :hint "expected valid token themes"))
-
-(def ^:private valid-token-themes?
- (sm/validator schema:token-themes))
-
(def ^:private schema:active-themes
[:set :string])
-(def ^:private check-active-themes
- (sm/check-fn schema:active-themes :hint "expected valid active themes"))
-
-(def ^:private valid-active-token-themes?
- (sm/validator schema:active-themes))
-
(defn walk-sets-tree-seq
"Walk sets tree as a flat list.
@@ -842,48 +820,52 @@
(walk (or nodes (d/ordered-map)) nil)))
(defn sets-tree-seq
- "Get tokens sets tree as a flat list
+ "Return a lazy sequence that walks through the tokens sets tree in a depth-first order. It returns a node for each
+ group and set. The nodes contain:
+ - is-group: true if the node is a group, false if it's a set.
+ - path: vector with the path of the group or set (without prefixes).
+ - depth: depth in the tree, starting from 0.
+ - index: index in the sequence, starting from 0.
+ - id: the uuid if it's a set, and the path string if it's a group.
+ - token-set: the TokenSet instance if it's a set.
Options:
- `:skip-children-pred`: predicate to skip iterating over a set groups children by checking the path of the set group
- `:new-editing-set-path`: append a an item with `:new?` at the given path"
+ `:skip-children-pred`: predicate that is given a node path. If it returns true, the children of that node are skipped.
+ `:new-at-path`: append at the given path a node with `:is-new true` and a newly created set."
[tree & {:keys [skip-children-pred new-at-path]
:or {skip-children-pred (constantly false)}}]
- (let [walk (fn walk [[k v :as node] parent depth]
+ (let [walk (fn walk [[k v :as node] parent-path depth]
(lazy-seq
(cond
;; New set
(= :is-new k)
- (let [tset (make-token-set :name (if (empty? parent)
- ""
- (join-set-path parent)))]
+ (let [token-set (make-token-set :name (if (empty? parent-path)
+ ""
+ (join-set-path parent-path)))]
[{:is-new true
:is-group false
- :id "" ; FIXME: This is a calculated id, used for the sets tree in the sidear
- :parent-path parent ; It may be refactored now to use the actual :id
- :token-set tset
- :depth depth}])
+ :path (split-set-name (get-name token-set))
+ :depth depth
+ :id (get-id token-set)
+ :token-set token-set}])
;; Set
(and v (instance? TokenSet v))
- (let [name (get-name v)]
- [{:is-group false
- :path (split-set-name name)
- :id name
- :parent-path parent
- :depth depth
- :token-set v}])
+ [{:is-group false
+ :path (split-set-name (get-name v))
+ :depth depth
+ :id (get-id v)
+ :token-set v}]
;; Set group
(and v (d/ordered-map? v))
(let [unprefixed-path (last (split-set-str-path-prefix k))
- path (conj parent unprefixed-path)
+ path (conj parent-path unprefixed-path)
item {:is-group true
:path path
- :id (join-set-path path)
- :parent-path parent
- :depth depth}]
+ :depth depth
+ :id (join-set-path path)}]
(if (skip-children-pred path)
[item]
@@ -904,18 +886,20 @@
;; === Tokens Lib
(declare make-tokens-lib)
+(declare ^:private check-tokens-lib-map)
+(declare ^:private valid-tokens-lib-map?)
(defprotocol ITokensLib
"A library of tokens, sets and themes."
(empty-lib? [_] "True if the lib does not contain any token, set or theme")
(set-path-exists? [_ path] "if a set at `path` exists")
(set-group-path-exists? [_ path] "if a set group at `path` exists")
- (add-token-in-set [_ set-name token] "add token to a set")
- (get-token-in-set [_ set-name token-id] "get token in a set")
- (get-token-by-name [_ set-name token-name] "get token in a set searching by token name")
- (update-token-in-set [_ set-name token-id f] "update a token in a set")
- (delete-token-from-set [_ set-name token-id] "delete a token from a set")
- (toggle-set-in-theme [_ group-name theme-name set-name] "toggle a set used / not used in a theme")
+ (add-token [_ set-id token] "add token to a set")
+ (get-token [_ set-id token-id] "get token in a set")
+ (get-token-by-name [_ set-name token-name] "get token in a set searching by set and token names")
+ (update-token [_ set-id token-id f] "update a token in a set")
+ (delete-token [_ set-id token-id] "delete a token from a set")
+ (toggle-set-in-theme [_ theme-id set-name] "toggle a set used / not used in a theme")
(get-active-themes-set-names [_] "set of set names that are active in the the active themes")
(sets-at-path-all-active? [_ group-path] "compute active state for child sets at `group-path`.
Will return a value that matches this schema:
@@ -924,7 +908,7 @@ Will return a value that matches this schema:
`:partial` Mixed active state of nested sets")
(get-tokens-in-active-sets [_] "set of set names that are active in the the active themes")
(get-all-tokens [_] "all tokens in the lib")
- (validate [_]))
+ (get-tokens [_ set-id] "return a map of tokens in the set, indexed by token-name"))
(declare parse-multi-set-dtcg-json)
(declare export-dtcg-json)
@@ -942,6 +926,19 @@ Will return a value that matches this schema:
(-write [this writter options] (json/-write (export-dtcg-json this) writter options))])
ITokenSets
+ ; Naming conventions:
+ ; (TODO: this will disappear after refactoring the internal structure of TokensLib).
+ ; Set name: the complete name as a string, without prefix \"some-group/some-subgroup/some-set\".
+ ; Set final name or fname: the last part of the name \"some-set\".
+ ; Set path: the groups part of the name, as a vector [\"some-group\" \"some-subgroup\"].
+ ; Set path str: the set path as a string \"some-group/some-subgroup\".
+ ; Set full path: the path including the fname, as a vector [\"some-group\", \"some-subgroup\", \"some-set\"].
+ ; Set full path str: the set full path as a string \"some-group/some-subgroup/some-set\".
+
+ ; Set prefix: the two-characters prefix added to a full path item \"G-\" / \"S-\".
+ ; Prefixed set path or ppath: a path wit added prefixes [\"G-some-group\", \"G-some-subgroup\"].
+ ; Prefixed set full path or pfpath: a full path wit prefixes [\"G-some-group\", \"G-some-subgroup\", \"S-some-set\"].
+ ; Prefixed set final name or pfname: a final name with prefix \"S-some-set\".
(add-set [_ token-set]
(assert (token-set? token-set) "expected valid token-set")
(let [path (get-set-prefixed-path token-set)]
@@ -949,31 +946,36 @@ Will return a value that matches this schema:
themes
active-themes)))
- (update-set [this set-name f]
- (let [prefixed-full-path (set-name->prefixed-full-path set-name)
- set (get-in sets prefixed-full-path)]
+ (update-set [this id f]
+ (assert (uuid? id) "expected uuid for `id`")
+ (let [set (get-set this id)
+ name (get-name set)
+ prefixed-full-path (set-name->prefixed-full-path name)]
(if set
(let [set' (f set)
- prefixed-full-path' (get-set-prefixed-path set')
- name-changed? (not= (get-name set) (get-name set'))]
- (if name-changed?
+ name' (get-name set')
+ prefixed-full-path' (get-set-prefixed-path set')]
+ (if (= name name')
+ (TokensLib. (d/oassoc-in sets prefixed-full-path set')
+ themes
+ active-themes)
(TokensLib. (-> sets
(d/oassoc-in-before prefixed-full-path prefixed-full-path' set')
(d/dissoc-in prefixed-full-path))
(walk/postwalk
(fn [form]
(if (instance? TokenTheme form)
- (update-set-name form (get-name set) (get-name set'))
+ (update-set-name form name name')
form))
themes)
- active-themes)
- (TokensLib. (d/oassoc-in sets prefixed-full-path set')
- themes
active-themes)))
this)))
- (delete-set [_ set-name]
- (let [prefixed-path (set-name->prefixed-full-path set-name)]
+ (delete-set [this id]
+ (assert (uuid? id) "expected uuid for `id`")
+ (let [set (get-set this id)
+ set-name (get-name set)
+ prefixed-path (set-name->prefixed-full-path set-name)]
(TokensLib. (d/dissoc-in sets prefixed-path)
(walk/postwalk
(fn [form]
@@ -983,38 +985,6 @@ Will return a value that matches this schema:
themes)
active-themes)))
- (delete-set-group [this set-group-name]
- (let [path (split-set-name set-group-name)
- prefixed-path (map add-set-group-prefix path)
- child-set-names (->> (get-sets-at-path this path)
- (map get-name)
- (into #{}))]
- (TokensLib. (d/dissoc-in sets prefixed-path)
- (walk/postwalk
- (fn [form]
- (if (instance? TokenTheme form)
- (disable-sets form child-set-names)
- form))
- themes)
- active-themes)))
-
- (delete-set-path [_ prefixed-set-name]
- (let [prefixed-set-path (split-set-name prefixed-set-name)
- set-node (get-in sets prefixed-set-path)
- set-group? (not (instance? TokenSet set-node))
- set-name-string (prefixed-set-path-string->set-name-string prefixed-set-name)]
- (TokensLib. (d/dissoc-in sets prefixed-set-path)
- ;; TODO: When deleting a set-group, also deactivate the child sets
- (if set-group?
- themes
- (walk/postwalk
- (fn [form]
- (if (instance? TokenTheme form)
- (disable-set form set-name-string)
- form))
- themes))
- active-themes)))
-
(move-set [_ from-path to-path before-path before-group?]
(let [prefixed-from-path (set-full-path->set-prefixed-full-path from-path)
prev-set (get-in sets prefixed-from-path)]
@@ -1112,11 +1082,6 @@ Will return a value that matches this schema:
(->> (tree-seq d/ordered-map? vals sets)
(filter (partial instance? TokenSet))))
- (get-sets-at-prefix-path [_ prefixed-path-str]
- (some->> (get-in sets (split-set-name prefixed-path-str))
- (tree-seq d/ordered-map? vals)
- (filter (partial instance? TokenSet))))
-
(get-sets-at-path [_ path]
(some->> (map add-set-path-group-prefix path)
(get-in sets)
@@ -1130,18 +1095,24 @@ Will return a value that matches this schema:
sets (get-sets-at-path this path)]
(reduce
(fn [lib set]
- (update-set lib (get-name set) (fn [set']
- (rename set' (str to-path-str (str/strip-prefix (get-name set') from-path-str))))))
+ (update-set lib (get-id set) (fn [set']
+ (rename set' (str to-path-str (str/strip-prefix (get-name set') from-path-str))))))
this sets)))
- (get-ordered-set-names [this]
+ (get-set-names [this]
(map get-name (get-sets this)))
(set-count [this]
(count (get-sets this)))
- (get-set [_ set-name]
- (let [path (set-name->prefixed-full-path set-name)]
+ (get-set [this id]
+ (assert (uuid? id) "expected uuid for `id`")
+ (some #(when (= (get-id %) id) %) ;; TODO: this will be made in an efficient way when
+ (get-sets this))) ;; we refactor the tokens lib internal structure
+
+ (get-set-by-name [_ name]
+ (assert (string? name) "expected string for `name`")
+ (let [path (set-name->prefixed-full-path name)]
(get-in sets path)))
ITokenThemes
@@ -1151,31 +1122,37 @@ Will return a value that matches this schema:
(update themes (:group token-theme) d/oassoc (:name token-theme) token-theme)
active-themes)))
- (update-theme [this group name f]
- (let [theme (dm/get-in themes [group name])]
- (if theme
- (let [theme' (-> (make-token-theme (f theme))
- (assoc :modified-at (ct/now)))
- group' (:group theme')
- name' (:name theme')
- same-group? (= group group')
- same-name? (= name name')
- same-path? (and same-group? same-name?)]
- (TokensLib. sets
- (if same-path?
- (update themes group' assoc name' theme')
- (-> themes
- (d/oassoc-in-before [group name] [group' name'] theme')
- (d/dissoc-in [group name])))
- (if same-path?
- active-themes
- (disj active-themes (join-theme-path group name)))))
- this)))
+ (update-theme [this id f]
+ (if-let [theme (get-theme this id)]
+ (let [group (:group theme)
+ name (:name theme)
+ theme' (-> (make-token-theme (f theme))
+ (assoc :modified-at (ct/now)))
+ group' (:group theme')
+ name' (:name theme')
+ same-group? (= group group')
+ same-name? (= name name')
+ same-path? (and same-group? same-name?)]
+ (TokensLib. sets
+ (if same-path?
+ (update themes group' assoc name' theme')
+ (-> themes
+ (d/oassoc-in-before [group name] [group' name'] theme')
+ (d/dissoc-in [group name])))
+ (if same-path?
+ active-themes
+ (disj active-themes (join-theme-path group name)))))
+ this))
- (delete-theme [_ group name]
- (TokensLib. sets
- (d/dissoc-in themes [group name])
- (disj active-themes (join-theme-path group name))))
+
+ (delete-theme [this id]
+ (let [theme (get-theme this id)
+ [group name] [(:group theme) (:name theme)]]
+ (if theme
+ (TokensLib. sets
+ (d/dissoc-in themes [group name])
+ (disj active-themes (join-theme-path group name)))
+ this)))
(get-theme-tree [_]
themes)
@@ -1193,7 +1170,11 @@ Will return a value that matches this schema:
(theme-count [this]
(count (get-themes this)))
- (get-theme [_ group name]
+ (get-theme [this id]
+ (->> (get-themes this)
+ (d/seek #(= (:id %) id))))
+
+ (get-theme-by-name [_ group name]
(dm/get-in themes [group name]))
(set-active-themes [_ active-themes]
@@ -1201,30 +1182,34 @@ Will return a value that matches this schema:
themes
active-themes))
- (activate-theme [this group name]
- (if-let [theme (get-theme this group name)]
- (let [group-themes (->> (get themes group)
- (map (comp theme-path val))
+ (activate-theme [this id]
+ (if-let [theme (get-theme this id)]
+ (let [group (:group theme)
+ group-themes (->> (get themes group)
+ (map (comp get-theme-path val))
(into #{}))
active-themes' (-> (set/difference active-themes group-themes)
- (conj (theme-path theme)))]
+ (conj (get-theme-path theme)))]
(TokensLib. sets
themes
active-themes'))
this))
- (deactivate-theme [_ group name]
- (TokensLib. sets
- themes
- (disj active-themes (join-theme-path group name))))
+ (deactivate-theme [this id]
+ (if-let [theme (get-theme this id)]
+ (TokensLib. sets
+ themes
+ (disj active-themes (get-theme-path theme)))
+ this))
- (theme-active? [_ group name]
- (contains? active-themes (join-theme-path group name)))
+ (theme-active? [this id]
+ (when-let [theme (get-theme this id)]
+ (contains? active-themes (get-theme-path theme))))
- (toggle-theme-active? [this group name]
- (if (theme-active? this group name)
- (deactivate-theme this group name)
- (activate-theme this group name)))
+ (toggle-theme-active? [this id]
+ (if (theme-active? this id)
+ (deactivate-theme this id)
+ (activate-theme this id)))
(get-active-theme-paths [_]
active-themes)
@@ -1234,11 +1219,11 @@ Will return a value that matches this schema:
(list)
(comp
(filter (partial instance? TokenTheme))
- (filter #(theme-active? this (:group %) (:name %))))
+ (filter #(theme-active? this (get-id %))))
(tree-seq d/ordered-map? vals themes)))
(get-hidden-theme [this]
- (get-theme this hidden-theme-group hidden-theme-name))
+ (get-theme this hidden-theme-id))
ITokensLib
(empty-lib? [this]
@@ -1253,29 +1238,29 @@ Will return a value that matches this schema:
(set-group-path-exists? [_ set-path]
(some? (get-in sets (set-group-path->set-group-prefixed-path set-path))))
- (add-token-in-set [this set-name token]
- (update-set this set-name #(add-token % token)))
+ (add-token [this set-id token]
+ (update-set this set-id #(add-token- % token)))
- (get-token-in-set [this set-name token-id]
+ (get-token [this set-id token-id]
(some-> this
- (get-set set-name)
- (get-token token-id)))
+ (get-set set-id)
+ (get-token- token-id)))
(get-token-by-name [this set-name token-name]
(some-> this
- (get-set set-name)
- (token-by-name token-name)))
+ (get-set-by-name set-name)
+ (get-token-by-name- token-name)))
- (update-token-in-set [this set-name token-id f]
- (update-set this set-name #(update-token % token-id f)))
+ (update-token [this set-id token-id f]
+ (update-set this set-id #(update-token- % token-id f)))
- (delete-token-from-set [this set-name token-id]
- (update-set this set-name #(delete-token % token-id)))
+ (delete-token [this set-id token-id]
+ (update-set this set-id #(delete-token- % token-id)))
- (toggle-set-in-theme [this theme-group theme-name set-name]
- (if-let [_theme (get-in themes theme-group theme-name)]
+ (toggle-set-in-theme [this theme-id set-name]
+ (if-let [theme (get-theme this theme-id)]
(TokensLib. sets
- (d/oupdate-in themes [theme-group theme-name]
+ (d/oupdate-in themes [(:group theme) (:name theme)]
#(toggle-set % set-name))
active-themes)
this))
@@ -1288,10 +1273,13 @@ Will return a value that matches this schema:
(sets-at-path-all-active? [this group-path]
(let [active-set-names (get-active-themes-set-names this)
prefixed-path-str (set-group-path->set-group-prefixed-path-str group-path)]
+
(if (seq active-set-names)
- (let [path-active-set-names (->> (get-sets-at-prefix-path this prefixed-path-str)
- (map get-name)
- (into #{}))
+ (let [path-active-set-names (some->> (get-in sets (split-set-name prefixed-path-str))
+ (tree-seq d/ordered-map? vals)
+ (filter (partial instance? TokenSet))
+ (map get-name)
+ (into #{}))
difference (set/difference path-active-set-names active-set-names)]
(cond
(empty? difference) :all
@@ -1301,11 +1289,11 @@ Will return a value that matches this schema:
(get-tokens-in-active-sets [this]
(let [theme-set-names (get-active-themes-set-names this)
- all-set-names (get-ordered-set-names this)
+ all-set-names (get-set-names this)
active-set-names (filter theme-set-names all-set-names)
tokens (reduce (fn [tokens set-name]
- (let [set (get-set this set-name)]
- (merge tokens (get-tokens-map set))))
+ (let [set (get-set-by-name this set-name)]
+ (merge tokens (get-tokens- set))))
(d/ordered-map)
active-set-names)]
tokens))
@@ -1313,18 +1301,26 @@ Will return a value that matches this schema:
(get-all-tokens [this]
(reduce
(fn [tokens' set]
- (into tokens' (map (fn [x] [(:name x) x]) (get-tokens set))))
+ (into tokens' (map (fn [x] [(:name x) x]) (vals (get-tokens- set)))))
{}
(get-sets this)))
- (validate [_]
- (and (valid-token-sets? sets)
- (valid-token-themes? themes)
- (valid-active-token-themes? active-themes))))
+ (get-tokens [this set-id]
+ (some-> this
+ (get-set set-id)
+ (get-tokens-)))
+
+ IValidation
+ (valid? [this]
+ (valid-tokens-lib-map? (datafy this)))
+
+ (check [this]
+ (check-tokens-lib-map (datafy this))
+ this))
(defmethod pp/simple-dispatch TokensLib
[^TokensLib obj]
- (.write *out* "#penpot/token-lib ")
+ (.write *out* "#penpot/tokens-lib ")
(pp/pprint-newline :miser)
(pp/pprint (export-dtcg-json obj)))
@@ -1332,7 +1328,7 @@ Will return a value that matches this schema:
(do
(defmethod print-method TokensLib
[^TokensLib obj ^java.io.Writer w]
- (.write w "#penpot/token-lib ")
+ (.write w "#penpot/tokens-lib ")
(print-method (export-dtcg-json obj) w))
(defmethod print-dup TokensLib
@@ -1343,16 +1339,29 @@ Will return a value that matches this schema:
(extend-type TokensLib
cljs.core/IPrintWithWriter
(-pr-writer [this writer opts]
- (-write writer "#penpot/token-lib ")
+ (-write writer "#penpot/tokens-lib ")
(-pr-writer (export-dtcg-json this) writer opts))
cljs.core/IEncodeJS
(-clj->js [this] (clj->js (datafy this)))))
+(def ^:private schema:tokens-lib-map
+ "Internal data structure schema"
+ [:map {:title "TokensLib"}
+ [:sets schema:token-sets]
+ [:themes schema:token-themes]
+ [:active-themes schema:active-themes]])
+
+(def ^:private valid-tokens-lib-map?
+ (sm/lazy-validator schema:tokens-lib-map))
+
+(def ^:private check-tokens-lib-map
+ (sm/check-fn schema:tokens-lib-map :hint "invalid tokens-lib internal data structure"))
+
(defn valid-tokens-lib?
[o]
(and (instance? TokensLib o)
- (validate o)))
+ (valid? o)))
(defn- ensure-hidden-theme
"A helper that is responsible to ensure that the hidden theme always
@@ -1364,17 +1373,23 @@ Will return a value that matches this schema:
data
(d/oassoc data hidden-theme-name (make-hidden-theme))))))
-(defn make-tokens-lib
- "Create an empty or prepopulated tokens library."
+(defn map->tokens-lib
+ "Make a new instance of TokensLib from a map, but skiping all
+ validation; it is used for create new instances from trusted
+ sources"
[& {:keys [sets themes active-themes]}]
- (let [sets (or sets (d/ordered-map))
- themes (-> (or themes (d/ordered-map))
- (ensure-hidden-theme))
- active-themes (or active-themes #{hidden-theme-path})]
- (TokensLib.
- (check-token-sets sets)
- (check-token-themes themes)
- (check-active-themes active-themes))))
+ (TokensLib. sets themes active-themes))
+
+(defn make-tokens-lib
+ "Make a new instance of TokensLib from a map and validates the input"
+ [& {:as params}]
+ (-> params
+ (update :sets #(or % (d/ordered-map)))
+ (update :themes #(-> (or % (d/ordered-map))
+ (ensure-hidden-theme)))
+ (update :active-themes #(or % #{hidden-theme-path}))
+ (check-tokens-lib-map)
+ (map->tokens-lib)))
(defn ensure-tokens-lib
[tokens-lib]
@@ -1391,12 +1406,18 @@ Will return a value that matches this schema:
{:encode/json #(export-dtcg-json %)
:decode/json #(parse-multi-set-dtcg-json %)}}))
-(defn duplicate-set [set-name lib & {:keys [suffix]}]
- (let [sets (get-sets lib)
- unames (map get-name sets)
- copy-name (cfh/generate-unique-name set-name unames :suffix suffix)]
- (some-> (get-set lib set-name)
- (rename copy-name))))
+(defn duplicate-set
+ "Make a new set with a unique name, copying data from the given set in the lib."
+ [set-id lib & {:keys [suffix]}]
+ (let [sets (get-sets lib)
+ unames (map get-name sets)
+ set (get-set lib set-id)
+ copy-name (when set
+ (cfh/generate-unique-name (get-name set) unames :suffix suffix))]
+ (when set
+ (-> set
+ (rename copy-name)
+ (reid (uuid/next))))))
;; === Import / Export from JSON format
@@ -1508,6 +1529,29 @@ Will return a value that matches this schema:
(and (not (contains? decoded-json "$metadata"))
(not (contains? decoded-json "$themes"))))
+(defn- convert-dtcg-font-family
+ "Convert font-family token value from DTCG format to internal format.
+ - If value is a string, split it into a collection of font families
+ - If value is already an array, keep it as is
+ - Otherwise keep as is"
+ [value]
+ (cond
+ (string? value) (cto/split-font-family value)
+ (sequential? value) value
+ :else value))
+
+(defn- convert-dtcg-typography-composite
+ "Convert typography token value keys from DTCG format to internal format."
+ [value]
+ (if (map? value)
+ (-> value
+ (set/rename-keys cto/composite-dtcg-token-type->token-type)
+ (select-keys cto/typography-keys)
+ ;; Convert font-family values within typography composite tokens
+ (d/update-when :font-family convert-dtcg-font-family))
+ ;; Reference value
+ value))
+
(defn- flatten-nested-tokens-json
"Convert a tokens tree in the decoded json fragment into a flat map,
being the keys the token paths after joining the keys with '.'."
@@ -1525,16 +1569,12 @@ Will return a value that matches this schema:
(assoc tokens child-path (make-token
:name child-path
:type token-type
- :value (cond-> (get v "$value")
- ;; Split string of font-families
- (and (= :font-family token-type)
- (string? (get v "$value")))
- cto/split-font-family
-
- ;; Keep array of font-families
- (and (= :font-family token-type)
- (sequential? (get v "$value")))
- identity)
+ :value
+ (let [token-value (get v "$value")]
+ (case token-type
+ :font-family (convert-dtcg-font-family token-value)
+ :typography (convert-dtcg-typography-composite token-value)
+ token-value))
:description (get v "$description")))
;; Discard unknown type tokens
tokens)))))
@@ -1635,7 +1675,7 @@ Will return a value that matches this schema:
ordered-set-names)
library
- (update-theme library hidden-theme-group hidden-theme-name
+ (update-theme library hidden-theme-id
#(assoc % :sets active-set-names))
library
@@ -1643,8 +1683,9 @@ Will return a value that matches this schema:
library
(reduce (fn [library theme-path]
- (let [[group name] (split-theme-path theme-path)]
- (activate-theme library group name)))
+ (let [[group name] (split-theme-path theme-path)
+ theme (get-theme-by-name library group name)]
+ (activate-theme library (get-id theme))))
library
active-theme-names)]
@@ -1687,8 +1728,22 @@ Will return a value that matches this schema:
:else
(parse-multi-set-dtcg-json decoded-json))))
+(defn- typography-token->dtcg-token
+ [value]
+ (if (map? value)
+ (reduce-kv
+ (fn [acc k v]
+ (if (contains? cto/typography-keys k)
+ (assoc acc (cto/composite-token-type->dtcg-token-type k) v)
+ acc))
+ {} value)
+ value))
+
(defn- token->dtcg-token [token]
- (cond-> {"$value" (:value token)
+ (cond-> {"$value" (cond-> (:value token)
+ ;; Transform typography token values
+ (= :typography (:type token))
+ typography-token->dtcg-token)
"$type" (cto/token-type->dtcg-token-type (:type token))}
(:description token) (assoc "$description" (:description token))))
@@ -1728,12 +1783,12 @@ Will return a value that matches this schema:
sets (->> (get-sets tokens-lib)
(map (fn [token-set]
(let [name (get-name token-set)
- tokens (get-tokens-map token-set)]
+ tokens (get-tokens- token-set)]
[(str name ".json") (tokens-tree tokens :update-token-fn token->dtcg-token)])))
(into {}))]
(-> sets
(assoc "$themes.json" themes)
- (assoc "$metadata.json" {"tokenSetOrder" (get-ordered-set-names tokens-lib)
+ (assoc "$metadata.json" {"tokenSetOrder" (get-set-names tokens-lib)
"activeThemes" active-themes
"activeSets" (get-active-themes-set-names tokens-lib)}))))
@@ -1748,7 +1803,7 @@ Will return a value that matches this schema:
(filter (partial instance? TokenSet))
(map (fn [set]
[(get-name set)
- (tokens-tree (get-tokens-map set) :update-token-fn token->dtcg-token)])))
+ (tokens-tree (get-tokens- set) :update-token-fn token->dtcg-token)])))
ordered-set-names
(mapv first name-set-tuples)
@@ -1793,7 +1848,12 @@ Will return a value that matches this schema:
nil
decoded-json)))
-;; === Serialization handlers for RPC API (transit)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; SERIALIZATION (TRANSIT)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;; Serialization used for communicate data in transit between backend
+;; and the frontend
(t/add-handlers!
{:id "penpot/tokens-lib"
@@ -1816,18 +1876,51 @@ Will return a value that matches this schema:
:wfn datafy
:rfn #(map->Token %)})
-;; === Serialization handlers for database (fressian)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; MIGRATIONS HELPERS
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defn fix-duplicate-token-set-ids
+ "Given an instance of TokensLib fixes it internal sets data sturcture
+ for ensure each set has unique id;
+
+ Specific function for file data migrations"
+ [tokens-lib]
+ (let [seen-ids
+ (volatile! #{})
+
+ migrate-set-node
+ (fn recurse [node]
+ (if (token-set? node)
+ (if (contains? @seen-ids (get-id node))
+ (-> (datafy node)
+ (assoc :id (uuid/next))
+ (map->token-set))
+ (do
+ (vswap! seen-ids conj (get-id node))
+ node))
+ (d/update-vals node recurse)))]
+
+ (some-> tokens-lib
+ (-> (datafy)
+ (update :sets d/update-vals migrate-set-node)
+ (map->tokens-lib)
+ (check)))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; SERIALIZATION (FRESIAN)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;; Serialization used for the internal storage on the file data, it
+;; uses and, space and cpu efficient fresian serialization.
#?(:clj
- (defn- read-tokens-lib-v1-1
- "Reads the tokens lib data structure and ensures that hidden
- theme exists and adds missing ID on themes"
- [r]
- (let [sets (fres/read-object! r)
- themes (fres/read-object! r)
- active-themes (fres/read-object! r)
+ (defn- migrate-to-v1-2
+ "Migrate the TokensLib data structure internals to v1.2 version; it
+ expects input from v1.1 version"
+ [{:keys [themes] :as params}]
- ;; Ensure we have at least a hidden theme
+ (let [;; Ensure we have at least a hidden theme
themes
(ensure-hidden-theme themes)
@@ -1846,22 +1939,18 @@ Will return a value that matches this schema:
(keys themes)))))
themes
(keys themes))]
-
- (->TokensLib sets themes active-themes))))
+ (assoc params :themes themes))))
#?(:clj
- (defn- read-tokens-lib-v1-2
- "Reads the tokens lib data structure and add ids to tokens, sets and themes."
- [r]
- (let [sets (fres/read-object! r)
- themes (fres/read-object! r)
- active-themes (fres/read-object! r)
-
- migrate-token
+ (defn- migrate-to-v1-3
+ "Migrate the TokensLib data structure internals to v1.3 version; it
+ expects input from v1.2 version"
+ [{:keys [sets themes] :as params}]
+ (let [migrate-token
(fn [token]
(assoc token :id (uuid/next)))
- migrate-sets-node
+ migrate-set-node
(fn recurse [node]
(if (token-set-legacy? node)
(make-token-set
@@ -1871,7 +1960,7 @@ Will return a value that matches this schema:
(d/update-vals node recurse)))
sets
- (d/update-vals sets migrate-sets-node)
+ (d/update-vals sets migrate-set-node)
migrate-theme
(fn [theme]
@@ -1881,9 +1970,12 @@ Will return a value that matches this schema:
(assoc theme
:id uuid/zero
:external-id "")
- (assoc theme ;; Rename the :id field to :external-id, and add
- :id (or (uuid/parse* (:id theme)) ;; a new :id that is the same as the old if if
- (uuid/next)) ;; this is an uuid, else a new uuid is generated.
+ ;; Rename the :id field to :external-id, and add a
+ ;; new :id that is the same as the old if if this is an
+ ;; uuid, else a new uuid is generated.
+ (assoc theme
+ :id (or (uuid/parse* (:id theme))
+ (uuid/next))
:external-id (:id theme)))))
migrate-theme-group
@@ -1893,7 +1985,54 @@ Will return a value that matches this schema:
themes
(d/update-vals themes migrate-theme-group)]
- (->TokensLib sets themes active-themes))))
+ (assoc params
+ :themes themes
+ :sets sets))))
+
+#?(:clj
+ (defn- migrate-to-v1-4
+ "Migrate the TokensLib data structure internals to v1.2 version; it
+ expects input from v1.3 version"
+ [params]
+ (let [migrate-set-node
+ (fn recurse [node]
+ (if (token-set-legacy? node)
+ (make-token-set node)
+ (d/update-vals node recurse)))]
+
+ (update params :sets d/update-vals migrate-set-node))))
+
+#?(:clj
+ (defn- read-tokens-lib-v1-1
+ "Reads the tokens lib data structure and ensures that hidden
+ theme exists and adds missing ID on themes"
+ [r]
+ (let [sets (fres/read-object! r)
+ themes (fres/read-object! r)
+ active-themes (fres/read-object! r)]
+
+ (-> {:sets sets
+ :themes themes
+ :active-themes active-themes}
+ (migrate-to-v1-2)
+ (migrate-to-v1-3)
+ (migrate-to-v1-4)
+ (map->tokens-lib)))))
+
+#?(:clj
+ (defn- read-tokens-lib-v1-2
+ "Reads the tokens lib data structure and add ids to tokens, sets and themes."
+ [r]
+ (let [sets (fres/read-object! r)
+ themes (fres/read-object! r)
+ active-themes (fres/read-object! r)]
+
+ (-> {:sets sets
+ :themes themes
+ :active-themes active-themes}
+ (migrate-to-v1-3)
+ (migrate-to-v1-4)
+ (map->tokens-lib)))))
#?(:clj
(defn- read-tokens-lib-v1-3
@@ -1902,18 +2041,13 @@ Will return a value that matches this schema:
[r]
(let [sets (fres/read-object! r)
themes (fres/read-object! r)
- active-themes (fres/read-object! r)
+ active-themes (fres/read-object! r)]
- migrate-sets-node
- (fn recurse [node]
- (if (token-set-legacy? node)
- (make-token-set node)
- (d/update-vals node recurse)))
-
- sets
- (d/update-vals sets migrate-sets-node)]
-
- (->TokensLib sets themes active-themes))))
+ (-> {:sets sets
+ :themes themes
+ :active-themes active-themes}
+ (migrate-to-v1-4)
+ (map->tokens-lib)))))
#?(:clj
(defn- write-tokens-lib
diff --git a/common/src/app/common/types/variant.cljc b/common/src/app/common/types/variant.cljc
index abad9f4b5f..bbac03d24a 100644
--- a/common/src/app/common/types/variant.cljc
+++ b/common/src/app/common/types/variant.cljc
@@ -7,8 +7,8 @@
(ns app.common.types.variant
(:require
[app.common.data :as d]
- [app.common.files.helpers :as cfh]
[app.common.math :as math]
+ [app.common.path-names :as cpn]
[app.common.schema :as sm]
[cuerdas.core :as str]))
@@ -50,7 +50,6 @@
(def property-max-length 60)
(def value-prefix "Value ")
-
(defn properties-to-name
"Transform the properties into a name, with the values separated by comma"
[properties]
@@ -59,7 +58,6 @@
(remove str/empty?)
(str/join ", ")))
-
(defn next-property-number
"Returns the next property number, to avoid duplicates on the property names"
[properties]
@@ -92,7 +90,7 @@
([path properties]
(path-to-properties path properties 0))
([path properties min-props]
- (let [cpath (cfh/split-path path)
+ (let [cpath (cpn/split-path path)
total-props (max (count cpath) min-props)
assigned (mapv #(assoc % :value (nth cpath %2 "")) properties (range))
;; Add empty strings to the end of cpath to reach the minimum number of properties
@@ -100,7 +98,6 @@
remaining (drop (count properties) cpath)]
(add-new-props assigned remaining))))
-
(defn properties-map->formula
"Transforms a map of properties to a formula of properties omitting the empty ones"
[properties]
@@ -110,7 +107,6 @@
(str name "=" value))))
(str/join ", ")))
-
(defn properties-formula->map
"Transforms a formula of properties to a map of properties"
[s]
@@ -121,7 +117,6 @@
{:name (str/trim k)
:value (str/trim v)}))))
-
(defn valid-properties-formula?
"Checks if a formula is valid"
[s]
@@ -138,21 +133,18 @@
(let [upd-names (set (map :name upd-props))]
(filterv #(not (contains? upd-names (:name %))) prev-props)))
-
(defn find-properties-to-update
"Compares two property maps to find which properties should be updated"
[prev-props upd-props]
(filterv #(some (fn [prop] (and (= (:name %) (:name prop))
(not= (:value %) (:value prop)))) prev-props) upd-props))
-
(defn find-properties-to-add
"Compares two property maps to find which properties should be added"
[prev-props upd-props]
(let [prev-names (set (map :name prev-props))]
(filterv #(not (contains? prev-names (:name %))) upd-props)))
-
(defn- split-base-name-and-number
"Extract the number in parentheses from an item, if present, and return both the base name and the number"
[item]
@@ -192,7 +184,6 @@
:value (:value prop)}))
[])))
-
(defn find-index-for-property-name
"Finds the index of a name in a property map"
[props name]
@@ -318,4 +309,4 @@
"Transforms a variant-name (its properties values) into a standard name:
the real name of the shape joined by the properties values separated by '/'"
[variant]
- (cfh/merge-path-item (:name variant) (str/replace (:variant-name variant) #", " " / ")))
+ (cpn/merge-path-item (:name variant) (str/replace (:variant-name variant) #", " " / ")))
diff --git a/common/src/app/common/weak.cljc b/common/src/app/common/weak.cljc
index 87ae6cbc4b..f9efeb73e7 100644
--- a/common/src/app/common/weak.cljc
+++ b/common/src/app/common/weak.cljc
@@ -22,7 +22,7 @@
#?(:cljs
(defn weak-map
- "Create a WeakMap like instance what uses clojure equality
+ "Create a WeakMap-like instance what uses clojure equality
semantics."
[]
(new wm/WeakEqMap #js {:hash hash :equals =})))
diff --git a/common/test/common_tests/data_test.cljc b/common/test/common_tests/data_test.cljc
index 686ae8980c..f2885c07f7 100644
--- a/common/test/common_tests/data_test.cljc
+++ b/common/test/common_tests/data_test.cljc
@@ -102,3 +102,14 @@
(t/is (= (d/insert-at-index [:a :b :c :d] 1 [:a])
[:a :b :c :d])))
+(t/deftest reorder
+ (let [v ["a" "b" "c" "d"]]
+ (t/is (= (d/reorder v 0 2) ["b" "a" "c" "d"]))
+ (t/is (= (d/reorder v 0 3) ["b" "c" "a" "d"]))
+ (t/is (= (d/reorder v 0 4) ["b" "c" "d" "a"]))
+ (t/is (= (d/reorder v 3 0) ["d" "a" "b" "c"]))
+ (t/is (= (d/reorder v 3 2) ["a" "b" "d" "c"]))
+ (t/is (= (d/reorder v 0 5) ["b" "c" "d" "a"]))
+ (t/is (= (d/reorder v 3 -1) ["d" "a" "b" "c"]))
+ (t/is (= (d/reorder v 5 -1) ["d" "a" "b" "c"]))
+ (t/is (= (d/reorder v -1 5) ["b" "c" "d" "a"]))))
diff --git a/common/test/common_tests/files_changes_test.cljc b/common/test/common_tests/files_changes_test.cljc
index 5335df2e4d..51fc6556a0 100644
--- a/common/test/common_tests/files_changes_test.cljc
+++ b/common/test/common_tests/files_changes_test.cljc
@@ -14,7 +14,6 @@
[app.common.types.file :as ctf]
[app.common.types.shape :as cts]
[app.common.uuid :as uuid]
- [clojure.pprint :refer [pprint]]
[clojure.test :as t]
[common-tests.types.shape-decode-encode-test :refer [json-roundtrip]]))
diff --git a/common/test/common_tests/files_migrations_test.cljc b/common/test/common_tests/files_migrations_test.cljc
index f5fe884ba8..d9de5e84f2 100644
--- a/common/test/common_tests/files_migrations_test.cljc
+++ b/common/test/common_tests/files_migrations_test.cljc
@@ -9,6 +9,7 @@
[app.common.data :as d]
[app.common.files.migrations :as cfm]
[app.common.pprint :as pp]
+ [app.common.types.file :as ctf]
[clojure.test :as t]))
(defmethod cfm/migrate-data "test/1" [data _] (update data :sum inc))
@@ -17,7 +18,8 @@
(t/deftest generic-migration-subsystem-1
(let [migrations (into (d/ordered-set) ["test/1" "test/2" "test/3"])]
- (with-redefs [cfm/available-migrations migrations]
+ (with-redefs [cfm/available-migrations migrations
+ ctf/check-file-data identity]
(let [file {:data {:sum 1}
:id 1
:migrations (d/ordered-set "test/1")}
diff --git a/common/test/common_tests/logic/comp_detach_with_nested_test.cljc b/common/test/common_tests/logic/comp_detach_with_nested_test.cljc
index ac7d62d116..9460a3b91c 100644
--- a/common/test/common_tests/logic/comp_detach_with_nested_test.cljc
+++ b/common/test/common_tests/logic/comp_detach_with_nested_test.cljc
@@ -446,3 +446,35 @@
(t/is (= (count fills') 1))
(t/is (= (:fill-color fill') "#fabada"))
(t/is (= (:fill-opacity fill') 1))))
+
+(t/deftest test-detach-copy-in-main
+ (let [;; ==== Setup
+ file (-> (setup-file)
+ (thc/instantiate-component :c-big-board
+ :copy-big-board
+ :children-labels [:copy-h-board-with-ellipse
+ :copy-nested-h-ellipse
+ :copy-nested-ellipse]))
+
+ page (thf/current-page file)
+
+ ;; ==== Action
+ changes (cll/generate-detach-instance (-> (pcb/empty-changes nil)
+ (pcb/with-page page)
+ (pcb/with-objects (:objects page)))
+ page
+ {(:id file) file}
+ (thi/id :nested-h-ellipse))
+ file' (-> (thf/apply-changes file changes)
+ (tho/propagate-component-changes :c-board-with-ellipse)
+ (tho/propagate-component-changes :c-big-board))
+
+ ;; ==== Get
+ nested2-h-ellipse (ths/get-shape file' :nested-h-ellipse)
+ copy-nested2-h-ellipse (ths/get-shape file' :copy-nested-h-ellipse)]
+
+ ;; ==== Check
+
+ ;; When the nested copy inside the main is detached, their copies are unheaded.
+ (t/is (not (ctk/subcopy-head? nested2-h-ellipse)))
+ (t/is (not (ctk/subcopy-head? copy-nested2-h-ellipse)))))
\ No newline at end of file
diff --git a/common/test/common_tests/logic/move_shapes_test.cljc b/common/test/common_tests/logic/move_shapes_test.cljc
index 657b624623..38456a05eb 100644
--- a/common/test/common_tests/logic/move_shapes_test.cljc
+++ b/common/test/common_tests/logic/move_shapes_test.cljc
@@ -144,20 +144,21 @@
file (-> (thf/sample-file :file1)
(tht/add-tokens-lib)
(tht/update-tokens-lib #(-> %
- (ctob/add-set (ctob/make-token-set :name "test-token-set"))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :test-token-set)
+ :name "test-token-set"))
(ctob/add-theme (ctob/make-token-theme :name "test-theme"
:sets #{"test-token-set"}))
(ctob/set-active-themes #{"/test-theme"})
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :token-sizing)
- :name "token-sizing"
- :type :sizing
- :value 10))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :token-spacing)
- :name "token-spacing"
- :type :spacing
- :value 30))))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :token-sizing)
+ :name "token-sizing"
+ :type :sizing
+ :value 10))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :token-spacing)
+ :name "token-spacing"
+ :type :spacing
+ :value 30))))
(tho/add-frame :frame-1
:layout :flex ;; TODO: those values come from main.data.workspace.shape_layout/default-layout-params
:layout-flex-dir :row ;; it should be good to use it directly, but first it should be moved to common.logic
diff --git a/common/test/common_tests/logic/token_apply_test.cljc b/common/test/common_tests/logic/token_apply_test.cljc
index fd6f6d7f86..ff1f54d3d7 100644
--- a/common/test/common_tests/logic/token_apply_test.cljc
+++ b/common/test/common_tests/logic/token_apply_test.cljc
@@ -27,65 +27,66 @@
(-> (thf/sample-file :file1)
(tht/add-tokens-lib)
(tht/update-tokens-lib #(-> %
- (ctob/add-set (ctob/make-token-set :name "test-token-set"))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :test-token-set)
+ :name "test-token-set"))
(ctob/add-theme (ctob/make-token-theme :name "test-theme"
:sets #{"test-token-set"}))
(ctob/set-active-themes #{"/test-theme"})
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :token-radius)
- :name "token-radius"
- :type :border-radius
- :value 10))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :token-rotation)
- :name "token-rotation"
- :type :rotation
- :value 30))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :token-opacity)
- :name "token-opacity"
- :type :opacity
- :value 0.7))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :token-stroke-width)
- :name "token-stroke-width"
- :type :stroke-width
- :value 2))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :token-color)
- :name "token-color"
- :type :color
- :value "#00ff00"))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :token-dimensions)
- :name "token-dimensions"
- :type :dimensions
- :value 100))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :token-font-size)
- :name "token-font-size"
- :type :font-size
- :value 24))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :token-letter-spacing)
- :name "token-letter-spacing"
- :type :letter-spacing
- :value 2))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :token-font-family)
- :name "token-font-family"
- :type :font-family
- :value ["Helvetica" "Arial" "sans-serif"]))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :token-sizing)
- :name "token-sizing"
- :type :sizing
- :value 10))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :token-spacing)
- :name "token-spacing"
- :type :spacing
- :value 30))))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :token-radius)
+ :name "token-radius"
+ :type :border-radius
+ :value 10))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :token-rotation)
+ :name "token-rotation"
+ :type :rotation
+ :value 30))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :token-opacity)
+ :name "token-opacity"
+ :type :opacity
+ :value 0.7))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :token-stroke-width)
+ :name "token-stroke-width"
+ :type :stroke-width
+ :value 2))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :token-color)
+ :name "token-color"
+ :type :color
+ :value "#00ff00"))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :token-dimensions)
+ :name "token-dimensions"
+ :type :dimensions
+ :value 100))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :token-font-size)
+ :name "token-font-size"
+ :type :font-size
+ :value 24))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :token-letter-spacing)
+ :name "token-letter-spacing"
+ :type :letter-spacing
+ :value 2))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :token-font-family)
+ :name "token-font-family"
+ :type :font-family
+ :value ["Helvetica" "Arial" "sans-serif"]))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :token-sizing)
+ :name "token-sizing"
+ :type :sizing
+ :value 10))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :token-spacing)
+ :name "token-spacing"
+ :type :spacing
+ :value 30))))
(tho/add-frame :frame1
:layout :flex ;; TODO: those values come from main.data.workspace.shape_layout/default-layout-params
:layout-flex-dir :row ;; it should be good to use it directly, but first it should be moved to common.logic
@@ -131,17 +132,17 @@
frame1 (ths/get-shape file :frame1)
text1 (ths/get-shape file :text1)
circle1 (ths/get-shape file :circle1)
- token-radius (tht/get-token file "test-token-set" (thi/id :token-radius))
- token-rotation (tht/get-token file "test-token-set" (thi/id :token-rotation))
- token-opacity (tht/get-token file "test-token-set" (thi/id :token-opacity))
- token-stroke-width (tht/get-token file "test-token-set" (thi/id :token-stroke-width))
- token-color (tht/get-token file "test-token-set" (thi/id :token-color))
- token-dimensions (tht/get-token file "test-token-set" (thi/id :token-dimensions))
- token-font-size (tht/get-token file "test-token-set" (thi/id :token-font-size))
- token-letter-spacing (tht/get-token file "test-token-set" (thi/id :token-letter-spacing))
- token-font-family (tht/get-token file "test-token-set" (thi/id :token-font-family))
- token-sizing (tht/get-token file "test-token-set" (thi/id :token-sizing))
- token-spacing (tht/get-token file "test-token-set" (thi/id :token-spacing))
+ token-radius (tht/get-token file (thi/id :test-token-set) (thi/id :token-radius))
+ token-rotation (tht/get-token file (thi/id :test-token-set) (thi/id :token-rotation))
+ token-opacity (tht/get-token file (thi/id :test-token-set) (thi/id :token-opacity))
+ token-stroke-width (tht/get-token file (thi/id :test-token-set) (thi/id :token-stroke-width))
+ token-color (tht/get-token file (thi/id :test-token-set) (thi/id :token-color))
+ token-dimensions (tht/get-token file (thi/id :test-token-set) (thi/id :token-dimensions))
+ token-font-size (tht/get-token file (thi/id :test-token-set) (thi/id :token-font-size))
+ token-letter-spacing (tht/get-token file (thi/id :test-token-set) (thi/id :token-letter-spacing))
+ token-font-family (tht/get-token file (thi/id :test-token-set) (thi/id :token-font-family))
+ token-sizing (tht/get-token file (thi/id :test-token-set) (thi/id :token-sizing))
+ token-spacing (tht/get-token file (thi/id :test-token-set) (thi/id :token-spacing))
;; ==== Action
changes (-> (-> (pcb/empty-changes nil)
diff --git a/common/test/common_tests/logic/token_test.cljc b/common/test/common_tests/logic/token_test.cljc
index b99df0f8da..aa58adfa05 100644
--- a/common/test/common_tests/logic/token_test.cljc
+++ b/common/test/common_tests/logic/token_test.cljc
@@ -13,6 +13,7 @@
[app.common.test-helpers.tokens :as tht]
[app.common.types.tokens-lib :as ctob]
[app.common.uuid :as uuid]
+ [clojure.datafy :refer [datafy]]
[clojure.test :as t]))
(t/use-fixtures :each thi/test-fixture)
@@ -33,6 +34,7 @@
(pcb/with-library-data (:data file))
(clt/generate-toggle-token-set (tht/get-tokens-lib file) "foo/bar"))
+ _ (prn "changes" changes)
redo (thf/apply-changes file changes)
redo-lib (tht/get-tokens-lib redo)
undo (thf/apply-undo-changes redo changes)
@@ -83,127 +85,133 @@
(t/deftest set-token-theme-test
(t/testing "delete token theme"
- (let [theme-name "foo"
- group "main"
+ (let [theme-id (uuid/next)
file (setup-file #(-> %
- (ctob/add-theme (ctob/make-token-theme :name theme-name
- :group group))))
+ (ctob/add-theme (ctob/make-token-theme :id theme-id
+ :name "foo"
+ :group "main"))))
changes (-> (pcb/empty-changes)
(pcb/with-library-data (:data file))
- (pcb/set-token-theme group theme-name nil))
+ (pcb/set-token-theme theme-id nil))
redo (thf/apply-changes file changes)
redo-lib (tht/get-tokens-lib redo)
undo (thf/apply-undo-changes redo changes)
undo-lib (tht/get-tokens-lib undo)]
;; Redo
- (t/is (nil? (ctob/get-theme redo-lib group theme-name)))
+ (t/is (nil? (ctob/get-theme redo-lib theme-id)))
;; Undo
- (t/is (some? (ctob/get-theme undo-lib group theme-name)))))
+ (t/is (some? (ctob/get-theme undo-lib theme-id)))))
(t/testing "add token theme"
- (let [theme-name "foo"
- group "main"
- theme (ctob/make-token-theme :name theme-name
- :group group)
+ (let [theme-id (uuid/next)
+ theme (ctob/make-token-theme :id theme-id
+ :name "foo"
+ :group "main")
file (setup-file identity)
changes (-> (pcb/empty-changes)
(pcb/with-library-data (:data file))
- (pcb/set-token-theme group theme-name theme))
+ (pcb/set-token-theme theme-id theme))
redo (thf/apply-changes file changes)
redo-lib (tht/get-tokens-lib redo)
undo (thf/apply-undo-changes redo changes)
undo-lib (tht/get-tokens-lib undo)]
;; Redo
- (t/is (some? (ctob/get-theme redo-lib group theme-name)))
+ (t/is (some? (ctob/get-theme redo-lib theme-id)))
;; Undo
- (t/is (nil? (ctob/get-theme undo-lib group theme-name)))))
+ (t/is (nil? (ctob/get-theme undo-lib theme-id)))))
(t/testing "update token theme"
- (let [theme-name "foo"
- group "main"
- prev-theme (ctob/make-token-theme :name theme-name
- :group group)
+ (let [theme-id (uuid/next)
+ prev-theme-name "foo"
+ prev-theme (ctob/make-token-theme :id theme-id
+ :name prev-theme-name
+ :group "main")
file (setup-file #(ctob/add-theme % prev-theme))
new-theme-name "foo1"
changes (-> (pcb/empty-changes)
(pcb/with-library-data (:data file))
- (pcb/set-token-theme group new-theme-name prev-theme))
+ (pcb/set-token-theme theme-id (ctob/rename prev-theme new-theme-name)))
redo (thf/apply-changes file changes)
redo-lib (tht/get-tokens-lib redo)
+ redo-theme (ctob/get-theme redo-lib theme-id)
undo (thf/apply-undo-changes redo changes)
- undo-lib (tht/get-tokens-lib undo)]
+ undo-lib (tht/get-tokens-lib undo)
+ undo-theme (ctob/get-theme undo-lib theme-id)]
;; Redo
- (t/is (some? (ctob/get-theme redo-lib group theme-name)))
- (t/is (nil? (ctob/get-theme redo-lib group new-theme-name)))
+ (t/is (= new-theme-name (ctob/get-name redo-theme)))
;; Undo
- (t/is (some? (ctob/get-theme undo-lib group theme-name)))
- (t/is (nil? (ctob/get-theme undo-lib group new-theme-name)))))
+ (t/is (= prev-theme-name (ctob/get-name undo-theme)))))
(t/testing "toggling token theme updates using changes history"
- (let [theme-name "foo-theme"
- group "main"
+ (let [theme-id (uuid/next)
+ theme (ctob/make-token-theme :id theme-id
+ :name "foo-theme"
+ :group "main")
set-name "bar-set"
token-set (ctob/make-token-set :name set-name)
- theme (ctob/make-token-theme :name theme-name
- :group group)
file (setup-file #(-> %
(ctob/add-theme theme)
(ctob/add-set token-set)))
theme' (assoc theme :sets #{set-name})
changes (-> (pcb/empty-changes)
(pcb/with-library-data (:data file))
- (pcb/set-token-theme group theme-name theme'))
+ (pcb/set-token-theme theme-id theme'))
changed-file (-> file
(thf/apply-changes changes)
(thf/apply-undo-changes changes)
(thf/apply-changes changes))
changed-lib (tht/get-tokens-lib changed-file)]
(t/is (= #{set-name}
- (-> changed-lib (ctob/get-theme group theme-name) :sets))))))
+ (-> changed-lib (ctob/get-theme theme-id) :sets))))))
(t/deftest set-token-test
(t/testing "delete token"
(let [set-name "foo"
+ set-id (uuid/next)
token-id (uuid/next)
file (setup-file #(-> %
- (ctob/add-set (ctob/make-token-set :name set-name))
- (ctob/add-token-in-set set-name (ctob/make-token {:name "to.delete.color.red"
- :id token-id
- :value "red"
- :type :color}))))
+ (ctob/add-set (ctob/make-token-set :id set-id
+ :name set-name))
+ (ctob/add-token set-id (ctob/make-token {:name "to.delete.color.red"
+ :id token-id
+ :value "red"
+ :type :color}))))
changes (-> (pcb/empty-changes)
(pcb/with-library-data (:data file))
- (pcb/set-token set-name token-id nil))
+ (pcb/set-token set-id token-id nil))
redo (thf/apply-changes file changes)
redo-lib (tht/get-tokens-lib redo)
undo (thf/apply-undo-changes redo changes)
undo-lib (tht/get-tokens-lib undo)]
- (t/is (nil? (ctob/get-token-in-set redo-lib set-name token-id)))
+ (t/is (nil? (ctob/get-token redo-lib set-id token-id)))
;; Undo
- (t/is (some? (ctob/get-token-in-set undo-lib set-name token-id)))))
+ (t/is (some? (ctob/get-token undo-lib set-id token-id)))))
(t/testing "add token"
(let [set-name "foo"
+ set-id (uuid/next)
token (ctob/make-token {:name "to.add.color.red"
:value "red"
:type :color})
- file (setup-file #(-> % (ctob/add-set (ctob/make-token-set :name set-name))))
+ file (setup-file #(-> % (ctob/add-set (ctob/make-token-set :id set-id
+ :name set-name))))
changes (-> (pcb/empty-changes)
(pcb/with-library-data (:data file))
- (pcb/set-token set-name (:id token) token))
+ (pcb/set-token set-id (:id token) token))
redo (thf/apply-changes file changes)
redo-lib (tht/get-tokens-lib redo)
undo (thf/apply-undo-changes redo changes)
undo-lib (tht/get-tokens-lib undo)]
- (t/is (= token (ctob/get-token-in-set redo-lib set-name (:id token))))
+ (t/is (= token (ctob/get-token redo-lib set-id (:id token))))
;; Undo
- (t/is (nil? (ctob/get-token-in-set undo-lib set-name (:id token))))))
+ (t/is (nil? (ctob/get-token undo-lib set-id (:id token))))))
(t/testing "update token"
(let [set-name "foo"
+ set-id (uuid/next)
prev-token (ctob/make-token {:name "to.update.color.red"
:value "red"
:type :color})
@@ -211,27 +219,29 @@
(assoc :name "color.red.changed")
(assoc :value "blue"))
file (setup-file #(-> %
- (ctob/add-set (ctob/make-token-set :name set-name))
- (ctob/add-token-in-set set-name prev-token)))
+ (ctob/add-set (ctob/make-token-set :id set-id
+ :name set-name))
+ (ctob/add-token set-id prev-token)))
changes (-> (pcb/empty-changes)
(pcb/with-library-data (:data file))
- (pcb/set-token set-name (:id prev-token) token))
+ (pcb/set-token set-id (:id prev-token) token))
redo (thf/apply-changes file changes)
redo-lib (tht/get-tokens-lib redo)
undo (thf/apply-undo-changes redo changes)
undo-lib (tht/get-tokens-lib undo)]
- (t/is (tht/token-data-eq? token (ctob/get-token-in-set redo-lib set-name (:id token))))
+ (t/is (tht/token-data-eq? token (ctob/get-token redo-lib set-id (:id token))))
;; Undo
- (t/is (tht/token-data-eq? prev-token (ctob/get-token-in-set undo-lib set-name (:id prev-token)))))))
+ (t/is (tht/token-data-eq? prev-token (ctob/get-token undo-lib set-id (:id prev-token)))))))
(t/deftest set-token-set-test
(t/testing "delete token set"
(let [set-name "foo"
- file (setup-file #(ctob/add-set % (ctob/make-token-set :name set-name)))
+ set-id (uuid/next)
+ file (setup-file #(ctob/add-set % (ctob/make-token-set :id set-id :name set-name)))
changes (-> (pcb/empty-changes)
(pcb/with-library-data (:data file))
- (pcb/set-token-set set-name false nil))
+ (pcb/set-token-set set-id nil))
redo (thf/apply-changes file changes)
redo-lib (tht/get-tokens-lib redo)
@@ -243,11 +253,12 @@
(t/testing "add token set"
(let [set-name "foo"
- token-set (ctob/make-token-set :name set-name)
+ set-id (uuid/next)
+ token-set (ctob/make-token-set :id set-id :name set-name)
file (setup-file identity)
changes (-> (pcb/empty-changes)
(pcb/with-library-data (:data file))
- (pcb/set-token-set set-name false token-set))
+ (pcb/set-token-set set-id token-set))
redo (thf/apply-changes file changes)
redo-lib (tht/get-tokens-lib redo)
@@ -259,28 +270,26 @@
(t/testing "update token set"
(let [set-name "foo"
- token-name "bar"
- token (ctob/make-token {:name token-name
- :value "red"
- :type :color})
- file (setup-file #(-> (ctob/add-set % (ctob/make-token-set :name set-name))
- (ctob/add-token-in-set set-name token)))
- prev-token-set (-> file tht/get-tokens-lib (ctob/get-set set-name))
+ set-id (uuid/next)
+ token-set (ctob/make-token-set :id set-id :name set-name)
+ file (setup-file #(-> (ctob/add-set % token-set)))
new-set-name "foo1"
+
changes (-> (pcb/empty-changes)
(pcb/with-library-data (:data file))
- (pcb/set-token-set set-name false (ctob/rename prev-token-set new-set-name)))
+ (pcb/set-token-set set-id (ctob/rename token-set new-set-name)))
+
redo (thf/apply-changes file changes)
redo-lib (tht/get-tokens-lib redo)
- undo (thf/apply-undo-changes redo changes)
- undo-lib (tht/get-tokens-lib undo)]
+ redo-token-set (ctob/get-set redo-lib set-id)
+ undo (thf/apply-undo-changes redo changes)
+ undo-lib (tht/get-tokens-lib undo)
+ undo-token-set (ctob/get-set undo-lib set-id)]
+
+ (t/is (= (ctob/get-name redo-token-set) new-set-name))
;; Undo
- (t/is (some? (ctob/get-token-in-set undo-lib set-name (:id token))))
- (t/is (nil? (ctob/get-token-in-set undo-lib new-set-name (:id token))))
- ;; Redo
- (t/is (nil? (ctob/get-token-in-set redo-lib set-name (:id token))))
- (t/is (some? (ctob/get-token-in-set redo-lib new-set-name (:id token)))))))
+ (t/is (= (ctob/get-name undo-token-set) set-name)))))
(t/deftest generate-toggle-token-set-group-test
(t/testing "toggling set group with no active sets inside will activate all child sets"
@@ -361,13 +370,13 @@
:position :top})
redo (thf/apply-changes file changes)
redo-sets (-> (tht/get-tokens-lib redo)
- (ctob/get-ordered-set-names))
+ (ctob/get-set-names))
undo (thf/apply-undo-changes redo changes)
undo-sets (-> (tht/get-tokens-lib undo)
- (ctob/get-ordered-set-names))]
+ (ctob/get-set-names))]
(t/is (= ["bar" "foo" "baz"] (vec redo-sets)))
(t/testing "undo"
- (t/is (= (ctob/get-ordered-set-names lib) undo-sets)))))
+ (t/is (= (ctob/get-set-names lib) undo-sets)))))
(t/testing "at bottom"
(let [file (setup-file #(-> %
@@ -380,13 +389,13 @@
:position :bot})
redo (thf/apply-changes file changes)
redo-sets (-> (tht/get-tokens-lib redo)
- (ctob/get-ordered-set-names))
+ (ctob/get-set-names))
undo (thf/apply-undo-changes redo changes)
undo-sets (-> (tht/get-tokens-lib undo)
- (ctob/get-ordered-set-names))]
+ (ctob/get-set-names))]
(t/is (= ["bar" "baz" "foo"] (vec redo-sets)))
(t/testing "undo"
- (t/is (= (ctob/get-ordered-set-names lib) undo-sets)))))
+ (t/is (= (ctob/get-set-names lib) undo-sets)))))
(t/testing "dropping out of set group"
(let [file (setup-file #(-> %
@@ -398,13 +407,13 @@
:position :top})
redo (thf/apply-changes file changes)
redo-sets (-> (tht/get-tokens-lib redo)
- (ctob/get-ordered-set-names))
+ (ctob/get-set-names))
undo (thf/apply-undo-changes redo changes)
undo-sets (-> (tht/get-tokens-lib undo)
- (ctob/get-ordered-set-names))]
+ (ctob/get-set-names))]
(t/is (= ["bar" "foo"] (vec redo-sets)))
(t/testing "undo"
- (t/is (= (ctob/get-ordered-set-names lib) undo-sets)))))
+ (t/is (= (ctob/get-set-names lib) undo-sets)))))
(t/testing "into set group"
(let [file (setup-file #(-> %
@@ -416,13 +425,13 @@
:position :bot})
redo (thf/apply-changes file changes)
redo-sets (-> (tht/get-tokens-lib redo)
- (ctob/get-ordered-set-names))
+ (ctob/get-set-names))
undo (thf/apply-undo-changes redo changes)
undo-sets (-> (tht/get-tokens-lib undo)
- (ctob/get-ordered-set-names))]
+ (ctob/get-set-names))]
(t/is (= ["foo/bar" "foo/foo"] (vec redo-sets)))
(t/testing "undo"
- (t/is (= (ctob/get-ordered-set-names lib) undo-sets)))))
+ (t/is (= (ctob/get-set-names lib) undo-sets)))))
(t/testing "edge-cases:"
(t/testing "prevent overriding set to identical path"
@@ -454,13 +463,13 @@
:collapsed-paths #{["foo"]}})
redo (thf/apply-changes file changes)
redo-sets (-> (tht/get-tokens-lib redo)
- (ctob/get-ordered-set-names))
+ (ctob/get-set-names))
undo (thf/apply-undo-changes redo changes)
undo-sets (-> (tht/get-tokens-lib undo)
- (ctob/get-ordered-set-names))]
+ (ctob/get-set-names))]
(t/is (= ["foo/bar" "foo"] (vec redo-sets)))
(t/testing "undo"
- (t/is (= (ctob/get-ordered-set-names lib) undo-sets))))))))
+ (t/is (= (ctob/get-set-names lib) undo-sets))))))))
(t/deftest generate-move-token-group-test
(t/testing "Ignore dropping set group to the same position"
@@ -496,14 +505,14 @@
:position :top})
redo (thf/apply-changes file changes)
redo-sets (-> (tht/get-tokens-lib redo)
- (ctob/get-ordered-set-names))
+ (ctob/get-set-names))
undo (thf/apply-undo-changes redo changes)
undo-sets (-> (tht/get-tokens-lib undo)
- (ctob/get-ordered-set-names))]
+ (ctob/get-set-names))]
(t/is (= ["bar/bar" "foo/foo" "baz/baz"] (vec redo-sets)))
(t/testing "undo"
- (t/is (= (ctob/get-ordered-set-names lib) undo-sets)))))
+ (t/is (= (ctob/get-set-names lib) undo-sets)))))
(t/testing "to bottom"
(let [file (setup-file #(-> %
@@ -515,14 +524,14 @@
:position :bot})
redo (thf/apply-changes file changes)
redo-sets (-> (tht/get-tokens-lib redo)
- (ctob/get-ordered-set-names))
+ (ctob/get-set-names))
undo (thf/apply-undo-changes redo changes)
undo-sets (-> (tht/get-tokens-lib undo)
- (ctob/get-ordered-set-names))]
+ (ctob/get-set-names))]
(t/is (= ["bar" "foo/foo"] (vec redo-sets)))
(t/testing "undo"
- (t/is (= (ctob/get-ordered-set-names lib) undo-sets)))))
+ (t/is (= (ctob/get-set-names lib) undo-sets)))))
(t/testing "into set group"
(let [file (setup-file #(-> %
@@ -534,13 +543,13 @@
:position :bot})
redo (thf/apply-changes file changes)
redo-sets (-> (tht/get-tokens-lib redo)
- (ctob/get-ordered-set-names))
+ (ctob/get-set-names))
undo (thf/apply-undo-changes redo changes)
undo-sets (-> (tht/get-tokens-lib undo)
- (ctob/get-ordered-set-names))]
+ (ctob/get-set-names))]
(t/is (= ["bar/foo/foo" "bar/bar"] (vec redo-sets)))
(t/testing "undo"
- (t/is (= (ctob/get-ordered-set-names lib) undo-sets))))
+ (t/is (= (ctob/get-set-names lib) undo-sets))))
(t/testing "edge-cases:"
(t/testing "prevent overriding set to identical path"
diff --git a/common/test/common_tests/logic/variants_switch_test.cljc b/common/test/common_tests/logic/variants_switch_test.cljc
index 62d09bcec4..99a072b540 100644
--- a/common/test/common_tests/logic/variants_switch_test.cljc
+++ b/common/test/common_tests/logic/variants_switch_test.cljc
@@ -45,7 +45,6 @@
;; The rect has width 15 after the switch
(t/is (= (:width rect02') 15))))
-
(t/deftest test-switch-with-override
(let [;; ==== Setup
file (-> (thf/sample-file :file1)
@@ -125,12 +124,10 @@
;; The rect has width 15 after the switch
(t/is (= (:width rect02') 15))))
-
(def font-size-path-paragraph [:content :children 0 :children 0 :font-size])
(def font-size-path-0 [:content :children 0 :children 0 :children 0 :font-size])
(def font-size-path-1 [:content :children 0 :children 0 :children 1 :font-size])
-
(def text-path-0 [:content :children 0 :children 0 :children 0 :text])
(def text-path-1 [:content :children 0 :children 0 :children 1 :text])
(def text-lines-path [:content :children 0 :children 0 :children])
@@ -188,6 +185,8 @@
;; The copy clean has no overrides
+
+
copy-clean (ths/get-shape file :copy-clean)
copy-clean-t (ths/get-shape file :copy-clean-t)
@@ -209,6 +208,8 @@
;; ==== Action: Switch all the copies
+
+
file' (-> file
(tho/swap-component copy-clean :c02 {:new-shape-label :copy-clean-2 :keep-touched? true})
(tho/swap-component copy-font-size :c02 {:new-shape-label :copy-font-size-2 :keep-touched? true})
@@ -234,6 +235,8 @@
;; Before the switch:
;; * font size 14
;; * text "hello world"
+
+
(t/is (= (get-in copy-clean-t font-size-path-0) "14"))
(t/is (= (get-in copy-clean-t text-path-0) "hello world"))
@@ -248,6 +251,8 @@
;; Before the switch:
;; * font size 25
;; * text "hello world"
+
+
(t/is (= (get-in copy-font-size-t font-size-path-0) "25"))
(t/is (= (get-in copy-font-size-t text-path-0) "hello world"))
@@ -306,6 +311,8 @@
;; The copy clean has no overrides
+
+
copy-clean (ths/get-shape file :copy-clean)
copy-clean-t (ths/get-shape file :copy-clean-t)
@@ -327,6 +334,8 @@
;; ==== Action: Switch all the copies
+
+
file' (-> file
(tho/swap-component copy-clean :c02 {:new-shape-label :copy-clean-2 :keep-touched? true})
(tho/swap-component copy-font-size :c02 {:new-shape-label :copy-font-size-2 :keep-touched? true})
@@ -352,6 +361,8 @@
;; Before the switch:
;; * font size 14
;; * text "hello world"
+
+
(t/is (= (get-in copy-clean-t font-size-path-0) "14"))
(t/is (= (get-in copy-clean-t text-path-0) "hello world"))
@@ -366,6 +377,8 @@
;; Before the switch:
;; * font size 25
;; * text "hello world"
+
+
(t/is (= (get-in copy-font-size-t font-size-path-0) "25"))
(t/is (= (get-in copy-font-size-t text-path-0) "hello world"))
@@ -401,7 +414,6 @@
(t/is (= (get-in copy-both-t' font-size-path-0) "50"))
(t/is (= (get-in copy-both-t' text-path-0) "text overriden"))))
-
(t/deftest test-switch-with-different-text-text-override
(let [;; ==== Setup
file (-> (thf/sample-file :file1)
@@ -423,6 +435,8 @@
;; The copy clean has no overrides
+
+
copy-clean (ths/get-shape file :copy-clean)
copy-clean-t (ths/get-shape file :copy-clean-t)
@@ -444,6 +458,8 @@
;; ==== Action: Switch all the copies
+
+
file' (-> file
(tho/swap-component copy-clean :c02 {:new-shape-label :copy-clean-2 :keep-touched? true})
(tho/swap-component copy-font-size :c02 {:new-shape-label :copy-font-size-2 :keep-touched? true})
@@ -469,6 +485,8 @@
;; Before the switch:
;; * font size 14
;; * text "hello world"
+
+
(t/is (= (get-in copy-clean-t font-size-path-0) "14"))
(t/is (= (get-in copy-clean-t text-path-0) "hello world"))
@@ -483,6 +501,8 @@
;; Before the switch:
;; * font size 25
;; * text "hello world"
+
+
(t/is (= (get-in copy-font-size-t font-size-path-0) "25"))
(t/is (= (get-in copy-font-size-t text-path-0) "hello world"))
@@ -518,7 +538,6 @@
(t/is (= (get-in copy-both-t' font-size-path-0) "25"))
(t/is (= (get-in copy-both-t' text-path-0) "bye"))))
-
(t/deftest test-switch-with-different-text-and-prop-text-override
(let [;; ==== Setup
file (-> (thf/sample-file :file1)
@@ -542,6 +561,8 @@
;; The copy clean has no overrides
+
+
copy-clean (ths/get-shape file :copy-clean)
copy-clean-t (ths/get-shape file :copy-clean-t)
@@ -563,6 +584,8 @@
;; ==== Action: Switch all the copies
+
+
file' (-> file
(tho/swap-component copy-clean :c02 {:new-shape-label :copy-clean-2 :keep-touched? true})
(tho/swap-component copy-font-size :c02 {:new-shape-label :copy-font-size-2 :keep-touched? true})
@@ -588,6 +611,8 @@
;; Before the switch:
;; * font size 14
;; * text "hello world"
+
+
(t/is (= (get-in copy-clean-t font-size-path-0) "14"))
(t/is (= (get-in copy-clean-t text-path-0) "hello world"))
@@ -602,6 +627,8 @@
;; Before the switch:
;; * font size 25
;; * text "hello world"
+
+
(t/is (= (get-in copy-font-size-t font-size-path-0) "25"))
(t/is (= (get-in copy-font-size-t text-path-0) "hello world"))
@@ -637,7 +664,6 @@
(t/is (= (get-in copy-both-t' font-size-path-0) "50"))
(t/is (= (get-in copy-both-t' text-path-0) "bye"))))
-
(t/deftest test-switch-with-identical-structure-text-override
(let [;; ==== Setup
file (-> (thf/sample-file :file1)
@@ -657,6 +683,8 @@
;; Duplicate a text line in copy-structure-clean
+
+
file (change-structure file :copy-structure-clean-t)
copy-structure-clean (ths/get-shape file :copy-structure-clean)
copy-structure-clean-t (ths/get-shape file :copy-structure-clean-t)
@@ -678,6 +706,8 @@
;; ==== Action: Switch all the copies
+
+
file' (-> file
(tho/swap-component copy-structure-clean :c02 {:new-shape-label :copy-structure-clean-2 :keep-touched? true})
(tho/swap-component copy-structure-unif :c02 {:new-shape-label :copy-structure-unif-2 :keep-touched? true})
@@ -763,7 +793,6 @@
(t/is (= (get-in copy-structure-mixed-t' font-size-path-1) "40"))
(t/is (= (get-in copy-structure-mixed-t' text-path-1) "new line 2"))))
-
(t/deftest test-switch-with-different-prop-structure-text-override
(let [;; ==== Setup
file (-> (thf/sample-file :file1)
@@ -784,6 +813,8 @@
;; Duplicate a text line in copy-structure-clean
+
+
file (change-structure file :copy-structure-clean-t)
copy-structure-clean (ths/get-shape file :copy-structure-clean)
copy-structure-clean-t (ths/get-shape file :copy-structure-clean-t)
@@ -805,6 +836,8 @@
;; ==== Action: Switch all the copies
+
+
file' (-> file
(tho/swap-component copy-structure-clean :c02 {:new-shape-label :copy-structure-clean-2 :keep-touched? true})
(tho/swap-component copy-structure-unif :c02 {:new-shape-label :copy-structure-unif-2 :keep-touched? true})
@@ -906,6 +939,8 @@
;; Duplicate a text line in copy-structure-clean
+
+
file (change-structure file :copy-structure-clean-t)
copy-structure-clean (ths/get-shape file :copy-structure-clean)
copy-structure-clean-t (ths/get-shape file :copy-structure-clean-t)
@@ -927,6 +962,8 @@
;; ==== Action: Switch all the copies
+
+
file' (-> file
(tho/swap-component copy-structure-clean :c02 {:new-shape-label :copy-structure-clean-2 :keep-touched? true})
(tho/swap-component copy-structure-unif :c02 {:new-shape-label :copy-structure-unif-2 :keep-touched? true})
@@ -971,6 +1008,8 @@
;; Second line:
;; * font size 25
;; * text "new line 2"
+
+
(t/is (= (get-in copy-structure-unif-t font-size-path-0) "25"))
(t/is (= (get-in copy-structure-unif-t text-path-0) "new line 1"))
(t/is (= (get-in copy-structure-unif-t font-size-path-1) "25"))
@@ -992,6 +1031,8 @@
;; Before the switch, second line:
;; * font size 40
;; * text "new line 2"
+
+
(t/is (= (get-in copy-structure-mixed-t font-size-path-0) "35"))
(t/is (= (get-in copy-structure-mixed-t text-path-0) "new line 1"))
(t/is (= (get-in copy-structure-mixed-t font-size-path-1) "40"))
@@ -1025,6 +1066,8 @@
;; Duplicate a text line in copy-structure-clean
+
+
file (change-structure file :copy-structure-clean-t)
copy-structure-clean (ths/get-shape file :copy-structure-clean)
copy-structure-clean-t (ths/get-shape file :copy-structure-clean-t)
@@ -1046,6 +1089,8 @@
;; ==== Action: Switch all the copies
+
+
file' (-> file
(tho/swap-component copy-structure-clean :c02 {:new-shape-label :copy-structure-clean-2 :keep-touched? true})
(tho/swap-component copy-structure-unif :c02 {:new-shape-label :copy-structure-unif-2 :keep-touched? true})
@@ -1090,6 +1135,8 @@
;; Second line:
;; * font size 25
;; * text "new line 2"
+
+
(t/is (= (get-in copy-structure-unif-t font-size-path-0) "25"))
(t/is (= (get-in copy-structure-unif-t text-path-0) "new line 1"))
(t/is (= (get-in copy-structure-unif-t font-size-path-1) "25"))
@@ -1111,6 +1158,8 @@
;; Before the switch, second line:
;; * font size 40
;; * text "new line 2"
+
+
(t/is (= (get-in copy-structure-mixed-t font-size-path-0) "35"))
(t/is (= (get-in copy-structure-mixed-t text-path-0) "new line 1"))
(t/is (= (get-in copy-structure-mixed-t font-size-path-1) "40"))
@@ -1124,7 +1173,6 @@
(t/is (= (get-in copy-structure-mixed-t' text-path-0) "bye"))
(t/is (nil? (get-in copy-structure-mixed-t' font-size-path-1)))))
-
(t/deftest test-switch-variant-for-other-with-same-nested-component
(let [;; ==== Setup
file (-> (thf/sample-file :file1)
@@ -1144,6 +1192,8 @@
;; On :copy-cp01, change the width of the rect
+
+
changes (cls/generate-update-shapes (pcb/empty-changes nil (:id page))
#{copy-cp01-rect-id}
(fn [shape]
@@ -1166,8 +1216,6 @@
;; The width of copy-cp02-rect' is 25 (change is preserved)
(t/is (= (:width copy-cp02-rect') 25))))
-
-
(t/deftest test-switch-variant-that-has-swaped-copy
(let [;; ==== Setup
file (-> (thf/sample-file :file1)
@@ -1193,7 +1241,6 @@
;; Switch :c01 for :c02
file' (tho/swap-component file copy01 :c02 {:new-shape-label :copy02 :keep-touched? true})
-
copy02' (ths/get-shape file' :copy02)
copy-cp02' (ths/get-shape file' :copy-cp02)]
(thf/dump-file file')
@@ -1207,7 +1254,6 @@
;;copy-02' had copy-cp02' as child
(t/is (= (-> copy02' :shapes first) (:id copy-cp02')))))
-
(t/deftest test-switch-variant-that-has-swaped-copy-with-changed-attr
(let [;; ==== Setup
file (-> (thf/sample-file :file1)
@@ -1244,7 +1290,6 @@
;; Switch :c01 for :c02
file' (tho/swap-component file copy01 :c02 {:new-shape-label :copy02 :keep-touched? true})
-
copy02' (ths/get-shape file' :copy02)
copy-cp02' (ths/get-shape file' :copy-cp02)
copy-cp02-rect' (ths/get-shape-by-id file' (-> copy-cp02' :shapes first))]
@@ -1262,3 +1307,58 @@
(t/is (= (-> copy02' :shapes first) (:id copy-cp02')))
;; The width of copy-cp02-rect' is 25 (change is preserved)
(t/is (= (:width copy-cp02-rect') 25))))
+
+(t/deftest test-switch-variant-without-touched-but-touched-parent
+ (let [;; ==== Setup
+ file (-> (thf/sample-file :file1)
+ (thv/add-variant-with-child
+ :v01 :c01 :m01 :c02 :m02 :r01 :r02
+ {:child1-params {:width 5}
+ :child2-params {:width 5}})
+ (tho/add-simple-component :external01 :external01-root :external01-child)
+
+ (thc/instantiate-component :c01
+ :c01-in-root
+ :children-labels [:r01-in-c01-in-root]
+ :parent-label :external01-root))
+
+ ;; Make a change on r01-in-c01-in-root so it is touched
+ page (thf/current-page file)
+ r01-in-c01-in-root (ths/get-shape file :r01-in-c01-in-root)
+
+ changes (cls/generate-update-shapes (pcb/empty-changes nil (:id page))
+ #{(:id r01-in-c01-in-root)}
+ (fn [shape]
+ (assoc shape :width 25))
+ (:objects page)
+ {})
+
+ file (thf/apply-changes file changes)
+
+
+ ;; Instantiate the component :external01
+
+
+ file (thc/instantiate-component file
+ :external01
+ :external-copy01
+ :children-labels [:external-copy01-rect :c01-in-copy])
+ page (thf/current-page file)
+ c01-in-copy (ths/get-shape file :c01-in-copy)
+ rect01 (get-in page [:objects (-> c01-in-copy :shapes first)])
+
+
+ ;; ==== Action
+
+
+ file' (tho/swap-component file c01-in-copy :c02 {:new-shape-label :c02-in-copy :keep-touched? true})
+
+ page' (thf/current-page file')
+ c02-in-copy' (ths/get-shape file' :c02-in-copy)
+ rect02' (get-in page' [:objects (-> c02-in-copy' :shapes first)])]
+
+ (thf/dump-file file :keys [:width :touched])
+ ;; The rect had width 25 before the switch
+ (t/is (= (:width rect01) 25))
+ ;; The rect still has width 25 after the switch
+ (t/is (= (:width rect02') 25))))
diff --git a/common/test/common_tests/pages_helpers_test.cljc b/common/test/common_tests/pages_helpers_test.cljc
deleted file mode 100644
index a15f677bbc..0000000000
--- a/common/test/common_tests/pages_helpers_test.cljc
+++ /dev/null
@@ -1,19 +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 common-tests.pages-helpers-test
- (:require
- [app.common.files.helpers :as cfh]
- [clojure.pprint :refer [pprint]]
- [clojure.test :as t]))
-
-(t/deftest parse-path-name
- (t/is (= ["foo" "bar"] (cfh/parse-path-name "foo/bar")))
- (t/is (= ["" "foo"] (cfh/parse-path-name "foo")))
- (t/is (= ["" "foo"] (cfh/parse-path-name "/foo")))
- (t/is (= ["" ""] (cfh/parse-path-name "")))
- (t/is (= ["" ""] (cfh/parse-path-name nil))))
-
diff --git a/common/test/common_tests/path_names_test.cljc b/common/test/common_tests/path_names_test.cljc
new file mode 100644
index 0000000000..e52806f21b
--- /dev/null
+++ b/common/test/common_tests/path_names_test.cljc
@@ -0,0 +1,33 @@
+;; 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 common-tests.path-names-test
+ (:require
+ [app.common.path-names :as cpn]
+ [clojure.test :as t]))
+
+(t/deftest split-group-name
+ (t/is (= ["foo" "bar"] (cpn/split-group-name "foo/bar")))
+ (t/is (= ["" "foo"] (cpn/split-group-name "foo")))
+ (t/is (= ["" "foo"] (cpn/split-group-name "/foo")))
+ (t/is (= ["" ""] (cpn/split-group-name "")))
+ (t/is (= ["" ""] (cpn/split-group-name nil))))
+
+(t/deftest split-and-join-path
+ (let [name "group/subgroup/name"
+ path (cpn/split-path name :separator "/")
+ name' (cpn/join-path path :separator "/" :with-spaces? false)]
+ (t/is (= (first path) "group"))
+ (t/is (= (second path) "subgroup"))
+ (t/is (= (nth path 2) "name"))
+ (t/is (= name' name))))
+
+(t/deftest split-and-join-path-with-spaces
+ (let [name "group / subgroup / name"
+ path (cpn/split-path name :separator "/")]
+ (t/is (= (first path) "group"))
+ (t/is (= (second path) "subgroup"))
+ (t/is (= (nth path 2) "name"))))
diff --git a/common/test/common_tests/runner.cljc b/common/test/common_tests/runner.cljc
index a657e096f0..1b469eb1d4 100644
--- a/common/test/common_tests/runner.cljc
+++ b/common/test/common_tests/runner.cljc
@@ -30,7 +30,7 @@
[common-tests.logic.swap-as-override-test]
[common-tests.logic.token-test]
[common-tests.media-test]
- [common-tests.pages-helpers-test]
+ [common-tests.path-names-test]
[common-tests.record-test]
[common-tests.schema-test]
[common-tests.svg-path-test]
@@ -82,7 +82,7 @@
'common-tests.logic.swap-as-override-test
'common-tests.logic.token-test
'common-tests.media-test
- 'common-tests.pages-helpers-test
+ 'common-tests.path-names-test
'common-tests.record-test
'common-tests.schema-test
'common-tests.svg-path-test
diff --git a/common/test/common_tests/types/data/tokens-font-family-example.json b/common/test/common_tests/types/data/tokens-font-family-example.json
new file mode 100644
index 0000000000..b4d23dec2c
--- /dev/null
+++ b/common/test/common_tests/types/data/tokens-font-family-example.json
@@ -0,0 +1,26 @@
+{
+ "fonts": {
+ "string-font-family": {
+ "$value": "Arial, Helvetica, sans-serif",
+ "$type": "fontFamilies",
+ "$description": "A font family defined as a string"
+ },
+ "array-font-family": {
+ "$value": ["Inter", "system-ui", "sans-serif"],
+ "$type": "fontFamilies",
+ "$description": "A font family defined as an array"
+ },
+ "single-font-family": {
+ "$value": "Georgia",
+ "$type": "fontFamilies"
+ },
+ "complex-font-family": {
+ "$value": "Times New Roman, serif",
+ "$type": "fontFamilies"
+ },
+ "font-with-spaces": {
+ "$value": "Source Sans Pro, Arial, sans-serif",
+ "$type": "fontFamilies"
+ }
+ }
+}
\ No newline at end of file
diff --git a/common/test/common_tests/types/data/tokens-typography-example.json b/common/test/common_tests/types/data/tokens-typography-example.json
new file mode 100644
index 0000000000..94a48ecb80
--- /dev/null
+++ b/common/test/common_tests/types/data/tokens-typography-example.json
@@ -0,0 +1,53 @@
+{
+ "test": {
+ "typo": {
+ "$value": {
+ "fontWeight": "100",
+ "fontSize": "16px",
+ "letterSpacing": "0.1em"
+ },
+ "$type": "typography"
+ },
+ "typo2": {
+ "$value": "{typo}",
+ "$type": "typography"
+ },
+ "font-weight": {
+ "$value": "200",
+ "$type": "fontWeights"
+ },
+ "typo-to-single": {
+ "$value": "{font-weight}",
+ "$type": "typography"
+ },
+ "test-empty": {
+ "$value": {},
+ "$type": "typography"
+ },
+ "font-size": {
+ "$value": "18px",
+ "$type": "fontSizes"
+ },
+ "typo-complex": {
+ "$value": {
+ "fontWeight": "bold",
+ "fontSize": "24px",
+ "letterSpacing": "0.05em",
+ "lineHeights": "100%",
+ "fontFamilies": ["Arial", "sans-serif"],
+ "textCase": "uppercase"
+ },
+ "$type": "typography",
+ "$description": "A complex typography token"
+ },
+ "typo-with-string-font-family": {
+ "$value": {
+ "fontWeight": "600",
+ "fontSize": "20px",
+ "fontFamilies": "Roboto, Helvetica, sans-serif"
+ },
+ "$type": "typography",
+ "$description": "Typography token with string font family"
+ }
+ }
+}
\ No newline at end of file
diff --git a/common/test/common_tests/types/tokens_lib_test.cljc b/common/test/common_tests/types/tokens_lib_test.cljc
index cd7fab3a65..f036c821df 100644
--- a/common/test/common_tests/types/tokens_lib_test.cljc
+++ b/common/test/common_tests/types/tokens_lib_test.cljc
@@ -11,9 +11,11 @@
#?(:clj [app.common.test-helpers.tokens :as tht])
#?(:clj [clojure.datafy :refer [datafy]])
[app.common.data :as d]
+ [app.common.path-names :as cpn]
[app.common.test-helpers.ids-map :as thi]
[app.common.time :as ct]
[app.common.transit :as tr]
+ [app.common.types.token :as cto]
[app.common.types.tokens-lib :as ctob]
[app.common.uuid :as uuid]
[clojure.test :as t]))
@@ -62,13 +64,13 @@
(t/deftest find-token-value-references
(t/testing "finds references inside curly braces in a string"
- (t/is (= #{"foo" "bar"} (ctob/find-token-value-references "{foo} + {bar}")))
+ (t/is (= #{"foo" "bar"} (cto/find-token-value-references "{foo} + {bar}")))
(t/testing "ignores extra text"
- (t/is (= #{"foo.bar.baz"} (ctob/find-token-value-references "{foo.bar.baz} + something")))))
+ (t/is (= #{"foo.bar.baz"} (cto/find-token-value-references "{foo.bar.baz} + something")))))
(t/testing "ignores string without references"
- (t/is (nil? (ctob/find-token-value-references "1 + 2"))))
+ (t/is (nil? (cto/find-token-value-references "1 + 2"))))
(t/testing "handles edge-case for extra curly braces"
- (t/is (= #{"foo" "bar"} (ctob/find-token-value-references "{foo}} + {bar}")))))
+ (t/is (= #{"foo" "bar"} (cto/find-token-value-references "{foo}} + {bar}")))))
(t/deftest make-token-set
(let [now (ct/now)
@@ -81,11 +83,11 @@
(t/is (= (ctob/get-name token-set1) "test-token-set-1"))
(t/is (= (ctob/get-description token-set1) ""))
(t/is (some? (ctob/get-modified-at token-set1)))
- (t/is (empty? (ctob/get-tokens-map token-set1)))
+ (t/is (empty? (ctob/get-tokens- token-set1)))
(t/is (= (ctob/get-name token-set2) "test-token-set-2"))
(t/is (= (ctob/get-description token-set2) "test description"))
(t/is (= (ctob/get-modified-at token-set2) now))
- (t/is (empty? (ctob/get-tokens-map token-set2)))))
+ (t/is (empty? (ctob/get-tokens- token-set2)))))
(t/deftest make-invalid-token-set
(let [params {:name 777 :description 999}]
@@ -99,7 +101,7 @@
(ctob/add-set (ctob/make-token-set :name "Move")))
move (fn [from-path to-path before-path before-group?]
(->> (ctob/move-set tokens-lib from-path to-path before-path before-group?)
- (ctob/get-ordered-set-names)
+ (ctob/get-set-names)
(into [])))]
(t/testing "move to top"
(t/is (= ["Move" "A" "B"] (move ["Move"] ["Move"] ["A"] false))))
@@ -117,10 +119,11 @@
(ctob/add-set (ctob/make-token-set :name "Foo")))
move (fn [from-path to-path before-path before-group?]
(->> (ctob/move-set tokens-lib from-path to-path before-path before-group?)
- (ctob/get-ordered-set-names)
+ (ctob/get-set-names)
(into [])))]
(t/testing "move outside of group"
(t/is (= ["Foo/Baz" "Bar" "Foo"] (move ["Foo" "Bar"] ["Bar"] ["Foo"] false)))
+ (t/is (= ["Bar" "Foo/Baz" "Foo"] (move ["Foo" "Bar"] ["Bar"] ["Foo"] true)))
(t/is (= ["Bar" "Foo/Baz" "Foo"] (move ["Foo" "Bar"] ["Bar"] ["Foo" "Baz"] true)))
(t/is (= ["Foo/Baz" "Foo" "Bar"] (move ["Foo" "Bar"] ["Bar"] nil false))))
@@ -136,20 +139,22 @@
(ctob/add-set (ctob/make-token-set :name "b/b")))
move (fn [from-path to-path before-path before-group?]
(->> (ctob/move-set tokens-lib from-path to-path before-path before-group?)
- (ctob/get-ordered-set-names)
+ (ctob/get-set-names)
(vec)))]
(t/testing "move within group"
- (t/is (= ["a/b" "a/a" "b/a" "b/b"] (vec (ctob/get-ordered-set-names tokens-lib))))
+ (t/is (= ["a/b" "a/a" "b/a" "b/b"] (vec (ctob/get-set-names tokens-lib))))
(t/is (= ["a/a" "a/b" "b/a" "b/b"] (move ["a" "b"] ["a" "b"] nil true))))))
(t/deftest move-token-set-nested-3
- (let [tokens-lib (-> (ctob/make-tokens-lib)
+ (let [theme-id (uuid/next)
+ tokens-lib (-> (ctob/make-tokens-lib)
(ctob/add-set (ctob/make-token-set :name "Foo/Bar/Baz"))
(ctob/add-set (ctob/make-token-set :name "Other"))
- (ctob/add-theme (ctob/make-token-theme :name "Theme"
+ (ctob/add-theme (ctob/make-token-theme :id theme-id
+ :name "Theme"
:sets #{"Foo/Bar/Baz"}))
(ctob/move-set ["Foo" "Bar" "Baz"] ["Other/Baz"] nil nil))]
- (t/is (= #{"Other/Baz"} (:sets (ctob/get-theme tokens-lib "" "Theme"))))))
+ (t/is (= #{"Other/Baz"} (:sets (ctob/get-theme tokens-lib theme-id))))))
(t/deftest move-token-set-group
(t/testing "reordering"
@@ -161,24 +166,27 @@
:sets #{"Foo/A" "Bar/Foo"})))
move (fn [from-path to-path before-path before-group?]
(->> (ctob/move-set-group tokens-lib from-path to-path before-path before-group?)
- (ctob/get-ordered-set-names)
+ (ctob/get-set-names)
(into [])))]
(t/is (= ["Bar/Foo" "Bar/Foo/A" "Bar/Foo/B"] (move ["Foo"] ["Bar" "Foo"] nil nil)))
(t/is (= ["Bar/Foo" "Foo/A" "Foo/B"] (move ["Bar"] ["Bar"] ["Foo"] true)))))
(t/testing "updates theme set names"
- (let [tokens-lib (-> (ctob/make-tokens-lib)
+ (let [theme-id (uuid/next)
+ tokens-lib (-> (ctob/make-tokens-lib)
(ctob/add-set (ctob/make-token-set :name "Foo/A"))
(ctob/add-set (ctob/make-token-set :name "Foo/B"))
(ctob/add-set (ctob/make-token-set :name "Bar/Foo"))
- (ctob/add-theme (ctob/make-token-theme :name "Theme"
+ (ctob/add-theme (ctob/make-token-theme :id theme-id
+ :name "Theme"
:sets #{"Foo/A" "Bar/Foo"}))
(ctob/move-set-group ["Foo"] ["Bar" "Foo"] nil nil))]
- (t/is (= #{"Bar/Foo/A" "Bar/Foo"} (:sets (ctob/get-theme tokens-lib "" "Theme")))))))
+ (t/is (= #{"Bar/Foo/A" "Bar/Foo"} (:sets (ctob/get-theme tokens-lib theme-id)))))))
(t/deftest tokens-tree
(let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "A"
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :test-token-set)
+ :name "A"
:tokens {"foo.bar.baz" (ctob/make-token :name "foo.bar.baz"
:type :boolean
:value true)
@@ -188,8 +196,8 @@
"baz.boo" (ctob/make-token :name "baz.boo"
:type :boolean
:value true)})))
- expected (-> (ctob/get-set tokens-lib "A")
- (ctob/get-tokens-map)
+ expected (-> tokens-lib
+ (ctob/get-tokens (thi/id :test-token-set))
(ctob/tokens-tree))]
(t/is (= (get-in expected ["foo" "bar" "baz" :name]) "foo.bar.baz"))
(t/is (= (get-in expected ["foo" "bar" "bam" :name]) "foo.bar.bam"))
@@ -233,16 +241,17 @@
(t/deftest make-invalid-tokens-lib
(let [params {:sets {} :themes {}}]
- (t/is (thrown-with-msg? #?(:cljs js/Error :clj Exception) #"expected valid token sets"
+ (t/is (thrown-with-msg? #?(:cljs js/Error :clj Exception) #"invalid tokens-lib internal data structure"
(ctob/make-tokens-lib params)))))
(t/deftest add-token-set-to-token-lib
(let [tokens-lib (ctob/make-tokens-lib)
- token-set (ctob/make-token-set :name "test-token-set")
+ token-set (ctob/make-token-set :id (thi/new-id! :test-token-set)
+ :name "test-token-set")
tokens-lib' (ctob/add-set tokens-lib token-set)
token-sets' (ctob/get-sets tokens-lib')
- token-set' (ctob/get-set tokens-lib' "test-token-set")]
+ token-set' (ctob/get-set tokens-lib' (thi/id :test-token-set))]
(t/is (= (ctob/set-count tokens-lib') 1))
(t/is (= (first token-sets') token-set))
@@ -250,18 +259,19 @@
(t/deftest update-token-set
(let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "test-token-set")))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :test-token-set)
+ :name "test-token-set")))
tokens-lib' (-> tokens-lib
- (ctob/update-set "test-token-set"
+ (ctob/update-set (thi/id :test-token-set)
(fn [token-set]
(ctob/set-description token-set "some description")))
- (ctob/update-set "not-existing-set"
+ (ctob/update-set (uuid/next)
(fn [token-set]
(ctob/set-description token-set "no-effect"))))
- token-set (ctob/get-set tokens-lib "test-token-set")
- token-set' (ctob/get-set tokens-lib' "test-token-set")]
+ token-set (ctob/get-set tokens-lib (thi/id :test-token-set))
+ token-set' (ctob/get-set tokens-lib' (thi/id :test-token-set))]
(t/is (= (ctob/set-count tokens-lib') 1))
(t/is (= (ctob/get-name token-set') "test-token-set"))
@@ -270,31 +280,33 @@
(t/deftest rename-token-set
(let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "test-token-set")))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :test-token-set)
+ :name "test-token-set")))
tokens-lib' (-> tokens-lib
- (ctob/update-set "test-token-set"
+ (ctob/update-set (thi/id :test-token-set)
(fn [token-set]
(ctob/rename token-set "updated-name"))))
- token-set (ctob/get-set tokens-lib "test-token-set")
- token-set' (ctob/get-set tokens-lib' "updated-name")]
+ token-set (ctob/get-set tokens-lib (thi/id :test-token-set))
+ token-set' (ctob/get-set tokens-lib' (thi/id :test-token-set))]
(t/is (= (ctob/set-count tokens-lib') 1))
(t/is (= (ctob/get-name token-set') "updated-name"))
(t/is (ct/is-after? (ctob/get-modified-at token-set') (ctob/get-modified-at token-set)))))
(t/deftest rename-token-set-group
- (let [tokens-lib (-> (ctob/make-tokens-lib)
+ (let [theme-id (uuid/next)
+ tokens-lib (-> (ctob/make-tokens-lib)
(ctob/add-set (ctob/make-token-set :name "foo/bar/baz"))
(ctob/add-set (ctob/make-token-set :name "foo/bar/baz/baz-child-1"))
(ctob/add-set (ctob/make-token-set :name "foo/bar/baz/baz-child-2"))
- (ctob/add-theme (ctob/make-token-theme :name "theme" :sets #{"foo/bar/baz/baz-child-1"})))
+ (ctob/add-theme (ctob/make-token-theme :id theme-id :name "theme" :sets #{"foo/bar/baz/baz-child-1"})))
tokens-lib' (-> tokens-lib
(ctob/rename-set-group ["foo" "bar"] "bar-renamed")
(ctob/rename-set-group ["foo" "bar-renamed" "baz"] "baz-renamed"))
- expected-set-names (ctob/get-ordered-set-names tokens-lib')
- expected-theme-sets (-> (ctob/get-theme tokens-lib' "" "theme")
+ expected-set-names (ctob/get-set-names tokens-lib')
+ expected-theme-sets (-> (ctob/get-theme tokens-lib' theme-id)
:sets)]
(t/is (= expected-set-names
'("foo/bar-renamed/baz"
@@ -302,146 +314,130 @@
"foo/bar-renamed/baz-renamed/baz-child-2")))
(t/is (= expected-theme-sets #{"foo/bar-renamed/baz-renamed/baz-child-1"}))))
-(t/deftest delete-token-set
- (let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "test-token-set"))
- (ctob/add-theme (ctob/make-token-theme :name "test-token-theme" :sets #{"test-token-set"})))
-
- tokens-lib' (-> tokens-lib
- (ctob/delete-set-path "S-test-token-set")
- (ctob/delete-set-path "S-not-existing-set"))
-
- token-set' (ctob/get-set tokens-lib' "updated-name")
- token-theme' (ctob/get-theme tokens-lib' "" "test-token-theme")]
-
- (t/is (= (ctob/set-count tokens-lib') 0))
- (t/is (= (:sets token-theme') #{}))
- (t/is (nil? token-set'))))
-
(t/deftest duplicate-token-set
(let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "test-token-set"
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :test-token-set)
+ :name "test-token-set"
:tokens {"test-token"
(ctob/make-token :id (thi/new-id! :test-token)
:name "test-token"
:type :boolean
:value true)})))
- token-set-copy (ctob/duplicate-set "test-token-set" tokens-lib {:suffix "copy"})
- token (ctob/get-token token-set-copy (thi/id :test-token))]
+ token-set-copy (ctob/duplicate-set (thi/id :test-token-set) tokens-lib {:suffix "copy"})
+ token (ctob/get-token- token-set-copy (thi/id :test-token))]
(t/is (some? token-set-copy))
(t/is (= (ctob/get-name token-set-copy) "test-token-set-copy"))
- (t/is (= (count (ctob/get-tokens-map token-set-copy)) 1))
+ (t/is (= (count (ctob/get-tokens- token-set-copy)) 1))
(t/is (= (:name token) "test-token"))))
(t/deftest duplicate-token-set-twice
(let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "test-token-set"
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :test-token-set)
+ :name "test-token-set"
:tokens {"test-token"
(ctob/make-token :id (thi/new-id! :test-token)
:name "test-token"
:type :boolean
:value true)})))
- tokens-lib (ctob/add-set tokens-lib (ctob/duplicate-set "test-token-set" tokens-lib {:suffix "copy"}))
+ tokens-lib (ctob/add-set tokens-lib (ctob/duplicate-set (thi/id :test-token-set) tokens-lib {:suffix "copy"}))
- token-set-copy (ctob/duplicate-set "test-token-set" tokens-lib {:suffix "copy"})
- token (ctob/get-token token-set-copy (thi/id :test-token))]
+ token-set-copy (ctob/duplicate-set (thi/id :test-token-set) tokens-lib {:suffix "copy"})
+ token (ctob/get-token- token-set-copy (thi/id :test-token))]
(t/is (some? token-set-copy))
(t/is (= (ctob/get-name token-set-copy) "test-token-set-copy-2"))
- (t/is (= (count (ctob/get-tokens-map token-set-copy)) 1))
+ (t/is (= (count (ctob/get-tokens- token-set-copy)) 1))
(t/is (= (:name token) "test-token"))))
(t/deftest duplicate-empty-token-set
(let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "test-token-set")))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :test-token-set)
+ :name "test-token-set")))
- token-set-copy (ctob/duplicate-set "test-token-set" tokens-lib {:suffix "copy"})
- tokens (ctob/get-tokens-map token-set-copy)]
+ token-set-copy (ctob/duplicate-set (thi/id :test-token-set) tokens-lib {:suffix "copy"})
+ tokens (ctob/get-tokens- token-set-copy)]
(t/is (some? token-set-copy))
(t/is (= (ctob/get-name token-set-copy) "test-token-set-copy"))
- (t/is (= (count (ctob/get-tokens-map token-set-copy)) 0))
+ (t/is (= (count (ctob/get-tokens- token-set-copy)) 0))
(t/is (= (count tokens) 0))))
(t/deftest duplicate-not-existing-token-set
(let [tokens-lib (ctob/make-tokens-lib)
- token-set-copy (ctob/duplicate-set "test-token-set" tokens-lib {:suffix "copy"})]
+ token-set-copy (ctob/duplicate-set (uuid/next) tokens-lib {:suffix "copy"})]
(t/is (nil? token-set-copy))))
-(t/deftest active-themes-set-names
- (let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "test-token-set")))
-
- tokens-lib' (-> tokens-lib
- (ctob/delete-set-path "S-test-token-set")
- (ctob/delete-set-path "S-not-existing-set"))
-
- token-set' (ctob/get-set tokens-lib' "updated-name")]
-
- (t/is (= (ctob/set-count tokens-lib') 0))
- (t/is (nil? token-set'))))
-
(t/deftest add-token
(let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "test-token-set")))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :test-token-set)
+ :name "test-token-set")))
token (ctob/make-token :id (thi/new-id! :token)
:name "test-token"
:type :boolean
:value true)
tokens-lib' (-> tokens-lib
- (ctob/add-token-in-set "test-token-set" token)
- (ctob/add-token-in-set "not-existing-set" token))
+ (ctob/add-token (thi/id :test-token-set) token)
+ (ctob/add-token (uuid/next) token))
- token-set (ctob/get-set tokens-lib "test-token-set")
- token-set' (ctob/get-set tokens-lib' "test-token-set")
- token' (ctob/get-token token-set' (thi/id :token))]
+ token-set (ctob/get-set tokens-lib (thi/id :test-token-set))
+ token-set' (ctob/get-set tokens-lib' (thi/id :test-token-set))
+ token' (ctob/get-token tokens-lib'
+ (thi/id :test-token-set)
+ (thi/id :token))]
(t/is (= (ctob/set-count tokens-lib') 1))
- (t/is (= (count (ctob/get-tokens-map token-set')) 1))
+ (t/is (= (count (ctob/get-tokens tokens-lib' (thi/id :test-token-set))) 1))
(t/is (= (:name token') "test-token"))
(t/is (ct/is-after? (ctob/get-modified-at token-set') (ctob/get-modified-at token-set)))))
(t/deftest update-token
(let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "test-token-set"))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :test-token-1)
- :name "test-token-1"
- :type :boolean
- :value true))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :test-token-2)
- :name "test-token-2"
- :type :boolean
- :value true)))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :test-token-set)
+ :name "test-token-set"))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :test-token-1)
+ :name "test-token-1"
+ :type :boolean
+ :value true))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :test-token-2)
+ :name "test-token-2"
+ :type :boolean
+ :value true)))
tokens-lib' (-> tokens-lib
- (ctob/update-token-in-set "test-token-set" (thi/id :test-token-1)
- (fn [token]
- (assoc token
- :description "some description"
- :value false)))
- (ctob/update-token-in-set "not-existing-set" (thi/id :test-token-1)
- (fn [token]
- (assoc token
- :name "no-effect")))
- (ctob/update-token-in-set "test-token-set" (uuid/next)
- (fn [token]
- (assoc token
- :name "no-effect"))))
+ (ctob/update-token (thi/id :test-token-set) (thi/id :test-token-1)
+ (fn [token]
+ (assoc token
+ :description "some description"
+ :value false)))
+ (ctob/update-token (uuid/next) (thi/id :test-token-1)
+ (fn [token]
+ (assoc token
+ :name "no-effect")))
+ (ctob/update-token (thi/id :test-token-set) (uuid/next)
+ (fn [token]
+ (assoc token
+ :name "no-effect"))))
- token-set (ctob/get-set tokens-lib "test-token-set")
- token-set' (ctob/get-set tokens-lib' "test-token-set")
- token (ctob/get-token token-set (thi/id :test-token-1))
- token' (ctob/get-token token-set' (thi/id :test-token-1))]
+ token-set (ctob/get-set tokens-lib (thi/id :test-token-set))
+ token-set' (ctob/get-set tokens-lib' (thi/id :test-token-set))
+ token (ctob/get-token tokens-lib
+ (thi/id :test-token-set)
+ (thi/id :test-token-1))
+ token' (ctob/get-token tokens-lib'
+ (thi/id :test-token-set)
+ (thi/id :test-token-1))
+ tokens' (ctob/get-tokens tokens-lib'
+ (thi/id :test-token-set))]
(t/is (= (ctob/set-count tokens-lib') 1))
- (t/is (= (count (ctob/get-tokens-map token-set')) 2))
- (t/is (= (d/index-of (keys (ctob/get-tokens-map token-set')) "test-token-1") 0))
+ (t/is (= (count tokens') 2))
+ (t/is (= (d/index-of (keys tokens') "test-token-1") 0))
(t/is (= (:name token') "test-token-1"))
(t/is (= (:description token') "some description"))
(t/is (= (:value token') false))
@@ -450,32 +446,39 @@
(t/deftest rename-token
(let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "test-token-set"))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :test-token-1)
- :name "test-token-1"
- :type :boolean
- :value true))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :test-token-2)
- :name "test-token-2"
- :type :boolean
- :value true)))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :test-token-set)
+ :name "test-token-set"))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :test-token-1)
+ :name "test-token-1"
+ :type :boolean
+ :value true))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :test-token-2)
+ :name "test-token-2"
+ :type :boolean
+ :value true)))
tokens-lib' (-> tokens-lib
- (ctob/update-token-in-set "test-token-set" (thi/id :test-token-1)
- (fn [token]
- (assoc token
- :name "updated-name"))))
+ (ctob/update-token (thi/id :test-token-set) (thi/id :test-token-1)
+ (fn [token]
+ (assoc token
+ :name "updated-name"))))
- token-set (ctob/get-set tokens-lib "test-token-set")
- token-set' (ctob/get-set tokens-lib' "test-token-set")
- token (ctob/get-token token-set (thi/id :test-token-1))
- token' (ctob/get-token token-set' (thi/id :test-token-1))]
+ token-set (ctob/get-set tokens-lib (thi/id :test-token-set))
+ token-set' (ctob/get-set tokens-lib' (thi/id :test-token-set))
+ token (ctob/get-token tokens-lib
+ (thi/id :test-token-set)
+ (thi/id :test-token-1))
+ token' (ctob/get-token tokens-lib'
+ (thi/id :test-token-set)
+ (thi/id :test-token-1))
+ tokens' (ctob/get-tokens tokens-lib'
+ (thi/id :test-token-set))]
(t/is (= (ctob/set-count tokens-lib') 1))
- (t/is (= (count (ctob/get-tokens-map token-set')) 2))
- (t/is (= (d/index-of (keys (ctob/get-tokens-map token-set')) "updated-name") 0))
+ (t/is (= (count tokens') 2))
+ (t/is (= (d/index-of (keys tokens') "updated-name") 0))
(t/is (= (:name token') "updated-name"))
(t/is (= (:description token') ""))
(t/is (= (:value token') true))
@@ -484,23 +487,28 @@
(t/deftest delete-token
(let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "test-token-set"))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :test-token)
- :name "test-token"
- :type :boolean
- :value true)))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :test-token-set)
+ :name "test-token-set"))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :test-token)
+ :name "test-token"
+ :type :boolean
+ :value true)))
tokens-lib' (-> tokens-lib
- (ctob/delete-token-from-set "test-token-set" (thi/id :test-token))
- (ctob/delete-token-from-set "not-existing-set" (thi/id :test-token))
- (ctob/delete-token-from-set "test-set" (uuid/next)))
+ (ctob/delete-token (thi/id :test-token-set) (thi/id :test-token))
+ (ctob/delete-token (uuid/next) (thi/id :test-token))
+ (ctob/delete-token (thi/id :test-token-set) (uuid/next)))
- token-set (ctob/get-set tokens-lib "test-token-set")
- token-set' (ctob/get-set tokens-lib' "test-token-set")
- token' (ctob/get-token token-set' (thi/id :test-token))]
+ token-set (ctob/get-set tokens-lib (thi/id :test-token-set))
+ token-set' (ctob/get-set tokens-lib' (thi/id :test-token-set))
+ token' (ctob/get-token tokens-lib'
+ (thi/id :test-token-set)
+ (thi/id :test-token))
+ tokens' (ctob/get-tokens tokens-lib'
+ (thi/id :test-token-set))]
(t/is (= (ctob/set-count tokens-lib') 1))
- (t/is (= (count (ctob/get-tokens-map token-set')) 0))
+ (t/is (= (count tokens') 0))
(t/is (nil? token'))
(t/is (ct/is-after? (ctob/get-modified-at token-set') (ctob/get-modified-at token-set)))))
@@ -511,7 +519,7 @@
(ctob/add-set (ctob/make-token-set :name "group-2/set-a"))
(ctob/add-set (ctob/make-token-set :name "group-1/set-c")))
- ordered-sets (ctob/get-ordered-set-names tokens-lib)]
+ ordered-sets (ctob/get-set-names tokens-lib)]
(t/is (= ordered-sets '("group-1/set-a"
"group-1/set-b"
@@ -555,7 +563,7 @@
(ctob/make-token :name "token-4"
:type :border-radius
:value 4000)}))
- (ctob/update-theme ctob/hidden-theme-group ctob/hidden-theme-name
+ (ctob/update-theme ctob/hidden-theme-id
#(ctob/enable-sets % #{"set-a" "set-b"})))
tokens (ctob/get-tokens-in-active-sets tokens-lib)]
@@ -757,33 +765,36 @@
(t/is (= :none expected-invalid-none))))
(t/deftest add-token-theme
- (let [tokens-lib (ctob/make-tokens-lib)
- token-theme (ctob/make-token-theme :name "test-token-theme")
+ (let [theme-id (uuid/next)
+ tokens-lib (ctob/make-tokens-lib)
+ token-theme (ctob/make-token-theme :id theme-id :name "test-token-theme")
tokens-lib' (ctob/add-theme tokens-lib token-theme)
token-themes' (ctob/get-themes tokens-lib')
- token-theme' (ctob/get-theme tokens-lib' "" "test-token-theme")]
+ token-theme' (ctob/get-theme tokens-lib' theme-id)]
(t/is (= (ctob/theme-count tokens-lib') 2))
(t/is (= (second token-themes') token-theme))
(t/is (= token-theme' token-theme))))
(t/deftest update-token-theme
- (let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-theme (ctob/make-token-theme :name "test-token-theme")))
+ (let [theme-id (uuid/next)
+ tokens-lib (-> (ctob/make-tokens-lib)
+ (ctob/add-theme (ctob/make-token-theme :id theme-id
+ :name "test-token-theme")))
tokens-lib' (-> tokens-lib
- (ctob/update-theme "" "test-token-theme"
+ (ctob/update-theme theme-id
(fn [token-theme]
(assoc token-theme
:description "some description")))
- (ctob/update-theme "" "not-existing-theme"
+ (ctob/update-theme (uuid/next)
(fn [token-theme]
(assoc token-theme
:description "no-effect"))))
- token-theme (ctob/get-theme tokens-lib "" "test-token-theme")
- token-theme' (ctob/get-theme tokens-lib' "" "test-token-theme")]
+ token-theme (ctob/get-theme tokens-lib theme-id)
+ token-theme' (ctob/get-theme tokens-lib' theme-id)]
(t/is (= (ctob/theme-count tokens-lib') 2))
(t/is (= (:name token-theme') "test-token-theme"))
@@ -791,59 +802,69 @@
(t/is (ct/is-after? (:modified-at token-theme') (:modified-at token-theme)))))
(t/deftest rename-token-theme
- (let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-theme (ctob/make-token-theme :name "test-token-theme")))
+ (let [theme-id (uuid/next)
+ tokens-lib (-> (ctob/make-tokens-lib)
+ (ctob/add-theme (ctob/make-token-theme :id theme-id
+ :name "test-token-theme")))
tokens-lib' (-> tokens-lib
- (ctob/update-theme "" "test-token-theme"
+ (ctob/update-theme theme-id
(fn [token-theme]
(assoc token-theme
:name "updated-name"))))
- token-theme (ctob/get-theme tokens-lib "" "test-token-theme")
- token-theme' (ctob/get-theme tokens-lib' "" "updated-name")]
+ token-theme (ctob/get-theme tokens-lib theme-id)
+ token-theme' (ctob/get-theme tokens-lib' theme-id)]
(t/is (= (ctob/theme-count tokens-lib') 2))
(t/is (= (:name token-theme') "updated-name"))
(t/is (ct/is-after? (:modified-at token-theme') (:modified-at token-theme)))))
(t/deftest delete-token-theme
- (let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-theme (ctob/make-token-theme :name "test-token-theme")))
+ (let [theme-id (uuid/next)
+ tokens-lib (-> (ctob/make-tokens-lib)
+ (ctob/add-theme (ctob/make-token-theme :id theme-id
+ :name "test-token-theme")))
+ tokens-lib' (-> tokens-lib
+ (ctob/delete-theme theme-id)
+ (ctob/delete-theme (uuid/next)))
- tokens-lib' (-> tokens-lib
- (ctob/delete-theme "" "test-token-theme")
- (ctob/delete-theme "" "not-existing-theme"))
-
- token-theme' (ctob/get-theme tokens-lib' "" "updated-name")]
+ token-theme' (ctob/get-theme tokens-lib' theme-id)]
(t/is (= (ctob/theme-count tokens-lib') 1))
(t/is (nil? token-theme'))))
(t/deftest toggle-set-in-theme
- (let [tokens-lib (-> (ctob/make-tokens-lib)
+ (let [theme-id (uuid/next)
+ tokens-lib (-> (ctob/make-tokens-lib)
(ctob/add-set (ctob/make-token-set :name "token-set-1"))
(ctob/add-set (ctob/make-token-set :name "token-set-2"))
(ctob/add-set (ctob/make-token-set :name "token-set-3"))
- (ctob/add-theme (ctob/make-token-theme :name "test-token-theme")))
+ (ctob/add-theme (ctob/make-token-theme :id theme-id
+ :name "test-token-theme"
+ :sets #{"token-set-1" "token-set-2"})))
tokens-lib' (-> tokens-lib
- (ctob/toggle-set-in-theme "" "test-token-theme" "token-set-1")
- (ctob/toggle-set-in-theme "" "test-token-theme" "token-set-2")
- (ctob/toggle-set-in-theme "" "test-token-theme" "token-set-2"))
+ (ctob/toggle-set-in-theme theme-id "token-set-1")
+ (ctob/toggle-set-in-theme theme-id "token-set-3"))
- token-theme (ctob/get-theme tokens-lib "" "test-token-theme")
- token-theme' (ctob/get-theme tokens-lib' "" "test-token-theme")]
+ token-theme (ctob/get-theme tokens-lib theme-id)
+ token-theme' (ctob/get-theme tokens-lib' theme-id)]
+ (t/is (= (:sets token-theme') #{"token-set-2" "token-set-3"}))
(t/is (ct/is-after? (:modified-at token-theme') (:modified-at token-theme)))))
(t/deftest transit-serialization
(let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "test-token-set"))
- (ctob/add-token-in-set "test-token-set" (ctob/make-token :name "test-token"
- :type :boolean
- :value true))
- (ctob/add-theme (ctob/make-token-theme :name "test-token-theme"))
- (ctob/toggle-set-in-theme "" "test-token-theme" "test-token-set"))
+ (ctob/add-set (ctob/make-token-set
+ :id (thi/new-id! :test-token-set)
+ :name "test-token-set"))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :name "test-token"
+ :type :boolean
+ :value true))
+ (ctob/add-theme (ctob/make-token-theme :id (thi/new-id! :test-token-theme)
+ :name "test-token-theme"))
+ (ctob/toggle-set-in-theme (thi/id :test-token-theme) "test-token-set"))
encoded-str (tr/encode-str tokens-lib)
tokens-lib' (tr/decode-str encoded-str)]
@@ -854,12 +875,15 @@
#?(:clj
(t/deftest fressian-serialization
(let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "test-token-set"))
- (ctob/add-token-in-set "test-token-set" (ctob/make-token :name "test-token"
- :type :boolean
- :value true))
- (ctob/add-theme (ctob/make-token-theme :name "test-token-theme"))
- (ctob/toggle-set-in-theme "" "test-token-theme" "test-token-set"))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :test-token-set)
+ :name "test-token-set"))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :name "test-token"
+ :type :boolean
+ :value true))
+ (ctob/add-theme (ctob/make-token-theme :id (thi/new-id! :test-token-theme)
+ :name "test-token-theme"))
+ (ctob/toggle-set-in-theme (thi/id :test-token-theme) "test-token-set"))
encoded-blob (fres/encode tokens-lib)
tokens-lib' (fres/decode encoded-blob)]
@@ -867,48 +891,32 @@
(t/is (= (ctob/set-count tokens-lib') 1))
(t/is (= (ctob/theme-count tokens-lib') 2)))))
-(t/deftest split-and-join-path
- (let [name "group/subgroup/name"
- path (ctob/split-path name "/")
- name' (ctob/join-path path "/")]
- (t/is (= (first path) "group"))
- (t/is (= (second path) "subgroup"))
- (t/is (= (nth path 2) "name"))
- (t/is (= name' name))))
-
-(t/deftest split-and-join-path-with-spaces
- (let [name "group / subgroup / name"
- path (ctob/split-path name "/")]
- (t/is (= (first path) "group"))
- (t/is (= (second path) "subgroup"))
- (t/is (= (nth path 2) "name"))))
-
(t/deftest add-tokens-in-set
(let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "test-token-set"))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :name "token1"
- :type :boolean
- :value true))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :name "group1.token2"
- :type :boolean
- :value true))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :name "group1.token3"
- :type :boolean
- :value true))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :name "group1.subgroup11.token4"
- :type :boolean
- :value true))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :name "group2.token5"
- :type :boolean
- :value true)))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :test-token-set)
+ :name "test-token-set"))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :name "token1"
+ :type :boolean
+ :value true))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :name "group1.token2"
+ :type :boolean
+ :value true))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :name "group1.token3"
+ :type :boolean
+ :value true))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :name "group1.subgroup11.token4"
+ :type :boolean
+ :value true))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :name "group2.token5"
+ :type :boolean
+ :value true)))
- set (ctob/get-set tokens-lib "test-token-set")
- tokens-list (ctob/get-tokens set)]
+ tokens-list (vals (ctob/get-tokens tokens-lib (thi/id :test-token-set)))]
(t/is (= (count tokens-list) 5))
(t/is (= (:name (nth tokens-list 0)) "token1"))
@@ -919,34 +927,39 @@
(t/deftest update-token-in-sets
(let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "test-token-set"))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :test-token-1)
- :name "test-token-1"
- :type :boolean
- :value true))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :test-token-2)
- :name "group1.test-token-2"
- :type :boolean
- :value true))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :test-token-3)
- :name "group1.test-token-3"
- :type :boolean
- :value true)))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :test-token-set)
+ :name "test-token-set"))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :test-token-1)
+ :name "test-token-1"
+ :type :boolean
+ :value true))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :test-token-2)
+ :name "group1.test-token-2"
+ :type :boolean
+ :value true))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :test-token-3)
+ :name "group1.test-token-3"
+ :type :boolean
+ :value true)))
tokens-lib' (-> tokens-lib
- (ctob/update-token-in-set "test-token-set" (thi/id :test-token-2)
- (fn [token]
- (assoc token
- :description "some description"
- :value false))))
+ (ctob/update-token (thi/id :test-token-set) (thi/id :test-token-2)
+ (fn [token]
+ (assoc token
+ :description "some description"
+ :value false))))
- token-set (ctob/get-set tokens-lib "test-token-set")
- token-set' (ctob/get-set tokens-lib' "test-token-set")
- token (ctob/get-token token-set (thi/id :test-token-2))
- token' (ctob/get-token token-set' (thi/id :test-token-2))]
+ token-set (ctob/get-set tokens-lib (thi/id :test-token-set))
+ token-set' (ctob/get-set tokens-lib' (thi/id :test-token-set))
+ token (ctob/get-token tokens-lib
+ (thi/id :test-token-set)
+ (thi/id :test-token-2))
+ token' (ctob/get-token tokens-lib'
+ (thi/id :test-token-set)
+ (thi/id :test-token-2))]
(t/is (= (ctob/set-count tokens-lib') 1))
(t/is (= (:name token') "group1.test-token-2"))
@@ -957,33 +970,38 @@
(t/deftest update-token-in-sets-rename
(let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "test-token-set"))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :test-token-1)
- :name "test-token-1"
- :type :boolean
- :value true))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :test-token-2)
- :name "group1.test-token-2"
- :type :boolean
- :value true))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :test-token-3)
- :name "group1.test-token-3"
- :type :boolean
- :value true)))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :test-token-set)
+ :name "test-token-set"))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :test-token-1)
+ :name "test-token-1"
+ :type :boolean
+ :value true))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :test-token-2)
+ :name "group1.test-token-2"
+ :type :boolean
+ :value true))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :test-token-3)
+ :name "group1.test-token-3"
+ :type :boolean
+ :value true)))
tokens-lib' (-> tokens-lib
- (ctob/update-token-in-set "test-token-set" (thi/id :test-token-2)
- (fn [token]
- (assoc token
- :name "group1.updated-name"))))
+ (ctob/update-token (thi/id :test-token-set) (thi/id :test-token-2)
+ (fn [token]
+ (assoc token
+ :name "group1.updated-name"))))
- token-set (ctob/get-set tokens-lib "test-token-set")
- token-set' (ctob/get-set tokens-lib' "test-token-set")
- token (ctob/get-token token-set (thi/id :test-token-2))
- token' (ctob/get-token token-set' (thi/id :test-token-2))]
+ token-set (ctob/get-set tokens-lib (thi/id :test-token-set))
+ token-set' (ctob/get-set tokens-lib' (thi/id :test-token-set))
+ token (ctob/get-token tokens-lib
+ (thi/id :test-token-set)
+ (thi/id :test-token-2))
+ token' (ctob/get-token tokens-lib'
+ (thi/id :test-token-set)
+ (thi/id :test-token-2))]
(t/is (= (ctob/set-count tokens-lib') 1))
(t/is (= (:name token') "group1.updated-name"))
@@ -994,36 +1012,43 @@
(t/deftest move-token-of-group
(let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "test-token-set"))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :test-token-1)
- :name "test-token-1"
- :type :boolean
- :value true))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :test-token-2)
- :name "group1.test-token-2"
- :type :boolean
- :value true))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :test-token-3)
- :name "group1.test-token-3"
- :type :boolean
- :value true)))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :test-token-set)
+ :name "test-token-set"))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :test-token-1)
+ :name "test-token-1"
+ :type :boolean
+ :value true))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :test-token-2)
+ :name "group1.test-token-2"
+ :type :boolean
+ :value true))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :test-token-3)
+ :name "group1.test-token-3"
+ :type :boolean
+ :value true)))
tokens-lib' (-> tokens-lib
- (ctob/update-token-in-set "test-token-set" (thi/id :test-token-2)
- (fn [token]
- (assoc token
- :name "group2.updated-name"))))
+ (ctob/update-token (thi/id :test-token-set) (thi/id :test-token-2)
+ (fn [token]
+ (assoc token
+ :name "group2.updated-name"))))
- token-set (ctob/get-set tokens-lib "test-token-set")
- token-set' (ctob/get-set tokens-lib' "test-token-set")
- token (ctob/get-token token-set (thi/id :test-token-2))
- token' (ctob/get-token token-set' (thi/id :test-token-2))]
+ token-set (ctob/get-set tokens-lib (thi/id :test-token-set))
+ token-set' (ctob/get-set tokens-lib' (thi/id :test-token-set))
+ token (ctob/get-token tokens-lib
+ (thi/id :test-token-set)
+ (thi/id :test-token-2))
+ token' (ctob/get-token tokens-lib'
+ (thi/id :test-token-set)
+ (thi/id :test-token-2))
+ tokens' (ctob/get-tokens tokens-lib'
+ (thi/id :test-token-set))]
(t/is (= (ctob/set-count tokens-lib') 1))
- (t/is (= (d/index-of (keys (ctob/get-tokens-map token-set')) "group2.updated-name") 1))
+ (t/is (= (d/index-of (keys tokens') "group2.updated-name") 1))
(t/is (= (:name token') "group2.updated-name"))
(t/is (= (:description token') ""))
(t/is (= (:value token') true))
@@ -1032,39 +1057,49 @@
(t/deftest delete-token-in-group
(let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "test-token-set"))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :test-token-1)
- :name "test-token-1"
- :type :boolean
- :value true))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (thi/new-id! :test-token-2)
- :name "group1.test-token-2"
- :type :boolean
- :value true)))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :test-token-set)
+ :name "test-token-set"))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :test-token-1)
+ :name "test-token-1"
+ :type :boolean
+ :value true))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :id (thi/new-id! :test-token-2)
+ :name "group1.test-token-2"
+ :type :boolean
+ :value true)))
tokens-lib' (-> tokens-lib
- (ctob/delete-token-from-set "test-token-set" (thi/id :test-token-2)))
+ (ctob/delete-token (thi/id :test-token-set) (thi/id :test-token-2)))
- token-set (ctob/get-set tokens-lib "test-token-set")
- token-set' (ctob/get-set tokens-lib' "test-token-set")
- token' (ctob/get-token token-set' (thi/id :test-token-2))]
+ token-set (ctob/get-set tokens-lib (thi/id :test-token-set))
+ token-set' (ctob/get-set tokens-lib' (thi/id :test-token-set))
+ token' (ctob/get-token tokens-lib'
+ (thi/id :test-token-set)
+ (thi/id :test-token-2))
+ tokens' (ctob/get-tokens tokens-lib'
+ (thi/id :test-token-set))]
(t/is (= (ctob/set-count tokens-lib') 1))
- (t/is (= (count (ctob/get-tokens-map token-set')) 1))
+ (t/is (= (count tokens') 1))
(t/is (nil? token'))
(t/is (ct/is-after? (ctob/get-modified-at token-set') (ctob/get-modified-at token-set)))))
(t/deftest update-token-set-in-groups
(let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "token-set-1"))
- (ctob/add-set (ctob/make-token-set :name "group1/token-set-2"))
- (ctob/add-set (ctob/make-token-set :name "group1/token-set-3"))
- (ctob/add-set (ctob/make-token-set :name "group1/subgroup11/token-set-4"))
- (ctob/add-set (ctob/make-token-set :name "group2/token-set-5")))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :token-set-1)
+ :name "token-set-1"))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :token-set-2)
+ :name "group1/token-set-2"))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :token-set-3)
+ :name "group1/token-set-3"))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :token-set-4)
+ :name "group1/subgroup11/token-set-4"))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :token-set-5)
+ :name "group2/token-set-5")))
tokens-lib' (-> tokens-lib
- (ctob/update-set "group1/token-set-2"
+ (ctob/update-set (thi/id :token-set-2)
(fn [token-set]
(ctob/set-description token-set "some description"))))
@@ -1083,14 +1118,19 @@
(t/deftest rename-token-set-in-groups
(let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "token-set-1"))
- (ctob/add-set (ctob/make-token-set :name "group1/token-set-2"))
- (ctob/add-set (ctob/make-token-set :name "group1/token-set-3"))
- (ctob/add-set (ctob/make-token-set :name "group1/subgroup11/token-set-4"))
- (ctob/add-set (ctob/make-token-set :name "group2/token-set-5")))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :token-set-1)
+ :name "token-set-1"))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :token-set-2)
+ :name "group1/token-set-2"))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :token-set-3)
+ :name "group1/token-set-3"))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :token-set-4)
+ :name "group1/subgroup11/token-set-4"))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :token-set-5)
+ :name "group2/token-set-5")))
tokens-lib' (-> tokens-lib
- (ctob/update-set "group1/token-set-2"
+ (ctob/update-set (thi/id :token-set-2)
(fn [token-set]
(ctob/rename token-set "group1/updated-name"))))
@@ -1109,14 +1149,19 @@
(t/deftest move-token-set-of-group
(let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "token-set-1"))
- (ctob/add-set (ctob/make-token-set :name "group1/token-set-2"))
- (ctob/add-set (ctob/make-token-set :name "group1/token-set-3"))
- (ctob/add-set (ctob/make-token-set :name "group1/subgroup11/token-set-4"))
- #_(ctob/add-set (ctob/make-token-set :name "group2/token-set-5")))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :token-set-1)
+ :name "token-set-1"))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :token-set-2)
+ :name "group1/token-set-2"))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :token-set-3)
+ :name "group1/token-set-3"))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :token-set-4)
+ :name "group1/subgroup11/token-set-4"))
+ #_(ctob/add-set (ctob/make-token-set :id (thi/new-id! :token-set-5)
+ :name "group2/token-set-5")))
tokens-lib' (-> tokens-lib
- (ctob/update-set "group1/token-set-2"
+ (ctob/update-set (thi/id :token-set-2)
(fn [token-set]
(ctob/rename token-set "group2/updated-name"))))
@@ -1137,11 +1182,13 @@
(t/deftest delete-token-set-in-group
(let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "token-set-1"))
- (ctob/add-set (ctob/make-token-set :name "group1/token-set-2")))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :token-set-1)
+ :name "token-set-1"))
+ (ctob/add-set (ctob/make-token-set :id (thi/new-id! :token-set-2)
+ :name "group1/token-set-2")))
tokens-lib' (-> tokens-lib
- (ctob/delete-set-path "G-group1/S-token-set-2"))
+ (ctob/delete-set (thi/id :token-set-2)))
sets-tree' (ctob/get-set-tree tokens-lib')
token-set' (get-in sets-tree' ["group1" "token-set-2"])]
@@ -1151,14 +1198,18 @@
(t/is (nil? token-set'))))
(t/deftest update-token-theme-in-groups
- (let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-theme (ctob/make-token-theme :group "" :name "token-theme-1"))
- (ctob/add-theme (ctob/make-token-theme :group "group1" :name "token-theme-2"))
- (ctob/add-theme (ctob/make-token-theme :group "group1" :name "token-theme-3"))
- (ctob/add-theme (ctob/make-token-theme :group "group2" :name "token-theme-4")))
+ (let [theme-1-id (uuid/next)
+ theme-2-id (uuid/next)
+ theme-3-id (uuid/next)
+ theme-4-id (uuid/next)
+ tokens-lib (-> (ctob/make-tokens-lib)
+ (ctob/add-theme (ctob/make-token-theme :id theme-1-id :group "" :name "token-theme-1"))
+ (ctob/add-theme (ctob/make-token-theme :id theme-2-id :group "group1" :name "token-theme-2"))
+ (ctob/add-theme (ctob/make-token-theme :id theme-3-id :group "group1" :name "token-theme-3"))
+ (ctob/add-theme (ctob/make-token-theme :id theme-4-id :group "group2" :name "token-theme-4")))
tokens-lib' (-> tokens-lib
- (ctob/update-theme "group1" "token-theme-2"
+ (ctob/update-theme theme-2-id
(fn [token-theme]
(assoc token-theme :description "some description"))))
@@ -1186,15 +1237,18 @@
(t/is (= token-groups ["group1" "group2"]))))
(t/deftest rename-token-theme-in-groups
- (let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-theme (ctob/make-token-theme :group "" :name "token-theme-1"))
- (ctob/add-theme (ctob/make-token-theme :group "group1" :name "token-theme-2"))
- (ctob/add-theme (ctob/make-token-theme :group "group1" :name "token-theme-3"))
- (ctob/add-theme (ctob/make-token-theme :group "group2" :name "token-theme-4")))
-
+ (let [theme-1-id (uuid/next)
+ theme-2-id (uuid/next)
+ theme-3-id (uuid/next)
+ theme-4-id (uuid/next)
+ tokens-lib (-> (ctob/make-tokens-lib)
+ (ctob/add-theme (ctob/make-token-theme :id theme-1-id :group "" :name "token-theme-1"))
+ (ctob/add-theme (ctob/make-token-theme :id theme-2-id :group "group1" :name "token-theme-2"))
+ (ctob/add-theme (ctob/make-token-theme :id theme-3-id :group "group1" :name "token-theme-3"))
+ (ctob/add-theme (ctob/make-token-theme :id theme-4-id :group "group2" :name "token-theme-4")))
tokens-lib' (-> tokens-lib
- (ctob/update-theme "group1" "token-theme-2"
+ (ctob/update-theme theme-2-id
(fn [token-theme]
(assoc token-theme
:name "updated-name"))))
@@ -1214,14 +1268,18 @@
(t/is (ct/is-after? (:modified-at token-theme') (:modified-at token-theme)))))
(t/deftest move-token-theme-of-group
- (let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-theme (ctob/make-token-theme :group "" :name "token-theme-1"))
- (ctob/add-theme (ctob/make-token-theme :group "group1" :name "token-theme-2"))
- (ctob/add-theme (ctob/make-token-theme :group "group1" :name "token-theme-3"))
- #_(ctob/add-theme (ctob/make-token-theme :group "group2" :name "token-theme-4")))
+ (let [theme-1-id (uuid/next)
+ theme-2-id (uuid/next)
+ theme-3-id (uuid/next)
+ theme-4-id (uuid/next)
+ tokens-lib (-> (ctob/make-tokens-lib)
+ (ctob/add-theme (ctob/make-token-theme :id theme-1-id :group "" :name "token-theme-1"))
+ (ctob/add-theme (ctob/make-token-theme :id theme-2-id :group "group1" :name "token-theme-2"))
+ (ctob/add-theme (ctob/make-token-theme :id theme-3-id :group "group1" :name "token-theme-3"))
+ #_(ctob/add-theme (ctob/make-token-theme :in-theme-4-id :group "group2" :name "token-theme-4")))
tokens-lib' (-> tokens-lib
- (ctob/update-theme "group1" "token-theme-2"
+ (ctob/update-theme theme-2-id
(fn [token-theme]
(assoc token-theme
:name "updated-name"
@@ -1244,12 +1302,14 @@
(t/is (ct/is-after? (:modified-at token-theme') (:modified-at token-theme)))))
(t/deftest delete-token-theme-in-group
- (let [tokens-lib (-> (ctob/make-tokens-lib)
- (ctob/add-theme (ctob/make-token-theme :group "" :name "token-theme-1"))
- (ctob/add-theme (ctob/make-token-theme :group "group1" :name "token-theme-2")))
+ (let [theme-1-id (uuid/next)
+ theme-2-id (uuid/next)
+ tokens-lib (-> (ctob/make-tokens-lib)
+ (ctob/add-theme (ctob/make-token-theme :id theme-1-id :group "" :name "token-theme-1"))
+ (ctob/add-theme (ctob/make-token-theme :id theme-2-id :group "group1" :name "token-theme-2")))
tokens-lib' (-> tokens-lib
- (ctob/delete-theme "group1" "token-theme-2"))
+ (ctob/delete-theme theme-2-id))
themes-tree' (ctob/get-theme-tree tokens-lib')
token-theme' (get-in themes-tree' ["group1" "token-theme-2"])]
@@ -1263,7 +1323,7 @@
(let [json (-> (slurp "test/common_tests/types/data/tokens-single-set-legacy-example.json")
(json/decode {:key-fn identity}))
lib (ctob/parse-decoded-json json "single_set")]
- (t/is (= '("single_set") (ctob/get-ordered-set-names lib)))
+ (t/is (= '("single_set") (ctob/get-set-names lib)))
(t/testing "token added"
(t/is (some? (ctob/get-token-by-name lib "single_set" "color.red.100")))))))
@@ -1272,7 +1332,7 @@
(let [json (-> (slurp "test/common_tests/types/data/tokens-single-set-dtcg-example.json")
(json/decode {:key-fn identity}))
lib (ctob/parse-decoded-json json "single_set")]
- (t/is (= '("single_set") (ctob/get-ordered-set-names lib)))
+ (t/is (= '("single_set") (ctob/get-set-names lib)))
(t/testing "token added"
(t/is (some? (ctob/get-token-by-name lib "single_set" "color.red.100")))))))
@@ -1281,8 +1341,8 @@
(let [json (-> (slurp "test/common_tests/types/data/tokens-multi-set-legacy-example.json")
(json/decode {:key-fn identity}))
lib (ctob/parse-decoded-json json "")
- token-theme (ctob/get-theme lib "group-1" "theme-1")]
- (t/is (= '("core" "light" "dark" "theme") (ctob/get-ordered-set-names lib)))
+ token-theme (ctob/get-theme-by-name lib "group-1" "theme-1")]
+ (t/is (= '("core" "light" "dark" "theme") (ctob/get-set-names lib)))
(t/testing "set exists in theme"
(t/is (= (:group token-theme) "group-1"))
(t/is (= (:name token-theme) "theme-1"))
@@ -1304,15 +1364,15 @@
:value "{accent.default}"
:description ""})))
(t/testing "invalid tokens got discarded"
- (t/is (nil? (ctob/get-token-by-name lib "typography" "H1.Bold")))))))
+ (t/is (nil? (ctob/get-token-by-name lib "theme" "boxShadow.default")))))))
#?(:clj
(t/deftest parse-multi-set-dtcg-json
(let [json (-> (slurp "test/common_tests/types/data/tokens-multi-set-example.json")
(json/decode {:key-fn identity}))
lib (ctob/parse-decoded-json json "")
- token-theme (ctob/get-theme lib "group-1" "theme-1")]
- (t/is (= '("core" "light" "dark" "theme") (ctob/get-ordered-set-names lib)))
+ token-theme (ctob/get-theme-by-name lib "group-1" "theme-1")]
+ (t/is (= '("core" "light" "dark" "theme") (ctob/get-set-names lib)))
(t/testing "set exists in theme"
(t/is (= (:group token-theme) "group-1"))
(t/is (= (:name token-theme) "theme-1"))
@@ -1334,7 +1394,7 @@
:value "{accent.default}"
:description ""})))
(t/testing "invalid tokens got discarded"
- (t/is (nil? (ctob/get-token-by-name lib "typography" "H1.Bold")))))))
+ (t/is (nil? (ctob/get-token-by-name lib "theme" "boxShadow.default")))))))
#?(:clj
(t/deftest parse-multi-set-dtcg-json-default-team
@@ -1343,7 +1403,7 @@
lib (ctob/parse-decoded-json json "")
themes (ctob/get-themes lib)
first-theme (first themes)]
- (t/is (= '("dark") (ctob/get-ordered-set-names lib)))
+ (t/is (= '("dark") (ctob/get-set-names lib)))
(t/is (= 1 (count themes)))
(t/testing "existing theme is default theme"
(t/is (= (:group first-theme) ""))
@@ -1496,12 +1556,13 @@
{:name "button.primary.background"
:type :color
:value "{accent.default}"})}))
- (ctob/add-theme (ctob/make-token-theme :name "theme-1"
+ (ctob/add-theme (ctob/make-token-theme :id (thi/new-id! :theme-1)
+ :name "theme-1"
:group "group-1"
:external-id "test-id-01"
:modified-at now
:sets #{"core"}))
- (ctob/toggle-theme-active? "group-1" "theme-1"))
+ (ctob/toggle-theme-active? (thi/id :theme-1)))
result (ctob/export-dtcg-json tokens-lib)
expected {"$themes" [{"description" ""
"group" "group-1"
@@ -1549,12 +1610,13 @@
{:name "button.primary.background"
:type :color
:value "{accent.default}"})}))
- (ctob/add-theme (ctob/make-token-theme :name "theme-1"
+ (ctob/add-theme (ctob/make-token-theme :id (thi/new-id! :theme-1)
+ :name "theme-1"
:group "group-1"
:external-id "test-id-01"
:modified-at now
:sets #{"some/set"}))
- (ctob/toggle-theme-active? "group-1" "theme-1"))
+ (ctob/toggle-theme-active? (thi/id :theme-1)))
result (ctob/export-dtcg-multi-file tokens-lib)
expected {"$themes.json" [{"description" ""
"group" "group-1"
@@ -1580,3 +1642,254 @@
"$type" "color"
"$description" ""}}}}}]
(t/is (= expected result)))))
+
+#?(:clj
+ (t/deftest parse-typography-tokens
+ (let [json (-> (slurp "test/common_tests/types/data/tokens-typography-example.json")
+ (json/decode {:key-fn identity}))
+ lib (ctob/parse-decoded-json json "typography-test")]
+
+ (t/testing "typography token with composite value"
+ (let [token (ctob/get-token-by-name lib "typography-test" "test.typo")]
+ (t/is (some? token))
+ (t/is (= (:type token) :typography))
+ (t/is (= (:value token) {:font-weight "100"
+ :font-size "16px"
+ :letter-spacing "0.1em"}))
+ (t/is (= (:description token) ""))))
+
+ (t/testing "typography token with string reference"
+ (let [token (ctob/get-token-by-name lib "typography-test" "test.typo2")]
+ (t/is (some? token))
+ (t/is (= (:type token) :typography))
+ (t/is (= (:value token) "{typo}"))
+ (t/is (= (:description token) ""))))
+
+ (t/testing "typography token referencing single token"
+ (let [token (ctob/get-token-by-name lib "typography-test" "test.typo-to-single")]
+ (t/is (some? token))
+ (t/is (= (:type token) :typography))
+ (t/is (= (:value token) "{font-weight}"))
+ (t/is (= (:description token) ""))))
+
+ (t/testing "typography token with empty value"
+ (let [token (ctob/get-token-by-name lib "typography-test" "test.test-empty")]
+ (t/is (some? token))
+ (t/is (= (:type token) :typography))
+ (t/is (= (:value token) {}))
+ (t/is (= (:description token) ""))))
+
+ (t/testing "typography token with complex value and description"
+ (let [token (ctob/get-token-by-name lib "typography-test" "test.typo-complex")]
+ (t/is (some? token))
+ (t/is (= (:type token) :typography))
+ (t/is (= (:value token) {:font-weight "bold"
+ :font-size "24px"
+ :letter-spacing "0.05em"
+ :line-height "100%"
+ :font-family ["Arial", "sans-serif"]
+ :text-case "uppercase"}))
+ (t/is (= (:description token) "A complex typography token"))))
+
+ (t/testing "individual font tokens still work"
+ (let [font-weight-token (ctob/get-token-by-name lib "typography-test" "test.font-weight")
+ font-size-token (ctob/get-token-by-name lib "typography-test" "test.font-size")]
+ (t/is (some? font-weight-token))
+ (t/is (= (:type font-weight-token) :font-weight))
+ (t/is (= (:value font-weight-token) "200"))
+
+ (t/is (some? font-size-token))
+ (t/is (= (:type font-size-token) :font-size))
+ (t/is (= (:value font-size-token) "18px"))))
+
+ (t/testing "typography token with string font family gets transformed to array"
+ (let [token (ctob/get-token-by-name lib "typography-test" "test.typo-with-string-font-family")]
+ (t/is (some? token))
+ (t/is (= (:type token) :typography))
+ (t/is (= (:value token) {:font-weight "600"
+ :font-size "20px"
+ :font-family ["Roboto" "Helvetica" "sans-serif"]}))
+ (t/is (= (:description token) "Typography token with string font family")))))))
+
+#?(:clj
+ (t/deftest export-typography-tokens
+ (let [tokens-lib (-> (ctob/make-tokens-lib)
+ (ctob/add-set (ctob/make-token-set
+ :name "typography-set"
+ :tokens {"typo.composite"
+ (ctob/make-token
+ {:name "typo.composite"
+ :type :typography
+ :value {:font-weight "bold"
+ :font-size "16px"
+ :letter-spacing "0.1em"}
+ :description "A composite typography token"})
+ "typo.reference"
+ (ctob/make-token
+ {:name "typo.reference"
+ :type :typography
+ :value "{other-token}"})
+ "typo.empty"
+ (ctob/make-token
+ {:name "typo.empty"
+ :type :typography
+ :value {}})})))
+ result (ctob/export-dtcg-json tokens-lib)
+ typography-set (get result "typography-set")]
+
+ (t/testing "composite typography token export"
+ (let [composite-token (get-in typography-set ["typo" "composite"])]
+ (t/is (= (get composite-token "$type") "typography"))
+ (t/is (= (get composite-token "$value") {"fontWeights" "bold"
+ "fontSizes" "16px"
+ "letterSpacing" "0.1em"}))
+ (t/is (= (get composite-token "$description") "A composite typography token"))))
+
+ (t/testing "reference typography token export"
+ (let [reference-token (get-in typography-set ["typo" "reference"])]
+ (t/is (= (get reference-token "$type") "typography"))
+ (t/is (= (get reference-token "$value") "{other-token}"))
+ (t/is (= (get reference-token "$description") ""))))
+
+ (t/testing "empty typography token export"
+ (let [empty-token (get-in typography-set ["typo" "empty"])]
+ (t/is (= (get empty-token "$type") "typography"))
+ (t/is (= (get empty-token "$value") {}))
+ (t/is (= (get empty-token "$description") "")))))))
+
+#?(:clj
+ (t/deftest typography-token-round-trip
+ (let [original-lib (-> (ctob/make-tokens-lib)
+ (ctob/add-set (ctob/make-token-set
+ :name "test-set"
+ :tokens {"typo.test"
+ (ctob/make-token
+ {:name "typo.test"
+ :type :typography
+ :value {:font-weight "700"
+ :font-size "20px"
+ :letter-spacing "0.05em"
+ :font-family ["Helvetica", "sans-serif"]}
+ :description "Round trip test"})
+ "typo.ref"
+ (ctob/make-token
+ {:name "typo.ref"
+ :type :typography
+ :value "{typo.test}"})})))
+ ;; Export to JSON format
+ exported (ctob/export-dtcg-json original-lib)
+ ;; Import back
+ imported-lib (ctob/parse-decoded-json exported "")]
+
+ (t/testing "round trip preserves typography tokens"
+ (let [original-token (ctob/get-token-by-name original-lib "test-set" "typo.test")
+ imported-token (ctob/get-token-by-name imported-lib "test-set" "typo.test")]
+ (t/is (some? imported-token))
+ (t/is (= (:type imported-token) (:type original-token)))
+ (t/is (= (:value imported-token) (:value original-token)))
+ (t/is (= (:description imported-token) (:description original-token))))
+
+ (let [original-ref (ctob/get-token-by-name original-lib "test-set" "typo.ref")
+ imported-ref (ctob/get-token-by-name imported-lib "test-set" "typo.ref")]
+ (t/is (some? imported-ref))
+ (t/is (= (:type imported-ref) (:type original-ref)))
+ (t/is (= (:value imported-ref) (:value original-ref))))))))
+
+#?(:clj
+ (t/deftest parse-font-family-tokens
+ (let [json (-> (slurp "test/common_tests/types/data/tokens-font-family-example.json")
+ (json/decode {:key-fn identity}))
+ lib (ctob/parse-decoded-json json "font-family-test")]
+
+ (t/testing "string font family token gets split into array"
+ (let [token (ctob/get-token-by-name lib "font-family-test" "fonts.string-font-family")]
+ (t/is (some? token))
+ (t/is (= (:type token) :font-family))
+ (t/is (= (:value token) ["Arial" "Helvetica" "sans-serif"]))
+ (t/is (= (:description token) "A font family defined as a string"))))
+
+ (t/testing "array font family token stays as array"
+ (let [token (ctob/get-token-by-name lib "font-family-test" "fonts.array-font-family")]
+ (t/is (some? token))
+ (t/is (= (:type token) :font-family))
+ (t/is (= (:value token) ["Inter" "system-ui" "sans-serif"]))
+ (t/is (= (:description token) "A font family defined as an array"))))
+
+ (t/testing "single font family string gets converted to array"
+ (let [token (ctob/get-token-by-name lib "font-family-test" "fonts.single-font-family")]
+ (t/is (some? token))
+ (t/is (= (:type token) :font-family))
+ (t/is (= (:value token) ["Georgia"]))
+ (t/is (= (:description token) ""))))
+
+ (t/testing "complex font names with spaces handled correctly"
+ (let [token (ctob/get-token-by-name lib "font-family-test" "fonts.font-with-spaces")]
+ (t/is (some? token))
+ (t/is (= (:type token) :font-family))
+ (t/is (= (:value token) ["Source Sans Pro" "Arial" "sans-serif"])))))))
+
+#?(:clj
+ (t/deftest export-font-family-tokens
+ (let [tokens-lib (-> (ctob/make-tokens-lib)
+ (ctob/add-set (ctob/make-token-set
+ :name "font-family-set"
+ :tokens {"fonts.array-family"
+ (ctob/make-token
+ {:name "fonts.array-family"
+ :type :font-family
+ :value ["Roboto" "sans-serif"]
+ :description "An array font family token"})
+ "fonts.single-family"
+ (ctob/make-token
+ {:name "fonts.single-family"
+ :type :font-family
+ :value ["Georgia"]})})))
+ result (ctob/export-dtcg-json tokens-lib)
+ font-family-set (get result "font-family-set")]
+
+ (t/testing "array font family token export"
+ (let [array-token (get-in font-family-set ["fonts" "array-family"])]
+ (t/is (= (get array-token "$type") "fontFamilies"))
+ (t/is (= (get array-token "$value") ["Roboto" "sans-serif"]))
+ (t/is (= (get array-token "$description") "An array font family token"))))
+
+ (t/testing "single font family token export"
+ (let [single-token (get-in font-family-set ["fonts" "single-family"])]
+ (t/is (= (get single-token "$type") "fontFamilies"))
+ (t/is (= (get single-token "$value") ["Georgia"]))
+ (t/is (= (get single-token "$description") "")))))))
+
+#?(:clj
+ (t/deftest font-family-token-round-trip
+ (let [original-lib (-> (ctob/make-tokens-lib)
+ (ctob/add-set (ctob/make-token-set
+ :name "test-set"
+ :tokens {"fonts.test-array"
+ (ctob/make-token
+ {:name "fonts.test-array"
+ :type :font-family
+ :value ["Arial" "Helvetica" "sans-serif"]
+ :description "Round trip test"})
+ "fonts.test-single"
+ (ctob/make-token
+ {:name "fonts.test-single"
+ :type :font-family
+ :value ["Times New Roman"]})})))
+ ;; Export to JSON format
+ exported (ctob/export-dtcg-json original-lib)
+ ;; Import back
+ imported-lib (ctob/parse-decoded-json exported "")]
+
+ (t/testing "round trip preserves font family tokens"
+ (let [original-token (ctob/get-token-by-name original-lib "test-set" "fonts.test-array")
+ imported-token (ctob/get-token-by-name imported-lib "test-set" "fonts.test-array")]
+ (t/is (some? imported-token))
+ (t/is (= (:type imported-token) (:type original-token)))
+ (t/is (= (:value imported-token) (:value original-token)))
+ (t/is (= (:description imported-token) (:description original-token))))
+
+ (let [original-single (ctob/get-token-by-name original-lib "test-set" "fonts.test-single")
+ imported-single (ctob/get-token-by-name imported-lib "test-set" "fonts.test-single")]
+ (t/is (some? imported-single))
+ (t/is (= (:type imported-single) (:type original-single)))
+ (t/is (= (:value imported-single) (:value original-single))))))))
diff --git a/docker/devenv/Dockerfile b/docker/devenv/Dockerfile
index 96546b6ea8..b23a481817 100644
--- a/docker/devenv/Dockerfile
+++ b/docker/devenv/Dockerfile
@@ -73,7 +73,7 @@ RUN set -eux; \
FROM base AS setup-node
-ENV NODE_VERSION=v22.19.0 \
+ENV NODE_VERSION=v22.21.1 \
PATH=/opt/node/bin:$PATH
RUN set -eux; \
@@ -113,12 +113,12 @@ RUN set -eux; \
ARCH="$(dpkg --print-architecture)"; \
case "${ARCH}" in \
aarch64|arm64) \
- ESUM='6f8725d186d05c627176db9c46c732a6ef3ba41d9e9b3775c4727fc8ac642bb2'; \
- BINARY_URL='https://github.com/adoptium/temurin24-binaries/releases/download/jdk-24.0.2%2B12/OpenJDK24U-jdk_aarch64_linux_hotspot_24.0.2_12.tar.gz'; \
+ ESUM='8c5321f16d9f1d8149f83e4e9ff8ca5d9e94320b92d205e6db42a604de3d1140'; \
+ BINARY_URL='https://cdn.azul.com/zulu/bin/zulu25.30.17-ca-jdk25.0.1-linux_aarch64.tar.gz'; \
;; \
amd64|x86_64) \
- ESUM='aea1cc55e51cf651c85f2f00ad021603fe269c4bb6493fa97a321ad770c9b096'; \
- BINARY_URL='https://github.com/adoptium/temurin24-binaries/releases/download/jdk-24.0.2%2B12/OpenJDK24U-jdk_x64_linux_hotspot_24.0.2_12.tar.gz'; \
+ ESUM='471b3e62bdffaed27e37005d842d8639f10d244ccce1c7cdebf7abce06c8313e'; \
+ BINARY_URL='https://cdn.azul.com/zulu/bin/zulu25.30.17-ca-jdk25.0.1-linux_x64.tar.gz'; \
;; \
*) \
echo "Unsupported arch: ${ARCH}"; \
@@ -149,18 +149,24 @@ FROM base AS setup-rust
ENV PATH=/opt/cargo/bin:$PATH \
RUSTUP_HOME=/opt/rustup \
CARGO_HOME=/opt/cargo \
- RUSTUP_VERSION=1.27.1 \
- RUST_VERSION=1.85.0 \
+ RUSTUP_VERSION=1.28.2 \
+ RUST_VERSION=1.91.0 \
EMSCRIPTEN_VERSION=4.0.6
WORKDIR /opt
RUN set -eux; \
# Same steps as in Rust official Docker image https://github.com/rust-lang/docker-rust/blob/9f287282d513a84cb7c7f38f197838f15d37b6a9/1.81.0/bookworm/Dockerfile
- dpkgArch="$(dpkg --print-architecture)"; \
- case "${dpkgArch##*-}" in \
- amd64) rustArch='x86_64-unknown-linux-gnu'; rustupSha256='6aeece6993e902708983b209d04c0d1dbb14ebb405ddb87def578d41f920f56d' ;; \
- arm64) rustArch='aarch64-unknown-linux-gnu'; rustupSha256='1cffbf51e63e634c746f741de50649bbbcbd9dbe1de363c9ecef64e278dba2b2' ;; \
+ arch="$(dpkg --print-architecture)"; \
+ case "$arch" in \
+ 'amd64') \
+ rustArch='x86_64-unknown-linux-gnu'; \
+ rustupSha256='20a06e644b0d9bd2fbdbfd52d42540bdde820ea7df86e92e533c073da0cdd43c'; \
+ ;; \
+ 'arm64') \
+ rustArch='aarch64-unknown-linux-gnu'; \
+ rustupSha256='e3853c5a252fca15252d07cb23a1bdd9377a8c6f3efa01531109281ae47f841c'; \
+ ;; \
*) echo >&2 "unsupported architecture: ${dpkgArch}"; exit 1 ;; \
esac; \
wget "https://static.rust-lang.org/rustup/archive/${RUSTUP_VERSION}/${rustArch}/rustup-init"; \
@@ -183,8 +189,8 @@ RUN set -eux; \
FROM base AS setup-utils
-ENV CLJKONDO_VERSION=2025.01.16 \
- BABASHKA_VERSION=1.12.207 \
+ENV CLJKONDO_VERSION=2025.07.28 \
+ BABASHKA_VERSION=1.12.208 \
CLJFMT_VERSION=0.13.1
RUN set -ex; \
diff --git a/docker/devenv/files/start-tmux.sh b/docker/devenv/files/start-tmux.sh
index 29d2c5bbbe..69e0423f22 100755
--- a/docker/devenv/files/start-tmux.sh
+++ b/docker/devenv/files/start-tmux.sh
@@ -39,7 +39,7 @@ tmux new-window -t penpot:3 -n 'exporter'
tmux select-window -t penpot:3
tmux send-keys -t penpot 'cd penpot/exporter' enter C-l
tmux send-keys -t penpot 'rm -f target/app.js*' enter C-l
-tmux send-keys -t penpot 'clojure -M:dev:shadow-cljs watch main' enter
+tmux send-keys -t penpot 'yarn run watch' enter
tmux split-window -v
tmux send-keys -t penpot 'cd penpot/exporter' enter C-l
diff --git a/docker/images/Dockerfile.backend b/docker/images/Dockerfile.backend
index 2a3f8f1ccc..b47ddc09ea 100644
--- a/docker/images/Dockerfile.backend
+++ b/docker/images/Dockerfile.backend
@@ -5,7 +5,7 @@ ENV LANG='C.UTF-8' \
LC_ALL='C.UTF-8' \
JAVA_HOME="/opt/jdk" \
DEBIAN_FRONTEND=noninteractive \
- NODE_VERSION=v22.19.0 \
+ NODE_VERSION=v22.21.1 \
TZ=Etc/UTC
RUN set -ex; \
@@ -46,12 +46,12 @@ RUN set -eux; \
ARCH="$(dpkg --print-architecture)"; \
case "${ARCH}" in \
aarch64|arm64) \
- ESUM='6f8725d186d05c627176db9c46c732a6ef3ba41d9e9b3775c4727fc8ac642bb2'; \
- BINARY_URL='https://github.com/adoptium/temurin24-binaries/releases/download/jdk-24.0.2%2B12/OpenJDK24U-jdk_aarch64_linux_hotspot_24.0.2_12.tar.gz'; \
+ ESUM='8c5321f16d9f1d8149f83e4e9ff8ca5d9e94320b92d205e6db42a604de3d1140'; \
+ BINARY_URL='https://cdn.azul.com/zulu/bin/zulu25.30.17-ca-jdk25.0.1-linux_aarch64.tar.gz'; \
;; \
amd64|x86_64) \
- ESUM='aea1cc55e51cf651c85f2f00ad021603fe269c4bb6493fa97a321ad770c9b096'; \
- BINARY_URL='https://github.com/adoptium/temurin24-binaries/releases/download/jdk-24.0.2%2B12/OpenJDK24U-jdk_x64_linux_hotspot_24.0.2_12.tar.gz'; \
+ ESUM='471b3e62bdffaed27e37005d842d8639f10d244ccce1c7cdebf7abce06c8313e'; \
+ BINARY_URL='https://cdn.azul.com/zulu/bin/zulu25.30.17-ca-jdk25.0.1-linux_x64.tar.gz'; \
;; \
*) \
echo "Unsupported arch: ${ARCH}"; \
@@ -87,14 +87,9 @@ RUN set -ex; \
apt-get -qq upgrade; \
apt-get -qqy --no-install-recommends install \
ca-certificates \
+ curl \
fontconfig \
fontforge \
- python3 \
- python3-tabulate \
- tzdata \
- woff-tools \
- woff2 \
- \
libfontconfig1 \
libfreetype6 \
libglib2.0-0 \
@@ -113,6 +108,11 @@ RUN set -ex; \
libxml2 \
libzip4t64 \
libzstd1 \
+ python3 \
+ python3-tabulate \
+ tzdata \
+ woff-tools \
+ woff2 \
; \
find tmp/usr/share/zoneinfo/* -type d ! -name 'Etc' |xargs rm -rf; \
rm -rf /var/lib /var/cache; \
@@ -126,7 +126,9 @@ RUN set -ex; \
COPY --from=build /opt/jre /opt/jre
COPY --from=build /opt/node /opt/node
COPY --from=penpotapp/imagemagick:7.1.2-0 /opt/imagick /opt/imagick
-COPY --chown=penpot:penpot ./bundle-backend/ /opt/penpot/backend/
+
+ARG BUNDLE_PATH="./bundle-backend/"
+ADD --chown=penpot:penpot $BUNDLE_PATH /opt/penpot/backend/
USER penpot:penpot
WORKDIR /opt/penpot/backend
diff --git a/docker/images/Dockerfile.exporter b/docker/images/Dockerfile.exporter
index ab01ef2a4c..c0d355fe8a 100644
--- a/docker/images/Dockerfile.exporter
+++ b/docker/images/Dockerfile.exporter
@@ -3,7 +3,7 @@ LABEL maintainer="Penpot "
ENV LANG=en_US.UTF-8 \
LC_ALL=en_US.UTF-8 \
- NODE_VERSION=v22.19.0 \
+ NODE_VERSION=v22.21.1 \
DEBIAN_FRONTEND=noninteractive \
PATH=/opt/node/bin:$PATH
@@ -89,7 +89,8 @@ RUN set -eux; \
mkdir -p /opt/penpot; \
chown -R penpot:penpot /opt/penpot;
-ADD --chown=penpot:penpot ./bundle-exporter/ /opt/penpot/exporter
+ARG BUNDLE_PATH="./bundle-exporter/"
+ADD --chown=penpot:penpot $BUNDLE_PATH /opt/penpot/exporter/
WORKDIR /opt/penpot/exporter
USER penpot:penpot
diff --git a/docker/images/Dockerfile.frontend b/docker/images/Dockerfile.frontend
index e6e5e0fadb..3b5d7db9fc 100644
--- a/docker/images/Dockerfile.frontend
+++ b/docker/images/Dockerfile.frontend
@@ -6,14 +6,18 @@ USER root
RUN set -ex; \
useradd -U -M -u 1001 -s /bin/false -d /opt/penpot penpot; \
mkdir -p /opt/data/assets; \
- chown -R penpot:penpot /opt/data;
+ chown -R penpot:penpot /opt/data; \
+ mkdir -p /etc/nginx/overrides/http.d/; \
+ mkdir -p /etc/nginx/overrides/server.d/; \
+ mkdir -p /etc/nginx/overrides/location.d/;
-ADD ./bundle-frontend/ /var/www/app/
+ARG BUNDLE_PATH="./bundle-frontend/"
+ADD $BUNDLE_PATH /var/www/app/
ADD ./files/config.js /var/www/app/js/config.js
-ADD ./files/nginx.conf /etc/nginx/nginx.conf.template
-ADD ./files/nginx-proxies.conf /etc/nginx/nginx-proxies.conf
-ADD ./files/resolvers.conf /etc/nginx/overrides.d/resolvers.conf.template
+ADD ./files/nginx.conf.template /tmp/nginx.conf.template
+ADD ./files/nginx-resolvers.conf.template /tmp/resolvers.conf.template
ADD ./files/nginx-mime.types /etc/nginx/mime.types
+ADD ./files/nginx-external-locations.conf /etc/nginx/overrides/location.d/external-locations.conf
ADD ./files/nginx-entrypoint.sh /entrypoint.sh
RUN chown -R 1001:0 /var/cache/nginx; \
diff --git a/docker/images/Dockerfile.storybook b/docker/images/Dockerfile.storybook
new file mode 100644
index 0000000000..24e6acc5cf
--- /dev/null
+++ b/docker/images/Dockerfile.storybook
@@ -0,0 +1,20 @@
+FROM nginxinc/nginx-unprivileged:1.29.1
+LABEL maintainer="Penpot "
+
+USER root
+
+RUN set -ex; \
+ useradd -U -M -u 1001 -s /bin/false -d /opt/penpot penpot;
+
+ARG BUNDLE_PATH="./bundle-storybook/"
+COPY $BUNDLE_PATH /var/www/
+COPY ./files/nginx.storybook.conf /etc/nginx/conf.d/default.conf
+
+RUN chown -R 1001:0 /var/cache/nginx; \
+ chmod -R g+w /var/cache/nginx; \
+ chown -R 1001:0 /etc/nginx; \
+ chmod -R g+w /etc/nginx; \
+ chown -R 1001:0 /var/www; \
+ chmod -R g+w /var/www;
+
+USER penpot:penpot
diff --git a/docker/images/docker-compose.yaml b/docker/images/docker-compose.yaml
index 59601af625..f146313976 100644
--- a/docker/images/docker-compose.yaml
+++ b/docker/images/docker-compose.yaml
@@ -247,6 +247,11 @@ services:
networks:
- penpot
+ environment:
+ # You can increase the max memory size if you have sufficient resources,
+ # although this should not be necessary.
+ - VALKEY_EXTRA_FLAGS=--maxmemory 128mb --maxmemory-policy volatile-lfu
+
## A mailcatch service, used as temporal SMTP server. You can access via HTTP to the
## port 1080 for read all emails the penpot platform has sent. Should be only used as a
## temporal solution while no real SMTP provider is configured.
diff --git a/docker/images/files/nginx-entrypoint.sh b/docker/images/files/nginx-entrypoint.sh
index dff065af50..1c6621fba3 100644
--- a/docker/images/files/nginx-entrypoint.sh
+++ b/docker/images/files/nginx-entrypoint.sh
@@ -5,10 +5,8 @@
#########################################
if [[ $PENPOT_FLAGS == *"enable-air-gapped-conf"* ]]; then
- export INCLUDE_PROXIES=""
+ rm /etc/nginx/overrides/location.d/external-locations.conf;
export PENPOT_FLAGS="$PENPOT_FLAGS disable-google-fonts-provider disable-dashboard-templates-section"
-else
- export INCLUDE_PROXIES="include /etc/nginx/nginx-proxies.conf;"
fi
#########################################
@@ -17,30 +15,27 @@ fi
update_flags() {
if [ -n "$PENPOT_FLAGS" ]; then
- sed -i \
+ echo "$(sed \
-e "s|^//var penpotFlags = .*;|var penpotFlags = \"$PENPOT_FLAGS\";|g" \
- "$1"
+ "$1")" > "$1"
fi
}
update_flags /var/www/app/js/config.js
-
-
#########################################
## Nginx Config
#########################################
export PENPOT_BACKEND_URI=${PENPOT_BACKEND_URI:-http://penpot-backend:6060}
export PENPOT_EXPORTER_URI=${PENPOT_EXPORTER_URI:-http://penpot-exporter:6061}
+export PENPOT_HTTP_SERVER_MAX_MULTIPART_BODY_SIZE=${PENPOT_HTTP_SERVER_MAX_MULTIPART_BODY_SIZE:-367001600} # Default to 350MiB
+envsubst "\$PENPOT_BACKEND_URI,\$PENPOT_EXPORTER_URI,\$PENPOT_HTTP_SERVER_MAX_MULTIPART_BODY_SIZE" \
+ < /tmp/nginx.conf.template > /etc/nginx/nginx.conf
+
PENPOT_DEFAULT_INTERNAL_RESOLVER="$(awk 'BEGIN{ORS=" "} $1=="nameserver" { sub(/%.*$/,"",$2); print ($2 ~ ":")? "["$2"]": $2}' /etc/resolv.conf)"
export PENPOT_INTERNAL_RESOLVER=${PENPOT_INTERNAL_RESOLVER:-$PENPOT_DEFAULT_INTERNAL_RESOLVER}
-export PENPOT_HTTP_SERVER_MAX_MULTIPART_BODY_SIZE=${PENPOT_HTTP_SERVER_MAX_MULTIPART_BODY_SIZE:-367001600} # Default to 350MiB
-
-envsubst "\$PENPOT_BACKEND_URI,\$PENPOT_EXPORTER_URI,\$PENPOT_HTTP_SERVER_MAX_MULTIPART_BODY_SIZE,\$INCLUDE_PROXIES" \
- < /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf
-
envsubst "\$PENPOT_INTERNAL_RESOLVER" \
- < /etc/nginx/overrides.d/resolvers.conf.template > /etc/nginx/overrides.d/resolvers.conf
+ < /tmp/resolvers.conf.template > /etc/nginx/overrides/http.d/resolvers.conf
exec "$@";
diff --git a/docker/images/files/nginx-proxies.conf b/docker/images/files/nginx-external-locations.conf
similarity index 100%
rename from docker/images/files/nginx-proxies.conf
rename to docker/images/files/nginx-external-locations.conf
diff --git a/docker/images/files/resolvers.conf b/docker/images/files/nginx-resolvers.conf.template
similarity index 100%
rename from docker/images/files/resolvers.conf
rename to docker/images/files/nginx-resolvers.conf.template
diff --git a/docker/images/files/nginx.conf b/docker/images/files/nginx.conf.template
similarity index 85%
rename from docker/images/files/nginx.conf
rename to docker/images/files/nginx.conf.template
index 053b18144e..8b2d84556d 100644
--- a/docker/images/files/nginx.conf
+++ b/docker/images/files/nginx.conf.template
@@ -1,10 +1,10 @@
worker_processes auto;
pid /tmp/nginx.pid;
-include /etc/nginx/modules-enabled/*.conf;
+include /etc/nginx/overrides/main.d/*.conf;
events {
worker_connections 2048;
- # multi_accept on;
+ multi_accept on;
}
http {
@@ -33,6 +33,11 @@ http {
error_log /dev/stderr;
access_log /dev/stdout;
+ proxy_connect_timeout 300s;
+ proxy_send_timeout 300s;
+ proxy_read_timeout 300s;
+ send_timeout 300s;
+
gzip on;
gzip_vary on;
gzip_proxied any;
@@ -41,7 +46,7 @@ http {
gzip_buffers 16 8k;
gzip_http_version 1.1;
- gzip_types text/plain text/css text/javascript application/javascript application/json application/transit+json;
+ gzip_types text/plain text/css text/javascript application/javascript application/json application/transit+json image/svg+xml;
proxy_buffer_size 16k;
proxy_busy_buffers_size 24k; # essentially, proxy_buffer_size + 2 small buffers of 4k
@@ -57,7 +62,14 @@ http {
proxy_cache_valid any 48h;
proxy_cache_key "$host$request_uri";
- include /etc/nginx/overrides.d/*.conf;
+ proxy_http_version 1.1;
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Scheme $scheme;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+
+ include /etc/nginx/overrides/http.d/*.conf;
server {
listen 8080 default_server;
@@ -66,13 +78,6 @@ http {
client_max_body_size $PENPOT_HTTP_SERVER_MAX_MULTIPART_BODY_SIZE;
charset utf-8;
- proxy_http_version 1.1;
- proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Scheme $scheme;
- proxy_set_header X-Forwarded-Proto $scheme;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-
etag off;
root /var/www/app/;
@@ -119,12 +124,10 @@ http {
location /api {
proxy_pass $PENPOT_BACKEND_URI/api;
+ proxy_buffering off;
}
location /readyz {
- proxy_http_version 1.1;
- proxy_set_header Host $http_host;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass $PENPOT_BACKEND_URI$request_uri;
}
@@ -134,8 +137,10 @@ http {
proxy_pass $PENPOT_BACKEND_URI/ws/notifications;
}
+ include /etc/nginx/overrides/server.d/*.conf;
+
location / {
- $INCLUDE_PROXIES
+ include /etc/nginx/overrides/location.d/*.conf;
location ~ ^/js/config.js$ {
add_header Cache-Control "no-store, no-cache, max-age=0" always;
diff --git a/docker/images/files/nginx.storybook.conf b/docker/images/files/nginx.storybook.conf
new file mode 100644
index 0000000000..efccfb5f95
--- /dev/null
+++ b/docker/images/files/nginx.storybook.conf
@@ -0,0 +1,27 @@
+server {
+ listen 8080 default_server;
+ server_name _;
+
+ charset utf-8;
+ etag off;
+
+ gzip on;
+ gzip_static on;
+ gzip_types text/plain text/css application/javascript application/json application/vnd.api+json application/xml application/x-javascript text/xml image/svg+xml;
+ gzip_proxied any;
+ gzip_comp_level 6;
+ gzip_buffers 16 8k;
+ gzip_http_version 1.1;
+ gzip_min_length 256;
+ gzip_vary on;
+
+ error_log /dev/stderr;
+ access_log /dev/stdout;
+
+ root /var/www;
+ index index.html;
+
+ location / {
+ try_files $uri $uri/ /index.html;
+ }
+}
diff --git a/docker/images/nginx.storybook.conf b/docker/images/nginx.storybook.conf
new file mode 100644
index 0000000000..fb7106dc90
--- /dev/null
+++ b/docker/images/nginx.storybook.conf
@@ -0,0 +1,27 @@
+server {
+ listen 8080 default_server;
+ server_name _;
+
+ charset utf-8;
+ etag off;
+
+ gzip on;
+ gzip_static on;
+ gzip_types text/plain text/css application/javascript application/json application/vnd.api+json application/xml application/x-javascript text/xml image/svg+xml;
+ gzip_proxied any;
+ gzip_comp_level 6;
+ gzip_buffers 16 8k;
+ gzip_http_version 1.1;
+ gzip_min_length 256;
+ gzip_vary on;
+
+ error_log /dev/stderr;
+ access_log /dev/stdout;
+
+ root /var/www;
+ index index.html;
+
+ location / {
+ try_files $uri $uri/ /index.html;
+ }
+}
diff --git a/docs/img/design-tokens/34-tokens-composite-typography-alias.webp b/docs/img/design-tokens/34-tokens-composite-typography-alias.webp
new file mode 100644
index 0000000000..27e83e9f7d
Binary files /dev/null and b/docs/img/design-tokens/34-tokens-composite-typography-alias.webp differ
diff --git a/docs/img/design-tokens/35-tokens-composite-typography-lineheight.webp b/docs/img/design-tokens/35-tokens-composite-typography-lineheight.webp
new file mode 100644
index 0000000000..0f18608d7a
Binary files /dev/null and b/docs/img/design-tokens/35-tokens-composite-typography-lineheight.webp differ
diff --git a/docs/img/design-tokens/36-tokens-composite-typography.webp b/docs/img/design-tokens/36-tokens-composite-typography.webp
new file mode 100644
index 0000000000..fe13f798a6
Binary files /dev/null and b/docs/img/design-tokens/36-tokens-composite-typography.webp differ
diff --git a/docs/technical-guide/configuration.md b/docs/technical-guide/configuration.md
index 86f3fedd53..a74ae84178 100644
--- a/docs/technical-guide/configuration.md
+++ b/docs/technical-guide/configuration.md
@@ -23,7 +23,7 @@ Flags and evironment variables are also used together; for example:
```bash
# This flag enables the use of SMTP email
-PENPOT_FLAGS: enable-smtp
+PENPOT_FLAGS: [...] enable-smtp
# These environment variables configure the specific SMPT service
# Backend
@@ -36,7 +36,7 @@ the exporter, or all of them; on the other hand, **environment variables** are c
each specific service. For example:
```bash
-PENPOT_FLAGS: enable-login-with-google
+PENPOT_FLAGS: [...] enable-login-with-google
# Backend
PENPOT_GOOGLE_CLIENT_ID:
@@ -56,7 +56,7 @@ Penpot uses anonymous telemetries from the self-hosted instances to improve the
Consider sharing these anonymous telemetries enabling the corresponding flag:
```bash
-PENPOT_FLAGS: enable-telemetries
+PENPOT_FLAGS: [...] enable-telemetries
```
## Registration and authentication
@@ -402,7 +402,7 @@ This is implemented as specific locations in the penpot-front Nginx. If your org
in a 100% air-gapped environment, you can use the following configuration:
```bash
-PENPOT_FLAGS: enable-air-gapped-conf
+PENPOT_FLAGS: [...] enable-air-gapped-conf
```
When Penpot starts, it will leave out the Nginx configuration related to external requests. This means that,
@@ -459,11 +459,15 @@ POSTGRES_PASSWORD: penpot
### Storage
-Storage refers to storing the user uploaded assets.
+Storage refers to storing the user uploaded different objects in Penpot (assets, file data,...).
-Assets storage is implemented using "plugable" backends. Currently there are two
+Objects storage is implemented using "plugable" backends. Currently there are two
backends available: fs and s3 (for AWS S3).
+__Since version 2.11.0__
+The configuration variables related to storage has been renamed, `PENPOT_STORAGE_ASSETS_*` are now `PENPOT_OBJECTS_STORAGE_*`.
+`PENPOT_ASSETS_STORAGE_BACKEND` becomes `PENPOT_OBJECTS_STORAGE_BACKEND` and its values now are `fs` and `s3` instead of `assets-fs` or `assets-s3`.
+
#### FS Backend (default)
This is the default backend when you use the official docker images and the default
@@ -471,8 +475,8 @@ configuration looks like this:
```bash
# Backend
-PENPOT_ASSETS_STORAGE_BACKEND: assets-fs
-PENPOT_STORAGE_ASSETS_FS_DIRECTORY: /opt/data/assets
+PENPOT_OBJECTS_STORAGE_BACKEND: fs
+PENPOT_OBJECTS_STORAGE_FS_DIRECTORY: /opt/data/objects
```
The main downside of this backend is the hard dependency on nginx approach to serve files
@@ -485,7 +489,7 @@ configuration file][4] used in the docker images.
#### AWS S3 Backend
-This backend uses AWS S3 bucket for store the user uploaded assets. For use it you should
+This backend uses AWS S3 bucket for store the user uploaded objects. For use it you should
have an appropriate account on AWS cloud and have the credentials, region and the bucket.
This is how configuration looks for S3 backend:
@@ -494,18 +498,36 @@ This is how configuration looks for S3 backend:
# Backend
AWS_ACCESS_KEY_ID:
AWS_SECRET_ACCESS_KEY:
-PENPOT_ASSETS_STORAGE_BACKEND: assets-s3
-PENPOT_STORAGE_ASSETS_S3_REGION:
-PENPOT_STORAGE_ASSETS_S3_BUCKET:
+PENPOT_OBJECTS_STORAGE_BACKEND: s3
+PENPOT_OBJECTS_STORAGE_S3_REGION:
+PENPOT_OBJECTS_STORAGE_S3_BUCKET:
# Optional if you want to use it with non AWS, S3 compatible service:
-PENPOT_STORAGE_ASSETS_S3_ENDPOINT:
+PENPOT_OBJECTS_STORAGE_S3_ENDPOINT:
```
These settings are equally useful if you have a Minio storage system.
+### File Data Storage
+
+__Since version 2.11.0__
+
+You can change the default file data storage backend with `PENPOT_FILE_DATA_BACKEND` environment variable. Possible values are:
+
+- `legacy-db`: the current default backend, continues storing the file data of files and snapshots in the same location as previous versions of Penpot (< 2.11.0), this is a conservative default behaviour and will be changed to `db` in next versions.
+- `db`: stores the file data on an specific table (the future default backend).
+- `storage`: stores the file data using the objects storage system (S3 or FS, depending on which one is configured)
+
+This also comes with an additional feature that allows offload the "inactive" files on file storage backend and leaves the database only for the active files. To enable it, you should use the `enable-tiered-file-data-storage` flag and `db` as file data storage backend.
+
+```bash
+# Backend
+PENPOT_FLAGS: [...] enable-tiered-file-data-storage
+PENPOT_FILE_DATA_BACKEND: db
+```
+
### Autosave
By default, Penpot stores manually saved versions indefinitely; these can be found in the History tab and can be renamed, restored, deleted, etc. Additionally, the default behavior of on-premise instances is to not keep automatic version history. This automatic behavior can be modified and adapted to each on-premise installation with the corresponding configuration.
@@ -517,7 +539,7 @@ You need to be very careful when configuring automatic versioning, as it can sig
This is how configuration looks for auto-file-snapshot
```bash
-PENPOT_FLAGS: enable-auto-file-snapshot # Enable automatic version saving
+PENPOT_FLAGS: [...] enable-auto-file-snapshot # Enable automatic version saving
# Backend
PENPOT_AUTO_FILE_SNAPSHOT_EVERY: 5 # How many save operations trigger the auto-save-version?
diff --git a/docs/technical-guide/developer/ui.md b/docs/technical-guide/developer/ui.md
index ec2cd64ca8..86bae426b3 100644
--- a/docs/technical-guide/developer/ui.md
+++ b/docs/technical-guide/developer/ui.md
@@ -234,7 +234,7 @@ Use variables from `frontend/src/app/main/ui/ds/spacing.scss`. These are predefi
For fixed dimensions (e.g., modals' widths) defined by design and not layout-driven, use or define variables in `frontend/src/app/main/ui/ds/_sizes.scss`. To use them:
```scss
-@use "../_sizes.scss" as *;
+@use "ds/_sizes.scss" as *;
```
Note: Since these values haven't been semantically defined yet, we’re temporarily using SASS variables instead of named CSS custom properties.
@@ -242,7 +242,7 @@ Note: Since these values haven't been semantically defined yet, we’re temporar
Use border thickness variables from `frontend/src/app/main/ui/ds/_borders.scss`. To import:
```scss
-@use "../_borders.scss" as *;
+@use "ds/_borders.scss" as *;
```
Avoid using sass variables defined on `frontend/resources/styles/common/refactor/spacing.scss` that are deprecated.
@@ -314,7 +314,7 @@ When applying typography in SCSS, use the proper mixin from the Design System.
✅ **DO: Use the DS mixin**
```scss
-@use "../ds/typography.scss" as t;
+@use "ds/typography.scss" as t;
.class {
@include t.use-typography("body-small");
diff --git a/docs/technical-guide/getting-started/recommended-settings.md b/docs/technical-guide/getting-started/recommended-settings.md
index 1fc93e06a7..e6d1c9bfeb 100644
--- a/docs/technical-guide/getting-started/recommended-settings.md
+++ b/docs/technical-guide/getting-started/recommended-settings.md
@@ -1,5 +1,5 @@
---
-title: 1.1 Recommended storage
+title: 1.1 Recommended settings
desc: Learn recommended self-hosting settings, Docker & Kubernetes installs, configuration, and troubleshooting tips in Penpot's technical guide.
---
@@ -10,3 +10,33 @@ Disk requirements depend on your usage, with the primary factors being database
As a rule of thumb, start with a **minimum** database size of **50GB** to **100GB** with elastic sizing capability — this configuration should adequately support up to 10 editors. For environments with **more than 10 users**, we recommend adding approximately **5GB** of capacity per additional editor.
Keep in mind that database size doesn't grow strictly proportionally with user count, as it depends heavily on how Penpot is used and the complexity of files created. Most organizations begin with this baseline and elastic sizing approach, then monitor usage patterns monthly until resource requirements stabilize.
+
+
+# About Valkey / Redis requirements
+
+"Valkey is mainly used for coordinating websocket notifications and, since Penpot 2.11, as a cache. Therefore, disk storage will not be necessary as it will use the instance's RAM.
+
+To prevent the cache from hogging all the system's RAM usage, it is recommended to use two configuration parameters which, both in the docker-compose.yaml provided by Penpot and in the official Helm Chart, come with default parameters that should be sufficient for most deployments:
+
+```bash
+## Recommended values for most Penpot instances.
+## You can modify this value to follow your policies.
+
+# Set maximum memory Valkey/Redis will use.
+# Accepted units: b, k, kb, m, mb, g, gb
+maxmemory 128mb
+
+# Choose an eviction policy (see Valkey docs:
+# https://valkey.io/topics/memory-optimization/ or for Redis
+# https://redis.io/docs/latest/develop/reference/eviction/
+# Common choices:
+# noeviction, allkeys-lru, volatile-lru, allkeys-random, volatile-random,
+# volatile-ttl, volatile-lfu, allkeys-lfu
+#
+# For Penpot, volatile-lfu is recommended
+maxmemory-policy volatile-lfu
+```
+
+The `maxmemory` configuration directive specifies the maximum amount of memory to use for the cache data. If you are using a dedicated instance to host Valkey/Redis, we do not recommend using more than 60% of the available RAM.
+
+With `maxmemory-policy` configuration directive, you can select the eviction policy you want to use when the limit set by `maxmemory` is reached. Penpot works fine with `volatile-lfu`, which evicts the least frequently used keys that have been marked as expired.
diff --git a/docs/user-guide/design-tokens/index.njk b/docs/user-guide/design-tokens/index.njk
index 9e23a935bb..5021982f8d 100644
--- a/docs/user-guide/design-tokens/index.njk
+++ b/docs/user-guide/design-tokens/index.njk
@@ -423,6 +423,40 @@ ExtraBold Italic
This token can be applied directly to a text element or be used as a reference in a Typography Composite Token.
+Typography composite token
+Typography tokens are composite entities that group several text properties into a single token definition. They allow you to define and reuse complete text styles in a consistent way.
+Each property within a typography token can either reference an existing individual typography token (for example, font-size or font-family ) or use a hardcoded value. The behavior and syntax of individual typography tokens are described in the previous section of this guide.
+
+
+
+
+Reference another Typography Composite Token
+You can also reference another existing Typography Composite Token instead of defining each property manually. When doing so, Penpot resolves all individual properties from the referenced token.
+
+
+
+
+Line height property
+The Typography Token includes a line-height property, which is not available as an individual token. This is because line-height depends on the font size to be calculated properly. Make sure the font-size property is defined before setting line-height .
+
+
+
+
+Accepted values for the line-height input:
+
+ Unitless number: interpreted as a multiplier of the font size. This is Penpot’s default behavior.
+ Percentage (%): converted internally to a multiplier.
+ Pixel (px) or rem value: if using rem, Penpot calculates the proportion relative to the font size and converts it to a multiplier.
+ References: you can also reference number or dimension tokens.
+
+
+Apply a Typography token
+A Typography composite token can be applied to a full text layer to set all typography properties at once. This lets you manage complete text styles using a single token instead of combining multiple individual ones.
+When applying a Typography composite token to a layer, any previously applied Typography composite token or style will be detached. The same happens in reverse. Only one of them can be active at a time.
+
+
+
+
Token Sets
Token Sets allow you to split your tokens up into multiple files in order to create organized groups or collections of tokens. It enables efficient management and customization within design files. For example you can group all your color sets, sizing sets or platform-specific sets. The purpose of tokens sets is to organize them in a way that matches your needs.
diff --git a/docs/user-guide/the-interface/index.njk b/docs/user-guide/the-interface/index.njk
index 99ffbcdd1f..083daad749 100644
--- a/docs/user-guide/the-interface/index.njk
+++ b/docs/user-guide/the-interface/index.njk
@@ -126,7 +126,7 @@ desc: Discover Penpot's free user guide! Learn the interface, workspace basics,
- Teams: A team allows you to collaborate with other Penpot users. Team members are allowed to work with any project or file within the team depending on their permissions. Members with admin permissions can also invite other members. Create or join as many teams as you need with different groups of people.
+ Teams: A team allows you to collaborate with other Penpot users. Team members are allowed to work with any project or file within the team depending on their permissions. Members with admin permissions can also invite other members. Create or join as many teams as you need with different groups of people.
Search: If you are looking for a specific file just type its title at the search box.
Projects: A project allows you to group design files. It works pretty much like a folder in a file system. You can create as many projects as you need. If you are going to work with more people in a project, you should create it inside a team.
Drafts: The drafts section is where you can find the design files that are not inside any project.
@@ -204,4 +204,4 @@ desc: Discover Penpot's free user guide! Learn the interface, workspace basics,
Penpot's view mode in light mode
-
\ No newline at end of file
+
diff --git a/exporter/deps.edn b/exporter/deps.edn
index 6f93671f2a..1c5cd1fb55 100644
--- a/exporter/deps.edn
+++ b/exporter/deps.edn
@@ -1,9 +1,9 @@
{:paths ["src" "vendor" "resources" "test"]
:deps
{penpot/common {:local/root "../common"}
- org.clojure/clojure {:mvn/version "1.12.0"}
+ org.clojure/clojure {:mvn/version "1.12.2"}
binaryage/devtools {:mvn/version "RELEASE"}
- metosin/reitit-core {:mvn/version "0.7.2"}
+ metosin/reitit-core {:mvn/version "0.9.1"}
}
:aliases
{:outdated
@@ -14,7 +14,7 @@
:dev
{:extra-deps
- {thheller/shadow-cljs {:mvn/version "3.1.5"}}}
+ {thheller/shadow-cljs {:mvn/version "3.2.1"}}}
:shadow-cljs
{:main-opts ["-m" "shadow.cljs.devtools.cli"]
diff --git a/exporter/package.json b/exporter/package.json
index 3b9981ea6e..7422f99a04 100644
--- a/exporter/package.json
+++ b/exporter/package.json
@@ -4,29 +4,35 @@
"license": "MPL-2.0",
"author": "Kaleidos INC",
"private": true,
- "packageManager": "yarn@4.9.2+sha512.1fc009bc09d13cfd0e19efa44cbfc2b9cf6ca61482725eb35bbc5e257e093ebf4130db6dfe15d604ff4b79efd8e1e8e99b25fa7d0a6197c9f9826358d4d65c3c",
+ "packageManager": "yarn@4.10.3+sha512.c38cafb5c7bb273f3926d04e55e1d8c9dfa7d9c3ea1f36a4868fa028b9e5f72298f0b7f401ad5eb921749eb012eb1c3bb74bf7503df3ee43fd600d14a018266f",
"repository": {
"type": "git",
"url": "https://github.com/penpot/penpot"
},
+ "type": "module",
"dependencies": {
"archiver": "^7.0.1",
"cookies": "^0.9.1",
+ "date-fns": "^4.1.0",
"generic-pool": "^3.9.0",
"inflation": "^2.1.0",
- "ioredis": "^5.6.1",
- "luxon": "^3.6.1",
+ "ioredis": "^5.8.1",
"playwright": "^1.55.1",
- "raw-body": "^3.0.0",
+ "raw-body": "^3.0.1",
+ "source-map-support": "^0.5.21",
"svgo": "penpot/svgo#v3.1",
"xml-js": "^1.6.11",
"xregexp": "^5.1.2"
},
"devDependencies": {
- "source-map-support": "^0.5.21",
- "ws": "^8.18.2"
+ "ws": "^8.18.3"
},
"scripts": {
+ "clear:shadow-cache": "rm -rf .shadow-cljs && rm -rf target",
+ "watch:app": "clojure -M:dev:shadow-cljs watch main",
+ "watch": "yarn run clear:shadow-cache && yarn run watch:app",
+ "build:app": "clojure -M:dev:shadow-cljs release main",
+ "build": "yarn run clear:shadow-cache && yarn run build:app",
"fmt:clj:check": "cljfmt check --parallel=false src/",
"fmt:clj": "cljfmt fix --parallel=true src/",
"lint:clj": "clj-kondo --parallel --lint src/"
diff --git a/exporter/scripts/build b/exporter/scripts/build
index 4bd911fc00..4de1be2094 100755
--- a/exporter/scripts/build
+++ b/exporter/scripts/build
@@ -11,10 +11,7 @@ yarn install || exit 1;
rm -rf target
# Build the application
-clojure -M:dev:shadow-cljs release main;
-
-# Remove source
-rm -rf target/app;
+yarn run build;
# Copy package*.json files
cp ../.yarnrc.yml target/;
diff --git a/exporter/shadow-cljs.edn b/exporter/shadow-cljs.edn
index 9107cbcb7a..ae963cf311 100644
--- a/exporter/shadow-cljs.edn
+++ b/exporter/shadow-cljs.edn
@@ -3,13 +3,22 @@
:builds
{:main
- {:target :node-script
- :main app.core/main
- :output-to "target/app.js"
- :output-dir "target/app/"
+ {:target :esm
+ :runtime :node
+ :output-dir "target/"
:devtools {:before-load-async app.core/stop
:after-load app.core/start}
+ :modules
+ {:app
+ {:entries []
+ :init-fn app.core/main}}
+
+ :js-options
+ {:entry-keys ["module" "browser" "main"]
+ :export-conditions ["module" "import", "browser" "require" "default"]
+ :js-provider :import}
+
:compiler-options
{:output-feature-set :es2020
:output-wrapper false}
diff --git a/exporter/src/app/browser.cljs b/exporter/src/app/browser.cljs
index 46330ced58..816fb1c954 100644
--- a/exporter/src/app/browser.cljs
+++ b/exporter/src/app/browser.cljs
@@ -7,7 +7,7 @@
(ns app.browser
(:require
["generic-pool" :as gp]
- ["generic-pool/lib/errors" :as gpe]
+ ["generic-pool/lib/errors.js" :as gpe]
["playwright" :as pw]
[app.common.exceptions :as ex]
[app.common.logging :as l]
diff --git a/exporter/src/app/core.cljs b/exporter/src/app/core.cljs
index 6d30b9220d..dae498f5d3 100644
--- a/exporter/src/app/core.cljs
+++ b/exporter/src/app/core.cljs
@@ -6,7 +6,7 @@
(ns app.core
(:require
- ["process" :as proc]
+ ["node:process" :as proc]
[app.browser :as bwr]
[app.common.logging :as l]
[app.config :as cf]
@@ -41,9 +41,9 @@
(http/stop)
(done)))
-(proc/on "uncaughtException"
- (fn [cause]
- (js/console.error cause)))
+(.on proc/default "uncaughtException"
+ (fn [cause]
+ (js/console.error cause)))
-(proc/on "SIGTERM" (fn [] (proc/exit 0)))
-(proc/on "SIGINT" (fn [] (proc/exit 0)))
+(.on proc/default "SIGTERM" (fn [] (proc/exit 0)))
+(.on proc/default "SIGINT" (fn [] (proc/exit 0)))
diff --git a/exporter/src/app/handlers/resources.cljs b/exporter/src/app/handlers/resources.cljs
index 85fc174e56..8d78f861ae 100644
--- a/exporter/src/app/handlers/resources.cljs
+++ b/exporter/src/app/handlers/resources.cljs
@@ -7,9 +7,9 @@
(ns app.handlers.resources
"Temporal resources management."
(:require
- ["archiver" :as arc]
- ["fs" :as fs]
- ["path" :as path]
+ ["archiver$default" :as arc]
+ ["node:fs" :as fs]
+ ["node:path" :as path]
[app.common.exceptions :as ex]
[app.common.uuid :as uuid]
[app.util.mime :as mime]
diff --git a/exporter/src/app/http.cljs b/exporter/src/app/http.cljs
index acfb6e909d..0024ce8b86 100644
--- a/exporter/src/app/http.cljs
+++ b/exporter/src/app/http.cljs
@@ -6,11 +6,11 @@
(ns app.http
(:require
- ["cookies" :as Cookies]
- ["http" :as http]
- ["inflation" :as inflate]
- ["raw-body" :as raw-body]
- ["stream" :as stream]
+ ["cookies$default" :as Cookies]
+ ["inflation$default" :as inflate]
+ ["node:http" :as http]
+ ["node:stream$default" :as stream]
+ ["raw-body$default" :as raw-body]
[app.common.logging :as l]
[app.common.transit :as t]
[app.config :as cf]
@@ -169,6 +169,7 @@
(wrap-error handlers/on-error))
server (create-server handler)
port (cf/get :http-server-port 6061)]
+
(.listen server port)
(l/info :hint "welcome to penpot"
:module "exporter"
diff --git a/exporter/src/app/redis.cljs b/exporter/src/app/redis.cljs
index b04ccd0dee..0cc38ba3a9 100644
--- a/exporter/src/app/redis.cljs
+++ b/exporter/src/app/redis.cljs
@@ -18,7 +18,7 @@
(defn- create-client
[uri]
- (let [^js client (new redis uri)]
+ (let [^js client (new redis/default uri)]
(.on client "connect"
(fn [] (l/info :hint "redis connection established" :uri uri)))
(.on client "error"
diff --git a/exporter/yarn.lock b/exporter/yarn.lock
index 8c11bacc43..7d487e04a7 100644
--- a/exporter/yarn.lock
+++ b/exporter/yarn.lock
@@ -6,18 +6,18 @@ __metadata:
cacheKey: 10c0
"@babel/runtime-corejs3@npm:^7.26.9":
- version: 7.27.6
- resolution: "@babel/runtime-corejs3@npm:7.27.6"
+ version: 7.28.4
+ resolution: "@babel/runtime-corejs3@npm:7.28.4"
dependencies:
- core-js-pure: "npm:^3.30.2"
- checksum: 10c0/0ec7725824fdc3dd1e9580c1887ea60088d1cc3ec2fcfad9ccf54909262786b70e74f4b90513718d18f062a918b45add94c4dc243186f1423ed03cacf9935863
+ core-js-pure: "npm:^3.43.0"
+ checksum: 10c0/0a7fe2d4e36d345acf090dd685b5c6ed55af3ead69a84e2cfca56631815dd757f3a362031b376cc746f63f0fd856e7a5280807833f7fa9a5b7f1febd97f8c0da
languageName: node
linkType: hard
-"@ioredis/commands@npm:^1.1.1":
- version: 1.2.0
- resolution: "@ioredis/commands@npm:1.2.0"
- checksum: 10c0/a5d3c29dd84d8a28b7c67a441ac1715cbd7337a7b88649c0f17c345d89aa218578d2b360760017c48149ef8a70f44b051af9ac0921a0622c2b479614c4f65b36
+"@ioredis/commands@npm:1.4.0":
+ version: 1.4.0
+ resolution: "@ioredis/commands@npm:1.4.0"
+ checksum: 10c0/99afe21fba794f84a2b84cceabcc370a7622e7b8b97a6589456c07c9fa62a15d54c5546f6f7214fb9a2458b1fa87579d5c531aaf48e06cc9be156d5923892c8d
languageName: node
linkType: hard
@@ -97,9 +97,9 @@ __metadata:
linkType: hard
"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2":
- version: 7.1.3
- resolution: "agent-base@npm:7.1.3"
- checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11
+ version: 7.1.4
+ resolution: "agent-base@npm:7.1.4"
+ checksum: 10c0/c2c9ab7599692d594b6a161559ada307b7a624fa4c7b03e3afdb5a5e31cd0e53269115b620fcab024c5ac6a6f37fa5eb2e004f076ad30f5f7e6b8b671f7b35fe
languageName: node
linkType: hard
@@ -111,9 +111,9 @@ __metadata:
linkType: hard
"ansi-regex@npm:^6.0.1":
- version: 6.1.0
- resolution: "ansi-regex@npm:6.1.0"
- checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc
+ version: 6.2.2
+ resolution: "ansi-regex@npm:6.2.2"
+ checksum: 10c0/05d4acb1d2f59ab2cf4b794339c7b168890d44dda4bf0ce01152a8da0213aca207802f930442ce8cd22d7a92f44907664aac6508904e75e038fa944d2601b30f
languageName: node
linkType: hard
@@ -127,9 +127,9 @@ __metadata:
linkType: hard
"ansi-styles@npm:^6.1.0":
- version: 6.2.1
- resolution: "ansi-styles@npm:6.2.1"
- checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c
+ version: 6.2.3
+ resolution: "ansi-styles@npm:6.2.3"
+ checksum: 10c0/23b8a4ce14e18fb854693b95351e286b771d23d8844057ed2e7d083cd3e708376c3323707ec6a24365f7d7eda3ca00327fe04092e29e551499ec4c8b7bfac868
languageName: node
linkType: hard
@@ -171,9 +171,14 @@ __metadata:
linkType: hard
"b4a@npm:^1.6.4":
- version: 1.6.7
- resolution: "b4a@npm:1.6.7"
- checksum: 10c0/ec2f004d1daae04be8c5a1f8aeb7fea213c34025e279db4958eb0b82c1729ee25f7c6e89f92a5f65c8a9cf2d017ce27e3dda912403341d1781bd74528a4849d4
+ version: 1.7.3
+ resolution: "b4a@npm:1.7.3"
+ peerDependencies:
+ react-native-b4a: "*"
+ peerDependenciesMeta:
+ react-native-b4a:
+ optional: true
+ checksum: 10c0/ac16d186e00fa0d16de1f1a4af413953bc762d50d5a0e382aaa744a13886600313b7293403ad77fc83f6b1489c3fc2610494d1026754a51d1b7cdac2115a7598
languageName: node
linkType: hard
@@ -184,10 +189,10 @@ __metadata:
languageName: node
linkType: hard
-"bare-events@npm:^2.2.0":
- version: 2.5.4
- resolution: "bare-events@npm:2.5.4"
- checksum: 10c0/877a9cea73d545e2588cdbd6fd01653e27dac48ad6b44985cdbae73e1f57f292d4ba52e25d1fba53674c1053c463d159f3d5c7bc36a2e6e192e389b499ddd627
+"bare-events@npm:^2.7.0":
+ version: 2.7.0
+ resolution: "bare-events@npm:2.7.0"
+ checksum: 10c0/0057d26ee21c60bb304cae689dad343e2b3be2a17af26ec26d995c440b6f2c544aab294276626ced1dac9d35b4c5653d0a076a759190c69e1923dbd3e60f5e99
languageName: node
linkType: hard
@@ -318,10 +323,10 @@ __metadata:
languageName: node
linkType: hard
-"core-js-pure@npm:^3.30.2":
- version: 3.43.0
- resolution: "core-js-pure@npm:3.43.0"
- checksum: 10c0/b888513800543af7aac13b8e33eb5153d5a8304f11fe0ec7a331878df830dcb428c723ebd5266ae52b047ffb4a86750b384aed24de731b23bc5ebdbcf05aeec5
+"core-js-pure@npm:^3.43.0":
+ version: 3.45.1
+ resolution: "core-js-pure@npm:3.45.1"
+ checksum: 10c0/e1a31b0e1caee880d4fd93dbe4da34a1000fcd83ca1822f9aaa2433281807e21e4262fd474157d2b641da53b7cd465e744ba1c6dc146b1a00d57af44ec2e0d20
languageName: node
linkType: hard
@@ -363,15 +368,15 @@ __metadata:
linkType: hard
"css-select@npm:^5.1.0":
- version: 5.1.0
- resolution: "css-select@npm:5.1.0"
+ version: 5.2.2
+ resolution: "css-select@npm:5.2.2"
dependencies:
boolbase: "npm:^1.0.0"
css-what: "npm:^6.1.0"
domhandler: "npm:^5.0.2"
domutils: "npm:^3.0.1"
nth-check: "npm:^2.0.1"
- checksum: 10c0/551c60dba5b54054741032c1793b5734f6ba45e23ae9e82761a3c0ed1acbb8cfedfa443aaba3a3c1a54cac12b456d2012a09d2cd5f0e82e430454c1b9d84d500
+ checksum: 10c0/d79fffa97106007f2802589f3ed17b8c903f1c961c0fc28aa8a051eee0cbad394d8446223862efd4c1b40445a6034f626bb639cf2035b0bfc468544177593c99
languageName: node
linkType: hard
@@ -396,9 +401,9 @@ __metadata:
linkType: hard
"css-what@npm:^6.1.0":
- version: 6.1.0
- resolution: "css-what@npm:6.1.0"
- checksum: 10c0/a09f5a6b14ba8dcf57ae9a59474722e80f20406c53a61e9aedb0eedc693b135113ffe2983f4efc4b5065ae639442e9ae88df24941ef159c218b231011d733746
+ version: 6.2.2
+ resolution: "css-what@npm:6.2.2"
+ checksum: 10c0/91e24c26fb977b4ccef30d7007d2668c1c10ac0154cc3f42f7304410e9594fb772aea4f30c832d2993b132ca8d99338050866476210316345ec2e7d47b248a56
languageName: node
linkType: hard
@@ -411,15 +416,22 @@ __metadata:
languageName: node
linkType: hard
+"date-fns@npm:^4.1.0":
+ version: 4.1.0
+ resolution: "date-fns@npm:4.1.0"
+ checksum: 10c0/b79ff32830e6b7faa009590af6ae0fb8c3fd9ffad46d930548fbb5acf473773b4712ae887e156ba91a7b3dc30591ce0f517d69fd83bd9c38650fdc03b4e0bac8
+ languageName: node
+ linkType: hard
+
"debug@npm:4, debug@npm:^4.3.4":
- version: 4.4.1
- resolution: "debug@npm:4.4.1"
+ version: 4.4.3
+ resolution: "debug@npm:4.4.3"
dependencies:
ms: "npm:^2.1.3"
peerDependenciesMeta:
supports-color:
optional: true
- checksum: 10c0/d2b44bc1afd912b49bb7ebb0d50a860dc93a4dd7d946e8de94abc957bb63726b7dd5aa48c18c2386c379ec024c46692e15ed3ed97d481729f929201e671fcd55
+ checksum: 10c0/d79136ec6c83ecbefd0f6a5593da6a9c91ec4d7ddc4b54c883d6e71ec9accb5f67a1a5e96d00a328196b5b5c86d365e98d8a3a70856aaf16b4e7b1985e67f5a6
languageName: node
linkType: hard
@@ -533,6 +545,15 @@ __metadata:
languageName: node
linkType: hard
+"events-universal@npm:^1.0.0":
+ version: 1.0.1
+ resolution: "events-universal@npm:1.0.1"
+ dependencies:
+ bare-events: "npm:^2.7.0"
+ checksum: 10c0/a1d9a5e9f95843650f8ec240dd1221454c110189a9813f32cdf7185759b43f1f964367ac7dca4ebc69150b59043f2d77c7e122b0d03abf7c25477ea5494785a5
+ languageName: node
+ linkType: hard
+
"events@npm:^3.3.0":
version: 3.3.0
resolution: "events@npm:3.3.0"
@@ -553,15 +574,15 @@ __metadata:
dependencies:
archiver: "npm:^7.0.1"
cookies: "npm:^0.9.1"
+ date-fns: "npm:^4.1.0"
generic-pool: "npm:^3.9.0"
inflation: "npm:^2.1.0"
- ioredis: "npm:^5.6.1"
- luxon: "npm:^3.6.1"
+ ioredis: "npm:^5.8.1"
playwright: "npm:^1.55.1"
- raw-body: "npm:^3.0.0"
+ raw-body: "npm:^3.0.1"
source-map-support: "npm:^0.5.21"
svgo: "penpot/svgo#v3.1"
- ws: "npm:^8.18.2"
+ ws: "npm:^8.18.3"
xml-js: "npm:^1.6.11"
xregexp: "npm:^5.1.2"
languageName: unknown
@@ -574,15 +595,15 @@ __metadata:
languageName: node
linkType: hard
-"fdir@npm:^6.4.4":
- version: 6.4.6
- resolution: "fdir@npm:6.4.6"
+"fdir@npm:^6.5.0":
+ version: 6.5.0
+ resolution: "fdir@npm:6.5.0"
peerDependencies:
picomatch: ^3 || ^4
peerDependenciesMeta:
picomatch:
optional: true
- checksum: 10c0/45b559cff889934ebb8bc498351e5acba40750ada7e7d6bde197768d2fa67c149be8ae7f8ff34d03f4e1eb20f2764116e56440aaa2f6689e9a4aa7ef06acafe9
+ checksum: 10c0/e345083c4306b3aed6cb8ec551e26c36bab5c511e99ea4576a16750ddc8d3240e63826cc624f5ae17ad4dc82e68a253213b60d556c11bfad064b7607847ed07f
languageName: node
linkType: hard
@@ -694,7 +715,16 @@ __metadata:
languageName: node
linkType: hard
-"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2":
+"iconv-lite@npm:0.7.0":
+ version: 0.7.0
+ resolution: "iconv-lite@npm:0.7.0"
+ dependencies:
+ safer-buffer: "npm:>= 2.1.2 < 3.0.0"
+ checksum: 10c0/2382400469071c55b6746c531eed5fa4d033e5db6690b7331fb2a5f59a30d7a9782932e92253db26df33c1cf46fa200a3fbe524a2a7c62037c762283f188ec2f
+ languageName: node
+ linkType: hard
+
+"iconv-lite@npm:^0.6.2":
version: 0.6.3
resolution: "iconv-lite@npm:0.6.3"
dependencies:
@@ -731,11 +761,11 @@ __metadata:
languageName: node
linkType: hard
-"ioredis@npm:^5.6.1":
- version: 5.6.1
- resolution: "ioredis@npm:5.6.1"
+"ioredis@npm:^5.8.1":
+ version: 5.8.1
+ resolution: "ioredis@npm:5.8.1"
dependencies:
- "@ioredis/commands": "npm:^1.1.1"
+ "@ioredis/commands": "npm:1.4.0"
cluster-key-slot: "npm:^1.1.0"
debug: "npm:^4.3.4"
denque: "npm:^2.1.0"
@@ -744,17 +774,14 @@ __metadata:
redis-errors: "npm:^1.2.0"
redis-parser: "npm:^3.0.0"
standard-as-callback: "npm:^2.1.0"
- checksum: 10c0/26ae49cf448e807e454a9bdea5a9dfdcf669e2fdbf2df341900a0fb693c5662fea7e39db3227ce8972d1bda0ba7da9b7410e5163b12d8878a579548d847220ac
+ checksum: 10c0/4ed66444017150da027bce940a24bf726994691e2a7b3aa11d52f8aeb37f258068cc171af4d9c61247acafc28eb086fa8a7c79420b8e8d2907d2f74f39584465
languageName: node
linkType: hard
-"ip-address@npm:^9.0.5":
- version: 9.0.5
- resolution: "ip-address@npm:9.0.5"
- dependencies:
- jsbn: "npm:1.1.0"
- sprintf-js: "npm:^1.1.3"
- checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc
+"ip-address@npm:^10.0.1":
+ version: 10.0.1
+ resolution: "ip-address@npm:10.0.1"
+ checksum: 10c0/1634d79dae18394004775cb6d699dc46b7c23df6d2083164025a2b15240c1164fccde53d0e08bd5ee4fc53913d033ab6b5e395a809ad4b956a940c446e948843
languageName: node
linkType: hard
@@ -806,13 +833,6 @@ __metadata:
languageName: node
linkType: hard
-"jsbn@npm:1.1.0":
- version: 1.1.0
- resolution: "jsbn@npm:1.1.0"
- checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96
- languageName: node
- linkType: hard
-
"keygrip@npm:~1.1.0":
version: 1.1.0
resolution: "keygrip@npm:1.1.0"
@@ -859,13 +879,6 @@ __metadata:
languageName: node
linkType: hard
-"luxon@npm:^3.6.1":
- version: 3.6.1
- resolution: "luxon@npm:3.6.1"
- checksum: 10c0/906d57a9dc4d1de9383f2e9223e378c298607c1b4d17b6657b836a3cd120feb1c1de3b5d06d846a3417e1ca764de8476e8c23b3cd4083b5cdb870adcb06a99d5
- languageName: node
- linkType: hard
-
"make-fetch-happen@npm:^14.0.3":
version: 14.0.3
resolution: "make-fetch-happen@npm:14.0.3"
@@ -984,21 +997,12 @@ __metadata:
languageName: node
linkType: hard
-"minizlib@npm:^3.0.1":
- version: 3.0.2
- resolution: "minizlib@npm:3.0.2"
+"minizlib@npm:^3.0.1, minizlib@npm:^3.1.0":
+ version: 3.1.0
+ resolution: "minizlib@npm:3.1.0"
dependencies:
minipass: "npm:^7.1.2"
- checksum: 10c0/9f3bd35e41d40d02469cb30470c55ccc21cae0db40e08d1d0b1dff01cc8cc89a6f78e9c5d2b7c844e485ec0a8abc2238111213fdc5b2038e6d1012eacf316f78
- languageName: node
- linkType: hard
-
-"mkdirp@npm:^3.0.1":
- version: 3.0.1
- resolution: "mkdirp@npm:3.0.1"
- bin:
- mkdirp: dist/cjs/src/bin.js
- checksum: 10c0/9f2b975e9246351f5e3a40dcfac99fcd0baa31fbfab615fe059fb11e51f10e4803c63de1f384c54d656e4db31d000e4767e9ef076a22e12a641357602e31d57d
+ checksum: 10c0/5aad75ab0090b8266069c9aabe582c021ae53eb33c6c691054a13a45db3b4f91a7fb1bd79151e6b4e9e9a86727b522527c0a06ec7d45206b745d54cd3097bcec
languageName: node
linkType: hard
@@ -1017,8 +1021,8 @@ __metadata:
linkType: hard
"node-gyp@npm:latest":
- version: 11.2.0
- resolution: "node-gyp@npm:11.2.0"
+ version: 11.4.2
+ resolution: "node-gyp@npm:11.4.2"
dependencies:
env-paths: "npm:^2.2.0"
exponential-backoff: "npm:^3.1.1"
@@ -1032,7 +1036,7 @@ __metadata:
which: "npm:^5.0.0"
bin:
node-gyp: bin/node-gyp.js
- checksum: 10c0/bd8d8c76b06be761239b0c8680f655f6a6e90b48e44d43415b11c16f7e8c15be346fba0cbf71588c7cdfb52c419d928a7d3db353afc1d952d19756237d8f10b9
+ checksum: 10c0/0bfd3e96770ed70f07798d881dd37b4267708966d868a0e585986baac487d9cf5831285579fd629a83dc4e434f53e6416ce301097f2ee464cb74d377e4d8bdbe
languageName: node
linkType: hard
@@ -1094,10 +1098,10 @@ __metadata:
languageName: node
linkType: hard
-"picomatch@npm:^4.0.2":
- version: 4.0.2
- resolution: "picomatch@npm:4.0.2"
- checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc
+"picomatch@npm:^4.0.3":
+ version: 4.0.3
+ resolution: "picomatch@npm:4.0.3"
+ checksum: 10c0/9582c951e95eebee5434f59e426cddd228a7b97a0161a375aed4be244bd3fe8e3a31b846808ea14ef2c8a2527a6eeab7b3946a67d5979e81694654f939473ae2
languageName: node
linkType: hard
@@ -1156,15 +1160,15 @@ __metadata:
languageName: node
linkType: hard
-"raw-body@npm:^3.0.0":
- version: 3.0.0
- resolution: "raw-body@npm:3.0.0"
+"raw-body@npm:^3.0.1":
+ version: 3.0.1
+ resolution: "raw-body@npm:3.0.1"
dependencies:
bytes: "npm:3.1.2"
http-errors: "npm:2.0.0"
- iconv-lite: "npm:0.6.3"
+ iconv-lite: "npm:0.7.0"
unpipe: "npm:1.0.0"
- checksum: 10c0/f8daf4b724064a4811d118745a781ca0fb4676298b8adadfd6591155549cfea0a067523cf7dd3baeb1265fecc9ce5dfb2fc788c12c66b85202a336593ece0f87
+ checksum: 10c0/892f4fbd21ecab7e2fed0f045f7af9e16df7e8050879639d4e482784a2f4640aaaa33d916a0e98013f23acb82e09c2e3c57f84ab97104449f728d22f65a7d79a
languageName: node
linkType: hard
@@ -1314,12 +1318,12 @@ __metadata:
linkType: hard
"socks@npm:^2.8.3":
- version: 2.8.5
- resolution: "socks@npm:2.8.5"
+ version: 2.8.7
+ resolution: "socks@npm:2.8.7"
dependencies:
- ip-address: "npm:^9.0.5"
+ ip-address: "npm:^10.0.1"
smart-buffer: "npm:^4.2.0"
- checksum: 10c0/e427d0eb0451cfd04e20b9156ea8c0e9b5e38a8d70f21e55c30fbe4214eda37cfc25d782c63f9adc5fbdad6d062a0f127ef2cefc9a44b6fee2b9ea5d1ed10827
+ checksum: 10c0/2805a43a1c4bcf9ebf6e018268d87b32b32b06fbbc1f9282573583acc155860dc361500f89c73bfbb157caa1b4ac78059eac0ef15d1811eb0ca75e0bdadbc9d2
languageName: node
linkType: hard
@@ -1347,13 +1351,6 @@ __metadata:
languageName: node
linkType: hard
-"sprintf-js@npm:^1.1.3":
- version: 1.1.3
- resolution: "sprintf-js@npm:1.1.3"
- checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec
- languageName: node
- linkType: hard
-
"ssri@npm:^12.0.0":
version: 12.0.0
resolution: "ssri@npm:12.0.0"
@@ -1378,16 +1375,13 @@ __metadata:
linkType: hard
"streamx@npm:^2.15.0":
- version: 2.22.1
- resolution: "streamx@npm:2.22.1"
+ version: 2.23.0
+ resolution: "streamx@npm:2.23.0"
dependencies:
- bare-events: "npm:^2.2.0"
+ events-universal: "npm:^1.0.0"
fast-fifo: "npm:^1.3.2"
text-decoder: "npm:^1.1.0"
- dependenciesMeta:
- bare-events:
- optional: true
- checksum: 10c0/b5e489cca78ff23b910e7d58c3e0059e692f93ec401a5974689f2c50c33c9d94f64246a305566ad52cdb818ee583e02e4257b9066fd654cb9f576a9692fdb976
+ checksum: 10c0/15708ce37818d588632fe1104e8febde573e33e8c0868bf583fce0703f3faf8d2a063c278e30df2270206811b69997f64eb78792099933a1fe757e786fbcbd44
languageName: node
linkType: hard
@@ -1441,11 +1435,11 @@ __metadata:
linkType: hard
"strip-ansi@npm:^7.0.1":
- version: 7.1.0
- resolution: "strip-ansi@npm:7.1.0"
+ version: 7.1.2
+ resolution: "strip-ansi@npm:7.1.2"
dependencies:
ansi-regex: "npm:^6.0.1"
- checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4
+ checksum: 10c0/0d6d7a023de33368fd042aab0bf48f4f4077abdfd60e5393e73c7c411e85e1b3a83507c11af2e656188511475776215df9ca589b4da2295c9455cc399ce1858b
languageName: node
linkType: hard
@@ -1474,16 +1468,15 @@ __metadata:
linkType: hard
"tar@npm:^7.4.3":
- version: 7.4.3
- resolution: "tar@npm:7.4.3"
+ version: 7.5.1
+ resolution: "tar@npm:7.5.1"
dependencies:
"@isaacs/fs-minipass": "npm:^4.0.0"
chownr: "npm:^3.0.0"
minipass: "npm:^7.1.2"
- minizlib: "npm:^3.0.1"
- mkdirp: "npm:^3.0.1"
+ minizlib: "npm:^3.1.0"
yallist: "npm:^5.0.0"
- checksum: 10c0/d4679609bb2a9b48eeaf84632b6d844128d2412b95b6de07d53d8ee8baf4ca0857c9331dfa510390a0727b550fd543d4d1a10995ad86cdf078423fbb8d99831d
+ checksum: 10c0/0dad0596a61586180981133b20c32cfd93c5863c5b7140d646714e6ea8ec84583b879e5dc3928a4d683be6e6109ad7ea3de1cf71986d5194f81b3a016c8858c9
languageName: node
linkType: hard
@@ -1497,12 +1490,12 @@ __metadata:
linkType: hard
"tinyglobby@npm:^0.2.12":
- version: 0.2.14
- resolution: "tinyglobby@npm:0.2.14"
+ version: 0.2.15
+ resolution: "tinyglobby@npm:0.2.15"
dependencies:
- fdir: "npm:^6.4.4"
- picomatch: "npm:^4.0.2"
- checksum: 10c0/f789ed6c924287a9b7d3612056ed0cda67306cd2c80c249fd280cf1504742b12583a2089b61f4abbd24605f390809017240e250241f09938054c9b363e51c0a6
+ fdir: "npm:^6.5.0"
+ picomatch: "npm:^4.0.3"
+ checksum: 10c0/869c31490d0d88eedb8305d178d4c75e7463e820df5a9b9d388291daf93e8b1eb5de1dad1c1e139767e4269fe75f3b10d5009b2cc14db96ff98986920a186844
languageName: node
linkType: hard
@@ -1596,9 +1589,9 @@ __metadata:
languageName: node
linkType: hard
-"ws@npm:^8.18.2":
- version: 8.18.2
- resolution: "ws@npm:8.18.2"
+"ws@npm:^8.18.3":
+ version: 8.18.3
+ resolution: "ws@npm:8.18.3"
peerDependencies:
bufferutil: ^4.0.1
utf-8-validate: ">=5.0.2"
@@ -1607,7 +1600,7 @@ __metadata:
optional: true
utf-8-validate:
optional: true
- checksum: 10c0/4b50f67931b8c6943c893f59c524f0e4905bbd183016cfb0f2b8653aa7f28dad4e456b9d99d285bbb67cca4fedd9ce90dfdfaa82b898a11414ebd66ee99141e4
+ checksum: 10c0/eac918213de265ef7cb3d4ca348b891a51a520d839aa51cdb8ca93d4fa7ff9f6ccb339ccee89e4075324097f0a55157c89fa3f7147bde9d8d7e90335dc087b53
languageName: node
linkType: hard
diff --git a/frontend/deps.edn b/frontend/deps.edn
index fb10f8a5fd..3d4ff15c09 100644
--- a/frontend/deps.edn
+++ b/frontend/deps.edn
@@ -42,11 +42,11 @@
:dev
{:extra-paths ["dev"]
:extra-deps
- {thheller/shadow-cljs {:mvn/version "3.1.7"}
+ {thheller/shadow-cljs {:mvn/version "3.2.0"}
com.bhauman/rebel-readline {:mvn/version "RELEASE"}
org.clojure/tools.namespace {:mvn/version "RELEASE"}
criterium/criterium {:mvn/version "RELEASE"}
- cider/cider-nrepl {:mvn/version "0.56.0"}}}
+ cider/cider-nrepl {:mvn/version "0.57.0"}}}
:shadow-cljs
{:main-opts ["-m" "shadow.cljs.devtools.cli"]
diff --git a/frontend/package.json b/frontend/package.json
index d29fe75d5f..37612cd0e7 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -4,7 +4,7 @@
"license": "MPL-2.0",
"author": "Kaleidos INC",
"private": true,
- "packageManager": "yarn@4.9.2+sha512.1fc009bc09d13cfd0e19efa44cbfc2b9cf6ca61482725eb35bbc5e257e093ebf4130db6dfe15d604ff4b79efd8e1e8e99b25fa7d0a6197c9f9826358d4d65c3c",
+ "packageManager": "yarn@4.10.3+sha512.c38cafb5c7bb273f3926d04e55e1d8c9dfa7d9c3ea1f36a4868fa028b9e5f72298f0b7f401ad5eb921749eb012eb1c3bb74bf7503df3ee43fd600d14a018266f",
"browserslist": [
"defaults"
],
@@ -61,8 +61,8 @@
"@storybook/test-runner": "^0.22.0",
"@types/node": "^22.15.21",
"autoprefixer": "^10.4.21",
- "concurrently": "^9.1.2",
- "esbuild": "^0.25.5",
+ "concurrently": "^9.2.1",
+ "esbuild": "^0.25.9",
"express": "^5.1.0",
"fancy-log": "^2.0.0",
"getopts": "^2.3.0",
@@ -74,7 +74,7 @@
"gulp-rename": "^2.0.0",
"gulp-sourcemaps": "^3.0.0",
"gulp-svg-sprite": "^2.0.3",
- "jsdom": "^26.1.0",
+ "jsdom": "^27.0.0",
"map-stream": "0.0.7",
"marked": "^15.0.12",
"mkdirp": "^3.0.1",
@@ -92,7 +92,7 @@
"sass-embedded": "^1.89.0",
"storybook": "^8.6.14",
"svg-sprite": "^2.0.4",
- "typescript": "^5.8.3",
+ "typescript": "^5.9.2",
"vite": "^6.3.5",
"vitest": "^3.2.0",
"wasm-pack": "^0.13.1",
@@ -108,17 +108,17 @@
"@penpot/text-editor": "portal:./text-editor",
"@tokens-studio/sd-transforms": "1.2.11",
"@zip.js/zip.js": "patch:@zip.js/zip.js@npm%3A2.7.60#~/.yarn/patches/@zip.js-zip.js-npm-2.7.60-b6b814410b.patch",
- "compression": "^1.8.0",
+ "compression": "^1.8.1",
"date-fns": "^4.1.0",
- "eventsource-parser": "^3.0.2",
+ "eventsource-parser": "^3.0.6",
"js-beautify": "^1.15.4",
"lodash": "^4.17.21",
"lodash.debounce": "^4.0.8",
"opentype.js": "^1.3.4",
"postcss-modules": "^6.0.1",
"randomcolor": "^0.6.2",
- "react": "19.1.0",
- "react-dom": "19.1.0",
+ "react": "19.1.1",
+ "react-dom": "19.1.1",
"react-error-boundary": "^6.0.0",
"react-virtualized": "^9.22.6",
"rxjs": "8.0.0-alpha.14",
@@ -127,7 +127,7 @@
"style-dictionary": "5.0.0-rc.1",
"tdigest": "^0.1.2",
"tinycolor2": "^1.6.0",
- "ua-parser-js": "2.0.3",
+ "ua-parser-js": "2.0.5",
"xregexp": "^5.1.2"
}
}
diff --git a/frontend/playwright.config.js b/frontend/playwright.config.js
index 7496f7f4c8..8bbc0d00b9 100644
--- a/frontend/playwright.config.js
+++ b/frontend/playwright.config.js
@@ -23,6 +23,7 @@ export default defineConfig({
expect: {
timeout: process.env.CI ? 20000 : 5000,
},
+
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
reporter: "html",
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
@@ -62,7 +63,9 @@ export default defineConfig({
},
testDir: "./playwright/ui/render-wasm-specs",
snapshotPathTemplate: "{testDir}/{testFilePath}-snapshots/{arg}.png",
+ timeout: 2 * 60 * 1000,
expect: {
+ timeout: process.env.CI ? 20000 : 10000,
toHaveScreenshot: {
maxDiffPixelRatio: 0.001,
},
diff --git a/frontend/playwright/data/design/get-file-12287.json b/frontend/playwright/data/design/get-file-12287.json
new file mode 100644
index 0000000000..6a067537b4
--- /dev/null
+++ b/frontend/playwright/data/design/get-file-12287.json
@@ -0,0 +1,131 @@
+{
+ "~:features": {
+ "~#set": [
+ "fdata/path-data",
+ "plugins/runtime",
+ "design-tokens/v1",
+ "variants/v1",
+ "layout/grid",
+ "styles/v2",
+ "fdata/objects-map",
+ "components/v2",
+ "fdata/shape-data-type"
+ ]
+ },
+ "~:team-id": "~u3e5ffd68-2819-8084-8006-eb1c740c9873",
+ "~:permissions": {
+ "~:type": "~:membership",
+ "~:is-owner": true,
+ "~:is-admin": true,
+ "~:can-edit": true,
+ "~:can-read": true,
+ "~:is-logged": true
+ },
+ "~:has-media-trimmed": false,
+ "~:comment-thread-seqn": 0,
+ "~:name": "Bug 12287",
+ "~:revn": 1,
+ "~:modified-at": "~m1760447075612",
+ "~:vern": 0,
+ "~:id": "~u4bdef584-e28a-8155-8006-f3f8a71b382e",
+ "~:is-shared": false,
+ "~:migrations": {
+ "~#ordered-set": [
+ "legacy-2",
+ "legacy-3",
+ "legacy-5",
+ "legacy-6",
+ "legacy-7",
+ "legacy-8",
+ "legacy-9",
+ "legacy-10",
+ "legacy-11",
+ "legacy-12",
+ "legacy-13",
+ "legacy-14",
+ "legacy-16",
+ "legacy-17",
+ "legacy-18",
+ "legacy-19",
+ "legacy-25",
+ "legacy-26",
+ "legacy-27",
+ "legacy-28",
+ "legacy-29",
+ "legacy-31",
+ "legacy-32",
+ "legacy-33",
+ "legacy-34",
+ "legacy-36",
+ "legacy-37",
+ "legacy-38",
+ "legacy-39",
+ "legacy-40",
+ "legacy-41",
+ "legacy-42",
+ "legacy-43",
+ "legacy-44",
+ "legacy-45",
+ "legacy-46",
+ "legacy-47",
+ "legacy-48",
+ "legacy-49",
+ "legacy-50",
+ "legacy-51",
+ "legacy-52",
+ "legacy-53",
+ "legacy-54",
+ "legacy-55",
+ "legacy-56",
+ "legacy-57",
+ "legacy-59",
+ "legacy-62",
+ "legacy-65",
+ "legacy-66",
+ "legacy-67",
+ "0001-remove-tokens-from-groups",
+ "0002-normalize-bool-content-v2",
+ "0002-clean-shape-interactions",
+ "0003-fix-root-shape",
+ "0003-convert-path-content-v2",
+ "0004-clean-shadow-color",
+ "0005-deprecate-image-type",
+ "0006-fix-old-texts-fills",
+ "0007-clear-invalid-strokes-and-fills-v2",
+ "0008-fix-library-colors-v4",
+ "0009-clean-library-colors",
+ "0009-add-partial-text-touched-flags",
+ "0010-fix-swap-slots-pointing-non-existent-shapes",
+ "0011-fix-invalid-text-touched-flags",
+ "0012-fix-position-data",
+ "0013-fix-component-path",
+ "0014-fix-tokens-lib-duplicate-ids"
+ ]
+ },
+ "~:version": 67,
+ "~:project-id": "~u3e5ffd68-2819-8084-8006-eb1c740cecec",
+ "~:created-at": "~m1760447051884",
+ "~:backend": "legacy-db",
+ "~:data": {
+ "~:pages": [
+ "~u4bdef584-e28a-8155-8006-f3f8a71b382f"
+ ],
+ "~:pages-index": {
+ "~u4bdef584-e28a-8155-8006-f3f8a71b382f": {
+ "~:objects": {
+ "~#penpot/objects-map/v2": {
+ "~u00000000-0000-0000-0000-000000000000": "[\"~#shape\",[\"^ \",\"~:y\",0,\"~:hide-fill-on-export\",false,\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:name\",\"Root Frame\",\"~:width\",0.01,\"~:type\",\"~:frame\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",0.0,\"~:y\",0.0]],[\"^:\",[\"^ \",\"~:x\",0.01,\"~:y\",0.0]],[\"^:\",[\"^ \",\"~:x\",0.01,\"~:y\",0.01]],[\"^:\",[\"^ \",\"~:x\",0.0,\"~:y\",0.01]]],\"~:r2\",0,\"~:proportion-lock\",false,\"~:transform-inverse\",[\"^3\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:r3\",0,\"~:r1\",0,\"~:id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[],\"~:x\",0,\"~:proportion\",1.0,\"~:r4\",0,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",0,\"~:y\",0,\"^6\",0.01,\"~:height\",0.01,\"~:x1\",0,\"~:y1\",0,\"~:x2\",0.01,\"~:y2\",0.01]],\"~:fills\",[[\"^ \",\"~:fill-color\",\"#FFFFFF\",\"~:fill-opacity\",1]],\"~:flip-x\",null,\"^H\",0.01,\"~:flip-y\",null,\"~:shapes\",[\"~u7dd7d979-39c8-802f-8006-f3f8aa066134\"]]]",
+ "~u7dd7d979-39c8-802f-8006-f3f8aa066134": "[\"~#shape\",[\"^ \",\"~:y\",387,\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:grow-type\",\"~:auto-width\",\"~:content\",[\"^ \",\"~:type\",\"root\",\"~:key\",\"1sho7ukh86n\",\"~:children\",[[\"^ \",\"^7\",\"paragraph-set\",\"^9\",[[\"^ \",\"~:line-height\",\"1.2\",\"~:font-style\",\"normal\",\"^9\",[[\"^ \",\"^:\",\"1.2\",\"^;\",\"normal\",\"~:typography-ref-id\",null,\"~:text-transform\",\"none\",\"~:font-id\",\"sourcesanspro\",\"^8\",\"17twz8zxww7\",\"~:font-size\",\"14\",\"~:font-weight\",\"400\",\"~:typography-ref-file\",null,\"~:font-variant-id\",\"regular\",\"~:text-decoration\",\"none\",\"~:letter-spacing\",\"0\",\"~:fills\",[],\"~:font-family\",\"sourcesanspro\",\"~:text\",\"Lorem ipsum\"]],\"^<\",null,\"^=\",\"none\",\"~:text-align\",\"left\",\"^>\",\"sourcesanspro\",\"^8\",\"3nu9h9p6vg\",\"^?\",\"14\",\"^@\",\"400\",\"^A\",null,\"~:text-direction\",\"ltr\",\"^7\",\"paragraph\",\"^B\",\"regular\",\"^C\",\"none\",\"^D\",\"0\",\"^E\",[],\"^F\",\"sourcesanspro\"]]]],\"~:vertical-align\",\"top\"],\"~:hide-in-viewer\",false,\"~:name\",\"Lorem ipsum\",\"~:width\",77,\"^7\",\"^G\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",818,\"~:y\",387]],[\"^O\",[\"^ \",\"~:x\",895,\"~:y\",387]],[\"^O\",[\"^ \",\"~:x\",895,\"~:y\",404]],[\"^O\",[\"^ \",\"~:x\",818,\"~:y\",404]]],\"~:transform-inverse\",[\"^2\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:id\",\"~u7dd7d979-39c8-802f-8006-f3f8aa066134\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:position-data\",[[\"~#rect\",[\"^ \",\"~:y\",404.5,\"^;\",\"normal\",\"^=\",\"none\",\"^?\",\"14px\",\"^@\",\"400\",\"~:y1\",-1,\"^M\",76.5859375,\"^C\",\"none\",\"^D\",\"normal\",\"~:x\",818,\"~:x1\",0,\"~:y2\",17.5,\"^E\",[],\"~:x2\",76.5859375,\"~:direction\",\"ltr\",\"^F\",\"sourcesanspro\",\"~:height\",18.5,\"^G\",\"Lorem ipsum\"]]],\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:x\",818,\"~:selrect\",[\"^T\",[\"^ \",\"~:x\",818,\"~:y\",387,\"^M\",77,\"^Z\",17,\"^V\",818,\"^U\",387,\"^X\",895,\"^W\",404]],\"~:flip-x\",null,\"^Z\",17,\"~:flip-y\",null]]"
+ }
+ },
+ "~:id": "~u4bdef584-e28a-8155-8006-f3f8a71b382f",
+ "~:name": "Page 1"
+ }
+ },
+ "~:id": "~u4bdef584-e28a-8155-8006-f3f8a71b382e",
+ "~:options": {
+ "~:components-v2": true,
+ "~:base-font-size": "16px"
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontend/playwright/data/design/get-file-12384.json b/frontend/playwright/data/design/get-file-12384.json
new file mode 100644
index 0000000000..24aaabada6
--- /dev/null
+++ b/frontend/playwright/data/design/get-file-12384.json
@@ -0,0 +1,134 @@
+{
+ "~:features": {
+ "~#set": [
+ "fdata/path-data",
+ "plugins/runtime",
+ "design-tokens/v1",
+ "variants/v1",
+ "layout/grid",
+ "styles/v2",
+ "fdata/objects-map",
+ "render-wasm/v1",
+ "components/v2",
+ "fdata/shape-data-type"
+ ]
+ },
+ "~:team-id": "~u3e5ffd68-2819-8084-8006-eb1c616a5afd",
+ "~:permissions": {
+ "~:type": "~:membership",
+ "~:is-owner": true,
+ "~:is-admin": true,
+ "~:can-edit": true,
+ "~:can-read": true,
+ "~:is-logged": true
+ },
+ "~:has-media-trimmed": false,
+ "~:comment-thread-seqn": 0,
+ "~:name": "Bug 12384",
+ "~:revn": 4,
+ "~:modified-at": "~m1761124840773",
+ "~:vern": 0,
+ "~:id": "~ufa6ce865-34dd-80ac-8006-fe0dab5539a7",
+ "~:is-shared": false,
+ "~:migrations": {
+ "~#ordered-set": [
+ "legacy-2",
+ "legacy-3",
+ "legacy-5",
+ "legacy-6",
+ "legacy-7",
+ "legacy-8",
+ "legacy-9",
+ "legacy-10",
+ "legacy-11",
+ "legacy-12",
+ "legacy-13",
+ "legacy-14",
+ "legacy-16",
+ "legacy-17",
+ "legacy-18",
+ "legacy-19",
+ "legacy-25",
+ "legacy-26",
+ "legacy-27",
+ "legacy-28",
+ "legacy-29",
+ "legacy-31",
+ "legacy-32",
+ "legacy-33",
+ "legacy-34",
+ "legacy-36",
+ "legacy-37",
+ "legacy-38",
+ "legacy-39",
+ "legacy-40",
+ "legacy-41",
+ "legacy-42",
+ "legacy-43",
+ "legacy-44",
+ "legacy-45",
+ "legacy-46",
+ "legacy-47",
+ "legacy-48",
+ "legacy-49",
+ "legacy-50",
+ "legacy-51",
+ "legacy-52",
+ "legacy-53",
+ "legacy-54",
+ "legacy-55",
+ "legacy-56",
+ "legacy-57",
+ "legacy-59",
+ "legacy-62",
+ "legacy-65",
+ "legacy-66",
+ "legacy-67",
+ "0001-remove-tokens-from-groups",
+ "0002-normalize-bool-content-v2",
+ "0002-clean-shape-interactions",
+ "0003-fix-root-shape",
+ "0003-convert-path-content-v2",
+ "0004-clean-shadow-color",
+ "0005-deprecate-image-type",
+ "0006-fix-old-texts-fills",
+ "0008-fix-library-colors-v4",
+ "0009-clean-library-colors",
+ "0009-add-partial-text-touched-flags",
+ "0010-fix-swap-slots-pointing-non-existent-shapes",
+ "0011-fix-invalid-text-touched-flags",
+ "0012-fix-position-data",
+ "0013-fix-component-path",
+ "0013-clear-invalid-strokes-and-fills",
+ "0014-fix-tokens-lib-duplicate-ids",
+ "0014-clear-components-nil-objects"
+ ]
+ },
+ "~:version": 67,
+ "~:project-id": "~u3e5ffd68-2819-8084-8006-eb1c616e69bf",
+ "~:created-at": "~m1761123649876",
+ "~:backend": "legacy-db",
+ "~:data": {
+ "~:pages": [
+ "~ufa6ce865-34dd-80ac-8006-fe0dab5539a8"
+ ],
+ "~:pages-index": {
+ "~ufa6ce865-34dd-80ac-8006-fe0dab5539a8": {
+ "~:objects": {
+ "~#penpot/objects-map/v2": {
+ "~u00000000-0000-0000-0000-000000000000": "[\"~#shape\",[\"^ \",\"~:y\",0,\"~:hide-fill-on-export\",false,\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:name\",\"Root Frame\",\"~:width\",0.01,\"~:type\",\"~:frame\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",0.0,\"~:y\",0.0]],[\"^:\",[\"^ \",\"~:x\",0.01,\"~:y\",0.0]],[\"^:\",[\"^ \",\"~:x\",0.01,\"~:y\",0.01]],[\"^:\",[\"^ \",\"~:x\",0.0,\"~:y\",0.01]]],\"~:r2\",0,\"~:proportion-lock\",false,\"~:transform-inverse\",[\"^3\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:r3\",0,\"~:r1\",0,\"~:id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[],\"~:x\",0,\"~:proportion\",1.0,\"~:r4\",0,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",0,\"~:y\",0,\"^6\",0.01,\"~:height\",0.01,\"~:x1\",0,\"~:y1\",0,\"~:x2\",0.01,\"~:y2\",0.01]],\"~:fills\",[[\"^ \",\"~:fill-color\",\"#FFFFFF\",\"~:fill-opacity\",1]],\"~:flip-x\",null,\"^H\",0.01,\"~:flip-y\",null,\"~:shapes\",[\"~u3fc80ad6-7d08-8031-8006-fe0dba3fddf7\"]]]",
+ "~u3fc80ad6-7d08-8031-8006-fe0dba3fddf7": "[\"~#shape\",[\"^ \",\"~:y\",250,\"~:hide-fill-on-export\",false,\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:grow-type\",\"~:fixed\",\"~:hide-in-viewer\",false,\"~:name\",\"Board\",\"~:width\",265,\"~:type\",\"~:frame\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",616,\"~:y\",250]],[\"^=\",[\"^ \",\"~:x\",881,\"~:y\",250]],[\"^=\",[\"^ \",\"~:x\",881,\"~:y\",494]],[\"^=\",[\"^ \",\"~:x\",616,\"~:y\",494]]],\"~:r2\",0,\"~:proportion-lock\",false,\"~:transform-inverse\",[\"^3\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:exports\",[[\"^ \",\"^:\",\"~:png\",\"~:suffix\",\"\",\"~:scale\",1]],\"~:r3\",0,\"~:r1\",0,\"~:id\",\"~u3fc80ad6-7d08-8031-8006-fe0dba3fddf7\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[],\"~:x\",616,\"~:proportion\",1,\"~:r4\",0,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",616,\"~:y\",250,\"^9\",265,\"~:height\",244,\"~:x1\",616,\"~:y1\",250,\"~:x2\",881,\"~:y2\",494]],\"~:fills\",[[\"^ \",\"~:fill-color\",\"#FFFFFF\",\"~:fill-opacity\",1]],\"~:flip-x\",null,\"^O\",244,\"~:flip-y\",null,\"~:shapes\",[\"~u20a28a94-4ab0-801b-8006-fe0e8cee02c3\"]]]",
+ "~u20a28a94-4ab0-801b-8006-fe0e8cee02c3": "[\"~#shape\",[\"^ \",\"~:y\",297.00000381469727,\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:grow-type\",\"~:fixed\",\"~:hide-in-viewer\",false,\"~:name\",\"Rectangle\",\"~:width\",65,\"~:type\",\"~:rect\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",644.0000085830688,\"~:y\",297.00000381469727]],[\"^<\",[\"^ \",\"~:x\",709.0000085830688,\"~:y\",297.00000381469727]],[\"^<\",[\"^ \",\"~:x\",709.0000085830688,\"~:y\",362.00000381469727]],[\"^<\",[\"^ \",\"~:x\",644.0000085830688,\"~:y\",362.00000381469727]]],\"~:r2\",0,\"~:proportion-lock\",false,\"~:transform-inverse\",[\"^2\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:r3\",0,\"~:constraints-v\",\"~:top\",\"~:constraints-h\",\"~:left\",\"~:r1\",0,\"~:id\",\"~u20a28a94-4ab0-801b-8006-fe0e8cee02c3\",\"~:parent-id\",\"~u3fc80ad6-7d08-8031-8006-fe0dba3fddf7\",\"~:frame-id\",\"~u3fc80ad6-7d08-8031-8006-fe0dba3fddf7\",\"~:strokes\",[],\"~:x\",644.0000085830688,\"~:proportion\",1,\"~:r4\",0,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",644.0000085830688,\"~:y\",297.00000381469727,\"^8\",65,\"~:height\",65,\"~:x1\",644.0000085830688,\"~:y1\",297.00000381469727,\"~:x2\",709.0000085830688,\"~:y2\",362.00000381469727]],\"~:fills\",[[\"^ \",\"~:fill-color\",\"#B1B2B5\",\"~:fill-opacity\",1]],\"~:flip-x\",null,\"^N\",65,\"~:flip-y\",null]]"
+ }
+ },
+ "~:id": "~ufa6ce865-34dd-80ac-8006-fe0dab5539a8",
+ "~:name": "Page 1"
+ }
+ },
+ "~:id": "~ufa6ce865-34dd-80ac-8006-fe0dab5539a7",
+ "~:options": {
+ "~:components-v2": true,
+ "~:base-font-size": "16px"
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontend/playwright/data/render-wasm/get-file-12164.json b/frontend/playwright/data/render-wasm/get-file-12164.json
new file mode 100644
index 0000000000..48e81a5ce7
--- /dev/null
+++ b/frontend/playwright/data/render-wasm/get-file-12164.json
@@ -0,0 +1,352 @@
+{
+ "~:features": {
+ "~#set": [
+ "fdata/path-data",
+ "plugins/runtime",
+ "design-tokens/v1",
+ "variants/v1",
+ "layout/grid",
+ "styles/v2",
+ "fdata/objects-map",
+ "render-wasm/v1",
+ "components/v2",
+ "fdata/shape-data-type"
+ ]
+ },
+ "~:team-id": "~u9e6e22b2-db76-81d6-8006-75d7cdbb8bad",
+ "~:permissions": {
+ "~:type": "~:membership",
+ "~:is-owner": true,
+ "~:is-admin": true,
+ "~:can-edit": true,
+ "~:can-read": true,
+ "~:is-logged": true
+ },
+ "~:has-media-trimmed": false,
+ "~:comment-thread-seqn": 0,
+ "~:name": "Fonts 404",
+ "~:revn": 19,
+ "~:modified-at": "~m1759132541408",
+ "~:vern": 0,
+ "~:id": "~u2b7f0188-51a1-8193-8006-e05bad874e2e",
+ "~:is-shared": false,
+ "~:migrations": {
+ "~#ordered-set": [
+ "legacy-2",
+ "legacy-3",
+ "legacy-5",
+ "legacy-6",
+ "legacy-7",
+ "legacy-8",
+ "legacy-9",
+ "legacy-10",
+ "legacy-11",
+ "legacy-12",
+ "legacy-13",
+ "legacy-14",
+ "legacy-16",
+ "legacy-17",
+ "legacy-18",
+ "legacy-19",
+ "legacy-25",
+ "legacy-26",
+ "legacy-27",
+ "legacy-28",
+ "legacy-29",
+ "legacy-31",
+ "legacy-32",
+ "legacy-33",
+ "legacy-34",
+ "legacy-36",
+ "legacy-37",
+ "legacy-38",
+ "legacy-39",
+ "legacy-40",
+ "legacy-41",
+ "legacy-42",
+ "legacy-43",
+ "legacy-44",
+ "legacy-45",
+ "legacy-46",
+ "legacy-47",
+ "legacy-48",
+ "legacy-49",
+ "legacy-50",
+ "legacy-51",
+ "legacy-52",
+ "legacy-53",
+ "legacy-54",
+ "legacy-55",
+ "legacy-56",
+ "legacy-57",
+ "legacy-59",
+ "legacy-62",
+ "legacy-65",
+ "legacy-66",
+ "legacy-67",
+ "0001-remove-tokens-from-groups",
+ "0002-normalize-bool-content-v2",
+ "0002-clean-shape-interactions",
+ "0003-fix-root-shape",
+ "0003-convert-path-content-v2",
+ "0004-clean-shadow-color",
+ "0005-deprecate-image-type",
+ "0006-fix-old-texts-fills",
+ "0007-clear-invalid-strokes-and-fills-v2",
+ "0008-fix-library-colors-v4",
+ "0009-clean-library-colors",
+ "0009-add-partial-text-touched-flags",
+ "0010-fix-swap-slots-pointing-non-existent-shapes",
+ "0011-fix-invalid-text-touched-flags",
+ "0012-fix-position-data"
+ ]
+ },
+ "~:version": 67,
+ "~:project-id": "~u9e6e22b2-db76-81d6-8006-75d7cdc30669",
+ "~:created-at": "~m1759130833437",
+ "~:data": {
+ "~:pages": [
+ "~u2b7f0188-51a1-8193-8006-e05bad87b74d"
+ ],
+ "~:pages-index": {
+ "~u2b7f0188-51a1-8193-8006-e05bad87b74d": {
+ "~:objects": {
+ "~u00000000-0000-0000-0000-000000000000": {
+ "~#shape": {
+ "~:y": 0,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1.0,
+ "~:b": 0.0,
+ "~:c": 0.0,
+ "~:d": 1.0,
+ "~:e": 0.0,
+ "~:f": 0.0
+ }
+ },
+ "~:rotation": 0,
+ "~:name": "Root Frame",
+ "~:width": 0.01,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 0.0,
+ "~:y": 0.0
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 0.01,
+ "~:y": 0.0
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 0.01,
+ "~:y": 0.01
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 0.0,
+ "~:y": 0.01
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1.0,
+ "~:b": 0.0,
+ "~:c": 0.0,
+ "~:d": 1.0,
+ "~:e": 0.0,
+ "~:f": 0.0
+ }
+ },
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:id": "~u00000000-0000-0000-0000-000000000000",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [],
+ "~:x": 0,
+ "~:proportion": 1.0,
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 0,
+ "~:y": 0,
+ "~:width": 0.01,
+ "~:height": 0.01,
+ "~:x1": 0,
+ "~:y1": 0,
+ "~:x2": 0.01,
+ "~:y2": 0.01
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#FFFFFF",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 0.01,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u7871610d-0b65-80ab-8006-e05fca7deee1"
+ ]
+ }
+ },
+ "~u7871610d-0b65-80ab-8006-e05fca7deee1": {
+ "~#shape": {
+ "~:y": 300.99999215481324,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1.0,
+ "~:b": 0.0,
+ "~:c": 0.0,
+ "~:d": 1.0,
+ "~:e": 0.0,
+ "~:f": 0.0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1xox30r6xkg",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "italic",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "italic",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "gfont-crimson-pro",
+ "~:key": "12c4b2hqc44",
+ "~:font-size": "36",
+ "~:font-weight": "900",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "900italic",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "\"Crimson Pro\"",
+ "~:text": "Lorem ipsum"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "gfont-crimson-pro",
+ "~:key": "10rq28ntdbm",
+ "~:font-size": "0",
+ "~:font-weight": "900",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "900italic",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "\"Crimson Pro\""
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Lorem ispum",
+ "~:width": 210.00001307889704,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 313.00002239774085,
+ "~:y": 300.99999215481324
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 523.0000354766379,
+ "~:y": 300.99999215481324
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 523.0000354766379,
+ "~:y": 343.99999156766836
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 313.00002239774085,
+ "~:y": 343.99999156766836
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1.0,
+ "~:b": 0.0,
+ "~:c": 0.0,
+ "~:d": 1.0,
+ "~:e": 0.0,
+ "~:f": 0.0
+ }
+ },
+ "~:id": "~u7871610d-0b65-80ab-8006-e05fca7deee1",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:x": 313.00002239774085,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 313.00002239774085,
+ "~:y": 300.99999215481324,
+ "~:width": 210.00001307889704,
+ "~:height": 42.99999941285512,
+ "~:x1": 313.00002239774085,
+ "~:y1": 300.99999215481324,
+ "~:x2": 523.0000354766379,
+ "~:y2": 343.99999156766836
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 42.99999941285512,
+ "~:flip-y": null
+ }
+ }
+ },
+ "~:id": "~u2b7f0188-51a1-8193-8006-e05bad87b74d",
+ "~:name": "Page 1"
+ }
+ },
+ "~:id": "~u2b7f0188-51a1-8193-8006-e05bad874e2e",
+ "~:options": {
+ "~:components-v2": true,
+ "~:base-font-size": "16px"
+ }
+ }
+}
diff --git a/frontend/playwright/data/render-wasm/get-file-frame-clipping-shadows-and-texts.json b/frontend/playwright/data/render-wasm/get-file-frame-clipping-shadows-and-texts.json
new file mode 100644
index 0000000000..6a83bd58a3
--- /dev/null
+++ b/frontend/playwright/data/render-wasm/get-file-frame-clipping-shadows-and-texts.json
@@ -0,0 +1,1118 @@
+{
+ "~:features": {
+ "~#set": [
+ "fdata/path-data",
+ "plugins/runtime",
+ "design-tokens/v1",
+ "variants/v1",
+ "layout/grid",
+ "styles/v2",
+ "fdata/objects-map",
+ "render-wasm/v1",
+ "components/v2",
+ "fdata/shape-data-type"
+ ]
+ },
+ "~:team-id": "~u6bd7c17d-4f59-815e-8006-5c1f6882469a",
+ "~:permissions": {
+ "~:type": "~:membership",
+ "~:is-owner": true,
+ "~:is-admin": true,
+ "~:can-edit": true,
+ "~:can-read": true,
+ "~:is-logged": true
+ },
+ "~:has-media-trimmed": false,
+ "~:comment-thread-seqn": 0,
+ "~:name": "update-texts-shadows-clipping",
+ "~:revn": 258,
+ "~:modified-at": "~m1757428097435",
+ "~:vern": 0,
+ "~:id": "~u44471494-966a-8178-8006-c5bd93f0fe72",
+ "~:is-shared": false,
+ "~:migrations": {
+ "~#ordered-set": [
+ "legacy-2",
+ "legacy-3",
+ "legacy-5",
+ "legacy-6",
+ "legacy-7",
+ "legacy-8",
+ "legacy-9",
+ "legacy-10",
+ "legacy-11",
+ "legacy-12",
+ "legacy-13",
+ "legacy-14",
+ "legacy-16",
+ "legacy-17",
+ "legacy-18",
+ "legacy-19",
+ "legacy-25",
+ "legacy-26",
+ "legacy-27",
+ "legacy-28",
+ "legacy-29",
+ "legacy-31",
+ "legacy-32",
+ "legacy-33",
+ "legacy-34",
+ "legacy-36",
+ "legacy-37",
+ "legacy-38",
+ "legacy-39",
+ "legacy-40",
+ "legacy-41",
+ "legacy-42",
+ "legacy-43",
+ "legacy-44",
+ "legacy-45",
+ "legacy-46",
+ "legacy-47",
+ "legacy-48",
+ "legacy-49",
+ "legacy-50",
+ "legacy-51",
+ "legacy-52",
+ "legacy-53",
+ "legacy-54",
+ "legacy-55",
+ "legacy-56",
+ "legacy-57",
+ "legacy-59",
+ "legacy-62",
+ "legacy-65",
+ "legacy-66",
+ "legacy-67",
+ "0001-remove-tokens-from-groups",
+ "0002-normalize-bool-content-v2",
+ "0002-clean-shape-interactions",
+ "0003-fix-root-shape",
+ "0003-convert-path-content-v2",
+ "0004-clean-shadow-color",
+ "0005-deprecate-image-type",
+ "0006-fix-old-texts-fills",
+ "0007-clear-invalid-strokes-and-fills-v2",
+ "0008-fix-library-colors-v4",
+ "0009-clean-library-colors",
+ "0009-add-partial-text-touched-flags",
+ "0010-fix-swap-slots-pointing-non-existent-shapes"
+ ]
+ },
+ "~:version": 67,
+ "~:project-id": "~u6bd7c17d-4f59-815e-8006-5c1f68846e43",
+ "~:created-at": "~m1757344558019",
+ "~:data": {
+ "~:pages": [
+ "~u44471494-966a-8178-8006-c5bd93f0fe73"
+ ],
+ "~:pages-index": {
+ "~u44471494-966a-8178-8006-c5bd93f0fe73": {
+ "~:objects": {
+ "~u00000000-0000-0000-0000-000000000000": {
+ "~#shape": {
+ "~:y": 0,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:name": "Root Frame",
+ "~:width": 0.01,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 0,
+ "~:y": 0
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 0.01,
+ "~:y": 0
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 0.01,
+ "~:y": 0.01
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 0,
+ "~:y": 0.01
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:id": "~u00000000-0000-0000-0000-000000000000",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [],
+ "~:x": 0,
+ "~:proportion": 1,
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 0,
+ "~:y": 0,
+ "~:width": 0.01,
+ "~:height": 0.01,
+ "~:x1": 0,
+ "~:y1": 0,
+ "~:x2": 0.01,
+ "~:y2": 0.01
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#FFFFFF",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 0.01,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u4c99f1a5-5581-806f-8006-c6e810ac2d64",
+ "~u33e48bf0-9bf8-80a1-8006-c6f8b48ee6e6"
+ ]
+ }
+ },
+ "~u33e48bf0-9bf8-80a1-8006-c6f8b48ee6e8": {
+ "~#shape": {
+ "~:y": 232.22042756482634,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 0.9443738873933403,
+ "~:b": -0.32887377640911275,
+ "~:c": 0.32887369880559447,
+ "~:d": 0.9443739144183976,
+ "~:e": 2.2737367544323206e-13,
+ "~:f": 6.821210263296962e-13
+ }
+ },
+ "~:rotation": 340.79956734260065,
+ "~:last-resize-direction": "~:vertical",
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1otdj8747ov",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1ppxneff2xr",
+ "~:font-size": "400",
+ "~:font-weight": "400",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#147bd7",
+ "~:fill-opacity": 0.43333333333333335
+ }
+ ],
+ "~:font-family": "sourcesanspro",
+ "~:text": "HOLA"
+ }
+ ],
+ "~:text-transform": "none",
+ "~:text-align": "justify",
+ "~:font-id": "sourcesanspro",
+ "~:key": "2afvsygzvt",
+ "~:font-size": "400",
+ "~:font-weight": "400",
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#147bd7",
+ "~:fill-opacity": 0.43333333333333335
+ }
+ ],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "HOLA",
+ "~:width": 939.9999777779914,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -141.00000230643664,
+ "~:y": 400.1413168166523
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 746.7113407198956,
+ "~:y": 91.00002923471884
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 904.5708240747189,
+ "~:y": 544.2995494560472
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 16.85948104838637,
+ "~:y": 853.44083703798
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 0.9443739144184007,
+ "~:b": 0.32887377640911386,
+ "~:c": -0.3288736988055956,
+ "~:d": 0.9443738873933434,
+ "~:e": 9.60589704809217e-15,
+ "~:f": -7.189545246067483e-13
+ }
+ },
+ "~:page-id": "~u9502081a-e1a4-80bc-8006-c2b96872319a",
+ "~:layout-item-v-sizing": "~:fix",
+ "~:constraints-v": "~:top",
+ "~:constraints-h": "~:left",
+ "~:id": "~u33e48bf0-9bf8-80a1-8006-c6f8b48ee6e8",
+ "~:parent-id": "~u33e48bf0-9bf8-80a1-8006-c6f8b48ee6e6",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 731.7204275648263,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "400px",
+ "~:font-weight": "400",
+ "~:y1": -19.5,
+ "~:width": 939.2666625976562,
+ "~:text-decoration": "rgba(20, 123, 215, 0.433)",
+ "~:letter-spacing": "normal",
+ "~:x": -88.2145780048542,
+ "~:x1": 0,
+ "~:y2": 499.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#147bd7",
+ "~:fill-opacity": 0.43333333333333335
+ }
+ ],
+ "~:x2": 939.2666625976562,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 519,
+ "~:text": "HOLA"
+ }
+ }
+ ],
+ "~:frame-id": "~u33e48bf0-9bf8-80a1-8006-c6f8b48ee6e6",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 10,
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -88.2145780048542,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#1900ff",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": -10,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~u56e0aa75-f920-805c-8006-c6d0a7251cac",
+ "~:offset-x": -10
+ },
+ {
+ "~:color": {
+ "~:color": "#ea1111",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 20,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~u757a30c8-2a19-8062-8006-bdd7693703f6",
+ "~:offset-x": 20
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -88.2145780048542,
+ "~:y": 232.22042756482634,
+ "~:width": 939.9999777779914,
+ "~:height": 480.00001114304814,
+ "~:x1": -88.2145780048542,
+ "~:y1": 232.22042756482634,
+ "~:x2": 851.7853997731372,
+ "~:y2": 712.2204387078745
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 480.00001114304814,
+ "~:flip-y": null
+ }
+ },
+ "~u4c99f1a5-5581-806f-8006-c6e810ac2d66": {
+ "~#shape": {
+ "~:y": -580.7795287106788,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 0.9443738873933403,
+ "~:b": -0.32887377640911275,
+ "~:c": 0.32887369880559447,
+ "~:d": 0.9443739144183976,
+ "~:e": 2.2737367544323206e-13,
+ "~:f": 6.821210263296962e-13
+ }
+ },
+ "~:rotation": 340.79956734260065,
+ "~:last-resize-direction": "~:vertical",
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1otdj8747ov",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1ppxneff2xr",
+ "~:font-size": "400",
+ "~:font-weight": "400",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#b1b2b5",
+ "~:fill-opacity": 0.35555555555555557
+ }
+ ],
+ "~:font-family": "sourcesanspro",
+ "~:text": "HOLA"
+ }
+ ],
+ "~:text-transform": "none",
+ "~:text-align": "justify",
+ "~:font-id": "sourcesanspro",
+ "~:key": "2afvsygzvt",
+ "~:font-size": "400",
+ "~:font-weight": "400",
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#b1b2b5",
+ "~:fill-opacity": 0.35555555555555557
+ }
+ ],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "HOLA",
+ "~:width": 939.9999553167295,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -141.00001536206545,
+ "~:y": -412.8586424988404
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 746.7115201226542,
+ "~:y": -722.0000288567821
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 904.5708952607965,
+ "~:y": -268.70055649684616
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 16.859359776077056,
+ "~:y": 40.44082986109797
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 0.9443739144184007,
+ "~:b": 0.32887377640911386,
+ "~:c": -0.3288736988055956,
+ "~:d": 0.9443738873933434,
+ "~:e": 9.60589704809217e-15,
+ "~:f": -7.189545246067483e-13
+ }
+ },
+ "~:page-id": "~u9502081a-e1a4-80bc-8006-c2b96872319a",
+ "~:layout-item-v-sizing": "~:fix",
+ "~:constraints-v": "~:top",
+ "~:constraints-h": "~:left",
+ "~:id": "~u4c99f1a5-5581-806f-8006-c6e810ac2d66",
+ "~:parent-id": "~u4c99f1a5-5581-806f-8006-c6e810ac2d64",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": -81.27952871067885,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "400px",
+ "~:font-weight": "400",
+ "~:y1": -19.5,
+ "~:width": 939.2666625976562,
+ "~:text-decoration": "rgba(177, 178, 181, 0.356)",
+ "~:letter-spacing": "normal",
+ "~:x": -88.21453770899959,
+ "~:x1": 0,
+ "~:y2": 499.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#b1b2b5",
+ "~:fill-opacity": 0.35555555555555557
+ }
+ ],
+ "~:x2": 939.2666625976562,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 519,
+ "~:text": "HOLA"
+ }
+ }
+ ],
+ "~:frame-id": "~u4c99f1a5-5581-806f-8006-c6e810ac2d64",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 10,
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 0.4166666666666667
+ }
+ ],
+ "~:x": -88.21453770899959,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#1900ff",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": -10,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~u56e0aa75-f920-805c-8006-c6d0a7251cac",
+ "~:offset-x": -10
+ },
+ {
+ "~:color": {
+ "~:color": "#ea1111",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 20,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~u757a30c8-2a19-8062-8006-bdd7693703f6",
+ "~:offset-x": 20
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -88.21453770899959,
+ "~:y": -580.7795287106788,
+ "~:width": 939.9999553167295,
+ "~:height": 479.99985842567,
+ "~:x1": -88.21453770899959,
+ "~:y1": -580.7795287106788,
+ "~:x2": 851.7854176077299,
+ "~:y2": -100.77967028500882
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 479.99985842567,
+ "~:flip-y": null
+ }
+ },
+ "~u4c99f1a5-5581-806f-8006-c6e810ac2d64": {
+ "~#shape": {
+ "~:y": -574.9999832321141,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": true,
+ "~:name": "Board",
+ "~:width": 1103.9998207331741,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -186.99999775378137,
+ "~:y": -574.9999848183147
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 916.9998229793928,
+ "~:y": -574.9999816459126
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 916.9998208253946,
+ "~:y": -40.55006952257736
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -186.9999999077786,
+ "~:y": -40.55007269497946
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:show-content": false,
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:page-id": "~u9502081a-e1a4-80bc-8006-c2b96872319a",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:hidden": false,
+ "~:opacity": 0.8,
+ "~:id": "~u4c99f1a5-5581-806f-8006-c6e810ac2d64",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:center",
+ "~:stroke-width": 10,
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -186.99999883077953,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ffb200",
+ "~:opacity": 0.5888888888888889
+ },
+ "~:spread": 0,
+ "~:offset-y": -40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~u56e0aa75-f920-805c-8006-c6d0be01f1e7",
+ "~:offset-x": -40
+ },
+ {
+ "~:color": {
+ "~:color": "#00d514",
+ "~:opacity": 0.5555555555555556
+ },
+ "~:spread": 0,
+ "~:offset-y": 50,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ucac62c62-a28f-80cc-8006-c5bf5784705d",
+ "~:offset-x": 50
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -186.99999883077953,
+ "~:y": -574.9999832321141,
+ "~:width": 1103.9998207331741,
+ "~:height": 534.4499121233357,
+ "~:x1": -186.99999883077953,
+ "~:y1": -574.9999832321141,
+ "~:x2": 916.9998219023946,
+ "~:y2": -40.55007110877841
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 534.4499121233357,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u4c99f1a5-5581-806f-8006-c6e810ac2d65",
+ "~u4c99f1a5-5581-806f-8006-c6e810ac2d66"
+ ]
+ }
+ },
+ "~u4c99f1a5-5581-806f-8006-c6e810ac2d65": {
+ "~#shape": {
+ "~:y": -142.05052225711233,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 0.9876772541628087,
+ "~:b": -0.15650444597331514,
+ "~:c": 0.1565043820633818,
+ "~:d": 0.987677264289788,
+ "~:e": 1.864464138634503e-11,
+ "~:f": 1.5916157281026244e-11
+ }
+ },
+ "~:rotation": 350.9959394515914,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Rectangle",
+ "~:width": 224.8679636613706,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 813.9999374477284,
+ "~:y": -123.8071608518776
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1036.0969103459738,
+ "~:y": -158.99999692184792
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1052.5298639971734,
+ "~:y": -55.2939249740125
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 830.4328910989279,
+ "~:y": -20.101088904041262
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 0.9876772642897899,
+ "~:b": 0.15650444597331545,
+ "~:c": -0.1565043820633821,
+ "~:d": 0.9876772541628106,
+ "~:e": -1.592394003803884e-11,
+ "~:f": -1.8637995790688502e-11
+ }
+ },
+ "~:page-id": "~u9502081a-e1a4-80bc-8006-c2b96872319a",
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:id": "~u4c99f1a5-5581-806f-8006-c6e810ac2d65",
+ "~:parent-id": "~u4c99f1a5-5581-806f-8006-c6e810ac2d64",
+ "~:frame-id": "~u4c99f1a5-5581-806f-8006-c6e810ac2d64",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 10
+ }
+ ],
+ "~:x": 820.8309188917665,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#3d53e5",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 20,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~u718f9fbe-f44a-80dc-8006-c6989bce7b0d",
+ "~:offset-x": 20
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 820.8309188917665,
+ "~:y": -142.05052225711233,
+ "~:width": 224.8679636613706,
+ "~:height": 104.99995868833639,
+ "~:x1": 820.8309188917665,
+ "~:y1": -142.05052225711233,
+ "~:x2": 1045.698882553137,
+ "~:y2": -37.05056356877594
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#e17fda",
+ "~:fill-opacity": 0.3388888888888889
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 104.99995868833639,
+ "~:flip-y": null
+ }
+ },
+ "~u33e48bf0-9bf8-80a1-8006-c6f8b48ee6e7": {
+ "~#shape": {
+ "~:y": 670.9495170155224,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 0.9876772541628087,
+ "~:b": -0.15650444597331514,
+ "~:c": 0.1565043820633818,
+ "~:d": 0.987677264289788,
+ "~:e": 1.864464138634503e-11,
+ "~:f": 1.5916157281026244e-11
+ }
+ },
+ "~:rotation": 350.9959394515914,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Rectangle",
+ "~:width": 224.8679636613715,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 814.0000142069011,
+ "~:y": 689.1928784207576
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1036.0969871051466,
+ "~:y": 654.0000423507863
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1052.5299407563462,
+ "~:y": 757.7061142986222
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 830.4329678580998,
+ "~:y": 792.8989503685934
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 0.9876772642897899,
+ "~:b": 0.15650444597331545,
+ "~:c": -0.1565043820633821,
+ "~:d": 0.9876772541628106,
+ "~:e": -1.592394003803884e-11,
+ "~:f": -1.8637995790688502e-11
+ }
+ },
+ "~:page-id": "~u9502081a-e1a4-80bc-8006-c2b96872319a",
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:id": "~u33e48bf0-9bf8-80a1-8006-c6f8b48ee6e7",
+ "~:parent-id": "~u33e48bf0-9bf8-80a1-8006-c6f8b48ee6e6",
+ "~:frame-id": "~u33e48bf0-9bf8-80a1-8006-c6f8b48ee6e6",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 10
+ }
+ ],
+ "~:x": 820.8309956509383,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#3d53e5",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 20,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~u718f9fbe-f44a-80dc-8006-c6989bce7b0d",
+ "~:offset-x": 20
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 820.8309956509383,
+ "~:y": 670.9495170155224,
+ "~:width": 224.8679636613715,
+ "~:height": 104.99995868833685,
+ "~:x1": 820.8309956509383,
+ "~:y1": 670.9495170155224,
+ "~:x2": 1045.6989593123099,
+ "~:y2": 775.9494757038592
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#e17fda",
+ "~:fill-opacity": 0.3388888888888889
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 104.99995868833685,
+ "~:flip-y": null
+ }
+ },
+ "~u33e48bf0-9bf8-80a1-8006-c6f8b48ee6e6": {
+ "~#shape": {
+ "~:y": 237.99999500536433,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": true,
+ "~:name": "Board",
+ "~:width": 1103.9998207331746,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -186.99999728855437,
+ "~:y": 237.99999341916373
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 916.9998234446202,
+ "~:y": 237.99999659156583
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 916.9998212906212,
+ "~:y": 772.4499087149015
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -186.9999994425516,
+ "~:y": 772.4499055424985
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:show-content": true,
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:page-id": "~u9502081a-e1a4-80bc-8006-c2b96872319a",
+ "~:r3": 0,
+ "~:blur": {
+ "~:id": "~u61d06cb5-830a-802f-8006-c6f910826daa",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": false
+ },
+ "~:r1": 0,
+ "~:hidden": false,
+ "~:opacity": 0.8,
+ "~:id": "~u33e48bf0-9bf8-80a1-8006-c6f8b48ee6e6",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:center",
+ "~:stroke-width": 10,
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -186.99999836555253,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ffb200",
+ "~:opacity": 0.5888888888888889
+ },
+ "~:spread": 0,
+ "~:offset-y": -40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~u56e0aa75-f920-805c-8006-c6d0be01f1e7",
+ "~:offset-x": -40
+ },
+ {
+ "~:color": {
+ "~:color": "#00d514",
+ "~:opacity": 0.5555555555555556
+ },
+ "~:spread": 0,
+ "~:offset-y": 50,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ucac62c62-a28f-80cc-8006-c5bf5784705d",
+ "~:offset-x": 50
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -186.99999836555253,
+ "~:y": 237.99999500536433,
+ "~:width": 1103.9998207331746,
+ "~:height": 534.4499121233357,
+ "~:x1": -186.99999836555253,
+ "~:y1": 237.99999500536433,
+ "~:x2": 916.9998223676221,
+ "~:y2": 772.4499071287
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 534.4499121233357,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u33e48bf0-9bf8-80a1-8006-c6f8b48ee6e7",
+ "~u33e48bf0-9bf8-80a1-8006-c6f8b48ee6e8"
+ ]
+ }
+ }
+ },
+ "~:id": "~u44471494-966a-8178-8006-c5bd93f0fe73",
+ "~:name": "Page 1"
+ }
+ },
+ "~:id": "~u44471494-966a-8178-8006-c5bd93f0fe72",
+ "~:options": {
+ "~:components-v2": true,
+ "~:base-font-size": "16px"
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontend/playwright/data/render-wasm/get-file-shadows.json b/frontend/playwright/data/render-wasm/get-file-shadows.json
new file mode 100644
index 0000000000..31bec85517
--- /dev/null
+++ b/frontend/playwright/data/render-wasm/get-file-shadows.json
@@ -0,0 +1,10098 @@
+{
+ "~:features": {
+ "~#set": [
+ "fdata/path-data",
+ "plugins/runtime",
+ "design-tokens/v1",
+ "variants/v1",
+ "layout/grid",
+ "styles/v2",
+ "fdata/pointer-map",
+ "fdata/objects-map",
+ "render-wasm/v1",
+ "components/v2",
+ "fdata/shape-data-type"
+ ]
+ },
+ "~:team-id": "~ueba8fa2e-4140-8084-8005-448635d7a724",
+ "~:permissions": {
+ "~:type": "~:membership",
+ "~:is-owner": true,
+ "~:is-admin": true,
+ "~:can-edit": true,
+ "~:can-read": true,
+ "~:is-logged": true
+ },
+ "~:has-media-trimmed": false,
+ "~:comment-thread-seqn": 0,
+ "~:name": "New File 6",
+ "~:revn": 1,
+ "~:modified-at": "~m1757142143405",
+ "~:vern": 0,
+ "~:id": "~u9502081a-e1a4-80bc-8006-c2b968723199",
+ "~:is-shared": false,
+ "~:migrations": {
+ "~#ordered-set": [
+ "legacy-2",
+ "legacy-3",
+ "legacy-5",
+ "legacy-6",
+ "legacy-7",
+ "legacy-8",
+ "legacy-9",
+ "legacy-10",
+ "legacy-11",
+ "legacy-12",
+ "legacy-13",
+ "legacy-14",
+ "legacy-16",
+ "legacy-17",
+ "legacy-18",
+ "legacy-19",
+ "legacy-25",
+ "legacy-26",
+ "legacy-27",
+ "legacy-28",
+ "legacy-29",
+ "legacy-31",
+ "legacy-32",
+ "legacy-33",
+ "legacy-34",
+ "legacy-36",
+ "legacy-37",
+ "legacy-38",
+ "legacy-39",
+ "legacy-40",
+ "legacy-41",
+ "legacy-42",
+ "legacy-43",
+ "legacy-44",
+ "legacy-45",
+ "legacy-46",
+ "legacy-47",
+ "legacy-48",
+ "legacy-49",
+ "legacy-50",
+ "legacy-51",
+ "legacy-52",
+ "legacy-53",
+ "legacy-54",
+ "legacy-55",
+ "legacy-56",
+ "legacy-57",
+ "legacy-59",
+ "legacy-62",
+ "legacy-65",
+ "legacy-66",
+ "legacy-67",
+ "0001-remove-tokens-from-groups",
+ "0002-normalize-bool-content-v2",
+ "0002-clean-shape-interactions",
+ "0003-fix-root-shape",
+ "0003-convert-path-content-v2",
+ "0004-clean-shadow-color",
+ "0005-deprecate-image-type",
+ "0006-fix-old-texts-fills",
+ "0007-clear-invalid-strokes-and-fills-v2",
+ "0008-fix-library-colors-v4",
+ "0009-clean-library-colors",
+ "0009-add-partial-text-touched-flags",
+ "0010-fix-swap-slots-pointing-non-existent-shapes"
+ ]
+ },
+ "~:version": 67,
+ "~:project-id": "~ueba8fa2e-4140-8084-8005-448635da32b4",
+ "~:created-at": "~m1757142138312",
+ "~:data": {
+ "~:pages": [
+ "~u9502081a-e1a4-80bc-8006-c2b96872319a"
+ ],
+ "~:pages-index": {
+ "~u9502081a-e1a4-80bc-8006-c2b96872319a": {
+ "~:objects": {
+ "~u00000000-0000-0000-0000-000000000000": {
+ "~#shape": {
+ "~:y": 0,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:name": "Root Frame",
+ "~:width": 0.01,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 0,
+ "~:y": 0
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 0.01,
+ "~:y": 0
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 0.01,
+ "~:y": 0.01
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 0,
+ "~:y": 0.01
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:id": "~u00000000-0000-0000-0000-000000000000",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [],
+ "~:x": 0,
+ "~:proportion": 1,
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 0,
+ "~:y": 0,
+ "~:width": 0.01,
+ "~:height": 0.01,
+ "~:x1": 0,
+ "~:y1": 0,
+ "~:x2": 0.01,
+ "~:y2": 0.01
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#FFFFFF",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 0.01,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc7fdf",
+ "~u813630e3-7f07-80da-8006-c2b969bc7fe2",
+ "~u813630e3-7f07-80da-8006-c2b969bc7fe4",
+ "~u813630e3-7f07-80da-8006-c2b969bc7fe5",
+ "~u813630e3-7f07-80da-8006-c2b969bc7fe6",
+ "~u813630e3-7f07-80da-8006-c2b969bc7fe7",
+ "~u813630e3-7f07-80da-8006-c2b969bc7fe8",
+ "~u813630e3-7f07-80da-8006-c2b969bc7fe9",
+ "~u813630e3-7f07-80da-8006-c2b969bc7fea",
+ "~u813630e3-7f07-80da-8006-c2b969bc7feb",
+ "~u813630e3-7f07-80da-8006-c2b969bc7fec",
+ "~u813630e3-7f07-80da-8006-c2b969bc7fed",
+ "~u813630e3-7f07-80da-8006-c2b969bc7fee",
+ "~u813630e3-7f07-80da-8006-c2b969bc7fef",
+ "~u813630e3-7f07-80da-8006-c2b969bc7ff0",
+ "~u813630e3-7f07-80da-8006-c2b969bc7ff1",
+ "~u813630e3-7f07-80da-8006-c2b969bc7ff2",
+ "~u813630e3-7f07-80da-8006-c2b969bc7ff3",
+ "~u813630e3-7f07-80da-8006-c2b969bc7ff4",
+ "~u813630e3-7f07-80da-8006-c2b969bc7ff5",
+ "~u813630e3-7f07-80da-8006-c2b969bc7ff6",
+ "~u813630e3-7f07-80da-8006-c2b969bc7ff9",
+ "~u813630e3-7f07-80da-8006-c2b969bc9bdc",
+ "~u813630e3-7f07-80da-8006-c2b969bc9bde",
+ "~u813630e3-7f07-80da-8006-c2b969bc9be0",
+ "~u813630e3-7f07-80da-8006-c2b969bc9be2",
+ "~u813630e3-7f07-80da-8006-c2b969bc9be4",
+ "~u813630e3-7f07-80da-8006-c2b969bc9be6",
+ "~u813630e3-7f07-80da-8006-c2b969bc9be8",
+ "~u813630e3-7f07-80da-8006-c2b969bc9bea",
+ "~u813630e3-7f07-80da-8006-c2b969bc9bec",
+ "~u813630e3-7f07-80da-8006-c2b969bc9bee",
+ "~u813630e3-7f07-80da-8006-c2b969bc9bf0",
+ "~u813630e3-7f07-80da-8006-c2b969bc9bf2",
+ "~u813630e3-7f07-80da-8006-c2b969bc9bf4",
+ "~u813630e3-7f07-80da-8006-c2b969bc9bf6",
+ "~u813630e3-7f07-80da-8006-c2b969bc9bf8",
+ "~u813630e3-7f07-80da-8006-c2b969bc9bfa",
+ "~u813630e3-7f07-80da-8006-c2b969bc9bfb",
+ "~u813630e3-7f07-80da-8006-c2b969bc9bfc",
+ "~u813630e3-7f07-80da-8006-c2b969bc9bfd",
+ "~u813630e3-7f07-80da-8006-c2b969bc9bfe",
+ "~u813630e3-7f07-80da-8006-c2b969bc9bff",
+ "~u813630e3-7f07-80da-8006-c2b969bc9c00",
+ "~u813630e3-7f07-80da-8006-c2b969bc9c01",
+ "~u813630e3-7f07-80da-8006-c2b969bc9c02",
+ "~u813630e3-7f07-80da-8006-c2b969bc9c03",
+ "~u813630e3-7f07-80da-8006-c2b969bc9c04",
+ "~u813630e3-7f07-80da-8006-c2b969bc9c05",
+ "~u813630e3-7f07-80da-8006-c2b969bc9c06",
+ "~u813630e3-7f07-80da-8006-c2b969bc9c07",
+ "~u813630e3-7f07-80da-8006-c2b969bc9c08",
+ "~u813630e3-7f07-80da-8006-c2b969bc9c09",
+ "~u813630e3-7f07-80da-8006-c2b969bc9c0a",
+ "~u813630e3-7f07-80da-8006-c2b969bc9c0b",
+ "~u813630e3-7f07-80da-8006-c2b969bc9c0c",
+ "~u813630e3-7f07-80da-8006-c2b969bc9c0e",
+ "~u813630e3-7f07-80da-8006-c2b969bc9c10",
+ "~u813630e3-7f07-80da-8006-c2b969bc9c12",
+ "~u813630e3-7f07-80da-8006-c2b969bc9c14"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7fe0": {
+ "~#shape": {
+ "~:y": 4864.79091500983,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 0.875521645611856,
+ "~:b": -0.483178898613245,
+ "~:c": 0.483178842426414,
+ "~:d": 0.875521676619982,
+ "~:e": 1.00044417195022e-11,
+ "~:f": 1.38697942020372e-11
+ }
+ },
+ "~:rotation": 331.106771530248,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Rectangle",
+ "~:width": 224.867986830995,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 4678.00025480242,
+ "~:y": 4925.65175652314
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4874.87704467812,
+ "~:y": 4817.00029031276
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4925.61079542329,
+ "~:y": 4908.93001614796
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4728.73400554759,
+ "~:y": 5017.58148235834
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 0.875521676619987,
+ "~:b": 0.483178898613247,
+ "~:c": -0.483178842426416,
+ "~:d": 0.87552164561186,
+ "~:e": -2.05751448067259e-12,
+ "~:f": -1.69772401753349e-11
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7fe0",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc7fdf",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc7fdf",
+ "~:strokes": [],
+ "~:x": 4689.37153169736,
+ "~:proportion": 1,
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 4689.37153169736,
+ "~:y": 4864.79091500983,
+ "~:width": 224.867986830995,
+ "~:height": 104.999942651446,
+ "~:x1": 4689.37153169736,
+ "~:y1": 4864.79091500983,
+ "~:x2": 4914.23951852835,
+ "~:y2": 4969.79085766127
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 104.999942651446,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9be0": {
+ "~#shape": {
+ "~:y": 2566.00032561364,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77a",
+ "~:width": 476.175917084897,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1270.00003131535,
+ "~:y": 2566.00032561364
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1746.17594840024,
+ "~:y": 2566.00032561364
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1746.17594840024,
+ "~:y": 3042.00034766736
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1270.00003131535,
+ "~:y": 3042.00034766736
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:show-content": false,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:blur": {
+ "~:id": "~u5339c9ee-d6a8-80a6-8006-b710cd2ce7d6",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": true
+ },
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9be0",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#ff0202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 1270.00003131535,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#010101",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u59bee4d9-ff40-808f-8006-b6070426becf",
+ "~:offset-x": 40
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1270.00003131535,
+ "~:y": 2566.00032561364,
+ "~:width": 476.175917084897,
+ "~:height": 476.000022053719,
+ "~:x1": 1270.00003131535,
+ "~:y1": 2566.00032561364,
+ "~:x2": 1746.17594840024,
+ "~:y2": 3042.00034766736
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 476.000022053719,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc9be1"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9c00": {
+ "~#shape": {
+ "~:y": 1481.00031547019,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Ellipse",
+ "~:width": 192,
+ "~:type": "~:circle",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1237.00011775044,
+ "~:y": 1481.00031547019
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1429.00011775044,
+ "~:y": 1481.00031547019
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1429.00011775044,
+ "~:y": 1660.00031547019
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1237.00011775044,
+ "~:y": 1660.00031547019
+ }
+ }
+ ],
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9c00",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 20
+ }
+ ],
+ "~:x": 1237.00011775044,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#e10808",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ueb1e2a26-b3c3-8058-8006-b3a19119cecb",
+ "~:offset-x": 40
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1237.00011775044,
+ "~:y": 1481.00031547019,
+ "~:width": 192,
+ "~:height": 179,
+ "~:x1": 1237.00011775044,
+ "~:y1": 1481.00031547019,
+ "~:x2": 1429.00011775044,
+ "~:y2": 1660.00031547019
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 179,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7fe1": {
+ "~#shape": {
+ "~:y": 5005.52952441881,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 0.875521645343034,
+ "~:b": -0.48317889910035,
+ "~:c": 0.483178913552956,
+ "~:d": 0.875521637366997,
+ "~:e": -9.09494701772928e-13,
+ "~:f": -4.09272615797818e-12
+ }
+ },
+ "~:rotation": 331.106771530248,
+ "~:grow-type": "~:fixed",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1otdj8747ov",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1ppxneff2xr",
+ "~:font-size": "400",
+ "~:font-weight": "400",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro",
+ "~:text": "HOLA"
+ }
+ ],
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "2afvsygzvt",
+ "~:font-size": "400",
+ "~:font-weight": "400",
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "HOLA",
+ "~:width": 986.211331368466,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 4062.0000545014,
+ "~:y": 5267.51689202866
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4925.44942199707,
+ "~:y": 4791.00038665776
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 5109.66469806955,
+ "~:y": 5124.79901820196
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4246.21533057388,
+ "~:y": 5601.31552357287
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 0.875521637366997,
+ "~:b": 0.48317889910035,
+ "~:c": -0.483178913552956,
+ "~:d": 0.875521645343034,
+ "~:e": -1.18123668800882e-12,
+ "~:f": 4.02271898851177e-12
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:constraints-v": "~:top",
+ "~:constraints-h": "~:left",
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7fe1",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc7fdf",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc7fdf",
+ "~:strokes": [],
+ "~:x": 4092.72671060124,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ea1212",
+ "~:opacity": 0.4
+ },
+ "~:spread": 0,
+ "~:offset-y": 20,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u757a30c8-2a19-8062-8006-bdd7693703f6",
+ "~:offset-x": 20
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 4092.72671060124,
+ "~:y": 5005.52952441881,
+ "~:width": 986.211331368466,
+ "~:height": 381.256861393003,
+ "~:x1": 4092.72671060124,
+ "~:y1": 5005.52952441881,
+ "~:x2": 5078.93804196971,
+ "~:y2": 5386.78638581181
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 381.256861393003,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9be1": {
+ "~#shape": {
+ "~:y": 2925.00035033024,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77b",
+ "~:width": 270.929997403396,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1628.0000529461,
+ "~:y": 2925.00035033024
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1898.9300503495,
+ "~:y": 2925.00035033024
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1898.9300503495,
+ "~:y": 3195.93160099633
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1628.0000529461,
+ "~:y": 3195.93160099633
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:hidden": false,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9be1",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc9be0",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc9be0",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#0109fd",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 1628.0000529461,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#094ae0",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 50,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": true,
+ "~:id": "~udca35925-f5a2-8083-8006-b60be22fea0c",
+ "~:offset-x": 50
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1628.0000529461,
+ "~:y": 2925.00035033024,
+ "~:width": 270.929997403396,
+ "~:height": 270.931250666089,
+ "~:x1": 1628.0000529461,
+ "~:y1": 2925.00035033024,
+ "~:x2": 1898.9300503495,
+ "~:y2": 3195.93160099633
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 270.931250666089,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9c01": {
+ "~#shape": {
+ "~:y": 1481.00031547019,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Ellipse",
+ "~:width": 192,
+ "~:type": "~:circle",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 875.00011775044,
+ "~:y": 1481.00031547019
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1067.00011775044,
+ "~:y": 1481.00031547019
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1067.00011775044,
+ "~:y": 1660.00031547019
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 875.00011775044,
+ "~:y": 1660.00031547019
+ }
+ }
+ ],
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9c01",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:center",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 20
+ }
+ ],
+ "~:x": 875.00011775044,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#e10808",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ueb1e2a26-b3c3-8058-8006-b3a19119cecb",
+ "~:offset-x": 40
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 875.00011775044,
+ "~:y": 1481.00031547019,
+ "~:width": 192,
+ "~:height": 179,
+ "~:x1": 875.00011775044,
+ "~:y1": 1481.00031547019,
+ "~:x2": 1067.00011775044,
+ "~:y2": 1660.00031547019
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 179,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7fe2": {
+ "~#shape": {
+ "~:y": 3766.45120593457,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 0.875521645210578,
+ "~:b": -0.483178899340361,
+ "~:c": 0.483178898327598,
+ "~:d": 0.875521645769497,
+ "~:e": 9.09494701772928e-13,
+ "~:f": 2.27373675443232e-13
+ }
+ },
+ "~:rotation": 331.106771530248,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Board",
+ "~:width": 1103.99984135388,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 3740.00013797052,
+ "~:y": 4066.4296434044
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4706.57589538488,
+ "~:y": 3533.0002151871
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4964.81081995927,
+ "~:y": 4000.92269057062
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3998.23506254491,
+ "~:y": 4534.35211878792
+ }
+ }
+ ],
+ "~:r2": 20,
+ "~:show-content": false,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 0.875521645769497,
+ "~:b": 0.483178899340361,
+ "~:c": -0.483178898327598,
+ "~:d": 0.875521645210578,
+ "~:e": -6.86420136105515e-13,
+ "~:f": -6.38519223360168e-13
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 20,
+ "~:r1": 20,
+ "~:opacity": 0.8,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7fe2",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:center",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 20
+ }
+ ],
+ "~:x": 3800.40555828795,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#140a67",
+ "~:opacity": 0.4
+ },
+ "~:spread": 0,
+ "~:offset-y": 300,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~ud2b53ca8-aebb-8099-8006-bdabce5cb46c",
+ "~:offset-x": 300
+ }
+ ],
+ "~:r4": 20,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 3800.40555828795,
+ "~:y": 3766.45120593457,
+ "~:width": 1103.99984135388,
+ "~:height": 534.449922105886,
+ "~:x1": 3800.40555828795,
+ "~:y1": 3766.45120593457,
+ "~:x2": 4904.40539964183,
+ "~:y2": 4300.90112804045
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 534.449922105886,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc7fe3"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9be2": {
+ "~#shape": {
+ "~:y": 4981.00042962585,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77a",
+ "~:width": 476.175917084896,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 490.000059192417,
+ "~:y": 4981.00042962585
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 966.175976277314,
+ "~:y": 4981.00042962585
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 966.175976277314,
+ "~:y": 5457.00045167957
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 490.000059192417,
+ "~:y": 5457.00045167957
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:show-content": true,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:blur": {
+ "~:id": "~u5339c9ee-d6a8-80a6-8006-b710cd2ce7d6",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": true
+ },
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9be2",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#ff0202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 490.000059192417,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#010101",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u59bee4d9-ff40-808f-8006-b6070426becf",
+ "~:offset-x": 40
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 490.000059192417,
+ "~:y": 4981.00042962585,
+ "~:width": 476.175917084896,
+ "~:height": 476.000022053719,
+ "~:x1": 490.000059192417,
+ "~:y1": 4981.00042962585,
+ "~:x2": 966.175976277314,
+ "~:y2": 5457.00045167957
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 476.000022053719,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc9be3"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9c02": {
+ "~#shape": {
+ "~:y": 1481.00031547019,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Ellipse",
+ "~:width": 192,
+ "~:type": "~:circle",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 513.00011775044,
+ "~:y": 1481.00031547019
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 705.00011775044,
+ "~:y": 1481.00031547019
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 705.00011775044,
+ "~:y": 1660.00031547019
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 513.00011775044,
+ "~:y": 1660.00031547019
+ }
+ }
+ ],
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9c02",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 20
+ }
+ ],
+ "~:x": 513.00011775044,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#e10808",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ueb1e2a26-b3c3-8058-8006-b3a19119cecb",
+ "~:offset-x": 40
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 513.00011775044,
+ "~:y": 1481.00031547019,
+ "~:width": 192,
+ "~:height": 179,
+ "~:x1": 513.00011775044,
+ "~:y1": 1481.00031547019,
+ "~:x2": 705.00011775044,
+ "~:y2": 1660.00031547019
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 179,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7fe3": {
+ "~#shape": {
+ "~:y": 3947.52954822035,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 0.875521645343034,
+ "~:b": -0.48317889910035,
+ "~:c": 0.483178913552956,
+ "~:d": 0.875521637366997,
+ "~:e": -9.09494701772928e-13,
+ "~:f": -4.09272615797818e-12
+ }
+ },
+ "~:rotation": 331.106771530248,
+ "~:grow-type": "~:fixed",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1otdj8747ov",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1ppxneff2xr",
+ "~:font-size": "400",
+ "~:font-weight": "400",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro",
+ "~:text": "HOLA"
+ }
+ ],
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "2afvsygzvt",
+ "~:font-size": "400",
+ "~:font-weight": "400",
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "HOLA",
+ "~:width": 986.211331368466,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 3997.00007371149,
+ "~:y": 4209.51691583021
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4860.44944120715,
+ "~:y": 3733.0004104593
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 5044.66471727964,
+ "~:y": 4066.7990420035
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4181.21534978397,
+ "~:y": 4543.31554737441
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 0.875521637366997,
+ "~:b": 0.48317889910035,
+ "~:c": -0.483178913552956,
+ "~:d": 0.875521645343034,
+ "~:e": -1.18123668800882e-12,
+ "~:f": 4.02271898851177e-12
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:constraints-v": "~:top",
+ "~:constraints-h": "~:left",
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7fe3",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc7fe2",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc7fe2",
+ "~:strokes": [],
+ "~:x": 4027.72672981133,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ea1212",
+ "~:opacity": 0.4
+ },
+ "~:spread": 0,
+ "~:offset-y": 20,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u757a30c8-2a19-8062-8006-bdd7693703f6",
+ "~:offset-x": 20
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 4027.72672981133,
+ "~:y": 3947.52954822035,
+ "~:width": 986.211331368466,
+ "~:height": 381.256861393003,
+ "~:x1": 4027.72672981133,
+ "~:y1": 3947.52954822035,
+ "~:x2": 5013.9380611798,
+ "~:y2": 4328.78640961336
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 381.256861393003,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9be3": {
+ "~#shape": {
+ "~:y": 5340.0002407194,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77b",
+ "~:width": 270.929997403396,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 848.000050305598,
+ "~:y": 5340.0002407194
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1118.93004770899,
+ "~:y": 5340.0002407194
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1118.93004770899,
+ "~:y": 5610.93149138549
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 848.000050305598,
+ "~:y": 5610.93149138549
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:hidden": false,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9be3",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc9be2",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc9be2",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#0109fd",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 848.000050305598,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#094ae0",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 50,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": true,
+ "~:id": "~udca35925-f5a2-8083-8006-b60be22fea0c",
+ "~:offset-x": 50
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 848.000050305598,
+ "~:y": 5340.0002407194,
+ "~:width": 270.929997403396,
+ "~:height": 270.93125066609,
+ "~:x1": 848.000050305598,
+ "~:y1": 5340.0002407194,
+ "~:x2": 1118.93004770899,
+ "~:y2": 5610.93149138549
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 270.93125066609,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9c03": {
+ "~#shape": {
+ "~:y": 1199.0003002114,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Ellipse",
+ "~:width": 192,
+ "~:type": "~:circle",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1237.00011775044,
+ "~:y": 1199.0003002114
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1429.00011775044,
+ "~:y": 1199.0003002114
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1429.00011775044,
+ "~:y": 1378.0003002114
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1237.00011775044,
+ "~:y": 1378.0003002114
+ }
+ }
+ ],
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9c03",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 20
+ }
+ ],
+ "~:x": 1237.00011775044,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#e10808",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ueb1e2a26-b3c3-8058-8006-b3a19119cecb",
+ "~:offset-x": 40
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1237.00011775044,
+ "~:y": 1199.0003002114,
+ "~:width": 192,
+ "~:height": 179,
+ "~:x1": 1237.00011775044,
+ "~:y1": 1199.0003002114,
+ "~:x2": 1429.00011775044,
+ "~:y2": 1378.0003002114
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 0.6
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 179,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7fe4": {
+ "~#shape": {
+ "~:y": null,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:content": {
+ "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAD/vyBFIS8PRQMAAAD/vyBFIS8PRR8gMUX9lQdF//8wRRAWCEUDAAAA298wRSOWCEW7qyxFAQAVRburLEUBABVFAgAAAAAAAAAAAAAAAAAAAAAAAAD/vyBFIS8PRQ=="
+ },
+ "~:name": "Path",
+ "~:width": null,
+ "~:type": "~:path",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2572.00010497607,
+ "~:y": 2177.00026073771
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2831.99922798953,
+ "~:y": 2177.00026073771
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2831.99922798953,
+ "~:y": 2384.00021746085
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2572.00010497607,
+ "~:y": 2384.00021746085
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:blur": {
+ "~:id": "~u08e9047b-7a98-8007-8006-c2b806fd3f80",
+ "~:type": "~:layer-blur",
+ "~:value": 8,
+ "~:hidden": false
+ },
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7fe4",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": null,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#de1111",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 80,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u70873f92-ec4b-8045-8006-b3a396ef1fe7",
+ "~:offset-x": 80
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2572.00010497607,
+ "~:y": 2177.00026073771,
+ "~:width": 259.999123013458,
+ "~:height": 206.999956723148,
+ "~:x1": 2572.00010497607,
+ "~:y1": 2177.00026073771,
+ "~:x2": 2831.99922798953,
+ "~:y2": 2384.00021746085
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": null,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9be4": {
+ "~#shape": {
+ "~:y": 4981.00042962585,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77a",
+ "~:width": 476.175917084897,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1270.00001192184,
+ "~:y": 4981.00042962585
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1746.17592900674,
+ "~:y": 4981.00042962585
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1746.17592900674,
+ "~:y": 5457.00045167957
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1270.00001192184,
+ "~:y": 5457.00045167957
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:show-content": false,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:blur": {
+ "~:id": "~u5339c9ee-d6a8-80a6-8006-b710cd2ce7d6",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": true
+ },
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9be4",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#ff0202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 1270.00001192184,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#010101",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u59bee4d9-ff40-808f-8006-b6070426becf",
+ "~:offset-x": 40
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1270.00001192184,
+ "~:y": 4981.00042962585,
+ "~:width": 476.175917084897,
+ "~:height": 476.000022053719,
+ "~:x1": 1270.00001192184,
+ "~:y1": 4981.00042962585,
+ "~:x2": 1746.17592900674,
+ "~:y2": 5457.00045167957
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 476.000022053719,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc9be5"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9c04": {
+ "~#shape": {
+ "~:y": 1199.0003002114,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Ellipse",
+ "~:width": 192,
+ "~:type": "~:circle",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 875.00011775044,
+ "~:y": 1199.0003002114
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1067.00011775044,
+ "~:y": 1199.0003002114
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1067.00011775044,
+ "~:y": 1378.0003002114
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 875.00011775044,
+ "~:y": 1378.0003002114
+ }
+ }
+ ],
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9c04",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:center",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 20
+ }
+ ],
+ "~:x": 875.00011775044,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#e10808",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ueb1e2a26-b3c3-8058-8006-b3a19119cecb",
+ "~:offset-x": 40
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 875.00011775044,
+ "~:y": 1199.0003002114,
+ "~:width": 192,
+ "~:height": 179,
+ "~:x1": 875.00011775044,
+ "~:y1": 1199.0003002114,
+ "~:x2": 1067.00011775044,
+ "~:y2": 1378.0003002114
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 0.6
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 179,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7fe5": {
+ "~#shape": {
+ "~:y": null,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:content": {
+ "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAD/XwVFIS8PRQMAAAD/XwVFIS8PRR/AFUX9lQdF/58VRRAWCEUDAAAA338VRSOWCEW7SxFFAQAVRbtLEUUBABVFAgAAAAAAAAAAAAAAAAAAAAAAAAD/XwVFIS8PRQ=="
+ },
+ "~:name": "Path",
+ "~:width": null,
+ "~:type": "~:path",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2134.00001815048,
+ "~:y": 2177.00029083787
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2393.99914116394,
+ "~:y": 2177.00029083787
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2393.99914116394,
+ "~:y": 2384.00024756102
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2134.00001815048,
+ "~:y": 2384.00024756102
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:blur": {
+ "~:id": "~u08e9047b-7a98-8007-8006-c2b806fd6d62",
+ "~:type": "~:layer-blur",
+ "~:value": 8,
+ "~:hidden": false
+ },
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7fe5",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:center",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": null,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#de1111",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 80,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u70873f92-ec4b-8045-8006-b3a396ef1fe7",
+ "~:offset-x": 80
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2134.00001815048,
+ "~:y": 2177.00029083787,
+ "~:width": 259.999123013458,
+ "~:height": 206.999956723148,
+ "~:x1": 2134.00001815048,
+ "~:y1": 2177.00029083787,
+ "~:x2": 2393.99914116394,
+ "~:y2": 2384.00024756102
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": null,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9be5": {
+ "~#shape": {
+ "~:y": 5340.0002407194,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77b",
+ "~:width": 270.929997403396,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1628.00004881139,
+ "~:y": 5340.0002407194
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1898.93004621479,
+ "~:y": 5340.0002407194
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1898.93004621479,
+ "~:y": 5610.93149138549
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1628.00004881139,
+ "~:y": 5610.93149138549
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:hidden": false,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9be5",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc9be4",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc9be4",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#0109fd",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 1628.00004881139,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#094ae0",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 50,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": true,
+ "~:id": "~udca35925-f5a2-8083-8006-b60be22fea0c",
+ "~:offset-x": 50
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1628.00004881139,
+ "~:y": 5340.0002407194,
+ "~:width": 270.929997403396,
+ "~:height": 270.93125066609,
+ "~:x1": 1628.00004881139,
+ "~:y1": 5340.0002407194,
+ "~:x2": 1898.93004621479,
+ "~:y2": 5610.93149138549
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 270.93125066609,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9c05": {
+ "~#shape": {
+ "~:y": 1199.0003002114,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Ellipse",
+ "~:width": 192,
+ "~:type": "~:circle",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 513.00011775044,
+ "~:y": 1199.0003002114
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 705.00011775044,
+ "~:y": 1199.0003002114
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 705.00011775044,
+ "~:y": 1378.0003002114
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 513.00011775044,
+ "~:y": 1378.0003002114
+ }
+ }
+ ],
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9c05",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 20
+ }
+ ],
+ "~:x": 513.00011775044,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#e10808",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ueb1e2a26-b3c3-8058-8006-b3a19119cecb",
+ "~:offset-x": 40
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 513.00011775044,
+ "~:y": 1199.0003002114,
+ "~:width": 192,
+ "~:height": 179,
+ "~:x1": 513.00011775044,
+ "~:y1": 1199.0003002114,
+ "~:x2": 705.00011775044,
+ "~:y2": 1378.0003002114
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 0.6
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 179,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7fe6": {
+ "~#shape": {
+ "~:y": null,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:content": {
+ "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAD/n91EIU8ORQMAAAD/n91EIU8ORUdg/kT9tQZF/x/+RBA2B0UDAAAAv9/9RCO2B0V/d/VEASAURX939UQBIBRFAgAAAAAAAAAAAAAAAAAAAAAAAAD/n91EIU8ORQ=="
+ },
+ "~:name": "Path",
+ "~:width": null,
+ "~:type": "~:path",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1773.0000099915,
+ "~:y": 2163.00025701871
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2033.00012588905,
+ "~:y": 2163.00025701871
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2033.00012588905,
+ "~:y": 2370.00021374186
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1773.0000099915,
+ "~:y": 2370.00021374186
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:blur": {
+ "~:id": "~u08e9047b-7a98-8007-8006-c2b806fd93d2",
+ "~:type": "~:layer-blur",
+ "~:value": 8,
+ "~:hidden": false
+ },
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7fe6",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": null,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#de1111",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 80,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u70873f92-ec4b-8045-8006-b3a396ef1fe7",
+ "~:offset-x": 80
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1773.0000099915,
+ "~:y": 2163.00025701871,
+ "~:width": 260.000115897557,
+ "~:height": 206.999956723148,
+ "~:x1": 1773.0000099915,
+ "~:y1": 2163.00025701871,
+ "~:x2": 2033.00012588905,
+ "~:y2": 2370.00021374186
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": null,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9be6": {
+ "~#shape": {
+ "~:y": 4172.0003451711,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77a",
+ "~:width": 476.175917084897,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 489.999996813684,
+ "~:y": 4172.0003451711
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 966.17591389858,
+ "~:y": 4172.0003451711
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 966.17591389858,
+ "~:y": 4648.00036722482
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 489.999996813684,
+ "~:y": 4648.00036722482
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:show-content": true,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:blur": {
+ "~:id": "~u5339c9ee-d6a8-80a6-8006-b710cd2ce7d6",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": true
+ },
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9be6",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#ff0202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 489.999996813684,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#010101",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u59bee4d9-ff40-808f-8006-b6070426becf",
+ "~:offset-x": 40
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 489.999996813684,
+ "~:y": 4172.0003451711,
+ "~:width": 476.175917084897,
+ "~:height": 476.000022053719,
+ "~:x1": 489.999996813684,
+ "~:y1": 4172.0003451711,
+ "~:x2": 966.17591389858,
+ "~:y2": 4648.00036722482
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 476.000022053719,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc9be7"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9c06": {
+ "~#shape": {
+ "~:y": 860.000333928384,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Rectangle",
+ "~:width": 208.000215015414,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1245.99996816991,
+ "~:y": 860.000333928384
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1454.00018318532,
+ "~:y": 860.000333928384
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1454.00018318532,
+ "~:y": 1050.00033303431
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1245.99996816991,
+ "~:y": 1050.00033303431
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9c06",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 20
+ }
+ ],
+ "~:x": 1245.99996816991,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#000000",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 50,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u9c6ef694-ec31-8045-8006-b383bb6b2eda",
+ "~:offset-x": 50
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1245.99996816991,
+ "~:y": 860.000333928384,
+ "~:width": 208.000215015414,
+ "~:height": 189.99999910593,
+ "~:x1": 1245.99996816991,
+ "~:y1": 860.000333928384,
+ "~:x2": 1454.00018318532,
+ "~:y2": 1050.00033303431
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 189.99999910593,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7fe7": {
+ "~#shape": {
+ "~:y": null,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:content": {
+ "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAAAUCJFQ17uRAMAAAAAUCJFQ17uRCCwMkX5K99EAJAyRSAs4EQDAAAA4G8yRUcs4US8Oy5FAwD6RLw7LkUDAPpEAgAAAAAAAAAAAAAAAAAAAAAAAAAAUCJFQ17uRA=="
+ },
+ "~:name": "Path",
+ "~:width": null,
+ "~:type": "~:path",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2597.000027112,
+ "~:y": 1793.0003379051
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2857.00014300956,
+ "~:y": 1793.0003379051
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2857.00014300956,
+ "~:y": 2000.00041760119
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2597.000027112,
+ "~:y": 2000.00041760119
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:blur": {
+ "~:id": "~u08e9047b-7a98-8007-8006-c2b806fdd2e6",
+ "~:type": "~:layer-blur",
+ "~:value": 8,
+ "~:hidden": false
+ },
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7fe7",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": null,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#de1111",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 80,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u70873f92-ec4b-8045-8006-b3a396ef1fe7",
+ "~:offset-x": 80
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2597.000027112,
+ "~:y": 1793.0003379051,
+ "~:width": 260.000115897557,
+ "~:height": 207.000079696094,
+ "~:x1": 2597.000027112,
+ "~:y1": 1793.0003379051,
+ "~:x2": 2857.00014300956,
+ "~:y2": 2000.0004176012
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 0.4
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": null,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9be7": {
+ "~#shape": {
+ "~:y": 4531.00020204102,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77b",
+ "~:width": 270.929997403396,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 847.999987926864,
+ "~:y": 4531.00020204102
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1118.92998533026,
+ "~:y": 4531.00020204102
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1118.92998533026,
+ "~:y": 4801.93145270711
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 847.999987926864,
+ "~:y": 4801.93145270711
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:hidden": false,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9be7",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc9be6",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc9be6",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#0109fd",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 847.999987926864,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#094ae0",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 50,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": true,
+ "~:id": "~udca35925-f5a2-8083-8006-b60be22fea0c",
+ "~:offset-x": 50
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 847.999987926864,
+ "~:y": 4531.00020204102,
+ "~:width": 270.929997403396,
+ "~:height": 270.93125066609,
+ "~:x1": 847.999987926864,
+ "~:y1": 4531.00020204102,
+ "~:x2": 1118.92998533026,
+ "~:y2": 4801.93145270711
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 270.93125066609,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9c07": {
+ "~#shape": {
+ "~:y": 860.000333928384,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Rectangle",
+ "~:width": 208.000215015413,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 867.999909199486,
+ "~:y": 860.000333928384
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1076.0001242149,
+ "~:y": 860.000333928384
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1076.0001242149,
+ "~:y": 1050.00033303431
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 867.999909199486,
+ "~:y": 1050.00033303431
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9c07",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:center",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#b7c821",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 867.999909199486,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#00f080",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 50,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u9c6ef694-ec31-8045-8006-b383bb6b2eda",
+ "~:offset-x": 50
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 867.999909199486,
+ "~:y": 860.000333928384,
+ "~:width": 208.000215015413,
+ "~:height": 189.99999910593,
+ "~:x1": 867.999909199486,
+ "~:y1": 860.000333928384,
+ "~:x2": 1076.0001242149,
+ "~:y2": 1050.00033303431
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 189.99999910593,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7fe8": {
+ "~#shape": {
+ "~:y": null,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:content": {
+ "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAAB8AZFQ17uRAMAAAAB8AZFQ17uRCFQF0X5K99EATAXRSAs4EQDAAAA4Q8XRUcs4US92xJFAwD6RL3bEkUDAPpEAgAAAAAAAAAAAAAAAAAAAAAAAAAB8AZFQ17uRA=="
+ },
+ "~:name": "Path",
+ "~:width": null,
+ "~:type": "~:path",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2159.0000521047,
+ "~:y": 1793.00033748769
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2419.00016800225,
+ "~:y": 1793.00033748769
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2419.00016800225,
+ "~:y": 2000.00041718378
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2159.0000521047,
+ "~:y": 2000.00041718378
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:blur": {
+ "~:id": "~u08e9047b-7a98-8007-8006-c2b806fe373e",
+ "~:type": "~:layer-blur",
+ "~:value": 8,
+ "~:hidden": false
+ },
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7fe8",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:center",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": null,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#de1111",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 80,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u70873f92-ec4b-8045-8006-b3a396ef1fe7",
+ "~:offset-x": 80
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2159.0000521047,
+ "~:y": 1793.00033748769,
+ "~:width": 260.000115897557,
+ "~:height": 207.000079696094,
+ "~:x1": 2159.0000521047,
+ "~:y1": 1793.00033748769,
+ "~:x2": 2419.00016800225,
+ "~:y2": 2000.00041718378
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 0.4
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": null,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9be8": {
+ "~#shape": {
+ "~:y": 4172.0003451711,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77a",
+ "~:width": 476.175917084897,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1270.00001057827,
+ "~:y": 4172.0003451711
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1746.17592766316,
+ "~:y": 4172.0003451711
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1746.17592766316,
+ "~:y": 4648.00036722482
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1270.00001057827,
+ "~:y": 4648.00036722482
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:show-content": false,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9be8",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#ff0202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 1270.00001057827,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#010101",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u59bee4d9-ff40-808f-8006-b6070426becf",
+ "~:offset-x": 40
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1270.00001057827,
+ "~:y": 4172.0003451711,
+ "~:width": 476.175917084897,
+ "~:height": 476.000022053719,
+ "~:x1": 1270.00001057827,
+ "~:y1": 4172.0003451711,
+ "~:x2": 1746.17592766316,
+ "~:y2": 4648.00036722482
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 476.000022053719,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc9be9"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9c08": {
+ "~#shape": {
+ "~:y": 860.000304333057,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Rectangle",
+ "~:width": 207.999982557296,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 490.000002381843,
+ "~:y": 860.000304333057
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 697.99998493914,
+ "~:y": 860.000304333057
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 697.99998493914,
+ "~:y": 1050.00028704771
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 490.000002381843,
+ "~:y": 1050.00028704771
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9c08",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#d10202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 490.000002381844,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#c41414",
+ "~:opacity": 0.4
+ },
+ "~:spread": 0,
+ "~:offset-y": 50,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u9c6ef694-ec31-8045-8006-b383bb6b2eda",
+ "~:offset-x": 50
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 490.000002381844,
+ "~:y": 860.000304333057,
+ "~:width": 207.999982557296,
+ "~:height": 189.999982714653,
+ "~:x1": 490.000002381844,
+ "~:y1": 860.000304333057,
+ "~:x2": 697.99998493914,
+ "~:y2": 1050.00028704771
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 189.999982714653,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7fe9": {
+ "~#shape": {
+ "~:y": null,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:content": {
+ "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAD9v+BEQ57sRAMAAAD9v+BEQ57sRCLAAEX5a91E/p8ARSBs3kQDAAAA4n8ARUds30R9l/hEA0D4RH2X+EQDQPhEAgAAAAAAAAAAAAAAAAAAAAAAAAD9v+BEQ57sRA=="
+ },
+ "~:name": "Path",
+ "~:width": null,
+ "~:type": "~:path",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1798.00002253,
+ "~:y": 1779.00034295752
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2058.00013842756,
+ "~:y": 1779.00034295752
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2058.00013842756,
+ "~:y": 1986.00042265362
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1798.00002253,
+ "~:y": 1986.00042265362
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:blur": {
+ "~:id": "~u08e9047b-7a98-8007-8006-c2b806fe629c",
+ "~:type": "~:layer-blur",
+ "~:value": 8,
+ "~:hidden": false
+ },
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7fe9",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": null,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#de1111",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 80,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u70873f92-ec4b-8045-8006-b3a396ef1fe7",
+ "~:offset-x": 80
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1798.00002253,
+ "~:y": 1779.00034295752,
+ "~:width": 260.000115897557,
+ "~:height": 207.000079696094,
+ "~:x1": 1798.00002253,
+ "~:y1": 1779.00034295752,
+ "~:x2": 2058.00013842756,
+ "~:y2": 1986.00042265362
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 0.4
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": null,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9be9": {
+ "~#shape": {
+ "~:y": 4531.00020204102,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77b",
+ "~:width": 270.929997403396,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1628.00003220903,
+ "~:y": 4531.00020204102
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1898.93002961242,
+ "~:y": 4531.00020204102
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1898.93002961242,
+ "~:y": 4801.93145270711
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1628.00003220903,
+ "~:y": 4801.93145270711
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:blur": {
+ "~:id": "~ud486afaf-89ba-805d-8006-bda7598f6705",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": true
+ },
+ "~:r1": 0,
+ "~:hidden": false,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9be9",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc9be8",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc9be8",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#0109fd",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 1628.00003220903,
+ "~:proportion": 1,
+ "~:shadow": [],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1628.00003220903,
+ "~:y": 4531.00020204102,
+ "~:width": 270.929997403396,
+ "~:height": 270.93125066609,
+ "~:x1": 1628.00003220903,
+ "~:y1": 4531.00020204102,
+ "~:x2": 1898.93002961242,
+ "~:y2": 4801.93145270711
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 270.93125066609,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9c09": {
+ "~#shape": {
+ "~:y": 526.000362648321,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Rectangle",
+ "~:width": 208.00019713402,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1233.0000454261,
+ "~:y": 526.000362648321
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1441.00024256012,
+ "~:y": 526.000362648321
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1441.00024256012,
+ "~:y": 716.000361754251
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1233.0000454261,
+ "~:y": 716.000361754251
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9c09",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 20
+ }
+ ],
+ "~:x": 1233.0000454261,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#000000",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 50,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u9c6ef694-ec31-8045-8006-b383bb6b2eda",
+ "~:offset-x": 50
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1233.0000454261,
+ "~:y": 526.000362648321,
+ "~:width": 208.00019713402,
+ "~:height": 189.99999910593,
+ "~:x1": 1233.0000454261,
+ "~:y1": 526.000362648321,
+ "~:x2": 1441.00024256012,
+ "~:y2": 716.000361754251
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 0.4
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 189.99999910593,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7fea": {
+ "~#shape": {
+ "~:y": 1497.00032895324,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Ellipse",
+ "~:width": 192,
+ "~:type": "~:circle",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2567.00012774194,
+ "~:y": 1497.00032895324
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2759.00012774194,
+ "~:y": 1497.00032895324
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2759.00012774194,
+ "~:y": 1676.00032895324
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2567.00012774194,
+ "~:y": 1676.00032895324
+ }
+ }
+ ],
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:blur": {
+ "~:id": "~u08e9047b-7a98-8007-8006-c2b806fe80e7",
+ "~:type": "~:layer-blur",
+ "~:value": 8,
+ "~:hidden": false
+ },
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7fea",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 20
+ }
+ ],
+ "~:x": 2567.00012774194,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#e10808",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ueb1e2a26-b3c3-8058-8006-b3a19119cecb",
+ "~:offset-x": 40
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2567.00012774194,
+ "~:y": 1497.00032895324,
+ "~:width": 192,
+ "~:height": 179,
+ "~:x1": 2567.00012774194,
+ "~:y1": 1497.00032895324,
+ "~:x2": 2759.00012774194,
+ "~:y2": 1676.00032895324
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 179,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bea": {
+ "~#shape": {
+ "~:y": 3374.0003200719,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77a",
+ "~:width": 476.175917084897,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2014.00013388588,
+ "~:y": 3374.0003200719
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2490.17605097078,
+ "~:y": 3374.0003200719
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2490.17605097078,
+ "~:y": 3850.00034212562
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2014.00013388588,
+ "~:y": 3850.00034212562
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:show-content": true,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:blur": {
+ "~:id": "~u5339c9ee-d6a8-80a6-8006-b710cd2ce7d6",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": true
+ },
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bea",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#ff0202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 2014.00013388588,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#010101",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u59bee4d9-ff40-808f-8006-b6070426becf",
+ "~:offset-x": 40
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2014.00013388588,
+ "~:y": 3374.0003200719,
+ "~:width": 476.175917084897,
+ "~:height": 476.00002205372,
+ "~:x1": 2014.00013388588,
+ "~:y1": 3374.0003200719,
+ "~:x2": 2490.17605097078,
+ "~:y2": 3850.00034212562
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 476.00002205372,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc9beb"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9c0a": {
+ "~#shape": {
+ "~:y": 526.000362648321,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Rectangle",
+ "~:width": 207.999946794509,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 862.000123115399,
+ "~:y": 526.000362648321
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1070.00006990991,
+ "~:y": 526.000362648321
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1070.00006990991,
+ "~:y": 716.000361754251
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 862.000123115399,
+ "~:y": 716.000361754251
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9c0a",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:center",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#b7c821",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 862.000123115399,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#00f080",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 50,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u9c6ef694-ec31-8045-8006-b383bb6b2eda",
+ "~:offset-x": 50
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 862.000123115399,
+ "~:y": 526.000362648321,
+ "~:width": 207.999946794509,
+ "~:height": 189.99999910593,
+ "~:x1": 862.000123115399,
+ "~:y1": 526.000362648321,
+ "~:x2": 1070.00006990991,
+ "~:y2": 716.000361754251
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#7f5217",
+ "~:fill-opacity": 0.4
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 189.99999910593,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7feb": {
+ "~#shape": {
+ "~:y": 1497.00032895324,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Ellipse",
+ "~:width": 192,
+ "~:type": "~:circle",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2205.00012774194,
+ "~:y": 1497.00032895324
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2397.00012774194,
+ "~:y": 1497.00032895324
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2397.00012774194,
+ "~:y": 1676.00032895324
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2205.00012774194,
+ "~:y": 1676.00032895324
+ }
+ }
+ ],
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:blur": {
+ "~:id": "~u08e9047b-7a98-8007-8006-c2b806fecd76",
+ "~:type": "~:layer-blur",
+ "~:value": 8,
+ "~:hidden": false
+ },
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7feb",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:center",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 20
+ }
+ ],
+ "~:x": 2205.00012774194,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#e10808",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ueb1e2a26-b3c3-8058-8006-b3a19119cecb",
+ "~:offset-x": 40
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2205.00012774194,
+ "~:y": 1497.00032895324,
+ "~:width": 192,
+ "~:height": 179,
+ "~:x1": 2205.00012774194,
+ "~:y1": 1497.00032895324,
+ "~:x2": 2397.00012774194,
+ "~:y2": 1676.00032895324
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 179,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9beb": {
+ "~#shape": {
+ "~:y": 3733.00037530608,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77b",
+ "~:width": 270.929997403396,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2372.00012499907,
+ "~:y": 3733.00037530608
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2642.93012240246,
+ "~:y": 3733.00037530608
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2642.93012240246,
+ "~:y": 4003.93162597217
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2372.00012499907,
+ "~:y": 4003.93162597217
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:hidden": false,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9beb",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc9bea",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc9bea",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 1
+ },
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#0109fd",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 2372.00012499907,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ba04e7",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 25,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~uea3497ec-8c4f-80ce-8006-b7431e93c950",
+ "~:offset-x": 25
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2372.00012499907,
+ "~:y": 3733.00037530608,
+ "~:width": 270.929997403396,
+ "~:height": 270.93125066609,
+ "~:x1": 2372.00012499907,
+ "~:y1": 3733.00037530608,
+ "~:x2": 2642.93012240246,
+ "~:y2": 4003.93162597217
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 270.93125066609,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9c0b": {
+ "~#shape": {
+ "~:y": 526.000362111881,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Rectangle",
+ "~:width": 207.999946794509,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 490.000035641214,
+ "~:y": 526.000362111881
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 697.999982435724,
+ "~:y": 526.000362111881
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 697.999982435724,
+ "~:y": 716.000344826534
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 490.000035641214,
+ "~:y": 716.000344826534
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9c0b",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#d10202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 490.000035641215,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#c41414",
+ "~:opacity": 0.4
+ },
+ "~:spread": 0,
+ "~:offset-y": 50,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u9c6ef694-ec31-8045-8006-b383bb6b2eda",
+ "~:offset-x": 50
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 490.000035641215,
+ "~:y": 526.000362111881,
+ "~:width": 207.999946794509,
+ "~:height": 189.999982714653,
+ "~:x1": 490.000035641215,
+ "~:y1": 526.000362111881,
+ "~:x2": 697.999982435724,
+ "~:y2": 716.000344826534
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#0b3ed5",
+ "~:fill-opacity": 0.4
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 189.999982714653,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7fec": {
+ "~#shape": {
+ "~:y": 1497.00032895324,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Ellipse",
+ "~:width": 192,
+ "~:type": "~:circle",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1843.00012774194,
+ "~:y": 1497.00032895324
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2035.00012774194,
+ "~:y": 1497.00032895324
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2035.00012774194,
+ "~:y": 1676.00032895324
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1843.00012774194,
+ "~:y": 1676.00032895324
+ }
+ }
+ ],
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:blur": {
+ "~:id": "~u08e9047b-7a98-8007-8006-c2b806ff1328",
+ "~:type": "~:layer-blur",
+ "~:value": 8,
+ "~:hidden": false
+ },
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7fec",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 20
+ }
+ ],
+ "~:x": 1843.00012774194,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#e10808",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ueb1e2a26-b3c3-8058-8006-b3a19119cecb",
+ "~:offset-x": 40
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1843.00012774194,
+ "~:y": 1497.00032895324,
+ "~:width": 192,
+ "~:height": 179,
+ "~:x1": 1843.00012774194,
+ "~:y1": 1497.00032895324,
+ "~:x2": 2035.00012774194,
+ "~:y2": 1676.00032895324
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 179,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bec": {
+ "~#shape": {
+ "~:y": 3374.0003200719,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77a",
+ "~:width": 476.175917084897,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2794.00008661531,
+ "~:y": 3374.0003200719
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3270.17600370021,
+ "~:y": 3374.0003200719
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3270.17600370021,
+ "~:y": 3850.00034212562
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2794.00008661531,
+ "~:y": 3850.00034212562
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:show-content": false,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:blur": {
+ "~:id": "~u5339c9ee-d6a8-80a6-8006-b710cd2ce7d6",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": true
+ },
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bec",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#ff0202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 2794.00008661531,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#010101",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u59bee4d9-ff40-808f-8006-b6070426becf",
+ "~:offset-x": 40
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2794.00008661531,
+ "~:y": 3374.0003200719,
+ "~:width": 476.175917084897,
+ "~:height": 476.00002205372,
+ "~:x1": 2794.00008661531,
+ "~:y1": 3374.0003200719,
+ "~:x2": 3270.17600370021,
+ "~:y2": 3850.00034212562
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 476.00002205372,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc9bed"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9c0c": {
+ "~#shape": {
+ "~:y": 1504.73413333635,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 0.818481293921291,
+ "~:b": -0.574533177023684,
+ "~:c": 0.57453315860228,
+ "~:d": 0.818481306852201,
+ "~:e": 1.21872290037572e-10,
+ "~:f": 1.10048858914524e-10
+ }
+ },
+ "~:rotation": 324.933053903474,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "xxx",
+ "~:width": 564.02332050295,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 4295.00007219852,
+ "~:y": 1718.05045304135
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4756.64260936556,
+ "~:y": 1394.00034279735
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 5081.33128730334,
+ "~:y": 1856.55260711773
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4619.6887501363,
+ "~:y": 2180.60271736173
+ }
+ }
+ ],
+ "~:r2": 20,
+ "~:show-content": false,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 0.818481306852202,
+ "~:b": 0.574533177023684,
+ "~:c": -0.574533158602281,
+ "~:d": 0.818481293921292,
+ "~:e": -3.65234727062844e-11,
+ "~:f": -1.6009260642536e-10
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 20,
+ "~:blur": {
+ "~:id": "~u5339c9ee-d6a8-80a6-8006-b710cd2ce7d6",
+ "~:type": "~:layer-blur",
+ "~:value": 8,
+ "~:hidden": false
+ },
+ "~:r1": 20,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9c0c",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#ff0202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 4406.15401949945,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#010101",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u59bee4d9-ff40-808f-8006-b6070426becf",
+ "~:offset-x": 40
+ }
+ ],
+ "~:r4": 20,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 4406.15401949945,
+ "~:y": 1504.73413333635,
+ "~:width": 564.02332050295,
+ "~:height": 565.13479348638,
+ "~:x1": 4406.15401949945,
+ "~:y1": 1504.73413333635,
+ "~:x2": 4970.1773400024,
+ "~:y2": 2069.86892682273
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 565.13479348638,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc9c0d"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7fed": {
+ "~#shape": {
+ "~:y": 1215.00031369445,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Ellipse",
+ "~:width": 192,
+ "~:type": "~:circle",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2567.00012774194,
+ "~:y": 1215.00031369445
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2759.00012774194,
+ "~:y": 1215.00031369445
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2759.00012774194,
+ "~:y": 1394.00031369445
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2567.00012774194,
+ "~:y": 1394.00031369445
+ }
+ }
+ ],
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:blur": {
+ "~:id": "~u08e9047b-7a98-8007-8006-c2b806ff1329",
+ "~:type": "~:layer-blur",
+ "~:value": 8,
+ "~:hidden": false
+ },
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7fed",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 20
+ }
+ ],
+ "~:x": 2567.00012774194,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#e10808",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ueb1e2a26-b3c3-8058-8006-b3a19119cecb",
+ "~:offset-x": 40
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2567.00012774194,
+ "~:y": 1215.00031369445,
+ "~:width": 192,
+ "~:height": 179,
+ "~:x1": 2567.00012774194,
+ "~:y1": 1215.00031369445,
+ "~:x2": 2759.00012774194,
+ "~:y2": 1394.00031369445
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 0.6
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 179,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bed": {
+ "~#shape": {
+ "~:y": 3733.00037530608,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77b",
+ "~:width": 270.929997403397,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 3152.00012350486,
+ "~:y": 3733.00037530608
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3422.93012090826,
+ "~:y": 3733.00037530608
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3422.93012090826,
+ "~:y": 4003.93162597217
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3152.00012350486,
+ "~:y": 4003.93162597217
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:hidden": false,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bed",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc9bec",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc9bec",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#0109fd",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 3152.00012350486,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ba04e7",
+ "~:opacity": 0.5
+ },
+ "~:spread": 0,
+ "~:offset-y": 25,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~uea3497ec-8c4f-80ce-8006-b7431e93c950",
+ "~:offset-x": 25
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 3152.00012350486,
+ "~:y": 3733.00037530608,
+ "~:width": 270.929997403397,
+ "~:height": 270.93125066609,
+ "~:x1": 3152.00012350486,
+ "~:y1": 3733.00037530608,
+ "~:x2": 3422.93012090826,
+ "~:y2": 4003.93162597217
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 270.93125066609,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9c0d": {
+ "~#shape": {
+ "~:y": 1703.23985330363,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 0.818481309241701,
+ "~:b": -0.574533155198194,
+ "~:c": 0.574533177718632,
+ "~:d": 0.818481293433472,
+ "~:e": 4.54747350886464e-13,
+ "~:f": -2.27373675443232e-13
+ }
+ },
+ "~:rotation": 324.933053903474,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "c183266cdfab",
+ "~:width": 270.930112725792,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 4794.00012046903,
+ "~:y": 1805.6585938178
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 5015.75142412457,
+ "~:y": 1650.00018246347
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 5171.41044141724,
+ "~:y": 1871.75236278115
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4949.6591377617,
+ "~:y": 2027.41077413547
+ }
+ }
+ ],
+ "~:r2": 20,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 0.818481293433473,
+ "~:b": 0.574533155198194,
+ "~:c": -0.574533177718633,
+ "~:d": 0.818481309241701,
+ "~:e": -5.02835920220964e-13,
+ "~:f": -7.51663267589463e-14
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 20,
+ "~:r1": 20,
+ "~:hidden": false,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9c0d",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc9c0c",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc9c0c",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#0109fd",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 4847.24022458024,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ba04e7",
+ "~:opacity": 0.5
+ },
+ "~:spread": 0,
+ "~:offset-y": 25,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~uea3497ec-8c4f-80ce-8006-b7431e93c950",
+ "~:offset-x": 25
+ }
+ ],
+ "~:r4": 20,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 4847.24022458024,
+ "~:y": 1703.23985330363,
+ "~:width": 270.930112725792,
+ "~:height": 270.931249991688,
+ "~:x1": 4847.24022458024,
+ "~:y1": 1703.23985330363,
+ "~:x2": 5118.17033730603,
+ "~:y2": 1974.17110329532
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 270.931249991688,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7fee": {
+ "~#shape": {
+ "~:y": 1215.00031369445,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Ellipse",
+ "~:width": 192,
+ "~:type": "~:circle",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2205.00012774194,
+ "~:y": 1215.00031369445
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2397.00012774194,
+ "~:y": 1215.00031369445
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2397.00012774194,
+ "~:y": 1394.00031369445
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2205.00012774194,
+ "~:y": 1394.00031369445
+ }
+ }
+ ],
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:blur": {
+ "~:id": "~u08e9047b-7a98-8007-8006-c2b806ff6cea",
+ "~:type": "~:layer-blur",
+ "~:value": 8,
+ "~:hidden": false
+ },
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7fee",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:center",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 20
+ }
+ ],
+ "~:x": 2205.00012774194,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#e10808",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ueb1e2a26-b3c3-8058-8006-b3a19119cecb",
+ "~:offset-x": 40
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2205.00012774194,
+ "~:y": 1215.00031369445,
+ "~:width": 192,
+ "~:height": 179,
+ "~:x1": 2205.00012774194,
+ "~:y1": 1215.00031369445,
+ "~:x2": 2397.00012774194,
+ "~:y2": 1394.00031369445
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 0.6
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 179,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bee": {
+ "~#shape": {
+ "~:y": 2565.00029665231,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77a",
+ "~:width": 476.175917084897,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2013.99994943684,
+ "~:y": 2565.00029665231
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2490.17586652174,
+ "~:y": 2565.00029665231
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2490.17586652174,
+ "~:y": 3041.00031870603
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2013.99994943684,
+ "~:y": 3041.00031870603
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:show-content": true,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:blur": {
+ "~:id": "~u5339c9ee-d6a8-80a6-8006-b710cd2ce7d6",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": true
+ },
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bee",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#ff0202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 2013.99994943684,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#010101",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u59bee4d9-ff40-808f-8006-b6070426becf",
+ "~:offset-x": 40
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2013.99994943684,
+ "~:y": 2565.00029665231,
+ "~:width": 476.175917084897,
+ "~:height": 476.000022053719,
+ "~:x1": 2013.99994943684,
+ "~:y1": 2565.00029665231,
+ "~:x2": 2490.17586652174,
+ "~:y2": 3041.00031870603
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 476.000022053719,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc9bef"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9c0e": {
+ "~#shape": {
+ "~:y": 1611.16803765226,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 0.818481300480226,
+ "~:b": -0.574533167679812,
+ "~:c": 0.574533167679814,
+ "~:d": 0.818481300480228,
+ "~:e": 1.34605215862393e-10,
+ "~:f": 1.01863406598568e-10
+ }
+ },
+ "~:rotation": 324.933053903474,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "xxx",
+ "~:width": 413.067929797302,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 3570.00012510581,
+ "~:y": 1766.32157998937
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3908.08850147298,
+ "~:y": 1529.00035381599
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4139.09939231376,
+ "~:y": 1858.09901164288
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3801.01101594659,
+ "~:y": 2095.42023781626
+ }
+ }
+ ],
+ "~:r2": 20,
+ "~:show-content": false,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 0.818481300480225,
+ "~:b": 0.57453316767981,
+ "~:c": -0.574533167679812,
+ "~:d": 0.818481300480223,
+ "~:e": -5.16479464667412e-11,
+ "~:f": -1.60708454559787e-10
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 20,
+ "~:blur": {
+ "~:id": "~u5339c9ee-d6a8-80a6-8006-b710cd2ce7d6",
+ "~:type": "~:layer-blur",
+ "~:value": 8,
+ "~:hidden": false
+ },
+ "~:r1": 20,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9c0e",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#ff0202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 3648.01579381114,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#010101",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u59bee4d9-ff40-808f-8006-b6070426becf",
+ "~:offset-x": 40
+ }
+ ],
+ "~:r4": 20,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 3648.01579381114,
+ "~:y": 1611.16803765226,
+ "~:width": 413.067929797302,
+ "~:height": 402.084516327741,
+ "~:x1": 3648.01579381114,
+ "~:y1": 1611.16803765226,
+ "~:x2": 4061.08372360844,
+ "~:y2": 2013.25255398
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 402.084516327741,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc9c0f"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7fef": {
+ "~#shape": {
+ "~:y": 1215.00031369445,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Ellipse",
+ "~:width": 192,
+ "~:type": "~:circle",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1843.00012774194,
+ "~:y": 1215.00031369445
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2035.00012774194,
+ "~:y": 1215.00031369445
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2035.00012774194,
+ "~:y": 1394.00031369445
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1843.00012774194,
+ "~:y": 1394.00031369445
+ }
+ }
+ ],
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:blur": {
+ "~:id": "~u08e9047b-7a98-8007-8006-c2b806ff8988",
+ "~:type": "~:layer-blur",
+ "~:value": 8,
+ "~:hidden": false
+ },
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7fef",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 20
+ }
+ ],
+ "~:x": 1843.00012774194,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#e10808",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ueb1e2a26-b3c3-8058-8006-b3a19119cecb",
+ "~:offset-x": 40
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1843.00012774194,
+ "~:y": 1215.00031369445,
+ "~:width": 192,
+ "~:height": 179,
+ "~:x1": 1843.00012774194,
+ "~:y1": 1215.00031369445,
+ "~:x2": 2035.00012774194,
+ "~:y2": 1394.00031369445
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 0.6
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 179,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bef": {
+ "~#shape": {
+ "~:y": 2924.00033662769,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77b",
+ "~:width": 270.929997403396,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2372.00018469064,
+ "~:y": 2924.00033662769
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2642.93018209404,
+ "~:y": 2924.00033662769
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2642.93018209404,
+ "~:y": 3194.93158729378
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2372.00018469064,
+ "~:y": 3194.93158729378
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:hidden": false,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bef",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc9bee",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc9bee",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 1
+ },
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#0109fd",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 2372.00018469064,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ba04e7",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 25,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~uea3497ec-8c4f-80ce-8006-b7431e93c950",
+ "~:offset-x": 25
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2372.00018469064,
+ "~:y": 2924.00033662769,
+ "~:width": 270.929997403396,
+ "~:height": 270.931250666089,
+ "~:x1": 2372.00018469064,
+ "~:y1": 2924.00033662769,
+ "~:x2": 2642.93018209404,
+ "~:y2": 3194.93158729378
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 270.931250666089,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9c0f": {
+ "~#shape": {
+ "~:y": 1751.23995333668,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 0.818481309241701,
+ "~:b": -0.574533155198194,
+ "~:c": 0.574533177718632,
+ "~:d": 0.818481293433472,
+ "~:e": 4.54747350886464e-13,
+ "~:f": -2.27373675443232e-13
+ }
+ },
+ "~:rotation": 324.933053903474,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "c183266cdfab",
+ "~:width": 270.930229283618,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 4069.00022844074,
+ "~:y": 1853.65866168176
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4290.75133015836,
+ "~:y": 1698.0004166126
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4446.41046648783,
+ "~:y": 1919.75275311502
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4224.65936477021,
+ "~:y": 2075.41099818418
+ }
+ }
+ ],
+ "~:r2": 20,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 0.818481293433473,
+ "~:b": 0.574533155198194,
+ "~:c": -0.574533177718633,
+ "~:d": 0.818481309241701,
+ "~:e": -5.02835920220964e-13,
+ "~:f": -7.51663267589463e-14
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 20,
+ "~:r1": 20,
+ "~:hidden": false,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9c0f",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc9c0e",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc9c0e",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#0109fd",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 4122.24023282248,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ba04e7",
+ "~:opacity": 0.5
+ },
+ "~:spread": 0,
+ "~:offset-y": 25,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~uea3497ec-8c4f-80ce-8006-b7431e93c950",
+ "~:offset-x": 25
+ }
+ ],
+ "~:r4": 20,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 4122.24023282248,
+ "~:y": 1751.23995333668,
+ "~:width": 270.930229283618,
+ "~:height": 270.931508123429,
+ "~:x1": 4122.24023282248,
+ "~:y1": 1751.23995333668,
+ "~:x2": 4393.17046210609,
+ "~:y2": 2022.17146146011
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 270.931508123429,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7ff0": {
+ "~#shape": {
+ "~:y": 876.000286376278,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Rectangle",
+ "~:width": 208.000215015414,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2576.00010023172,
+ "~:y": 876.000286376278
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2784.00031524713,
+ "~:y": 876.000286376278
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2784.00031524713,
+ "~:y": 1066.00028548221
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2576.00010023172,
+ "~:y": 1066.00028548221
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:blur": {
+ "~:id": "~u08e9047b-7a98-8007-8006-c2b806ffc544",
+ "~:type": "~:layer-blur",
+ "~:value": 8,
+ "~:hidden": false
+ },
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7ff0",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 20
+ }
+ ],
+ "~:x": 2576.00010023172,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#000000",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 50,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u9c6ef694-ec31-8045-8006-b383bb6b2eda",
+ "~:offset-x": 50
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2576.00010023172,
+ "~:y": 876.000286376278,
+ "~:width": 208.000215015414,
+ "~:height": 189.99999910593,
+ "~:x1": 2576.00010023172,
+ "~:y1": 876.000286376278,
+ "~:x2": 2784.00031524713,
+ "~:y2": 1066.00028548221
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 189.99999910593,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bf0": {
+ "~#shape": {
+ "~:y": 2565.00029665231,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77a",
+ "~:width": 476.175917084896,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2794.00008527174,
+ "~:y": 2565.00029665231
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3270.17600235663,
+ "~:y": 2565.00029665231
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3270.17600235663,
+ "~:y": 3041.00031870603
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2794.00008527174,
+ "~:y": 3041.00031870603
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:show-content": false,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:blur": {
+ "~:id": "~u5339c9ee-d6a8-80a6-8006-b710cd2ce7d6",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": true
+ },
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bf0",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#ff0202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 2794.00008527174,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#010101",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u59bee4d9-ff40-808f-8006-b6070426becf",
+ "~:offset-x": 40
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2794.00008527174,
+ "~:y": 2565.00029665231,
+ "~:width": 476.175917084896,
+ "~:height": 476.000022053719,
+ "~:x1": 2794.00008527174,
+ "~:y1": 2565.00029665231,
+ "~:x2": 3270.17600235663,
+ "~:y2": 3041.00031870603
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 476.000022053719,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc9bf1"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9c10": {
+ "~#shape": {
+ "~:y": 610.733790539003,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 0.818481293921295,
+ "~:b": -0.574533177023682,
+ "~:c": 0.574533158602284,
+ "~:d": 0.818481306852201,
+ "~:e": 1.2732925824821e-10,
+ "~:f": 8.8220986071974e-11
+ }
+ },
+ "~:rotation": 324.933053903474,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "xxx",
+ "~:width": 564.023320502951,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 4186.000584961,
+ "~:y": 824.050110244007
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4647.64312212804,
+ "~:y": 500
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4972.33180006582,
+ "~:y": 962.55226432038
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4510.68926289878,
+ "~:y": 1286.60237456439
+ }
+ }
+ ],
+ "~:r2": 20,
+ "~:show-content": false,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 0.818481306852199,
+ "~:b": 0.57453317702368,
+ "~:c": -0.574533158602283,
+ "~:d": 0.818481293921293,
+ "~:e": -5.35307359085768e-11,
+ "~:f": -1.45362110100614e-10
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 20,
+ "~:blur": {
+ "~:id": "~u5339c9ee-d6a8-80a6-8006-b710cd2ce7d6",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": true
+ },
+ "~:r1": 20,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9c10",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#ff0202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 4297.15453226193,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#010101",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u59bee4d9-ff40-808f-8006-b6070426becf",
+ "~:offset-x": 40
+ }
+ ],
+ "~:r4": 20,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 4297.15453226193,
+ "~:y": 610.733790539003,
+ "~:width": 564.023320502951,
+ "~:height": 565.13479348638,
+ "~:x1": 4297.15453226193,
+ "~:y1": 610.733790539003,
+ "~:x2": 4861.17785276488,
+ "~:y2": 1175.86858402538
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 565.13479348638,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc9c11"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7ff1": {
+ "~#shape": {
+ "~:y": 876.000286376278,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Rectangle",
+ "~:width": 208.000215015413,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2198.00016333161,
+ "~:y": 876.000286376278
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2406.00037834702,
+ "~:y": 876.000286376278
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2406.00037834702,
+ "~:y": 1066.00028548221
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2198.00016333161,
+ "~:y": 1066.00028548221
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:blur": {
+ "~:id": "~u08e9047b-7a98-8007-8006-c2b807003e68",
+ "~:type": "~:layer-blur",
+ "~:value": 8,
+ "~:hidden": false
+ },
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7ff1",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:center",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#b7c821",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 2198.00016333161,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#00f080",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 50,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u9c6ef694-ec31-8045-8006-b383bb6b2eda",
+ "~:offset-x": 50
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2198.00016333161,
+ "~:y": 876.000286376278,
+ "~:width": 208.000215015413,
+ "~:height": 189.99999910593,
+ "~:x1": 2198.00016333161,
+ "~:y1": 876.000286376278,
+ "~:x2": 2406.00037834702,
+ "~:y2": 1066.00028548221
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 189.99999910593,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bf1": {
+ "~#shape": {
+ "~:y": 2924.00033662769,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77b",
+ "~:width": 270.929997403396,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 3152.00013742007,
+ "~:y": 2924.00033662769
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3422.93013482347,
+ "~:y": 2924.00033662769
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3422.93013482347,
+ "~:y": 3194.93158729378
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3152.00013742007,
+ "~:y": 3194.93158729378
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:hidden": false,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bf1",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc9bf0",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc9bf0",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 1
+ },
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#0109fd",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 3152.00013742007,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ba04e7",
+ "~:opacity": 0.5
+ },
+ "~:spread": 0,
+ "~:offset-y": 25,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~uea3497ec-8c4f-80ce-8006-b7431e93c950",
+ "~:offset-x": 25
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 3152.00013742007,
+ "~:y": 2924.00033662769,
+ "~:width": 270.929997403396,
+ "~:height": 270.931250666089,
+ "~:x1": 3152.00013742007,
+ "~:y1": 2924.00033662769,
+ "~:x2": 3422.93013482347,
+ "~:y2": 3194.93158729378
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 270.931250666089,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9c11": {
+ "~#shape": {
+ "~:y": 809.24011099148,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 0.818481309241701,
+ "~:b": -0.574533155198194,
+ "~:c": 0.574533177718632,
+ "~:d": 0.818481293433472,
+ "~:e": 4.54747350886464e-13,
+ "~:f": -2.27373675443232e-13
+ }
+ },
+ "~:rotation": 324.933053903474,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "c183266cdfab",
+ "~:width": 270.93005171888,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 4684.99991666207,
+ "~:y": 911.658800841629
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4906.75100791949,
+ "~:y": 756.000535914766
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 5062.41001861255,
+ "~:y": 977.752740097087
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4840.65892735513,
+ "~:y": 1133.41100502395
+ }
+ }
+ ],
+ "~:r2": 20,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 0.818481293433473,
+ "~:b": 0.574533155198194,
+ "~:c": -0.574533177718633,
+ "~:d": 0.818481309241701,
+ "~:e": -5.02835920220964e-13,
+ "~:f": -7.51663267589463e-14
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 20,
+ "~:r1": 20,
+ "~:hidden": false,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9c11",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc9c10",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc9c10",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#0109fd",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 4738.23994177787,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ba04e7",
+ "~:opacity": 0.5
+ },
+ "~:spread": 0,
+ "~:offset-y": 25,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~uea3497ec-8c4f-80ce-8006-b7431e93c950",
+ "~:offset-x": 25
+ }
+ ],
+ "~:r4": 20,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 4738.23994177787,
+ "~:y": 809.24011099148,
+ "~:width": 270.93005171888,
+ "~:height": 270.931318955755,
+ "~:x1": 4738.23994177787,
+ "~:y1": 809.24011099148,
+ "~:x2": 5009.16999349675,
+ "~:y2": 1080.17142994724
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 270.931318955755,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7ff2": {
+ "~#shape": {
+ "~:y": 876.000317816106,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Rectangle",
+ "~:width": 207.999982557296,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1820.00001237334,
+ "~:y": 876.000317816106
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2027.99999493064,
+ "~:y": 876.000317816106
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2027.99999493064,
+ "~:y": 1066.00030053076
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1820.00001237334,
+ "~:y": 1066.00030053076
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:blur": {
+ "~:id": "~u08e9047b-7a98-8007-8006-c2b80700707b",
+ "~:type": "~:layer-blur",
+ "~:value": 8,
+ "~:hidden": false
+ },
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7ff2",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#d10202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 1820.00001237334,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#c41414",
+ "~:opacity": 0.4
+ },
+ "~:spread": 0,
+ "~:offset-y": 50,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u9c6ef694-ec31-8045-8006-b383bb6b2eda",
+ "~:offset-x": 50
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1820.00001237334,
+ "~:y": 876.000317816106,
+ "~:width": 207.999982557296,
+ "~:height": 189.999982714653,
+ "~:x1": 1820.00001237334,
+ "~:y1": 876.000317816106,
+ "~:x2": 2027.99999493064,
+ "~:y2": 1066.00030053076
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 189.999982714653,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bf2": {
+ "~#shape": {
+ "~:y": 4980.00043118209,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77a",
+ "~:width": 476.175917084897,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2014.00011314881,
+ "~:y": 4980.00043118209
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2490.1760302337,
+ "~:y": 4980.00043118209
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2490.1760302337,
+ "~:y": 5456.00045323581
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2014.00011314881,
+ "~:y": 5456.00045323581
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:show-content": true,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:blur": {
+ "~:id": "~u5339c9ee-d6a8-80a6-8006-b710cd2ce7d6",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": true
+ },
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bf2",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#ff0202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 2014.00011314881,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#010101",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u59bee4d9-ff40-808f-8006-b6070426becf",
+ "~:offset-x": 40
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2014.00011314881,
+ "~:y": 4980.00043118209,
+ "~:width": 476.175917084897,
+ "~:height": 476.000022053719,
+ "~:x1": 2014.00011314881,
+ "~:y1": 4980.00043118209,
+ "~:x2": 2490.1760302337,
+ "~:y2": 5456.00045323581
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 476.000022053719,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc9bf3"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9c12": {
+ "~#shape": {
+ "~:y": 716.167871455469,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 0.818481300480222,
+ "~:b": -0.574533167679814,
+ "~:c": 0.57453316767981,
+ "~:d": 0.818481300480228,
+ "~:e": 1.56433088704944e-10,
+ "~:f": 7.73070496506989e-11
+ }
+ },
+ "~:rotation": 324.933053903474,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "xxx",
+ "~:width": 413.067929797302,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 3461.00005803431,
+ "~:y": 871.321413792587
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3799.08843440148,
+ "~:y": 634.0001876192
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4030.09932524226,
+ "~:y": 963.098845446092
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3692.01094887509,
+ "~:y": 1200.42007161948
+ }
+ }
+ ],
+ "~:r2": 20,
+ "~:show-content": false,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 0.818481300480228,
+ "~:b": 0.574533167679814,
+ "~:c": -0.574533167679811,
+ "~:d": 0.818481300480223,
+ "~:e": -8.36220937615648e-11,
+ "~:f": -1.53150372517982e-10
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 20,
+ "~:blur": {
+ "~:id": "~u5339c9ee-d6a8-80a6-8006-b710cd2ce7d6",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": true
+ },
+ "~:r1": 20,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9c12",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#ff0202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 3539.01572673963,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#010101",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u59bee4d9-ff40-808f-8006-b6070426becf",
+ "~:offset-x": 40
+ }
+ ],
+ "~:r4": 20,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 3539.01572673963,
+ "~:y": 716.167871455469,
+ "~:width": 413.067929797302,
+ "~:height": 402.084516327739,
+ "~:x1": 3539.01572673963,
+ "~:y1": 716.167871455469,
+ "~:x2": 3952.08365653694,
+ "~:y2": 1118.25238778321
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 402.084516327739,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc9c13"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7ff3": {
+ "~#shape": {
+ "~:y": 542.000315096214,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Rectangle",
+ "~:width": 208.00019713402,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2563.00005541759,
+ "~:y": 542.000315096214
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2771.00025255161,
+ "~:y": 542.000315096214
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2771.00025255161,
+ "~:y": 732.000314202145
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2563.00005541759,
+ "~:y": 732.000314202145
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:blur": {
+ "~:id": "~u08e9047b-7a98-8007-8006-c2b807008fda",
+ "~:type": "~:layer-blur",
+ "~:value": 8,
+ "~:hidden": false
+ },
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7ff3",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 20
+ }
+ ],
+ "~:x": 2563.00005541759,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#000000",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 50,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u9c6ef694-ec31-8045-8006-b383bb6b2eda",
+ "~:offset-x": 50
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2563.00005541759,
+ "~:y": 542.000315096214,
+ "~:width": 208.00019713402,
+ "~:height": 189.99999910593,
+ "~:x1": 2563.00005541759,
+ "~:y1": 542.000315096214,
+ "~:x2": 2771.00025255161,
+ "~:y2": 732.000314202145
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 0.4
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 189.99999910593,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bf3": {
+ "~#shape": {
+ "~:y": 5339.00024227564,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77b",
+ "~:width": 270.929997403396,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2372.00010426199,
+ "~:y": 5339.00024227564
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2642.93010166538,
+ "~:y": 5339.00024227564
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2642.93010166538,
+ "~:y": 5609.93149294173
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2372.00010426199,
+ "~:y": 5609.93149294173
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:hidden": false,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bf3",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc9bf2",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc9bf2",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 1
+ },
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#0109fd",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 2372.00010426199,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ba04e7",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 25,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~uea3497ec-8c4f-80ce-8006-b7431e93c950",
+ "~:offset-x": 25
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2372.00010426199,
+ "~:y": 5339.00024227564,
+ "~:width": 270.929997403396,
+ "~:height": 270.93125066609,
+ "~:x1": 2372.00010426199,
+ "~:y1": 5339.00024227564,
+ "~:x2": 2642.93010166538,
+ "~:y2": 5609.93149294173
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 270.93125066609,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9c13": {
+ "~#shape": {
+ "~:y": 856.2391232107,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 0.818481309241701,
+ "~:b": -0.574533155198194,
+ "~:c": 0.574533177718632,
+ "~:d": 0.818481293433472,
+ "~:e": 4.54747350886464e-13,
+ "~:f": -2.27373675443232e-13
+ }
+ },
+ "~:rotation": 324.933053903474,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "c183266cdfab",
+ "~:width": 270.930008058034,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 3960.000598051,
+ "~:y": 958.65780868028
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4181.75178187885,
+ "~:y": 802.999513553355
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4337.41074501813,
+ "~:y": 1024.75163734618
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4115.65956119027,
+ "~:y": 1180.4099324731
+ }
+ }
+ ],
+ "~:r2": 20,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 0.818481293433473,
+ "~:b": 0.574533155198194,
+ "~:c": -0.574533177718633,
+ "~:d": 0.818481309241701,
+ "~:e": -5.02835920220964e-13,
+ "~:f": -7.51663267589463e-14
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 20,
+ "~:r1": 20,
+ "~:hidden": false,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9c13",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc9c12",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc9c12",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#0109fd",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 4013.24066750554,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ba04e7",
+ "~:opacity": 0.5
+ },
+ "~:spread": 0,
+ "~:offset-y": 25,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~uea3497ec-8c4f-80ce-8006-b7431e93c950",
+ "~:offset-x": 25
+ }
+ ],
+ "~:r4": 20,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 4013.24066750554,
+ "~:y": 856.2391232107,
+ "~:width": 270.930008058034,
+ "~:height": 270.931199605052,
+ "~:x1": 4013.24066750554,
+ "~:y1": 856.2391232107,
+ "~:x2": 4284.17067556358,
+ "~:y2": 1127.17032281575
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 270.931199605052,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7ff4": {
+ "~#shape": {
+ "~:y": 542.000315096214,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Rectangle",
+ "~:width": 207.999946794509,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2192.00013310689,
+ "~:y": 542.000315096214
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2400.0000799014,
+ "~:y": 542.000315096214
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2400.0000799014,
+ "~:y": 732.000314202145
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2192.00013310689,
+ "~:y": 732.000314202145
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:blur": {
+ "~:id": "~u08e9047b-7a98-8007-8006-c2b807008fdb",
+ "~:type": "~:layer-blur",
+ "~:value": 8,
+ "~:hidden": false
+ },
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7ff4",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:center",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#b7c821",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 2192.0001331069,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#00f080",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 50,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u9c6ef694-ec31-8045-8006-b383bb6b2eda",
+ "~:offset-x": 50
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2192.0001331069,
+ "~:y": 542.000315096214,
+ "~:width": 207.999946794509,
+ "~:height": 189.99999910593,
+ "~:x1": 2192.0001331069,
+ "~:y1": 542.000315096214,
+ "~:x2": 2400.0000799014,
+ "~:y2": 732.000314202145
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#7f5217",
+ "~:fill-opacity": 0.4
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 189.99999910593,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bf4": {
+ "~#shape": {
+ "~:y": 4980.00043118209,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77a",
+ "~:width": 476.175917084897,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2794.00012691339,
+ "~:y": 4980.00043118209
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3270.17604399829,
+ "~:y": 4980.00043118209
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3270.17604399829,
+ "~:y": 5456.00045323581
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2794.00012691339,
+ "~:y": 5456.00045323581
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:show-content": false,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:blur": {
+ "~:id": "~u5339c9ee-d6a8-80a6-8006-b710cd2ce7d6",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": true
+ },
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bf4",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#ff0202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 2794.00012691339,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#010101",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u59bee4d9-ff40-808f-8006-b6070426becf",
+ "~:offset-x": 40
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2794.00012691339,
+ "~:y": 4980.00043118209,
+ "~:width": 476.175917084897,
+ "~:height": 476.000022053719,
+ "~:x1": 2794.00012691339,
+ "~:y1": 4980.00043118209,
+ "~:x2": 3270.17604399829,
+ "~:y2": 5456.00045323581
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 476.000022053719,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc9bf5"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9c14": {
+ "~#shape": {
+ "~:y": 3548.79084725864,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 0.875521645611856,
+ "~:b": -0.483178898613245,
+ "~:c": 0.483178842426414,
+ "~:d": 0.875521676619982,
+ "~:e": 1.00044417195022e-11,
+ "~:f": 1.38697942020372e-11
+ }
+ },
+ "~:rotation": 331.106771530248,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Rectangle",
+ "~:width": 224.867986830995,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 4521.00011951727,
+ "~:y": 3609.65168877195
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4717.87690939297,
+ "~:y": 3501.00022256157
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4768.61066013814,
+ "~:y": 3592.92994839677
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4571.73387026244,
+ "~:y": 3701.58141460715
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 0.875521676619987,
+ "~:b": 0.483178898613247,
+ "~:c": -0.483178842426416,
+ "~:d": 0.87552164561186,
+ "~:e": -2.05751448067259e-12,
+ "~:f": -1.69772401753349e-11
+ }
+ },
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9c14",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [],
+ "~:x": 4532.37139641221,
+ "~:proportion": 1,
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 4532.37139641221,
+ "~:y": 3548.79084725864,
+ "~:width": 224.867986830995,
+ "~:height": 104.999942651446,
+ "~:x1": 4532.37139641221,
+ "~:y1": 3548.79084725864,
+ "~:x2": 4757.2393832432,
+ "~:y2": 3653.79078991008
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 104.999942651446,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7ff5": {
+ "~#shape": {
+ "~:y": 542.000314559775,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Rectangle",
+ "~:width": 207.999946794509,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1820.00004563271,
+ "~:y": 542.000314559775
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2027.99999242722,
+ "~:y": 542.000314559775
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2027.99999242722,
+ "~:y": 732.000297274428
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1820.00004563271,
+ "~:y": 732.000297274428
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:blur": {
+ "~:id": "~u08e9047b-7a98-8007-8006-c2b80700e25a",
+ "~:type": "~:layer-blur",
+ "~:value": 8,
+ "~:hidden": false
+ },
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7ff5",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#d10202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 1820.00004563271,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#c41414",
+ "~:opacity": 0.4
+ },
+ "~:spread": 0,
+ "~:offset-y": 50,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u9c6ef694-ec31-8045-8006-b383bb6b2eda",
+ "~:offset-x": 50
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1820.00004563271,
+ "~:y": 542.000314559775,
+ "~:width": 207.999946794509,
+ "~:height": 189.999982714653,
+ "~:x1": 1820.00004563271,
+ "~:y1": 542.000314559775,
+ "~:x2": 2027.99999242722,
+ "~:y2": 732.000297274428
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#0b3ed5",
+ "~:fill-opacity": 0.4
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 189.999982714653,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bf5": {
+ "~#shape": {
+ "~:y": 5339.00024227564,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77b",
+ "~:width": 270.929997403397,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 3152.00010276778,
+ "~:y": 5339.00024227564
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3422.93010017118,
+ "~:y": 5339.00024227564
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3422.93010017118,
+ "~:y": 5609.93149294173
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3152.00010276778,
+ "~:y": 5609.93149294173
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:hidden": false,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bf5",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc9bf4",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc9bf4",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 1
+ },
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#0109fd",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 3152.00010276778,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ba04e7",
+ "~:opacity": 0.5
+ },
+ "~:spread": 0,
+ "~:offset-y": 25,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~uea3497ec-8c4f-80ce-8006-b7431e93c950",
+ "~:offset-x": 25
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 3152.00010276778,
+ "~:y": 5339.00024227564,
+ "~:width": 270.929997403397,
+ "~:height": 270.93125066609,
+ "~:x1": 3152.00010276778,
+ "~:y1": 5339.00024227564,
+ "~:x2": 3422.93010017118,
+ "~:y2": 5609.93149294173
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 270.93125066609,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7ff6": {
+ "~#shape": {
+ "~:y": 2585.00053504916,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Board",
+ "~:width": 1103.9998195998,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 3770.00035044873,
+ "~:y": 2585.00053206573
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4874.00017004853,
+ "~:y": 2585.0005380326
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4874.00016654172,
+ "~:y": 3119.45044960726
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3770.00034694192,
+ "~:y": 3119.4504436404
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:show-content": false,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:opacity": 0.8,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7ff6",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:center",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 20
+ }
+ ],
+ "~:x": 3770.00034869533,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#140a67",
+ "~:opacity": 0.4
+ },
+ "~:spread": 0,
+ "~:offset-y": 300,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~ud2b53ca8-aebb-8099-8006-bdabce5cb46c",
+ "~:offset-x": 300
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 3770.00034869533,
+ "~:y": 2585.00053504916,
+ "~:width": 1103.9998195998,
+ "~:height": 534.449911574665,
+ "~:x1": 3770.00034869533,
+ "~:y1": 2585.00053504916,
+ "~:x2": 4874.00016829513,
+ "~:y2": 3119.45044662383
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 534.449911574665,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc7ff7",
+ "~u813630e3-7f07-80da-8006-c2b969bc7ff8"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bf6": {
+ "~#shape": {
+ "~:y": 4171.00034672734,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77a",
+ "~:width": 476.175917084897,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2013.99992869976,
+ "~:y": 4171.00034672734
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2490.17584578466,
+ "~:y": 4171.00034672734
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2490.17584578466,
+ "~:y": 4647.00036878106
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2013.99992869976,
+ "~:y": 4647.00036878106
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:show-content": true,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:blur": {
+ "~:id": "~u5339c9ee-d6a8-80a6-8006-b710cd2ce7d6",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": true
+ },
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bf6",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#ff0202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 2013.99992869976,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#010101",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u59bee4d9-ff40-808f-8006-b6070426becf",
+ "~:offset-x": 40
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2013.99992869976,
+ "~:y": 4171.00034672734,
+ "~:width": 476.175917084897,
+ "~:height": 476.000022053719,
+ "~:x1": 2013.99992869976,
+ "~:y1": 4171.00034672734,
+ "~:x2": 2490.17584578466,
+ "~:y2": 4647.00036878106
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 476.000022053719,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc9bf7"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7ff7": {
+ "~#shape": {
+ "~:y": 2654.00029065472,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Rectangle",
+ "~:width": 224.868012345696,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 4664.00014983,
+ "~:y": 2654.00028934492
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4888.8681621757,
+ "~:y": 2654.00029196453
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4888.8681536456,
+ "~:y": 2759.00026051267
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4664.00014129991,
+ "~:y": 2759.00025789306
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7ff7",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc7ff6",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc7ff6",
+ "~:strokes": [],
+ "~:x": 4664.00014556495,
+ "~:proportion": 1,
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 4664.00014556495,
+ "~:y": 2654.00029065472,
+ "~:width": 224.868012345696,
+ "~:height": 104.99996854814,
+ "~:x1": 4664.00014556495,
+ "~:y1": 2654.00029065472,
+ "~:x2": 4888.86815791065,
+ "~:y2": 2759.00025920286
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 104.99996854814,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bf7": {
+ "~#shape": {
+ "~:y": 4530.00032566757,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77b",
+ "~:width": 270.929997403396,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2372.00016395357,
+ "~:y": 4530.00032566757
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2642.93016135696,
+ "~:y": 4530.00032566757
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2642.93016135696,
+ "~:y": 4800.93157633366
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2372.00016395357,
+ "~:y": 4800.93157633366
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:hidden": false,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bf7",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc9bf6",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc9bf6",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 1
+ },
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#0109fd",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 2372.00016395357,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ba04e7",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 25,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~uea3497ec-8c4f-80ce-8006-b7431e93c950",
+ "~:offset-x": 25
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2372.00016395357,
+ "~:y": 4530.00032566757,
+ "~:width": 270.929997403396,
+ "~:height": 270.93125066609,
+ "~:x1": 2372.00016395357,
+ "~:y1": 4530.00032566757,
+ "~:x2": 2642.93016135696,
+ "~:y2": 4800.93157633366
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 270.93125066609,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7ff8": {
+ "~#shape": {
+ "~:y": 2834.00024696069,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1otdj8747ov",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1ppxneff2xr",
+ "~:font-size": "400",
+ "~:font-weight": "400",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro",
+ "~:text": "HOLA"
+ }
+ ],
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "2afvsygzvt",
+ "~:font-size": "400",
+ "~:font-weight": "400",
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "HOLA",
+ "~:width": 986.211443269176,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 3925.99990800704,
+ "~:y": 2834.00024149059
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4912.21135127622,
+ "~:y": 2834.0002524308
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4912.21135127622,
+ "~:y": 3215.25720785521
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3925.99990800704,
+ "~:y": 3215.257196915
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:constraints-v": "~:top",
+ "~:constraints-h": "~:left",
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7ff8",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc7ff6",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc7ff6",
+ "~:strokes": [],
+ "~:x": 3925.99990800704,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ea1212",
+ "~:opacity": 0.4
+ },
+ "~:spread": 0,
+ "~:offset-y": 20,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u757a30c8-2a19-8062-8006-bdd7693703f6",
+ "~:offset-x": 20
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 3925.99990800704,
+ "~:y": 2834.00024696069,
+ "~:width": 986.211443269176,
+ "~:height": 381.256955424409,
+ "~:x1": 3925.99990800704,
+ "~:y1": 2834.00024696069,
+ "~:x2": 4912.21135127622,
+ "~:y2": 3215.2572023851
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 381.256955424409,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bf8": {
+ "~#shape": {
+ "~:y": 4171.00034672734,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77a",
+ "~:width": 476.175917084897,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 2794.00012556981,
+ "~:y": 4171.00034672734
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3270.17604265471,
+ "~:y": 4171.00034672734
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3270.17604265471,
+ "~:y": 4647.00036878106
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2794.00012556981,
+ "~:y": 4647.00036878106
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:show-content": false,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:blur": {
+ "~:id": "~u5339c9ee-d6a8-80a6-8006-b710cd2ce7d6",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": true
+ },
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bf8",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#ff0202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 2794.00012556981,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#010101",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u59bee4d9-ff40-808f-8006-b6070426becf",
+ "~:offset-x": 40
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 2794.00012556981,
+ "~:y": 4171.00034672734,
+ "~:width": 476.175917084897,
+ "~:height": 476.000022053719,
+ "~:x1": 2794.00012556981,
+ "~:y1": 4171.00034672734,
+ "~:x2": 3270.17604265471,
+ "~:y2": 4647.00036878106
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 476.000022053719,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc9bf9"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7ff9": {
+ "~#shape": {
+ "~:y": 3375.00028799808,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77a",
+ "~:width": 476.175917084897,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 489.999957859182,
+ "~:y": 3375.00028799808
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 966.175874944079,
+ "~:y": 3375.00028799808
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 966.175874944079,
+ "~:y": 3851.0003100518
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 489.999957859182,
+ "~:y": 3851.0003100518
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:show-content": true,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:blur": {
+ "~:id": "~u5339c9ee-d6a8-80a6-8006-b710cd2ce7d6",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": true
+ },
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7ff9",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#ff0202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 489.999957859182,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#010101",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u59bee4d9-ff40-808f-8006-b6070426becf",
+ "~:offset-x": 40
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 489.999957859182,
+ "~:y": 3375.00028799808,
+ "~:width": 476.175917084897,
+ "~:height": 476.00002205372,
+ "~:x1": 489.999957859182,
+ "~:y1": 3375.00028799808,
+ "~:x2": 966.175874944079,
+ "~:y2": 3851.0003100518
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 476.00002205372,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc7ffa"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bf9": {
+ "~#shape": {
+ "~:y": 4530.00032566757,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77b",
+ "~:width": 270.929997403397,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 3152.000116683,
+ "~:y": 4530.00032566757
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3422.93011408639,
+ "~:y": 4530.00032566757
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3422.93011408639,
+ "~:y": 4800.93157633366
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 3152.000116683,
+ "~:y": 4800.93157633366
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:hidden": false,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bf9",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc9bf8",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc9bf8",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 1
+ },
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#0109fd",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 3152.000116683,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ba04e7",
+ "~:opacity": 0.5
+ },
+ "~:spread": 0,
+ "~:offset-y": 25,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~uea3497ec-8c4f-80ce-8006-b7431e93c950",
+ "~:offset-x": 25
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 3152.000116683,
+ "~:y": 4530.00032566757,
+ "~:width": 270.929997403397,
+ "~:height": 270.93125066609,
+ "~:x1": 3152.000116683,
+ "~:y1": 4530.00032566757,
+ "~:x2": 3422.93011408639,
+ "~:y2": 4800.93157633366
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 270.93125066609,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7ffa": {
+ "~#shape": {
+ "~:y": 3734.0002821971,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77b",
+ "~:width": 270.929997403396,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 848.000071042675,
+ "~:y": 3734.0002821971
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1118.93006844607,
+ "~:y": 3734.0002821971
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1118.93006844607,
+ "~:y": 4004.93153286319
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 848.000071042675,
+ "~:y": 4004.93153286319
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:hidden": false,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7ffa",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc7ff9",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc7ff9",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#0109fd",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 848.000071042675,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#094ae0",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 50,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": true,
+ "~:id": "~udca35925-f5a2-8083-8006-b60be22fea0c",
+ "~:offset-x": 50
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 848.000071042675,
+ "~:y": 3734.0002821971,
+ "~:width": 270.929997403396,
+ "~:height": 270.931250666088,
+ "~:x1": 848.000071042675,
+ "~:y1": 3734.0002821971,
+ "~:x2": 1118.93006844607,
+ "~:y2": 4004.93153286319
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 270.931250666088,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bfa": {
+ "~#shape": {
+ "~:y": null,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:content": {
+ "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAD9P5tEIS8ORQMAAAD9P5tEIS8ORT0AvET9lQZF/b+7RBAWB0UDAAAAtX+7RCOWB0V1F7NEAQAURXUXs0QBABRFAgAAAAAAAAAAAAAAAAAAAAAAAAD9P5tEIS8ORQ=="
+ },
+ "~:name": "Path",
+ "~:width": null,
+ "~:type": "~:path",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1241.99997291426,
+ "~:y": 2161.00030828981
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1501.99909592772,
+ "~:y": 2161.00030828981
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1501.99909592772,
+ "~:y": 2368.00026501296
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1241.99997291426,
+ "~:y": 2368.00026501296
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bfa",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": null,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#de1111",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 80,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u70873f92-ec4b-8045-8006-b3a396ef1fe7",
+ "~:offset-x": 80
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1241.99997291426,
+ "~:y": 2161.00030828981,
+ "~:width": 259.999123013458,
+ "~:height": 206.999956723148,
+ "~:x1": 1241.99997291426,
+ "~:y1": 2161.00030828981,
+ "~:x2": 1501.99909592772,
+ "~:y2": 2368.00026501296
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": null,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bfb": {
+ "~#shape": {
+ "~:y": null,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:content": {
+ "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAD+/0hEIi8ORQMAAAD+/0hEIi8ORT9AhUT9lQZF//+ERBAWB0UDAAAAv7+ERCSWB0XurnhEAQAURe6ueEQBABRFAgAAAAAAAAAAAAAAAAAAAAAAAAD+/0hEIi8ORQ=="
+ },
+ "~:name": "Path",
+ "~:width": null,
+ "~:type": "~:path",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 804.000008158981,
+ "~:y": 2161.00033838998
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1063.99913117244,
+ "~:y": 2161.00033838998
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1063.99913117244,
+ "~:y": 2368.00029511312
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 804.000008158981,
+ "~:y": 2368.00029511312
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bfb",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:center",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": null,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#de1111",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 80,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u70873f92-ec4b-8045-8006-b3a396ef1fe7",
+ "~:offset-x": 80
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 804.000008158981,
+ "~:y": 2161.00033838998,
+ "~:width": 259.999123013458,
+ "~:height": 206.999956723148,
+ "~:x1": 804.000008158981,
+ "~:y1": 2161.00033838998,
+ "~:x2": 1063.99913117244,
+ "~:y2": 2368.00029511312
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": null,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bdc": {
+ "~#shape": {
+ "~:y": 3375.00028799808,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77a",
+ "~:width": 476.175917084896,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1270.00003265892,
+ "~:y": 3375.00028799808
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1746.17594974382,
+ "~:y": 3375.00028799808
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1746.17594974382,
+ "~:y": 3851.0003100518
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1270.00003265892,
+ "~:y": 3851.0003100518
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:show-content": false,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:blur": {
+ "~:id": "~u5339c9ee-d6a8-80a6-8006-b710cd2ce7d6",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": true
+ },
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bdc",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#ff0202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 1270.00003265892,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#010101",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u59bee4d9-ff40-808f-8006-b6070426becf",
+ "~:offset-x": 40
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1270.00003265892,
+ "~:y": 3375.00028799808,
+ "~:width": 476.175917084896,
+ "~:height": 476.00002205372,
+ "~:x1": 1270.00003265892,
+ "~:y1": 3375.00028799808,
+ "~:x2": 1746.17594974382,
+ "~:y2": 3851.0003100518
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 476.00002205372,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc9bdd"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bfc": {
+ "~#shape": {
+ "~:y": null,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:content": {
+ "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAD8f91DIU8NRQMAAAD8f91DIU8NRY5AMET9tQVF/r8vRBA2BkUDAAAAfj8vRCO2BkX+bh5EASATRf5uHkQBIBNFAgAAAAAAAAAAAAAAAAAAAAAAAAD8f91DIU8NRQ=="
+ },
+ "~:name": "Path",
+ "~:width": null,
+ "~:type": "~:path",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 443,
+ "~:y": 2147.00030457082
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 703.000115897557,
+ "~:y": 2147.00030457082
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 703.000115897557,
+ "~:y": 2354.00026129397
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 443,
+ "~:y": 2354.00026129397
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bfc",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": null,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#de1111",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 80,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u70873f92-ec4b-8045-8006-b3a396ef1fe7",
+ "~:offset-x": 80
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 443,
+ "~:y": 2147.00030457082,
+ "~:width": 260.000115897557,
+ "~:height": 206.999956723148,
+ "~:x1": 443,
+ "~:y1": 2147.00030457082,
+ "~:x2": 703.000115897557,
+ "~:y2": 2354.00026129397
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": null,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bdd": {
+ "~#shape": {
+ "~:y": 3734.0002821971,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77b",
+ "~:width": 270.929997403396,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1628.00003903089,
+ "~:y": 3734.0002821971
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1898.93003643429,
+ "~:y": 3734.0002821971
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1898.93003643429,
+ "~:y": 4004.93153286319
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1628.00003903089,
+ "~:y": 4004.93153286319
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:hidden": false,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bdd",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc9bdc",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc9bdc",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#0109fd",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 1628.00003903089,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#094ae0",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 50,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": true,
+ "~:id": "~udca35925-f5a2-8083-8006-b60be22fea0c",
+ "~:offset-x": 50
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1628.00003903089,
+ "~:y": 3734.0002821971,
+ "~:width": 270.929997403396,
+ "~:height": 270.931250666088,
+ "~:x1": 1628.00003903089,
+ "~:y1": 3734.0002821971,
+ "~:x2": 1898.93003643429,
+ "~:y2": 4004.93153286319
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 270.931250666088,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bfd": {
+ "~#shape": {
+ "~:y": null,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:content": {
+ "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAABYJ5EQ17sRAMAAAABYJ5EQ17sREEgv0T5K91EAeC+RCAs3kQDAAAAwZ++REcs30R5N7ZEAwD4RHk3tkQDAPhEAgAAAAAAAAAAAAAAAAAAAAAAAAABYJ5EQ17sRA=="
+ },
+ "~:name": "Path",
+ "~:width": null,
+ "~:type": "~:path",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1267.0000171205,
+ "~:y": 1777.00032442205
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1527.00013301806,
+ "~:y": 1777.00032442205
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1527.00013301806,
+ "~:y": 1984.00040411815
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1267.0000171205,
+ "~:y": 1984.00040411815
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bfd",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": null,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#de1111",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 80,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u70873f92-ec4b-8045-8006-b3a396ef1fe7",
+ "~:offset-x": 80
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1267.0000171205,
+ "~:y": 1777.00032442205,
+ "~:width": 260.000115897557,
+ "~:height": 207.000079696094,
+ "~:x1": 1267.0000171205,
+ "~:y1": 1777.00032442205,
+ "~:x2": 1527.00013301806,
+ "~:y2": 1984.00040411815
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 0.4
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": null,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bde": {
+ "~#shape": {
+ "~:y": 2566.00032561364,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77a",
+ "~:width": 476.175917084896,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 490.000017550761,
+ "~:y": 2566.00032561364
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 966.175934635658,
+ "~:y": 2566.00032561364
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 966.175934635658,
+ "~:y": 3042.00034766736
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 490.000017550761,
+ "~:y": 3042.00034766736
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:show-content": true,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:blur": {
+ "~:id": "~u5339c9ee-d6a8-80a6-8006-b710cd2ce7d6",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": true
+ },
+ "~:r1": 0,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bde",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#ff0202",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 490.000017550761,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#010101",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 40,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u59bee4d9-ff40-808f-8006-b6070426becf",
+ "~:offset-x": 40
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 490.000017550761,
+ "~:y": 2566.00032561364,
+ "~:width": 476.175917084896,
+ "~:height": 476.000022053719,
+ "~:x1": 490.000017550761,
+ "~:y1": 2566.00032561364,
+ "~:x2": 966.175934635658,
+ "~:y2": 3042.00034766736
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 476.000022053719,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc9bdf"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bfe": {
+ "~#shape": {
+ "~:y": null,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:content": {
+ "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAAGQE9EQ17sRAMAAAAGQE9EQ17sRENgiET5K91EAyCIRCAs3kQDAAAAw9+HREcs30T27n5EAwD4RPbufkQDAPhEAgAAAAAAAAAAAAAAAAAAAAAAAAAGQE9EQ17sRA=="
+ },
+ "~:name": "Path",
+ "~:width": null,
+ "~:type": "~:path",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 829.000042113201,
+ "~:y": 1777.00032400464
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1089.00015801076,
+ "~:y": 1777.00032400464
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1089.00015801076,
+ "~:y": 1984.00040370073
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 829.000042113201,
+ "~:y": 1984.00040370073
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bfe",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:center",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": null,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#de1111",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 80,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u70873f92-ec4b-8045-8006-b3a396ef1fe7",
+ "~:offset-x": 80
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 829.000042113201,
+ "~:y": 1777.00032400464,
+ "~:width": 260.000115897557,
+ "~:height": 207.000079696094,
+ "~:x1": 829.000042113201,
+ "~:y1": 1777.00032400464,
+ "~:x2": 1089.00015801076,
+ "~:y2": 1984.00040370073
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 0.4
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": null,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc7fdf": {
+ "~#shape": {
+ "~:y": 4824.45130420334,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 0.875521645210578,
+ "~:b": -0.483178899340361,
+ "~:c": 0.483178898327598,
+ "~:d": 0.875521645769497,
+ "~:e": 9.09494701772928e-13,
+ "~:f": 2.27373675443232e-13
+ }
+ },
+ "~:rotation": 331.106771530248,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "Board",
+ "~:width": 1103.99984135388,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 3805.00024083074,
+ "~:y": 5124.42974167317
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4771.57599824511,
+ "~:y": 4591.00031345587
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 5029.8109228195,
+ "~:y": 5058.92278883939
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 4063.23516540513,
+ "~:y": 5592.35221705669
+ }
+ }
+ ],
+ "~:r2": 20,
+ "~:show-content": false,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 0.875521645769497,
+ "~:b": 0.483178899340361,
+ "~:c": -0.483178898327598,
+ "~:d": 0.875521645210578,
+ "~:e": -6.86420136105515e-13,
+ "~:f": -6.38519223360168e-13
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 20,
+ "~:blur": {
+ "~:id": "~u08e9047b-7a98-8007-8006-c2b86966f332",
+ "~:type": "~:layer-blur",
+ "~:value": 8,
+ "~:hidden": false
+ },
+ "~:r1": 20,
+ "~:opacity": 0.8,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc7fdf",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-alignment": "~:center",
+ "~:stroke-style": "~:solid",
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1,
+ "~:stroke-width": 20
+ }
+ ],
+ "~:x": 3865.40566114818,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#140a67",
+ "~:opacity": 0.4
+ },
+ "~:spread": 0,
+ "~:offset-y": 300,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~ud2b53ca8-aebb-8099-8006-bdabce5cb46c",
+ "~:offset-x": 300
+ }
+ ],
+ "~:r4": 20,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 3865.40566114818,
+ "~:y": 4824.45130420334,
+ "~:width": 1103.99984135388,
+ "~:height": 534.449922105886,
+ "~:x1": 3865.40566114818,
+ "~:y1": 4824.45130420334,
+ "~:x2": 4969.40550250206,
+ "~:y2": 5358.90122630922
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 534.449922105886,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u813630e3-7f07-80da-8006-c2b969bc7fe0",
+ "~u813630e3-7f07-80da-8006-c2b969bc7fe1"
+ ]
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bdf": {
+ "~#shape": {
+ "~:y": 2925.00035033024,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:hide-in-viewer": false,
+ "~:name": "b7195d5dd77b",
+ "~:width": 270.929997403396,
+ "~:type": "~:rect",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 848.000008663942,
+ "~:y": 2925.00035033024
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1118.93000606734,
+ "~:y": 2925.00035033024
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1118.93000606734,
+ "~:y": 3195.93160099633
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 848.000008663942,
+ "~:y": 3195.93160099633
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:hidden": false,
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bdf",
+ "~:parent-id": "~u813630e3-7f07-80da-8006-c2b969bc9bde",
+ "~:frame-id": "~u813630e3-7f07-80da-8006-c2b969bc9bde",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#0109fd",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 848.000008663942,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#094ae0",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 50,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": true,
+ "~:id": "~udca35925-f5a2-8083-8006-b60be22fea0c",
+ "~:offset-x": 50
+ }
+ ],
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 848.000008663942,
+ "~:y": 2925.00035033024,
+ "~:width": 270.929997403396,
+ "~:height": 270.931250666089,
+ "~:x1": 848.000008663942,
+ "~:y1": 2925.00035033024,
+ "~:x2": 1118.93000606734,
+ "~:y2": 3195.93160099633
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 270.931250666089,
+ "~:flip-y": null
+ }
+ },
+ "~u813630e3-7f07-80da-8006-c2b969bc9bff": {
+ "~#shape": {
+ "~:y": null,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:content": {
+ "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAD0/+lDQ57qRAMAAAD0/+lDQ57qRIqANkT5a9tE+v81RCBs3EQDAAAAin81REds3UT6riREA0D2RPquJEQDQPZEAgAAAAAAAAAAAAAAAAAAAAAAAAD0/+lDQ57qRA=="
+ },
+ "~:name": "Path",
+ "~:width": null,
+ "~:type": "~:path",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 468.000012538503,
+ "~:y": 1763.00032947447
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 728.000128436061,
+ "~:y": 1763.00032947447
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 728.000128436061,
+ "~:y": 1970.00040917057
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 468.000012538503,
+ "~:y": 1970.00040917057
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:id": "~u813630e3-7f07-80da-8006-c2b969bc9bff",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 20,
+ "~:stroke-color": "#000000",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": null,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#de1111",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 80,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u70873f92-ec4b-8045-8006-b3a396ef1fe7",
+ "~:offset-x": 80
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 468.000012538503,
+ "~:y": 1763.00032947447,
+ "~:width": 260.000115897557,
+ "~:height": 207.000079696094,
+ "~:x1": 468.000012538503,
+ "~:y1": 1763.00032947447,
+ "~:x2": 728.000128436061,
+ "~:y2": 1970.00040917057
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 0.4
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": null,
+ "~:flip-y": null
+ }
+ }
+ },
+ "~:id": "~u9502081a-e1a4-80bc-8006-c2b96872319a",
+ "~:name": "Page 1"
+ }
+ },
+ "~:id": "~u9502081a-e1a4-80bc-8006-c2b968723199",
+ "~:options": {
+ "~:components-v2": true,
+ "~:base-font-size": "16px"
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontend/playwright/data/render-wasm/get-file-text-images.json b/frontend/playwright/data/render-wasm/get-file-text-images.json
index 18020f2c1e..e04435395a 100644
--- a/frontend/playwright/data/render-wasm/get-file-text-images.json
+++ b/frontend/playwright/data/render-wasm/get-file-text-images.json
@@ -4,6 +4,7 @@
"fdata/path-data",
"plugins/runtime",
"design-tokens/v1",
+ "variants/v1",
"layout/grid",
"styles/v2",
"fdata/pointer-map",
@@ -25,8 +26,8 @@
"~:has-media-trimmed": false,
"~:comment-thread-seqn": 0,
"~:name": "New File 7 (copy)",
- "~:revn": 233,
- "~:modified-at": "~m1753186774115",
+ "~:revn": 318,
+ "~:modified-at": "~m1757071793227",
"~:vern": 0,
"~:id": "~u4f89252d-ebbc-813e-8006-8699e4149b9a",
"~:is-shared": false,
@@ -99,7 +100,8 @@
"0004-clean-shadow-color",
"0008-fix-library-colors-v4",
"0003-convert-path-content-v2",
- "0009-clean-library-colors"
+ "0009-clean-library-colors",
+ "0010-fix-swap-slots-pointing-non-existent-shapes"
]
},
"~:version": 67,
@@ -329,13 +331,13 @@
{
"~#point": {
"~:x": 359.0000047683716,
- "~:y": 361.99997143551445
+ "~:y": 362.9999734620724
}
},
{
"~#point": {
"~:x": 188.99999672174454,
- "~:y": 361.99997143551445
+ "~:y": 362.9999734620724
}
}
],
@@ -351,6 +353,42 @@
},
"~:id": "~u4b4f5ff7-44ac-808a-8006-5e977f9e30ea",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 364.349979565588,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -2.149993896484375,
+ "~:width": 169.36666870117188,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 188.99999672174454,
+ "~:x1": 0,
+ "~:y2": 45.350006103515625,
+ "~:fills": [
+ {
+ "~:fill-opacity": 1,
+ "~:fill-image": {
+ "~:id": "~u4f89252d-ebbc-813e-8006-8699e4170e18",
+ "~:width": 443,
+ "~:height": 441,
+ "~:mtype": "image/png",
+ "~:name": "pattern.png",
+ "~:keep-aspect-ratio": true
+ }
+ }
+ ],
+ "~:x2": 169.36666870117188,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": "hello world"
+ }
+ }
+ ],
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:strokes": [
{
@@ -367,15 +405,15 @@
"~:x": 188.99999672174454,
"~:y": 318.9999734620724,
"~:width": 170.00000804662704,
- "~:height": 42.99999797344208,
+ "~:height": 44,
"~:x1": 188.99999672174454,
"~:y1": 318.9999734620724,
"~:x2": 359.0000047683716,
- "~:y2": 361.99997143551445
+ "~:y2": 362.9999734620724
}
},
"~:flip-x": null,
- "~:height": 42.99999797344208,
+ "~:height": 44,
"~:flip-y": null
}
},
@@ -474,13 +512,13 @@
{
"~#point": {
"~:x": 359.0000047683716,
- "~:y": 305.999979064909
+ "~:y": 306.9999810914669
}
},
{
"~#point": {
"~:x": 188.99999672174454,
- "~:y": 305.999979064909
+ "~:y": 306.9999810914669
}
}
],
@@ -496,6 +534,35 @@
},
"~:id": "~u4b4f5ff7-44ac-808a-8006-5e968ea9bb4b",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 308.34998719498253,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -2.149993896484375,
+ "~:width": 169.36666870117188,
+ "~:text-decoration": "rgb(21, 209, 46)",
+ "~:letter-spacing": "normal",
+ "~:x": 188.99999672174454,
+ "~:x1": 0,
+ "~:y2": 45.350006103515625,
+ "~:fills": [
+ {
+ "~:fill-color": "#15d12e",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 169.36666870117188,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": "hello world"
+ }
+ }
+ ],
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:strokes": [
{
@@ -519,21 +586,21 @@
"~:x": 188.99999672174454,
"~:y": 262.9999810914669,
"~:width": 170.00000804662704,
- "~:height": 42.99999797344208,
+ "~:height": 44,
"~:x1": 188.99999672174454,
"~:y1": 262.9999810914669,
"~:x2": 359.0000047683716,
- "~:y2": 305.999979064909
+ "~:y2": 306.9999810914669
}
},
"~:flip-x": null,
- "~:height": 42.99999797344208,
+ "~:height": 44,
"~:flip-y": null
}
},
"~u8e0276b0-5131-8065-8006-87c8c98fa23d": {
"~#shape": {
- "~:y": 601.000025231285,
+ "~:y": 579.9999966210555,
"~:transform": {
"~#matrix": {
"~:a": 1,
@@ -692,26 +759,26 @@
"~:points": [
{
"~#point": {
- "~:x": 533.9999873919224,
- "~:y": 601.0000252312851
+ "~:x": 669.0000026507115,
+ "~:y": 579.9999966210556
}
},
{
"~#point": {
- "~:x": 818.0000525145931,
- "~:y": 601.0000252312851
+ "~:x": 953.0000677733822,
+ "~:y": 579.9999966210556
}
},
{
"~#point": {
- "~:x": 818.0000525145931,
- "~:y": 690.9999714607172
+ "~:x": 953.0000677733822,
+ "~:y": 669.9999428504877
}
},
{
"~#point": {
- "~:x": 533.9999873919224,
- "~:y": 690.9999714607172
+ "~:x": 669.0000026507115,
+ "~:y": 669.9999428504877
}
}
],
@@ -729,8 +796,120 @@
"~:layout-item-v-sizing": "~:fix",
"~:id": "~u8e0276b0-5131-8065-8006-87c8c98fa23d",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 625.3500027245711,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -2.149993896484375,
+ "~:width": 45,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 669.0000026507116,
+ "~:x1": 0,
+ "~:y2": 45.350006103515625,
+ "~:fills": [],
+ "~:x2": 45,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": "🔥"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 625.3500027245711,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -2.149993896484375,
+ "~:width": 45,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 714.0000026507116,
+ "~:x1": 45,
+ "~:y2": 45.350006103515625,
+ "~:fills": [],
+ "~:x2": 90,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": "👩🏿\u200d🚀"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 625.3500027245711,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -2.149993896484375,
+ "~:width": 45,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 759.0000026507116,
+ "~:x1": 90,
+ "~:y2": 45.350006103515625,
+ "~:fills": [],
+ "~:x2": 135,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": "👺"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 625.3500027245711,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -2.149993896484375,
+ "~:width": 45,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 804.0000026507116,
+ "~:x1": 135,
+ "~:y2": 45.350006103515625,
+ "~:fills": [],
+ "~:x2": 180,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": "🚀"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 668.5499996728133,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": 41.05000305175781,
+ "~:width": 7.26666259765625,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 669.0000026507116,
+ "~:x1": 0,
+ "~:y2": 88.55000305175781,
+ "~:fills": [],
+ "~:x2": 7.26666259765625,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": " "
+ }
+ }
+ ],
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
- "~:x": 533.9999873919226,
+ "~:x": 669.0000026507116,
"~:shadow": [
{
"~:color": {
@@ -748,14 +927,14 @@
],
"~:selrect": {
"~#rect": {
- "~:x": 533.9999873919226,
- "~:y": 601.000025231285,
+ "~:x": 669.0000026507116,
+ "~:y": 579.9999966210555,
"~:width": 284.00006512267055,
"~:height": 89.99994622943211,
- "~:x1": 533.9999873919226,
- "~:y1": 601.000025231285,
- "~:x2": 818.0000525145931,
- "~:y2": 690.9999714607171
+ "~:x1": 669.0000026507116,
+ "~:y1": 579.9999966210555,
+ "~:x2": 953.0000677733822,
+ "~:y2": 669.9999428504876
}
},
"~:flip-x": null,
@@ -871,6 +1050,30 @@
},
"~:id": "~uef609b51-0d34-80f3-8006-5e99460c12bb",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 596.1000958619669,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -9.649993896484375,
+ "~:width": 144,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 185.92164040549193,
+ "~:x1": 0,
+ "~:y2": 45.350006103515625,
+ "~:fills": [],
+ "~:x2": 144,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 55,
+ "~:text": "萎ポくろ"
+ }
+ }
+ ],
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:strokes": [
{
@@ -953,7 +1156,12 @@
"~:font-variant-id": "regular",
"~:text-decoration": "none",
"~:letter-spacing": "0",
- "~:fills": [],
+ "~:fills": [
+ {
+ "~:fill-color": "#2244ab",
+ "~:fill-opacity": 0.6166666666666667
+ }
+ ],
"~:font-family": "sourcesanspro",
"~:text": "萎ポくろ"
}
@@ -971,7 +1179,12 @@
"~:font-variant-id": "regular",
"~:text-decoration": "none",
"~:letter-spacing": "0",
- "~:fills": [],
+ "~:fills": [
+ {
+ "~:fill-color": "#2244ab",
+ "~:fill-opacity": 0.6166666666666667
+ }
+ ],
"~:font-family": "sourcesanspro"
}
]
@@ -1020,8 +1233,70 @@
"~:f": 0
}
},
+ "~:blur": {
+ "~:id": "~ufcdfaec2-c882-800a-8006-bdfe640d48c0",
+ "~:type": "~:layer-blur",
+ "~:value": 1,
+ "~:hidden": false
+ },
"~:id": "~u4b4f5ff7-44ac-808a-8006-5e980c195547",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 468.3500178775157,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -9.649993896484375,
+ "~:width": 72,
+ "~:text-decoration": "rgba(34, 68, 171, 0.617)",
+ "~:letter-spacing": "normal",
+ "~:x": 192.5000022321518,
+ "~:x1": 9.5,
+ "~:y2": 45.350006103515625,
+ "~:fills": [
+ {
+ "~:fill-color": "#2244ab",
+ "~:fill-opacity": 0.6166666666666667
+ }
+ ],
+ "~:x2": 81.5,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 55,
+ "~:text": "萎ポ"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 511.5500148257579,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": 33.55000305175781,
+ "~:width": 72,
+ "~:text-decoration": "rgba(34, 68, 171, 0.617)",
+ "~:letter-spacing": "normal",
+ "~:x": 192.5000022321518,
+ "~:x1": 9.5,
+ "~:y2": 88.55000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#2244ab",
+ "~:fill-opacity": 0.6166666666666667
+ }
+ ],
+ "~:x2": 81.5,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 55,
+ "~:text": "くろ"
+ }
+ }
+ ],
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:strokes": [
{
@@ -1076,6 +1351,28 @@
"~:line-height": "1.2",
"~:font-style": "normal",
"~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1f62xcal6hw",
+ "~:font-size": "24",
+ "~:font-weight": "normal",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#cf2222",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "\"Droid Sans Mono\", \"monospace\", monospace",
+ "~:text": "🔥"
+ },
{
"~:line-height": "",
"~:font-style": "normal",
@@ -1096,7 +1393,7 @@
}
],
"~:font-family": "\"Droid Sans Mono\", \"monospace\", monospace",
- "~:text": "❤️ "
+ "~:text": " "
},
{
"~:line-height": "",
@@ -1127,7 +1424,7 @@
"~:text-transform": "none",
"~:font-id": "sourcesanspro",
"~:key": "59c3kg7hq8",
- "~:font-size": "24",
+ "~:font-size": "0",
"~:font-weight": "normal",
"~:typography-ref-file": null,
"~:font-variant-id": "regular",
@@ -1206,15 +1503,37 @@
}
],
"~:font-family": "\"Droid Sans Mono\", \"monospace\", monospace",
- "~:text": " unicode ❤️"
+ "~:text": " unicode "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "vff0hj0mq3",
+ "~:font-size": "24",
+ "~:font-weight": "normal",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#cf2222",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "\"Droid Sans Mono\", \"monospace\", monospace",
+ "~:text": "🔥"
}
],
"~:typography-ref-id": null,
"~:text-transform": "none",
"~:text-align": "left",
"~:font-id": "sourcesanspro",
- "~:key": "2bd6up3z17w",
- "~:font-size": "0",
+ "~:key": "1gghvlvyoud",
+ "~:font-size": "24",
"~:font-weight": "normal",
"~:typography-ref-file": null,
"~:text-direction": "ltr",
@@ -1278,6 +1597,143 @@
"~:layout-item-v-sizing": "~:fix",
"~:id": "~u8e0276b0-5131-8065-8006-87c89da3209e",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 415.6499997209809,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "24px",
+ "~:font-weight": "400",
+ "~:y1": -1.850006103515625,
+ "~:width": 34.83332824707031,
+ "~:text-decoration": "rgb(207, 34, 34)",
+ "~:letter-spacing": "normal",
+ "~:x": 528.9999767398235,
+ "~:x1": 0,
+ "~:y2": 30.649993896484375,
+ "~:fills": [
+ {
+ "~:fill-color": "#cf2222",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 34.83332824707031,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 32.5,
+ "~:text": "❤️ "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 415.6499997209809,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "24px",
+ "~:font-weight": "400",
+ "~:y1": -1.850006103515625,
+ "~:width": 11.133331298828125,
+ "~:text-decoration": "rgb(207, 34, 34)",
+ "~:letter-spacing": "normal",
+ "~:x": 563.8333049868938,
+ "~:x1": 34.83332824707031,
+ "~:y2": 30.649993896484375,
+ "~:fills": [
+ {
+ "~:fill-color": "#cf2222",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 45.96665954589844,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 32.5,
+ "~:text": "I "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 415.6499997209809,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "24px",
+ "~:font-weight": "400",
+ "~:y1": -1.850006103515625,
+ "~:width": 6.116668701171875,
+ "~:text-decoration": "rgb(207, 34, 34)",
+ "~:letter-spacing": "normal",
+ "~:x": 574.966636285722,
+ "~:x1": 45.96665954589844,
+ "~:y2": 30.649993896484375,
+ "~:fills": [
+ {
+ "~:fill-color": "#cf2222",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 52.08332824707031,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 32.5,
+ "~:text": "l"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 415.6499997209809,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "24px",
+ "~:font-weight": "400",
+ "~:y1": -1.850006103515625,
+ "~:width": 35.93333435058594,
+ "~:text-decoration": "line-through rgb(207, 34, 34)",
+ "~:letter-spacing": "normal",
+ "~:x": 581.0833049868938,
+ "~:x1": 52.08332824707031,
+ "~:y2": 30.649993896484375,
+ "~:fills": [
+ {
+ "~:fill-color": "#cf2222",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 88.01666259765625,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 32.5,
+ "~:text": "ove"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 415.6499997209809,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "24px",
+ "~:font-weight": "400",
+ "~:y1": -1.850006103515625,
+ "~:width": 120.41667175292969,
+ "~:text-decoration": "line-through rgb(207, 34, 34)",
+ "~:letter-spacing": "normal",
+ "~:x": 617.0166393374798,
+ "~:x1": 88.01666259765625,
+ "~:y2": 30.649993896484375,
+ "~:fills": [
+ {
+ "~:fill-color": "#cf2222",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 208.43333435058594,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 32.5,
+ "~:text": " unicode ❤️"
+ }
+ }
+ ],
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:strokes": [],
"~:x": 528.9999767398235,
@@ -1407,13 +1863,13 @@
{
"~#point": {
"~:x": 359.0000047683716,
- "~:y": 361.99997143551445
+ "~:y": 362.9999734620724
}
},
{
"~#point": {
"~:x": 188.99999672174454,
- "~:y": 361.99997143551445
+ "~:y": 362.9999734620724
}
}
],
@@ -1429,6 +1885,42 @@
},
"~:id": "~u4b4f5ff7-44ac-808a-8006-5e9771af0c6e",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 364.349979565588,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -2.149993896484375,
+ "~:width": 169.36666870117188,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 188.99999672174454,
+ "~:x1": 0,
+ "~:y2": 45.350006103515625,
+ "~:fills": [
+ {
+ "~:fill-opacity": 1,
+ "~:fill-image": {
+ "~:id": "~u4f89252d-ebbc-813e-8006-8699e4170e18",
+ "~:width": 443,
+ "~:height": 441,
+ "~:mtype": "image/png",
+ "~:name": "pattern.png",
+ "~:keep-aspect-ratio": true
+ }
+ }
+ ],
+ "~:x2": 169.36666870117188,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": "hello world"
+ }
+ }
+ ],
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:strokes": [
{
@@ -1445,15 +1937,15 @@
"~:x": 188.99999672174454,
"~:y": 318.9999734620724,
"~:width": 170.00000804662704,
- "~:height": 42.99999797344208,
+ "~:height": 44,
"~:x1": 188.99999672174454,
"~:y1": 318.9999734620724,
"~:x2": 359.0000047683716,
- "~:y2": 361.99997143551445
+ "~:y2": 362.9999734620724
}
},
"~:flip-x": null,
- "~:height": 42.99999797344208,
+ "~:height": 44,
"~:flip-y": null
}
},
@@ -1566,13 +2058,13 @@
{
"~#point": {
"~:x": 359.0000047683716,
- "~:y": 361.99997143551445
+ "~:y": 362.9999734620724
}
},
{
"~#point": {
"~:x": 188.99999672174454,
- "~:y": 361.99997143551445
+ "~:y": 362.9999734620724
}
}
],
@@ -1588,6 +2080,42 @@
},
"~:id": "~u4b4f5ff7-44ac-808a-8006-5e9775677e20",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 364.349979565588,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -2.149993896484375,
+ "~:width": 169.36666870117188,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 188.99999672174454,
+ "~:x1": 0,
+ "~:y2": 45.350006103515625,
+ "~:fills": [
+ {
+ "~:fill-opacity": 1,
+ "~:fill-image": {
+ "~:id": "~u4f89252d-ebbc-813e-8006-8699e4170e18",
+ "~:width": 443,
+ "~:height": 441,
+ "~:mtype": "image/png",
+ "~:name": "pattern.png",
+ "~:keep-aspect-ratio": true
+ }
+ }
+ ],
+ "~:x2": 169.36666870117188,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": "hello world"
+ }
+ }
+ ],
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:strokes": [
{
@@ -1604,21 +2132,21 @@
"~:x": 188.99999672174454,
"~:y": 318.9999734620724,
"~:width": 170.00000804662704,
- "~:height": 42.99999797344208,
+ "~:height": 44,
"~:x1": 188.99999672174454,
"~:y1": 318.9999734620724,
"~:x2": 359.0000047683716,
- "~:y2": 361.99997143551445
+ "~:y2": 362.9999734620724
}
},
"~:flip-x": null,
- "~:height": 42.99999797344208,
+ "~:height": 44,
"~:flip-y": null
}
},
"~u2e773f0c-bc2a-8063-8006-75d73e978b13": {
"~#shape": {
- "~:y": 271.0000103742148,
+ "~:y": 271.00000374648164,
"~:transform": {
"~#matrix": {
"~:a": 1,
@@ -1630,7 +2158,7 @@
}
},
"~:rotation": 0,
- "~:grow-type": "~:fixed",
+ "~:grow-type": "~:auto-width",
"~:content": {
"~:type": "root",
"~:key": "23iz9tepv1l",
@@ -1648,7 +2176,7 @@
"~:typography-ref-id": null,
"~:text-transform": "none",
"~:font-id": "sourcesanspro",
- "~:key": "t8mkaljm92",
+ "~:key": "16puxcfnj7p",
"~:font-size": "24",
"~:font-weight": "normal",
"~:typography-ref-file": null,
@@ -1662,15 +2190,37 @@
}
],
"~:font-family": "\"Droid Sans Mono\", \"monospace\", monospace",
- "~:text": "❤️ I love unicode ❤️"
+ "~:text": "🦍 I love unicode "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "23z3cwj10cs",
+ "~:font-size": "24",
+ "~:font-weight": "normal",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "\"Droid Sans Mono\", \"monospace\", monospace",
+ "~:text": "🦍"
}
],
"~:typography-ref-id": null,
"~:text-transform": "none",
"~:text-align": "center",
"~:font-id": "sourcesanspro",
- "~:key": "2bd6up3z17w",
- "~:font-size": "24",
+ "~:key": "xvgbdzwpy1",
+ "~:font-size": "0",
"~:font-weight": "normal",
"~:typography-ref-file": null,
"~:text-direction": "ltr",
@@ -1692,31 +2242,31 @@
"~:vertical-align": "center"
},
"~:name": "❤️ I hate emoji ❤️",
- "~:width": 337.10167609832115,
+ "~:width": 209.00000677171096,
"~:type": "~:text",
"~:points": [
{
"~#point": {
- "~:x": 401.0000094603646,
- "~:y": 271.0000103742148
+ "~:x": 401.00001987243246,
+ "~:y": 271.00000374648164
}
},
{
"~#point": {
- "~:x": 738.1016855586857,
- "~:y": 271.0000103742148
+ "~:x": 610.0000266441434,
+ "~:y": 271.00000374648164
}
},
{
"~#point": {
- "~:x": 738.1016855586857,
- "~:y": 427.0000100565906
+ "~:x": 610.0000266441434,
+ "~:y": 300.00000428348255
}
},
{
"~#point": {
- "~:x": 401.0000094603646,
- "~:y": 427.0000100565906
+ "~:x": 401.00001987243246,
+ "~:y": 300.00000428348255
}
}
],
@@ -1734,6 +2284,35 @@
"~:layout-item-v-sizing": "~:fix",
"~:id": "~u2e773f0c-bc2a-8063-8006-75d73e978b13",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 365.2500103742148,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "24px",
+ "~:font-weight": "400",
+ "~:y1": 61.75,
+ "~:width": 208.43333435058594,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 465.3333377074349,
+ "~:x1": 64.33332824707031,
+ "~:y2": 94.25,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 272.76666259765625,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 32.5,
+ "~:text": "❤️ I love unicode ❤️"
+ }
+ }
+ ],
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:strokes": [
{
@@ -1744,7 +2323,7 @@
"~:stroke-opacity": 1
}
],
- "~:x": 401.0000094603646,
+ "~:x": 401.0000198724324,
"~:shadow": [
{
"~:color": {
@@ -1762,18 +2341,18 @@
],
"~:selrect": {
"~#rect": {
- "~:x": 401.0000094603646,
- "~:y": 271.0000103742148,
- "~:width": 337.10167609832115,
- "~:height": 155.9999996823758,
- "~:x1": 401.0000094603646,
- "~:y1": 271.0000103742148,
- "~:x2": 738.1016855586857,
- "~:y2": 427.0000100565906
+ "~:x": 401.0000198724324,
+ "~:y": 271.00000374648164,
+ "~:width": 209.00000677171096,
+ "~:height": 29.000000537000915,
+ "~:x1": 401.0000198724324,
+ "~:y1": 271.00000374648164,
+ "~:x2": 610.0000266441434,
+ "~:y2": 300.00000428348255
}
},
"~:flip-x": null,
- "~:height": 155.9999996823758,
+ "~:height": 29.000000537000915,
"~:flip-y": null
}
},
@@ -1975,6 +2554,118 @@
"~:layout-item-v-sizing": "~:fix",
"~:id": "~uef609b51-0d34-80f3-8006-5e995b054836",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 684.6584327431164,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -2.149993896484375,
+ "~:width": 45,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 339.16327306897387,
+ "~:x1": 0,
+ "~:y2": 45.350006103515625,
+ "~:fills": [],
+ "~:x2": 45,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": "🔥"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 684.6584327431164,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -2.149993896484375,
+ "~:width": 45,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 384.16327306897387,
+ "~:x1": 45,
+ "~:y2": 45.350006103515625,
+ "~:fills": [],
+ "~:x2": 90,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": "👩🏿\u200d🚀"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 684.6584327431164,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -2.149993896484375,
+ "~:width": 45,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 429.16327306897387,
+ "~:x1": 90,
+ "~:y2": 45.350006103515625,
+ "~:fills": [],
+ "~:x2": 135,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": "👺"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 684.6584327431164,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -2.149993896484375,
+ "~:width": 45,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 474.16327306897387,
+ "~:x1": 135,
+ "~:y2": 45.350006103515625,
+ "~:fills": [],
+ "~:x2": 180,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": "🚀"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 727.8584296913585,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": 41.05000305175781,
+ "~:width": 7.26666259765625,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 339.16327306897387,
+ "~:x1": 0,
+ "~:y2": 88.55000305175781,
+ "~:fills": [],
+ "~:x2": 7.26666259765625,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": " "
+ }
+ }
+ ],
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:x": 339.16327306897387,
"~:selrect": {
@@ -2020,6 +2711,28 @@
"~:line-height": "1.2",
"~:font-style": "normal",
"~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "16xfalefku7",
+ "~:font-size": "24",
+ "~:font-weight": "normal",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#cf2222",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "\"Droid Sans Mono\", \"monospace\", monospace",
+ "~:text": "🔥"
+ },
{
"~:line-height": "",
"~:font-style": "normal",
@@ -2040,7 +2753,7 @@
}
],
"~:font-family": "\"Droid Sans Mono\", \"monospace\", monospace",
- "~:text": "❤️ I "
+ "~:text": " I "
},
{
"~:line-height": "",
@@ -2084,15 +2797,37 @@
}
],
"~:font-family": "\"Droid Sans Mono\", \"monospace\", monospace",
- "~:text": " unicode ❤️"
+ "~:text": " unicode "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "20mlxdc1w6k",
+ "~:font-size": "24",
+ "~:font-weight": "normal",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#cf2222",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "\"Droid Sans Mono\", \"monospace\", monospace",
+ "~:text": "🔥"
}
],
"~:typography-ref-id": null,
"~:text-transform": "none",
"~:text-align": "left",
"~:font-id": "sourcesanspro",
- "~:key": "2bd6up3z17w",
- "~:font-size": "0",
+ "~:key": "26o9ihmqfo3",
+ "~:font-size": "24",
"~:font-weight": "normal",
"~:typography-ref-file": null,
"~:text-direction": "ltr",
@@ -2156,6 +2891,89 @@
"~:layout-item-v-sizing": "~:fix",
"~:id": "~uef609b51-0d34-80f3-8006-5e98ba9c0e14",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 459.6499959062836,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "24px",
+ "~:font-weight": "400",
+ "~:y1": -1.850006103515625,
+ "~:width": 45.96665954589844,
+ "~:text-decoration": "line-through rgb(207, 34, 34)",
+ "~:letter-spacing": "normal",
+ "~:x": 528.9999767398235,
+ "~:x1": 0,
+ "~:y2": 30.649993896484375,
+ "~:fills": [
+ {
+ "~:fill-color": "#cf2222",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 45.96665954589844,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 32.5,
+ "~:text": "❤️ I "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 459.6499959062836,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "24px",
+ "~:font-weight": "400",
+ "~:y1": -1.850006103515625,
+ "~:width": 42.05000305175781,
+ "~:text-decoration": "line-through rgb(207, 34, 34)",
+ "~:letter-spacing": "normal",
+ "~:x": 574.966636285722,
+ "~:x1": 45.96665954589844,
+ "~:y2": 30.649993896484375,
+ "~:fills": [
+ {
+ "~:fill-color": "#cf2222",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 88.01666259765625,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 32.5,
+ "~:text": "love"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 459.6499959062836,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "24px",
+ "~:font-weight": "400",
+ "~:y1": -1.850006103515625,
+ "~:width": 120.41667175292969,
+ "~:text-decoration": "line-through rgb(207, 34, 34)",
+ "~:letter-spacing": "normal",
+ "~:x": 617.0166393374798,
+ "~:x1": 88.01666259765625,
+ "~:y2": 30.649993896484375,
+ "~:fills": [
+ {
+ "~:fill-color": "#cf2222",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 208.43333435058594,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 32.5,
+ "~:text": " unicode ❤️"
+ }
+ }
+ ],
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:strokes": [],
"~:x": 528.9999767398235,
@@ -2282,13 +3100,65 @@
"~:f": 0
}
},
+ "~:blur": {
+ "~:id": "~u8df74ea5-9311-8065-8006-bdfdeeb5d79d",
+ "~:type": "~:layer-blur",
+ "~:value": 1,
+ "~:hidden": false
+ },
"~:id": "~uef609b51-0d34-80f3-8006-5e9934d0368b",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 468.3500177125625,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -9.649993896484375,
+ "~:width": 72,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 276.4999941259201,
+ "~:x1": 9.5,
+ "~:y2": 45.350006103515625,
+ "~:fills": [],
+ "~:x2": 81.5,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 55,
+ "~:text": "萎ポ"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 511.55001466080466,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": 33.55000305175781,
+ "~:width": 72,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 276.4999941259201,
+ "~:x1": 9.5,
+ "~:y2": 88.55000305175781,
+ "~:fills": [],
+ "~:x2": 81.5,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 55,
+ "~:text": "くろ"
+ }
+ }
+ ],
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:strokes": [
{
"~:stroke-style": "~:solid",
- "~:stroke-alignment": "~:outer",
+ "~:stroke-alignment": "~:inner",
"~:stroke-width": 1,
"~:stroke-color": "#13a9f5",
"~:stroke-opacity": 1
@@ -2304,7 +3174,7 @@
"~:spread": 0,
"~:offset-y": 4,
"~:style": "~:drop-shadow",
- "~:blur": 4,
+ "~:blur": 2,
"~:hidden": false,
"~:id": "~uef609b51-0d34-80f3-8006-5e99383d5786",
"~:offset-x": 4
@@ -2329,7 +3199,7 @@
},
"~uef609b51-0d34-80f3-8006-5e9880f79b0b": {
"~#shape": {
- "~:y": 269.00000893934515,
+ "~:y": 236.99999557797076,
"~:transform": {
"~#matrix": {
"~:a": 1,
@@ -2353,6 +3223,28 @@
"~:line-height": "1.2",
"~:font-style": "normal",
"~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1mn62cp66z5",
+ "~:font-size": "24",
+ "~:font-weight": "normal",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "\"Droid Sans Mono\", \"monospace\", monospace",
+ "~:text": "🦍 I love unicode 🦍"
+ },
{
"~:line-height": "",
"~:font-style": "normal",
@@ -2373,14 +3265,14 @@
}
],
"~:font-family": "\"Droid Sans Mono\", \"monospace\", monospace",
- "~:text": "❤️ I love unicode ❤️"
+ "~:text": ""
}
],
"~:typography-ref-id": null,
"~:text-transform": "none",
"~:text-align": "right",
"~:font-id": "sourcesanspro",
- "~:key": "2bd6up3z17w",
+ "~:key": "1igf9c5g7qb",
"~:font-size": "24",
"~:font-weight": "normal",
"~:typography-ref-file": null,
@@ -2408,26 +3300,26 @@
"~:points": [
{
"~#point": {
- "~:x": 439.0000065171845,
- "~:y": 269.00000893934515
+ "~:x": 459.9999940731069,
+ "~:y": 236.99999557797076
}
},
{
"~#point": {
- "~:x": 737.9999993406883,
- "~:y": 269.00000893934515
+ "~:x": 758.9999868966107,
+ "~:y": 236.99999557797076
}
},
{
"~#point": {
- "~:x": 737.9999993406883,
- "~:y": 298.0000082477825
+ "~:x": 758.9999868966107,
+ "~:y": 265.99999056507147
}
},
{
"~#point": {
- "~:x": 439.0000065171845,
- "~:y": 298.0000082477825
+ "~:x": 459.9999940731069,
+ "~:y": 265.99999056507147
}
}
],
@@ -2445,6 +3337,35 @@
"~:layout-item-v-sizing": "~:fix",
"~:id": "~uef609b51-0d34-80f3-8006-5e9880f79b0b",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 299.6499723182514,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "24px",
+ "~:font-weight": "400",
+ "~:y1": -1.850006103515625,
+ "~:width": 208.43333435058594,
+ "~:text-decoration": "line-through rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 529.5666721665986,
+ "~:x1": 90.56666564941406,
+ "~:y2": 30.649993896484375,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 299,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 32.5,
+ "~:text": "❤️ I love unicode ❤️"
+ }
+ }
+ ],
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:strokes": [
{
@@ -2455,21 +3376,21 @@
"~:stroke-opacity": 1
}
],
- "~:x": 439.0000065171845,
+ "~:x": 459.9999940731069,
"~:selrect": {
"~#rect": {
- "~:x": 439.0000065171845,
- "~:y": 269.00000893934515,
+ "~:x": 459.9999940731069,
+ "~:y": 236.99999557797076,
"~:width": 298.9999928235038,
- "~:height": 28.99999930843734,
- "~:x1": 439.0000065171845,
- "~:y1": 269.00000893934515,
- "~:x2": 737.9999993406883,
- "~:y2": 298.0000082477825
+ "~:height": 28.999994987100706,
+ "~:x1": 459.9999940731069,
+ "~:y1": 236.99999557797076,
+ "~:x2": 758.9999868966107,
+ "~:y2": 265.99999056507147
}
},
"~:flip-x": null,
- "~:height": 28.99999930843734,
+ "~:height": 28.999994987100706,
"~:flip-y": null
}
},
@@ -2672,6 +3593,96 @@
"~:hidden": false,
"~:id": "~u4b4f5ff7-44ac-808a-8006-5e98597c0d17",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 522.3500189623526,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -2.149993896484375,
+ "~:width": 45,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 528.9999944726542,
+ "~:x1": 0,
+ "~:y2": 45.350006103515625,
+ "~:fills": [],
+ "~:x2": 45,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": "🔥"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 522.3500189623526,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -2.149993896484375,
+ "~:width": 45,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 573.9999944726542,
+ "~:x1": 45,
+ "~:y2": 45.350006103515625,
+ "~:fills": [],
+ "~:x2": 90,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": "👩🏿\u200d🚀"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 522.3500189623526,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -2.149993896484375,
+ "~:width": 45,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 618.9999944726542,
+ "~:x1": 90,
+ "~:y2": 45.350006103515625,
+ "~:fills": [],
+ "~:x2": 135,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": "👺"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 522.3500189623526,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -2.149993896484375,
+ "~:width": 45,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 663.9999944726542,
+ "~:x1": 135,
+ "~:y2": 45.350006103515625,
+ "~:fills": [],
+ "~:x2": 180,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": "🚀"
+ }
+ }
+ ],
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:x": 528.9999944726542,
"~:selrect": {
@@ -2800,13 +3811,13 @@
{
"~#point": {
"~:x": 359.0000047683716,
- "~:y": 361.99997143551445
+ "~:y": 362.9999734620724
}
},
{
"~#point": {
"~:x": 188.99999672174454,
- "~:y": 361.99997143551445
+ "~:y": 362.9999734620724
}
}
],
@@ -2822,6 +3833,42 @@
},
"~:id": "~u4b4f5ff7-44ac-808a-8006-5e974ec5dede",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 364.349979565588,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -2.149993896484375,
+ "~:width": 169.36666870117188,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 188.99999672174454,
+ "~:x1": 0,
+ "~:y2": 45.350006103515625,
+ "~:fills": [
+ {
+ "~:fill-opacity": 1,
+ "~:fill-image": {
+ "~:id": "~u4f89252d-ebbc-813e-8006-8699e4170e18",
+ "~:width": 443,
+ "~:height": 441,
+ "~:mtype": "image/png",
+ "~:name": "pattern.png",
+ "~:keep-aspect-ratio": true
+ }
+ }
+ ],
+ "~:x2": 169.36666870117188,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": "hello world"
+ }
+ }
+ ],
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:strokes": [
{
@@ -2838,15 +3885,15 @@
"~:x": 188.99999672174454,
"~:y": 318.9999734620724,
"~:width": 170.00000804662704,
- "~:height": 42.99999797344208,
+ "~:height": 44,
"~:x1": 188.99999672174454,
"~:y1": 318.9999734620724,
"~:x2": 359.0000047683716,
- "~:y2": 361.99997143551445
+ "~:y2": 362.9999734620724
}
},
"~:flip-x": null,
- "~:height": 42.99999797344208,
+ "~:height": 44,
"~:flip-y": null
}
},
@@ -2958,6 +4005,30 @@
},
"~:id": "~u4b4f5ff7-44ac-808a-8006-5e979761b8f6",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 416.3500138978643,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -9.649993896484375,
+ "~:width": 144,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 188.99999416516704,
+ "~:x1": 0,
+ "~:y2": 45.350006103515625,
+ "~:fills": [],
+ "~:x2": 144,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 55,
+ "~:text": "萎ポくろ"
+ }
+ }
+ ],
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:strokes": [
{
@@ -2988,7 +4059,7 @@
},
"~uef609b51-0d34-80f3-8006-5e9929d3fa47": {
"~#shape": {
- "~:y": 537.9999565667342,
+ "~:y": 526.9999908990096,
"~:transform": {
"~#matrix": {
"~:a": 1,
@@ -3025,7 +4096,12 @@
"~:font-variant-id": "regular",
"~:text-decoration": "none",
"~:letter-spacing": "0",
- "~:fills": [],
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
"~:font-family": "sourcesanspro",
"~:text": "🔥"
},
@@ -3042,7 +4118,12 @@
"~:font-variant-id": "regular",
"~:text-decoration": "none",
"~:letter-spacing": "0",
- "~:fills": [],
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
"~:font-family": "sourcesanspro",
"~:text": "👩🏿\u200d🚀"
},
@@ -3059,7 +4140,12 @@
"~:font-variant-id": "regular",
"~:text-decoration": "none",
"~:letter-spacing": "0",
- "~:fills": [],
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
"~:font-family": "sourcesanspro",
"~:text": "👺"
},
@@ -3076,7 +4162,12 @@
"~:font-variant-id": "regular",
"~:text-decoration": "none",
"~:letter-spacing": "0",
- "~:fills": [],
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
"~:font-family": "sourcesanspro",
"~:text": "🚀"
}
@@ -3094,7 +4185,12 @@
"~:font-variant-id": "regular",
"~:text-decoration": "none",
"~:letter-spacing": "0",
- "~:fills": [],
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
"~:font-family": "sourcesanspro"
},
{
@@ -3114,7 +4210,12 @@
"~:font-variant-id": "regular",
"~:text-decoration": "none",
"~:letter-spacing": "0",
- "~:fills": [],
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
"~:font-family": "sourcesanspro",
"~:text": ""
}
@@ -3132,7 +4233,12 @@
"~:font-variant-id": "regular",
"~:text-decoration": "none",
"~:letter-spacing": "0",
- "~:fills": [],
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
"~:font-family": "sourcesanspro"
}
]
@@ -3147,26 +4253,26 @@
"~:points": [
{
"~#point": {
- "~:x": 441.9999797625279,
- "~:y": 537.9999565667343
+ "~:x": 450.0000245852208,
+ "~:y": 526.9999908990097
}
},
{
"~#point": {
- "~:x": 726.0000448851986,
- "~:y": 537.9999565667343
+ "~:x": 734.0000897078914,
+ "~:y": 526.9999908990097
}
},
{
"~#point": {
- "~:x": 726.0000448851986,
- "~:y": 627.9999027961665
+ "~:x": 734.0000897078914,
+ "~:y": 616.9999371284418
}
},
{
"~#point": {
- "~:x": 441.9999797625279,
- "~:y": 627.9999027961665
+ "~:x": 450.0000245852208,
+ "~:y": 616.9999371284418
}
}
],
@@ -3184,8 +4290,145 @@
"~:layout-item-v-sizing": "~:fix",
"~:id": "~uef609b51-0d34-80f3-8006-5e9929d3fa47",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 572.3499970025252,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -2.149993896484375,
+ "~:width": 45,
+ "~:text-decoration": "rgb(177, 178, 181)",
+ "~:letter-spacing": "normal",
+ "~:x": 450.00002458522084,
+ "~:x1": 0,
+ "~:y2": 45.350006103515625,
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 45,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": "🔥"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 572.3499970025252,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -2.149993896484375,
+ "~:width": 45,
+ "~:text-decoration": "rgb(177, 178, 181)",
+ "~:letter-spacing": "normal",
+ "~:x": 495.00002458522084,
+ "~:x1": 45,
+ "~:y2": 45.350006103515625,
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 90,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": "👩🏿\u200d🚀"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 572.3499970025252,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -2.149993896484375,
+ "~:width": 45,
+ "~:text-decoration": "rgb(177, 178, 181)",
+ "~:letter-spacing": "normal",
+ "~:x": 540.0000245852209,
+ "~:x1": 90,
+ "~:y2": 45.350006103515625,
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 135,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": "👺"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 572.3499970025252,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -2.149993896484375,
+ "~:width": 45,
+ "~:text-decoration": "rgb(177, 178, 181)",
+ "~:letter-spacing": "normal",
+ "~:x": 585.0000245852209,
+ "~:x1": 135,
+ "~:y2": 45.350006103515625,
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 180,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": "🚀"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 615.5499939507674,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": 41.05000305175781,
+ "~:width": 7.26666259765625,
+ "~:text-decoration": "rgb(177, 178, 181)",
+ "~:letter-spacing": "normal",
+ "~:x": 450.00002458522084,
+ "~:x1": 0,
+ "~:y2": 88.55000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#B1B2B5",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 7.26666259765625,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": " "
+ }
+ }
+ ],
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
- "~:x": 441.99997976252797,
+ "~:x": 450.00002458522084,
"~:shadow": [
{
"~:color": {
@@ -3203,14 +4446,14 @@
],
"~:selrect": {
"~#rect": {
- "~:x": 441.99997976252797,
- "~:y": 537.9999565667342,
+ "~:x": 450.00002458522084,
+ "~:y": 526.9999908990096,
"~:width": 284.0000651226706,
"~:height": 89.99994622943211,
- "~:x1": 441.99997976252797,
- "~:y1": 537.9999565667342,
- "~:x2": 726.0000448851986,
- "~:y2": 627.9999027961663
+ "~:x1": 450.00002458522084,
+ "~:y1": 526.9999908990096,
+ "~:x2": 734.0000897078914,
+ "~:y2": 616.9999371284417
}
},
"~:flip-x": null,
@@ -3220,7 +4463,7 @@
},
"~u8e0276b0-5131-8065-8006-87c8d5780f60": {
"~#shape": {
- "~:y": 213.00001923843956,
+ "~:y": 166.00000568175594,
"~:transform": {
"~#matrix": {
"~:a": 1,
@@ -3295,34 +4538,35 @@
},
"~:hide-in-viewer": false,
"~:name": "Text",
- "~:width": 170.00000804662704,
+ "~:width": 170,
"~:type": "~:text",
"~:points": [
{
"~#point": {
- "~:x": 186.99999576807022,
- "~:y": 213.00001923843956
+ "~:x": 372.0000051221425,
+ "~:y": 166.00000568175594
}
},
{
"~#point": {
- "~:x": 357.00000381469727,
- "~:y": 213.00001923843956
+ "~:x": 542.0000051221425,
+ "~:y": 166.00000568175594
}
},
{
"~#point": {
- "~:x": 357.00000381469727,
- "~:y": 256.00001721188164
+ "~:x": 542.0000051221425,
+ "~:y": 210.00000568175594
}
},
{
"~#point": {
- "~:x": 186.99999576807022,
- "~:y": 256.00001721188164
+ "~:x": 372.0000051221425,
+ "~:y": 210.00000568175594
}
}
],
+ "~:layout-item-h-sizing": "~:fix",
"~:transform-inverse": {
"~#matrix": {
"~:a": 1,
@@ -3333,8 +4577,38 @@
"~:f": 0
}
},
+ "~:layout-item-v-sizing": "~:fix",
"~:id": "~u8e0276b0-5131-8065-8006-87c8d5780f60",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 211.35001178527156,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "36px",
+ "~:font-weight": "400",
+ "~:y1": -2.149993896484375,
+ "~:width": 169.36666870117188,
+ "~:text-decoration": "rgb(21, 209, 46)",
+ "~:letter-spacing": "normal",
+ "~:x": 372.0000051221425,
+ "~:x1": 0,
+ "~:y2": 45.350006103515625,
+ "~:fills": [
+ {
+ "~:fill-color": "#15d12e",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 169.36666870117188,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 47.5,
+ "~:text": "hello world"
+ }
+ }
+ ],
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:strokes": [
{
@@ -3352,7 +4626,7 @@
}
}
],
- "~:x": 186.99999576807022,
+ "~:x": 372.0000051221425,
"~:shadow": [
{
"~:color": {
@@ -3370,18 +4644,18 @@
],
"~:selrect": {
"~#rect": {
- "~:x": 186.99999576807022,
- "~:y": 213.00001923843956,
- "~:width": 170.00000804662704,
- "~:height": 42.99999797344208,
- "~:x1": 186.99999576807022,
- "~:y1": 213.00001923843956,
- "~:x2": 357.00000381469727,
- "~:y2": 256.00001721188164
+ "~:x": 372.0000051221425,
+ "~:y": 166.00000568175594,
+ "~:width": 170,
+ "~:height": 44,
+ "~:x1": 372.0000051221425,
+ "~:y1": 166.00000568175594,
+ "~:x2": 542.0000051221425,
+ "~:y2": 210.00000568175594
}
},
"~:flip-x": null,
- "~:height": 42.99999797344208,
+ "~:height": 44,
"~:flip-y": null
}
}
diff --git a/frontend/playwright/data/render-wasm/get-file-text-leaves-decoration.json b/frontend/playwright/data/render-wasm/get-file-text-leaves-decoration.json
new file mode 100644
index 0000000000..560dde73cd
--- /dev/null
+++ b/frontend/playwright/data/render-wasm/get-file-text-leaves-decoration.json
@@ -0,0 +1,5728 @@
+{
+ "~:features": {
+ "~#set": [
+ "fdata/path-data",
+ "plugins/runtime",
+ "design-tokens/v1",
+ "variants/v1",
+ "layout/grid",
+ "styles/v2",
+ "fdata/objects-map",
+ "render-wasm/v1",
+ "components/v2",
+ "fdata/shape-data-type"
+ ]
+ },
+ "~:team-id": "~u6bd7c17d-4f59-815e-8006-5c1f6882469a",
+ "~:permissions": {
+ "~:type": "~:membership",
+ "~:is-owner": true,
+ "~:is-admin": true,
+ "~:can-edit": true,
+ "~:can-read": true,
+ "~:is-logged": true
+ },
+ "~:has-media-trimmed": false,
+ "~:comment-thread-seqn": 0,
+ "~:name": "check_multiple_decorations_and_fonts (copy) 2",
+ "~:revn": 253,
+ "~:modified-at": "~m1757072822684",
+ "~:vern": 0,
+ "~:id": "~u44471494-966a-8178-8006-c1b0e4befad3",
+ "~:is-shared": false,
+ "~:migrations": {
+ "~#ordered-set": [
+ "legacy-2",
+ "legacy-3",
+ "legacy-5",
+ "legacy-6",
+ "legacy-7",
+ "legacy-8",
+ "legacy-9",
+ "legacy-10",
+ "legacy-11",
+ "legacy-12",
+ "legacy-13",
+ "legacy-14",
+ "legacy-16",
+ "legacy-17",
+ "legacy-18",
+ "legacy-19",
+ "legacy-25",
+ "legacy-26",
+ "legacy-27",
+ "legacy-28",
+ "legacy-29",
+ "legacy-31",
+ "legacy-32",
+ "legacy-33",
+ "legacy-34",
+ "legacy-36",
+ "legacy-37",
+ "legacy-38",
+ "legacy-39",
+ "legacy-40",
+ "legacy-41",
+ "legacy-42",
+ "legacy-43",
+ "legacy-44",
+ "legacy-45",
+ "legacy-46",
+ "legacy-47",
+ "legacy-48",
+ "legacy-49",
+ "legacy-50",
+ "legacy-51",
+ "legacy-52",
+ "legacy-53",
+ "legacy-54",
+ "legacy-55",
+ "legacy-56",
+ "legacy-57",
+ "legacy-59",
+ "legacy-62",
+ "legacy-65",
+ "legacy-66",
+ "legacy-67",
+ "0001-remove-tokens-from-groups",
+ "0002-normalize-bool-content-v2",
+ "0002-clean-shape-interactions",
+ "0003-fix-root-shape",
+ "0003-convert-path-content-v2",
+ "0004-clean-shadow-color",
+ "0005-deprecate-image-type",
+ "0006-fix-old-texts-fills",
+ "0007-clear-invalid-strokes-and-fills-v2",
+ "0008-fix-library-colors-v4",
+ "0009-clean-library-colors",
+ "0009-add-partial-text-touched-flags",
+ "0010-fix-swap-slots-pointing-non-existent-shapes"
+ ]
+ },
+ "~:version": 67,
+ "~:project-id": "~u6bd7c17d-4f59-815e-8006-5c1f68846e43",
+ "~:created-at": "~m1756197191725",
+ "~:data": {
+ "~:pages": [
+ "~ub4cb802d-4245-807d-8006-b4a4b90b79cd"
+ ],
+ "~:pages-index": {
+ "~ub4cb802d-4245-807d-8006-b4a4b90b79cd": {
+ "~:objects": {
+ "~u00000000-0000-0000-0000-000000000000": {
+ "~#shape": {
+ "~:y": 0,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:name": "Root Frame",
+ "~:width": 0.01,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 0,
+ "~:y": 0
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 0.01,
+ "~:y": 0
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 0.01,
+ "~:y": 0.01
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 0,
+ "~:y": 0.01
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:id": "~u00000000-0000-0000-0000-000000000000",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [],
+ "~:x": 0,
+ "~:proportion": 1,
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 0,
+ "~:y": 0,
+ "~:width": 0.01,
+ "~:height": 0.01,
+ "~:x1": 0,
+ "~:y1": 0,
+ "~:x2": 0.01,
+ "~:y2": 0.01
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#FFFFFF",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 0.01,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u02222a8b-99ee-803c-8006-b4a5d6ab5258",
+ "~u3ae2c7c2-74be-808c-8006-b4a9af001a14",
+ "~u3ae2c7c2-74be-808c-8006-b4a9b7db5fd2",
+ "~u73ef3085-9adf-8063-8006-b4ac6c34678a",
+ "~u0b78601e-aeb6-8065-8006-b4ae461f507b",
+ "~u0b78601e-aeb6-8065-8006-b4ae598da346",
+ "~u372dc781-22b4-808b-8006-b4d381e231cc",
+ "~u372dc781-22b4-808b-8006-b4d32b23831d",
+ "~u372dc781-22b4-808b-8006-b4d371b35ffb",
+ "~u8db91f66-0aee-80fd-8006-b4d0d15a1e56"
+ ]
+ }
+ },
+ "~u73ef3085-9adf-8063-8006-b4ac6c34678a": {
+ "~#shape": {
+ "~:y": 902.0000095367432,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "26uqr82pxgl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "1qg2rfjeltu",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "When three bodies orbit "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "6jblrptau9",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#da1a1a",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "each"
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "c8k8ui5e7a",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " other, the "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "12yz53vlcq9",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#47e536",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "resulting"
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "17560zmv6qd",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "2bzh4tglr6t",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#8311c4",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "dynamical"
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "1117tsar9pu",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " system is "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "nmaiszc59b",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "chaotic"
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "haol76vdi7",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " for most initial "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "1110bgrqyy",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#07b9b9",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "conditions"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "qe37ujule6",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#8311c4",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Multiple nodes with styles and strokes",
+ "~:width": 902.6199789047241,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 12.000000476837158,
+ "~:y": 902.0000095367432
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 914.6199793815613,
+ "~:y": 902.0000095367432
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 914.6199793815613,
+ "~:y": 1191.0000095367432
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 12.000000476837158,
+ "~:y": 1191.0000095367432
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:hidden": false,
+ "~:id": "~u73ef3085-9adf-8063-8006-b4ac6c34678a",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 961.800012588501,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.1999969482421875,
+ "~:width": 541.2333374023438,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 12.000000476837158,
+ "~:x1": 0,
+ "~:y2": 59.80000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 541.2333374023438,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": "When three bodies orbit "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 961.800012588501,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.1999969482421875,
+ "~:width": 105.5333251953125,
+ "~:text-decoration": "underline rgb(218, 26, 26)",
+ "~:letter-spacing": "normal",
+ "~:x": 553.2333378791809,
+ "~:x1": 541.2333374023438,
+ "~:y2": 59.80000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#da1a1a",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 646.7666625976562,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": "each"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 961.800012588501,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.1999969482421875,
+ "~:width": 242.60000610351562,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 658.7666630744934,
+ "~:x1": 646.7666625976562,
+ "~:y2": 59.80000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 889.3666687011719,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": " other, the "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1019.4000034332275,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 55.399993896484375,
+ "~:width": 189.93333435058594,
+ "~:text-decoration": "underline rgb(71, 229, 54)",
+ "~:letter-spacing": "normal",
+ "~:x": 12.000000476837158,
+ "~:x1": 0,
+ "~:y2": 117.39999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#47e536",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 189.93333435058594,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": "resulting"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1019.4000034332275,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 55.399993896484375,
+ "~:width": 12.48333740234375,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 201.9333348274231,
+ "~:x1": 189.93333435058594,
+ "~:y2": 117.39999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 202.4166717529297,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": " "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1019.4000034332275,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 55.399993896484375,
+ "~:width": 226.86666870117188,
+ "~:text-decoration": "underline rgb(131, 17, 196)",
+ "~:letter-spacing": "normal",
+ "~:x": 214.41667222976685,
+ "~:x1": 202.4166717529297,
+ "~:y2": 117.39999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#8311c4",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 429.28334045410156,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": "dynamical"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1019.4000034332275,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 55.399993896484375,
+ "~:width": 233.81666564941406,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 441.28332567214966,
+ "~:x1": 429.2833251953125,
+ "~:y2": 117.39999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 663.0999908447266,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": " system is "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1019.4000034332275,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 55.399993896484375,
+ "~:width": 162.06666564941406,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 675.0999760627747,
+ "~:x1": 663.0999755859375,
+ "~:y2": 117.39999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 825.1666412353516,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": "chaotic"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1019.4000034332275,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 55.399993896484375,
+ "~:width": 12.483322143554688,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 837.1666874885559,
+ "~:x1": 825.1666870117188,
+ "~:y2": 117.39999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 837.6500091552734,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": " "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1077.0000095367432,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 113,
+ "~:width": 335.3500061035156,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 12.000000476837158,
+ "~:x1": 0,
+ "~:y2": 175,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 335.3500061035156,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": "for most initial "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1077.0000095367432,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 113,
+ "~:width": 220.56666564941406,
+ "~:text-decoration": "underline rgb(7, 185, 185)",
+ "~:letter-spacing": "normal",
+ "~:x": 347.3500065803528,
+ "~:x1": 335.3500061035156,
+ "~:y2": 175,
+ "~:fills": [
+ {
+ "~:fill-color": "#07b9b9",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 555.9166717529297,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": "conditions"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#c62d2d",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 12.000000476837158,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 12.000000476837158,
+ "~:y": 902.0000095367432,
+ "~:width": 902.6199789047241,
+ "~:height": 289,
+ "~:x1": 12.000000476837158,
+ "~:y1": 902.0000095367432,
+ "~:x2": 914.6199793815613,
+ "~:y2": 1191.0000095367432
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 289,
+ "~:flip-y": null
+ }
+ },
+ "~u372dc781-22b4-808b-8006-b4d371b35ffb": {
+ "~#shape": {
+ "~:y": 571.7656477947236,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 0.9952165422528338,
+ "~:b": -0.09769357208288199,
+ "~:c": 0.09769403860773807,
+ "~:d": 0.995216496457183,
+ "~:e": 3.865352482534945e-12,
+ "~:f": 2.5011104298755527e-12
+ }
+ },
+ "~:rotation": 354.393619242564,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "2a53nvhqyyr",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "ofebpym2li",
+ "~:font-size": "64",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "entangle with"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "e0l9fbir9t",
+ "~:font-size": "64",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "note 1",
+ "~:width": 347.00040933215763,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1791.9998194733364,
+ "~:y": 588.8996672430844
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2137.3403670092043,
+ "~:y": 554.9999577412037
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2144.86280026297,
+ "~:y": 631.6315493340364
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1799.522252727099,
+ "~:y": 665.5312588359168
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 0.9952164964572922,
+ "~:b": 0.0976935720828927,
+ "~:c": -0.09769403860774878,
+ "~:d": 0.995216542252943,
+ "~:e": -3.602518976342419e-12,
+ "~:f": -2.8667665651918355e-12
+ }
+ },
+ "~:id": "~u372dc781-22b4-808b-8006-b4d371b35ffb",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 650.2785904104855,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "64px",
+ "~:font-weight": "200",
+ "~:y1": -3.100006103515625,
+ "~:width": 379.5333251953125,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1794.851845488379,
+ "~:x1": 0,
+ "~:y2": 79.89999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 379.5333251953125,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 83,
+ "~:text": "entangle with"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:x": 1794.9311052020744,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1794.9311052020744,
+ "~:y": 571.7656477947236,
+ "~:width": 347.00040933215763,
+ "~:height": 76.99992098767355,
+ "~:x1": 1794.9311052020744,
+ "~:y1": 571.7656477947236,
+ "~:x2": 2141.931514534232,
+ "~:y2": 648.7655687823972
+ }
+ },
+ "~:flip-x": false,
+ "~:height": 76.99992098767355,
+ "~:flip-y": false
+ }
+ },
+ "~u372dc781-22b4-808b-8006-b4d32b23831d": {
+ "~#shape": {
+ "~:y": 721.9912496728758,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 0.9979062226750979,
+ "~:b": 0.06467743614521781,
+ "~:c": -0.0646769110437404,
+ "~:d": 0.9979062567084362,
+ "~:e": 1.6143530956469476e-11,
+ "~:f": 8.640199666842818e-12
+ }
+ },
+ "~:rotation": 3.7083231923678,
+ "~:last-resize-direction": "~:horizontal",
+ "~:grow-type": "~:auto-height",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "2a53nvhqyyr",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "16mtpdh59ga",
+ "~:font-size": "64",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "kinds of stroke"
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "pn0g2pci1v",
+ "~:font-size": "64",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": ""
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "4b6outrc3n",
+ "~:font-size": "64",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "note 2",
+ "~:width": 651.5976369308551,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1403.9800868616605,
+ "~:y": 700.9998211476991
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2054.2134457049383,
+ "~:y": 743.1434959059359
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2049.2332981915206,
+ "~:y": 819.9826484450987
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1398.9999393482426,
+ "~:y": 777.8389736868622
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 0.9979062567085724,
+ "~:b": -0.06467743614522664,
+ "~:c": 0.06467691104374923,
+ "~:d": 0.997906222675234,
+ "~:e": -1.666855197208204e-11,
+ "~:f": -7.57798682010339e-12
+ }
+ },
+ "~:id": "~u372dc781-22b4-808b-8006-b4d32b23831d",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 801.8906385194807,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "64px",
+ "~:font-weight": "200",
+ "~:y1": -3.100006103515625,
+ "~:width": 422.25,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1400.8079278537045,
+ "~:x1": 0,
+ "~:y2": 79.89999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 422.25,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 83,
+ "~:text": "kinds of stroke"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 801.8906385194807,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "64px",
+ "~:font-weight": "200",
+ "~:y1": -3.100006103515625,
+ "~:width": 16.633331298828125,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1823.0579278537045,
+ "~:x1": 422.25,
+ "~:y2": 79.89999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 438.8833312988281,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 83,
+ "~:text": " "
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:x": 1400.8078740611627,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1400.8078740611627,
+ "~:y": 721.9912496728758,
+ "~:width": 651.5976369308551,
+ "~:height": 76.99997024704669,
+ "~:x1": 1400.8078740611627,
+ "~:y1": 721.9912496728758,
+ "~:x2": 2052.4055109920178,
+ "~:y2": 798.9912199199225
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 76.99997024704669,
+ "~:flip-y": null
+ }
+ },
+ "~u02222a8b-99ee-803c-8006-b4a5d6ab5258": {
+ "~#shape": {
+ "~:y": 51.00000008146496,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-height",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "26uqr82pxgl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "1qg2rfjeltu",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "When three bodies orbit "
+ },
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "6jblrptau9",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#da1a1a",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "each"
+ },
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "c8k8ui5e7a",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " other, the "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "12yz53vlcq9",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#47e536",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "resulting"
+ },
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "17560zmv6qd",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "2bzh4tglr6t",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#8311c4",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "dynamical"
+ },
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "1117tsar9pu",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " system is "
+ },
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "nmaiszc59b",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "chaotic"
+ },
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "haol76vdi7",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " for most initial "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "1110bgrqyy",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#07b9b9",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "conditions"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "qe37ujule6",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#8311c4",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Multiple nodes with different styles",
+ "~:width": 874.6199485640761,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 26.99999924039914,
+ "~:y": 51.00000008146496
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 901.6199478044753,
+ "~:y": 51.00000008146496
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 901.6199478044753,
+ "~:y": 225.0000036577428
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 26.99999924039914,
+ "~:y": 225.0000036577428
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:hidden": false,
+ "~:id": "~u02222a8b-99ee-803c-8006-b4a5d6ab5258",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 111.30000972747621,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.6999969482421875,
+ "~:width": 490.91668701171875,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 26.999996885981773,
+ "~:x1": 0,
+ "~:y2": 60.30000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 490.91668701171875,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": "When three bodies orbit "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 111.30000972747621,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.6999969482421875,
+ "~:width": 95.66665649414062,
+ "~:text-decoration": "line-through rgb(218, 26, 26)",
+ "~:letter-spacing": "normal",
+ "~:x": 517.9166838977005,
+ "~:x1": 490.91668701171875,
+ "~:y2": 60.30000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#da1a1a",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 586.5833435058594,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": "each"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 111.30000972747621,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.6999969482421875,
+ "~:width": 213.13333129882812,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 613.583309874263,
+ "~:x1": 586.5833129882812,
+ "~:y2": 60.30000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 799.7166442871094,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": " other, the "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 168.90000057220277,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 54.899993896484375,
+ "~:width": 176.85000610351562,
+ "~:text-decoration": "underline rgb(71, 229, 54)",
+ "~:letter-spacing": "normal",
+ "~:x": 26.999996885981773,
+ "~:x1": 0,
+ "~:y2": 117.89999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#47e536",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 176.85000610351562,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": "resulting"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 168.90000057220277,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 54.899993896484375,
+ "~:width": 9.683334350585938,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 203.8500029894974,
+ "~:x1": 176.85000610351562,
+ "~:y2": 117.89999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 186.53334045410156,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": " "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 168.90000057220277,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 54.899993896484375,
+ "~:width": 209.59999084472656,
+ "~:text-decoration": "line-through rgb(131, 17, 196)",
+ "~:letter-spacing": "normal",
+ "~:x": 213.53333734008334,
+ "~:x1": 186.53334045410156,
+ "~:y2": 117.89999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#8311c4",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 396.1333312988281,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": "dynamical"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 168.90000057220277,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 54.899993896484375,
+ "~:width": 202.88333129882812,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 423.1333281848099,
+ "~:x1": 396.1333312988281,
+ "~:y2": 117.89999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 599.0166625976562,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": " system is "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 168.90000057220277,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 54.899993896484375,
+ "~:width": 148.43333435058594,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 626.016659483638,
+ "~:x1": 599.0166625976562,
+ "~:y2": 117.89999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 747.4499969482422,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": "chaotic"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 168.90000057220277,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 54.899993896484375,
+ "~:width": 75.56666564941406,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 774.450009093013,
+ "~:x1": 747.4500122070312,
+ "~:y2": 117.89999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 823.0166778564453,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": " for "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 226.5000066757184,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 112.5,
+ "~:width": 236.10000610351562,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 26.999996885981773,
+ "~:x1": 0,
+ "~:y2": 175.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 236.10000610351562,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": "most initial "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 226.5000066757184,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 112.5,
+ "~:width": 211.93333435058594,
+ "~:text-decoration": "line-through rgb(7, 185, 185)",
+ "~:letter-spacing": "normal",
+ "~:x": 263.1000029894974,
+ "~:x1": 236.10000610351562,
+ "~:y2": 175.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#07b9b9",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 448.03334045410156,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": "conditions"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:x": 26.99999924039912,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#000000",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u87480ed2-12e1-804c-8006-c0758bb799fe",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 26.99999924039912,
+ "~:y": 51.00000008146496,
+ "~:width": 874.6199485640761,
+ "~:height": 174.00000357627783,
+ "~:x1": 26.99999924039912,
+ "~:y1": 51.00000008146496,
+ "~:x2": 901.6199478044753,
+ "~:y2": 225.0000036577428
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 174.00000357627783,
+ "~:flip-y": null
+ }
+ },
+ "~u0b78601e-aeb6-8065-8006-b4ae461f507b": {
+ "~#shape": {
+ "~:y": 1158.9999732971191,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "26uqr82pxgl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "1qg2rfjeltu",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "When three bodies orbit "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "6jblrptau9",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#da1a1a",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "each"
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "c8k8ui5e7a",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " other, the "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "12yz53vlcq9",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#47e536",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "resulting"
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "17560zmv6qd",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "2bzh4tglr6t",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#8311c4",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "dynamical"
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "1117tsar9pu",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " system is "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "nmaiszc59b",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "chaotic"
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "haol76vdi7",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " for most initial "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "1110bgrqyy",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#07b9b9",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "conditions"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "qe37ujule6",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#8311c4",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Multiple nodes with different styles and smooth font",
+ "~:width": 902.6199789047241,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 13.999999761581421,
+ "~:y": 1158.9999732971191
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 916.6199786663055,
+ "~:y": 1158.9999732971191
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 916.6199786663055,
+ "~:y": 1447.9999732971191
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 13.999999761581421,
+ "~:y": 1447.9999732971191
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:hidden": false,
+ "~:id": "~u0b78601e-aeb6-8065-8006-b4ae461f507b",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 1218.799976348877,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.1999969482421875,
+ "~:width": 541.2333374023438,
+ "~:text-decoration": "line-through rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 13.999999761581421,
+ "~:x1": 0,
+ "~:y2": 59.80000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 541.2333374023438,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": "When three bodies orbit "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1218.799976348877,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.1999969482421875,
+ "~:width": 105.5333251953125,
+ "~:text-decoration": "line-through rgb(218, 26, 26)",
+ "~:letter-spacing": "normal",
+ "~:x": 555.2333371639252,
+ "~:x1": 541.2333374023438,
+ "~:y2": 59.80000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#da1a1a",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 646.7666625976562,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": "each"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1218.799976348877,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.1999969482421875,
+ "~:width": 242.60000610351562,
+ "~:text-decoration": "line-through rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 660.7666623592377,
+ "~:x1": 646.7666625976562,
+ "~:y2": 59.80000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 889.3666687011719,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": " other, the "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1276.3999671936035,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 55.399993896484375,
+ "~:width": 189.93333435058594,
+ "~:text-decoration": "line-through rgb(71, 229, 54)",
+ "~:letter-spacing": "normal",
+ "~:x": 13.999999761581421,
+ "~:x1": 0,
+ "~:y2": 117.39999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#47e536",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 189.93333435058594,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": "resulting"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1276.3999671936035,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 55.399993896484375,
+ "~:width": 12.48333740234375,
+ "~:text-decoration": "line-through rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 203.93333411216736,
+ "~:x1": 189.93333435058594,
+ "~:y2": 117.39999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 202.4166717529297,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": " "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1276.3999671936035,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 55.399993896484375,
+ "~:width": 226.86666870117188,
+ "~:text-decoration": "line-through rgb(131, 17, 196)",
+ "~:letter-spacing": "normal",
+ "~:x": 216.4166715145111,
+ "~:x1": 202.4166717529297,
+ "~:y2": 117.39999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#8311c4",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 429.28334045410156,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": "dynamical"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1276.3999671936035,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 55.399993896484375,
+ "~:width": 233.81666564941406,
+ "~:text-decoration": "line-through rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 443.2833249568939,
+ "~:x1": 429.2833251953125,
+ "~:y2": 117.39999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 663.0999908447266,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": " system is "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1276.3999671936035,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 55.399993896484375,
+ "~:width": 162.06666564941406,
+ "~:text-decoration": "line-through rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 677.0999753475189,
+ "~:x1": 663.0999755859375,
+ "~:y2": 117.39999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 825.1666412353516,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": "chaotic"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1276.3999671936035,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 55.399993896484375,
+ "~:width": 12.483322143554688,
+ "~:text-decoration": "line-through rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 839.1666867733002,
+ "~:x1": 825.1666870117188,
+ "~:y2": 117.39999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 837.6500091552734,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": " "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1333.9999732971191,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 113,
+ "~:width": 335.3500061035156,
+ "~:text-decoration": "line-through rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 13.999999761581421,
+ "~:x1": 0,
+ "~:y2": 175,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 335.3500061035156,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": "for most initial "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1333.9999732971191,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 113,
+ "~:width": 220.56666564941406,
+ "~:text-decoration": "line-through rgb(7, 185, 185)",
+ "~:letter-spacing": "normal",
+ "~:x": 349.35000586509705,
+ "~:x1": 335.3500061035156,
+ "~:y2": 175,
+ "~:fills": [
+ {
+ "~:fill-color": "#07b9b9",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 555.9166717529297,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": "conditions"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [],
+ "~:x": 13.999999761581421,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 13.999999761581421,
+ "~:y": 1158.9999732971191,
+ "~:width": 902.6199789047241,
+ "~:height": 289,
+ "~:x1": 13.999999761581421,
+ "~:y1": 1158.9999732971191,
+ "~:x2": 916.6199786663055,
+ "~:y2": 1447.9999732971191
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 289,
+ "~:flip-y": null
+ }
+ },
+ "~u3ae2c7c2-74be-808c-8006-b4a9af001a14": {
+ "~#shape": {
+ "~:y": 315.99999931258725,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-height",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "26uqr82pxgl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "1qg2rfjeltu",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "When three bodies orbit "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "6jblrptau9",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#da1a1a",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "each"
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "c8k8ui5e7a",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " other, the "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "12yz53vlcq9",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#47e536",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "resulting"
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "17560zmv6qd",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "2bzh4tglr6t",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#8311c4",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "dynamical"
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "1117tsar9pu",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " system is "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "nmaiszc59b",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "chaotic"
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "haol76vdi7",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " for most initial "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "1110bgrqyy",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#07b9b9",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "conditions"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "qe37ujule6",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#8311c4",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Multiple nodes with different color and font",
+ "~:width": 824.9510596295723,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 31.00000099539099,
+ "~:y": 315.99999931258725
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 855.9510606249634,
+ "~:y": 315.99999931258725
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 855.9510606249634,
+ "~:y": 490.0000003407674
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 31.00000099539099,
+ "~:y": 490.0000003407674
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:hidden": false,
+ "~:id": "~u3ae2c7c2-74be-808c-8006-b4a9af001a14",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 375.29999923706055,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -1.6999969482421875,
+ "~:width": 612.8333129882812,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 31.000000256992166,
+ "~:x1": 0,
+ "~:y2": 59.30000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 612.8333129882812,
+ "~:direction": "ltr",
+ "~:font-family": "\"Vampiro One\"",
+ "~:height": 61,
+ "~:text": "When three bodies orbit "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 375.29999923706055,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -1.6999969482421875,
+ "~:width": 111.06666564941406,
+ "~:text-decoration": "underline rgb(218, 26, 26)",
+ "~:letter-spacing": "normal",
+ "~:x": 643.8333132452734,
+ "~:x1": 612.8333129882812,
+ "~:y2": 59.30000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#da1a1a",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 723.8999786376953,
+ "~:direction": "ltr",
+ "~:font-family": "\"Vampiro One\"",
+ "~:height": 61,
+ "~:text": "each"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 375.29999923706055,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -1.6999969482421875,
+ "~:width": 17.383346557617188,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 754.9000246710547,
+ "~:x1": 723.9000244140625,
+ "~:y2": 59.30000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 741.2833709716797,
+ "~:direction": "ltr",
+ "~:font-family": "\"Vampiro One\"",
+ "~:height": 61,
+ "~:text": " "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 432.8999900817871,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 55.899993896484375,
+ "~:width": 263.48333740234375,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 31.000000256992166,
+ "~:x1": 0,
+ "~:y2": 116.89999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 263.48333740234375,
+ "~:direction": "ltr",
+ "~:font-family": "\"Vampiro One\"",
+ "~:height": 61,
+ "~:text": "other, the "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 432.8999900817871,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 55.899993896484375,
+ "~:width": 231.5,
+ "~:text-decoration": "underline rgb(71, 229, 54)",
+ "~:letter-spacing": "normal",
+ "~:x": 294.4833376593359,
+ "~:x1": 263.48333740234375,
+ "~:y2": 116.89999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#47e536",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 494.98333740234375,
+ "~:direction": "ltr",
+ "~:font-family": "\"Vampiro One\"",
+ "~:height": 61,
+ "~:text": "resulting"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 432.8999900817871,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 55.899993896484375,
+ "~:width": 17.383331298828125,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 525.9833376593359,
+ "~:x1": 494.98333740234375,
+ "~:y2": 116.89999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 512.3666687011719,
+ "~:direction": "ltr",
+ "~:font-family": "\"Vampiro One\"",
+ "~:height": 61,
+ "~:text": " "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 432.8999900817871,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 55.899993896484375,
+ "~:width": 256.79998779296875,
+ "~:text-decoration": "underline rgb(131, 17, 196)",
+ "~:letter-spacing": "normal",
+ "~:x": 543.3666994757422,
+ "~:x1": 512.36669921875,
+ "~:y2": 116.89999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#8311c4",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 769.1666870117188,
+ "~:direction": "ltr",
+ "~:font-family": "\"Vampiro One\"",
+ "~:height": 61,
+ "~:text": "dynamical"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 432.8999900817871,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 55.899993896484375,
+ "~:width": 17.383331298828125,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 800.1666872687109,
+ "~:x1": 769.1666870117188,
+ "~:y2": 116.89999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 786.5500183105469,
+ "~:direction": "ltr",
+ "~:font-family": "\"Vampiro One\"",
+ "~:height": 61,
+ "~:text": " "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 490.49999618530273,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 113.5,
+ "~:width": 254.71665954589844,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 31.000000256992166,
+ "~:x1": 0,
+ "~:y2": 174.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 254.71665954589844,
+ "~:direction": "ltr",
+ "~:font-family": "\"Vampiro One\"",
+ "~:height": 61,
+ "~:text": "system is "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 490.49999618530273,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 113.5,
+ "~:width": 176.25,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 285.7166598028906,
+ "~:x1": 254.71665954589844,
+ "~:y2": 174.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 430.96665954589844,
+ "~:direction": "ltr",
+ "~:font-family": "\"Vampiro One\"",
+ "~:height": 61,
+ "~:text": "chaotic"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 490.49999618530273,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 113.5,
+ "~:width": 256.3500061035156,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 461.96667506167967,
+ "~:x1": 430.9666748046875,
+ "~:y2": 174.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 687.3166809082031,
+ "~:direction": "ltr",
+ "~:font-family": "\"Vampiro One\"",
+ "~:height": 61,
+ "~:text": " for most "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 548.1000022888184,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 171.10000610351562,
+ "~:width": 170.01666259765625,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 31.000000256992166,
+ "~:x1": 0,
+ "~:y2": 232.10000610351562,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 170.01666259765625,
+ "~:direction": "ltr",
+ "~:font-family": "\"Vampiro One\"",
+ "~:height": 61,
+ "~:text": "initial "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 548.1000022888184,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 171.10000610351562,
+ "~:width": 252.68333435058594,
+ "~:text-decoration": "underline rgb(7, 185, 185)",
+ "~:letter-spacing": "normal",
+ "~:x": 201.01666285464842,
+ "~:x1": 170.01666259765625,
+ "~:y2": 232.10000610351562,
+ "~:fills": [
+ {
+ "~:fill-color": "#07b9b9",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 422.6999969482422,
+ "~:direction": "ltr",
+ "~:font-family": "\"Vampiro One\"",
+ "~:height": 61,
+ "~:text": "conditions"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:x": 31.00000099539102,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 31.00000099539102,
+ "~:y": 315.99999931258725,
+ "~:width": 824.9510596295723,
+ "~:height": 174.00000102818012,
+ "~:x1": 31.00000099539102,
+ "~:y1": 315.99999931258725,
+ "~:x2": 855.9510606249634,
+ "~:y2": 490.0000003407674
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 174.00000102818012,
+ "~:flip-y": null
+ }
+ },
+ "~u0b78601e-aeb6-8065-8006-b4ae598da346": {
+ "~#shape": {
+ "~:y": 64.99999809265137,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "26uqr82pxgl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "1",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "1qg2rfjeltu",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "When three bodies orbit "
+ },
+ {
+ "~:line-height": "1",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "6jblrptau9",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#da1a1a",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "each"
+ },
+ {
+ "~:line-height": "1",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "c8k8ui5e7a",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " other, the "
+ },
+ {
+ "~:line-height": "1",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "12yz53vlcq9",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#47e536",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "resulting"
+ },
+ {
+ "~:line-height": "1",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "17560zmv6qd",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " "
+ },
+ {
+ "~:line-height": "1",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "2bzh4tglr6t",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#8311c4",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "dynamical"
+ },
+ {
+ "~:line-height": "1",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "1117tsar9pu",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " system is "
+ },
+ {
+ "~:line-height": "1",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "nmaiszc59b",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "chaotic"
+ },
+ {
+ "~:line-height": "1",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "haol76vdi7",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " for most initial "
+ },
+ {
+ "~:line-height": "1",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "1110bgrqyy",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#07b9b9",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "conditions"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "qe37ujule6",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#8311c4",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Multiple nodes with different styles and shadow",
+ "~:width": 902.6199789047241,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1007.9999961853027,
+ "~:y": 64.99999809265137
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1910.6199750900269,
+ "~:y": 64.99999809265137
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1910.6199750900269,
+ "~:y": 353.99999809265137
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1007.9999961853027,
+ "~:y": 353.99999809265137
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:hidden": false,
+ "~:id": "~u0b78601e-aeb6-8065-8006-b4ae598da346",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 119.99999809265137,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -7,
+ "~:width": 541.2333374023438,
+ "~:text-decoration": "line-through rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1007.9999961853027,
+ "~:x1": 0,
+ "~:y2": 55,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 541.2333374023438,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": "When three bodies orbit "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 119.99999809265137,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -7,
+ "~:width": 105.5333251953125,
+ "~:text-decoration": "line-through rgb(218, 26, 26)",
+ "~:letter-spacing": "normal",
+ "~:x": 1549.2333335876465,
+ "~:x1": 541.2333374023438,
+ "~:y2": 55,
+ "~:fills": [
+ {
+ "~:fill-color": "#da1a1a",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 646.7666625976562,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": "each"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 119.99999809265137,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -7,
+ "~:width": 242.60000610351562,
+ "~:text-decoration": "line-through rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1654.766658782959,
+ "~:x1": 646.7666625976562,
+ "~:y2": 55,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 889.3666687011719,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": " other, the "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 167.99999809265137,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 41,
+ "~:width": 189.93333435058594,
+ "~:text-decoration": "line-through rgb(71, 229, 54)",
+ "~:letter-spacing": "normal",
+ "~:x": 1007.9999961853027,
+ "~:x1": 0,
+ "~:y2": 103,
+ "~:fills": [
+ {
+ "~:fill-color": "#47e536",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 189.93333435058594,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": "resulting"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 167.99999809265137,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 41,
+ "~:width": 12.48333740234375,
+ "~:text-decoration": "line-through rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1197.9333305358887,
+ "~:x1": 189.93333435058594,
+ "~:y2": 103,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 202.4166717529297,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": " "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 167.99999809265137,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 41,
+ "~:width": 226.86666870117188,
+ "~:text-decoration": "line-through rgb(131, 17, 196)",
+ "~:letter-spacing": "normal",
+ "~:x": 1210.4166679382324,
+ "~:x1": 202.4166717529297,
+ "~:y2": 103,
+ "~:fills": [
+ {
+ "~:fill-color": "#8311c4",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 429.28334045410156,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": "dynamical"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 167.99999809265137,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 41,
+ "~:width": 233.81666564941406,
+ "~:text-decoration": "line-through rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1437.2833213806152,
+ "~:x1": 429.2833251953125,
+ "~:y2": 103,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 663.0999908447266,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": " system is "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 167.99999809265137,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 41,
+ "~:width": 162.06666564941406,
+ "~:text-decoration": "line-through rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1671.0999717712402,
+ "~:x1": 663.0999755859375,
+ "~:y2": 103,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 825.1666412353516,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": "chaotic"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 167.99999809265137,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 41,
+ "~:width": 12.483322143554688,
+ "~:text-decoration": "line-through rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1833.1666831970215,
+ "~:x1": 825.1666870117188,
+ "~:y2": 103,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 837.6500091552734,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": " "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 215.99999809265137,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 89,
+ "~:width": 335.3500061035156,
+ "~:text-decoration": "line-through rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1007.9999961853027,
+ "~:x1": 0,
+ "~:y2": 151,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 335.3500061035156,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": "for most initial "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 215.99999809265137,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 89,
+ "~:width": 220.56666564941406,
+ "~:text-decoration": "line-through rgb(7, 185, 185)",
+ "~:letter-spacing": "normal",
+ "~:x": 1343.3500022888184,
+ "~:x1": 335.3500061035156,
+ "~:y2": 151,
+ "~:fills": [
+ {
+ "~:fill-color": "#07b9b9",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 555.9166717529297,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 62,
+ "~:text": "conditions"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [],
+ "~:x": 1007.9999961853027,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#000000",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u4943b8c5-d461-806f-8006-b73eda553863",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1007.9999961853027,
+ "~:y": 64.99999809265137,
+ "~:width": 902.6199789047241,
+ "~:height": 289,
+ "~:x1": 1007.9999961853027,
+ "~:y1": 64.99999809265137,
+ "~:x2": 1910.6199750900269,
+ "~:y2": 353.99999809265137
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 289,
+ "~:flip-y": null
+ }
+ },
+ "~u3ae2c7c2-74be-808c-8006-b4a9b7db5fd2": {
+ "~#shape": {
+ "~:y": 622.9999774894502,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-height",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "26uqr82pxgl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "1qg2rfjeltu",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "When three bodies orbit "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "6jblrptau9",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#da1a1a",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "each"
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "c8k8ui5e7a",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " other, the "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "12yz53vlcq9",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#47e536",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "resulting"
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "17560zmv6qd",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "2bzh4tglr6t",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#8311c4",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "dynamical"
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "1117tsar9pu",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " system is "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "nmaiszc59b",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "chaotic"
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "haol76vdi7",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": " for most initial "
+ },
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "1110bgrqyy",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#07b9b9",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "conditions"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "qe37ujule6",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#8311c4",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Multiple nodes thin underline",
+ "~:width": 829.9510483261171,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 18.000000167961677,
+ "~:y": 622.9999774894502
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 847.9510484940788,
+ "~:y": 622.9999774894502
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 847.9510484940788,
+ "~:y": 796.9999742111947
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 18.000000167961677,
+ "~:y": 796.9999742111947
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:hidden": false,
+ "~:id": "~u3ae2c7c2-74be-808c-8006-b4a9b7db5fd2",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 683.2999839782715,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.6999969482421875,
+ "~:width": 490.91668701171875,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 18.00000020002892,
+ "~:x1": 0,
+ "~:y2": 60.30000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 490.91668701171875,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": "When three bodies orbit "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 683.2999839782715,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.6999969482421875,
+ "~:width": 95.66665649414062,
+ "~:text-decoration": "underline rgb(218, 26, 26)",
+ "~:letter-spacing": "normal",
+ "~:x": 508.91668721174767,
+ "~:x1": 490.91668701171875,
+ "~:y2": 60.30000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#da1a1a",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 586.5833435058594,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": "each"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 683.2999839782715,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.6999969482421875,
+ "~:width": 213.13333129882812,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 604.5833131883102,
+ "~:x1": 586.5833129882812,
+ "~:y2": 60.30000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 799.7166442871094,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": " other, the "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 740.899974822998,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 54.899993896484375,
+ "~:width": 176.85000610351562,
+ "~:text-decoration": "underline rgb(71, 229, 54)",
+ "~:letter-spacing": "normal",
+ "~:x": 18.00000020002892,
+ "~:x1": 0,
+ "~:y2": 117.89999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#47e536",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 176.85000610351562,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": "resulting"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 740.899974822998,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 54.899993896484375,
+ "~:width": 9.683334350585938,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 194.85000630354455,
+ "~:x1": 176.85000610351562,
+ "~:y2": 117.89999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 186.53334045410156,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": " "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 740.899974822998,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 54.899993896484375,
+ "~:width": 209.59999084472656,
+ "~:text-decoration": "underline rgb(131, 17, 196)",
+ "~:letter-spacing": "normal",
+ "~:x": 204.53334065413048,
+ "~:x1": 186.53334045410156,
+ "~:y2": 117.89999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#8311c4",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 396.1333312988281,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": "dynamical"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 740.899974822998,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 54.899993896484375,
+ "~:width": 202.88333129882812,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 414.13333149885705,
+ "~:x1": 396.1333312988281,
+ "~:y2": 117.89999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 599.0166625976562,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": " system is "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 740.899974822998,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 54.899993896484375,
+ "~:width": 148.43333435058594,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 617.0166627976852,
+ "~:x1": 599.0166625976562,
+ "~:y2": 117.89999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 747.4499969482422,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": "chaotic"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 740.899974822998,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 54.899993896484375,
+ "~:width": 75.56666564941406,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 765.4500124070602,
+ "~:x1": 747.4500122070312,
+ "~:y2": 117.89999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 823.0166778564453,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": " for "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 798.4999809265137,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 112.5,
+ "~:width": 236.10000610351562,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 18.00000020002892,
+ "~:x1": 0,
+ "~:y2": 175.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 236.10000610351562,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": "most initial "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 798.4999809265137,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 112.5,
+ "~:width": 211.93333435058594,
+ "~:text-decoration": "underline rgb(7, 185, 185)",
+ "~:letter-spacing": "normal",
+ "~:x": 254.10000630354455,
+ "~:x1": 236.10000610351562,
+ "~:y2": 175.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#07b9b9",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 448.03334045410156,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": "conditions"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:x": 18.00000016796173,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 18.00000016796173,
+ "~:y": 622.9999774894502,
+ "~:width": 829.9510483261171,
+ "~:height": 173.99999672174454,
+ "~:x1": 18.00000016796173,
+ "~:y1": 622.9999774894502,
+ "~:x2": 847.9510484940788,
+ "~:y2": 796.9999742111947
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 173.99999672174454,
+ "~:flip-y": null
+ }
+ },
+ "~u372dc781-22b4-808b-8006-b4d381e231cc": {
+ "~#shape": {
+ "~:y": 1030.1928728054145,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 0.9667771933303442,
+ "~:b": -0.2556205360613699,
+ "~:c": 0.25561985332985415,
+ "~:d": 0.9667773738475791,
+ "~:e": 7.73070496506989e-12,
+ "~:f": 4.320099833421409e-12
+ }
+ },
+ "~:rotation": 345.18964078504564,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "2a53nvhqyyr",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "ou0m2kc4di",
+ "~:font-size": "64",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom",
+ "~:text": "design"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "custom-7358c66e-177c-80f6-8006-c1b0d113ec7a",
+ "~:key": "lei7j6hl8",
+ "~:font-size": "64",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "normal-400",
+ "~:text-decoration": "underline",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "Tinos Custom"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "note 3",
+ "~:width": 168.0000082191185,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1418.9999686428457,
+ "~:y": 1052.9440733902131
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1581.4185450684,
+ "~:y": 1009.9998212309276
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1601.1013260686657,
+ "~:y": 1084.4418767973168
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1438.6827496431108,
+ "~:y": 1127.3861289566028
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 0.9667773738478213,
+ "~:b": 0.2556205360614339,
+ "~:c": -0.25561985332991816,
+ "~:d": 0.9667771933305863,
+ "~:e": -6.369567358332796e-12,
+ "~:f": -6.152700939167038e-12
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:id": "~u372dc781-22b4-808b-8006-b4d381e231cc",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 1107.7773422702744,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "64px",
+ "~:font-weight": "200",
+ "~:y1": -3.100006103515625,
+ "~:width": 188.8333282470703,
+ "~:text-decoration": "underline rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1425.7019294316813,
+ "~:x1": 0,
+ "~:y2": 79.89999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 188.8333282470703,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sour Gummy\"",
+ "~:height": 83,
+ "~:text": "design"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:x": 1426.0506432461964,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1426.0506432461964,
+ "~:y": 1030.1928728054145,
+ "~:width": 168.0000082191185,
+ "~:height": 77.00020457670121,
+ "~:x1": 1426.0506432461964,
+ "~:y1": 1030.1928728054145,
+ "~:x2": 1594.0506514653148,
+ "~:y2": 1107.1930773821157
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 77.00020457670121,
+ "~:flip-y": null
+ }
+ },
+ "~u8db91f66-0aee-80fd-8006-b4d0d15a1e56": {
+ "~#shape": {
+ "~:y": 544.9999732821145,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:last-resize-direction": "~:horizontal",
+ "~:grow-type": "~:auto-height",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "26uqr82pxgl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "4",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "gfont-sofia-sans",
+ "~:key": "1qg2rfjeltu",
+ "~:font-size": "72",
+ "~:font-weight": "600",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "600",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 0
+ }
+ ],
+ "~:font-family": "Sofia Sans",
+ "~:text": "When three "
+ },
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "gfont-sofia-sans",
+ "~:key": "1i5z272bai3",
+ "~:font-size": "72",
+ "~:font-weight": "600",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "600",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 0
+ }
+ ],
+ "~:font-family": "Sofia Sans",
+ "~:text": "bodies"
+ },
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "gfont-sofia-sans",
+ "~:key": "juq703mtm3",
+ "~:font-size": "72",
+ "~:font-weight": "600",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "600",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 0
+ }
+ ],
+ "~:font-family": "Sofia Sans",
+ "~:text": " "
+ },
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "gfont-sofia-sans",
+ "~:key": "2fbxrvcprv9",
+ "~:font-size": "72",
+ "~:font-weight": "600",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "600",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 0
+ }
+ ],
+ "~:font-family": "Sofia Sans",
+ "~:text": "orbit"
+ },
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "gfont-sofia-sans",
+ "~:key": "1qcp8fvrfct",
+ "~:font-size": "0",
+ "~:font-weight": "600",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "600",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 0
+ }
+ ],
+ "~:font-family": "Sofia Sans",
+ "~:text": ""
+ },
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "gfont-sofia-sans",
+ "~:key": "9madaw4nm",
+ "~:font-size": "72",
+ "~:font-weight": "600",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "600",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 0
+ }
+ ],
+ "~:font-family": "Sofia Sans",
+ "~:text": " "
+ },
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "gfont-sofia-sans",
+ "~:key": "6jblrptau9",
+ "~:font-size": "72",
+ "~:font-weight": "600",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "600",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 0
+ }
+ ],
+ "~:font-family": "Sofia Sans",
+ "~:text": "each"
+ },
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "gfont-sofia-sans",
+ "~:key": "c8k8ui5e7a",
+ "~:font-size": "72",
+ "~:font-weight": "600",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "600",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 0
+ }
+ ],
+ "~:font-family": "Sofia Sans",
+ "~:text": " other, the "
+ },
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "gfont-sofia-sans",
+ "~:key": "12yz53vlcq9",
+ "~:font-size": "72",
+ "~:font-weight": "600",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "600",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 0
+ }
+ ],
+ "~:font-family": "Sofia Sans",
+ "~:text": "resulting"
+ },
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "gfont-sofia-sans",
+ "~:key": "17560zmv6qd",
+ "~:font-size": "72",
+ "~:font-weight": "600",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "600",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 0
+ }
+ ],
+ "~:font-family": "Sofia Sans",
+ "~:text": " "
+ },
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "gfont-sofia-sans",
+ "~:key": "2bzh4tglr6t",
+ "~:font-size": "72",
+ "~:font-weight": "600",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "600",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 0
+ }
+ ],
+ "~:font-family": "Sofia Sans",
+ "~:text": "dynamical"
+ },
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "gfont-sofia-sans",
+ "~:key": "1117tsar9pu",
+ "~:font-size": "0",
+ "~:font-weight": "600",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "600",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 0
+ }
+ ],
+ "~:font-family": "Sofia Sans",
+ "~:text": ""
+ },
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "gfont-sofia-sans",
+ "~:key": "9wu2w9l2z1",
+ "~:font-size": "72",
+ "~:font-weight": "600",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "600",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 0
+ }
+ ],
+ "~:font-family": "Sofia Sans",
+ "~:text": " system is "
+ },
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "gfont-sofia-sans",
+ "~:key": "nmaiszc59b",
+ "~:font-size": "72",
+ "~:font-weight": "600",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "600",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 0
+ }
+ ],
+ "~:font-family": "Sofia Sans",
+ "~:text": "chaotic"
+ },
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "gfont-sofia-sans",
+ "~:key": "haol76vdi7",
+ "~:font-size": "72",
+ "~:font-weight": "600",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "600",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 0
+ }
+ ],
+ "~:font-family": "Sofia Sans",
+ "~:text": " for most initial "
+ },
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "gfont-sofia-sans",
+ "~:key": "1110bgrqyy",
+ "~:font-size": "72",
+ "~:font-weight": "600",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "600",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 0
+ }
+ ],
+ "~:font-family": "Sofia Sans",
+ "~:text": "conditions "
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "center",
+ "~:font-id": "gfont-sofia-sans",
+ "~:key": "qe37ujule6",
+ "~:font-size": "0",
+ "~:font-weight": "600",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "600",
+ "~:text-decoration": "line-through",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 0
+ }
+ ],
+ "~:font-family": "Sofia Sans"
+ },
+ {
+ "~:line-height": "4",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "gfont-sofia-sans",
+ "~:key": "16hglqhlep1",
+ "~:font-size": "72",
+ "~:font-weight": "600",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "600",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 0
+ }
+ ],
+ "~:font-family": "Sofia Sans",
+ "~:text": ""
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "center",
+ "~:font-id": "gfont-sofia-sans",
+ "~:key": "2s11myqei4",
+ "~:font-size": "72",
+ "~:font-weight": "600",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "600",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 0
+ }
+ ],
+ "~:font-family": "Sofia Sans"
+ },
+ {
+ "~:line-height": "4",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "gfont-sofia-sans",
+ "~:key": "dniyoqo1os",
+ "~:font-size": "72",
+ "~:font-weight": "600",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "600",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 0
+ }
+ ],
+ "~:font-family": "Sofia Sans",
+ "~:text": " "
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "center",
+ "~:font-id": "gfont-sofia-sans",
+ "~:key": "ljvpiew0gz",
+ "~:font-size": "0",
+ "~:font-weight": "600",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "600",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 0
+ }
+ ],
+ "~:font-family": "Sofia Sans"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "The Three-Kinds-Of-Stroke Problem",
+ "~:width": 1313.8100164113944,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 1123.9999631135577,
+ "~:y": 544.9999732821145
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2437.8099795249523,
+ "~:y": 544.9999732821145
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 2437.8099795249523,
+ "~:y": 1984.9999947397866
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1123.9999631135577,
+ "~:y": 1984.9999947397866
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:hidden": false,
+ "~:id": "~u8db91f66-0aee-80fd-8006-b4d0d15a1e56",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 732.4999732821145,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "72px",
+ "~:font-weight": "600",
+ "~:y1": 100.5,
+ "~:width": 378.5333251953125,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1156.3166287629715,
+ "~:x1": 32.31666564941406,
+ "~:y2": 187.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 410.84999084472656,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sofia Sans\"",
+ "~:height": 87,
+ "~:text": "When three "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 732.4999732821145,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "72px",
+ "~:font-weight": "600",
+ "~:y1": 100.5,
+ "~:width": 205.3333282470703,
+ "~:text-decoration": "line-through rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1534.849969217073,
+ "~:x1": 410.8500061035156,
+ "~:y2": 187.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 616.1833343505859,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sofia Sans\"",
+ "~:height": 87,
+ "~:text": "bodies"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 732.4999732821145,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "72px",
+ "~:font-weight": "600",
+ "~:y1": 100.5,
+ "~:width": 14.899993896484375,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1740.1833127229324,
+ "~:x1": 616.183349609375,
+ "~:y2": 187.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 631.0833435058594,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sofia Sans\"",
+ "~:height": 87,
+ "~:text": " "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 732.4999732821145,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "72px",
+ "~:font-weight": "600",
+ "~:y1": 100.5,
+ "~:width": 148.70001220703125,
+ "~:text-decoration": "line-through rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1755.0832761018387,
+ "~:x1": 631.0833129882812,
+ "~:y2": 187.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 779.7833251953125,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sofia Sans\"",
+ "~:height": 87,
+ "~:text": "orbit"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 732.4999732821145,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "72px",
+ "~:font-weight": "600",
+ "~:y1": 100.5,
+ "~:width": 14.899993896484375,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1903.78328830887,
+ "~:x1": 779.7833251953125,
+ "~:y2": 187.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 794.6833190917969,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sofia Sans\"",
+ "~:height": 87,
+ "~:text": " "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 732.4999732821145,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "72px",
+ "~:font-weight": "600",
+ "~:y1": 100.5,
+ "~:width": 151.2833251953125,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1918.6833127229324,
+ "~:x1": 794.683349609375,
+ "~:y2": 187.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 945.9666748046875,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sofia Sans\"",
+ "~:height": 87,
+ "~:text": "each"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 732.4999732821145,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "72px",
+ "~:font-weight": "600",
+ "~:y1": 100.5,
+ "~:width": 335.51666259765625,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 2069.966637918245,
+ "~:x1": 945.9666748046875,
+ "~:y2": 187.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 1281.4833374023438,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sofia Sans\"",
+ "~:height": 87,
+ "~:text": " other, the "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1020.4999732821145,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "72px",
+ "~:font-weight": "600",
+ "~:y1": 388.5,
+ "~:width": 275.83331298828125,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1136.533303567659,
+ "~:x1": 12.533340454101562,
+ "~:y2": 475.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 288.3666534423828,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sofia Sans\"",
+ "~:height": 87,
+ "~:text": "resulting"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1020.4999732821145,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "72px",
+ "~:font-weight": "600",
+ "~:y1": 388.5,
+ "~:width": 14.899993896484375,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1412.3666318147293,
+ "~:x1": 288.3666687011719,
+ "~:y2": 475.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 303.26666259765625,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sofia Sans\"",
+ "~:height": 87,
+ "~:text": " "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1020.4999732821145,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "72px",
+ "~:font-weight": "600",
+ "~:y1": 388.5,
+ "~:width": 319.1500244140625,
+ "~:text-decoration": "line-through rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1427.2666257112137,
+ "~:x1": 303.26666259765625,
+ "~:y2": 475.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 622.4166870117188,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sofia Sans\"",
+ "~:height": 87,
+ "~:text": "dynamical"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1020.4999732821145,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "72px",
+ "~:font-weight": "600",
+ "~:y1": 388.5,
+ "~:width": 324.45001220703125,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1746.4166501252762,
+ "~:x1": 622.4166870117188,
+ "~:y2": 475.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 946.86669921875,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sofia Sans\"",
+ "~:height": 87,
+ "~:text": " system is "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1020.4999732821145,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "72px",
+ "~:font-weight": "600",
+ "~:y1": 388.5,
+ "~:width": 235.14999389648438,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 2070.8666623323074,
+ "~:x1": 946.86669921875,
+ "~:y2": 475.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 1182.0166931152344,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sofia Sans\"",
+ "~:height": 87,
+ "~:text": "chaotic"
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1020.4999732821145,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "72px",
+ "~:font-weight": "600",
+ "~:y1": 388.5,
+ "~:width": 119.25,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 2306.0165646760574,
+ "~:x1": 1182.0166015625,
+ "~:y2": 475.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 1301.2666015625,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sofia Sans\"",
+ "~:height": 87,
+ "~:text": " for "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1308.4999732821145,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "72px",
+ "~:font-weight": "600",
+ "~:y1": 676.5,
+ "~:width": 364.1499938964844,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1422.9833005159012,
+ "~:x1": 298.98333740234375,
+ "~:y2": 763.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 663.1333312988281,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sofia Sans\"",
+ "~:height": 87,
+ "~:text": "most initial "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1308.4999732821145,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "72px",
+ "~:font-weight": "600",
+ "~:y1": 676.5,
+ "~:width": 351.683349609375,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1787.1332638948074,
+ "~:x1": 663.13330078125,
+ "~:y2": 763.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 1014.816650390625,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sofia Sans\"",
+ "~:height": 87,
+ "~:text": "conndition "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1596.4999732821145,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "72px",
+ "~:font-weight": "600",
+ "~:y1": 964.5,
+ "~:width": 14.900009155273438,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1773.4499753205887,
+ "~:x1": 649.4500122070312,
+ "~:y2": 1051.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 664.3500213623047,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sofia Sans\"",
+ "~:height": 87,
+ "~:text": " "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": 1884.4999732821145,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "72px",
+ "~:font-weight": "600",
+ "~:y1": 1252.5,
+ "~:width": 14.900009155273438,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": 1773.4499753205887,
+ "~:x1": 649.4500122070312,
+ "~:y2": 1339.5,
+ "~:fills": [
+ {
+ "~:fill-color": "#000000",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 664.3500213623047,
+ "~:direction": "ltr",
+ "~:font-family": "\"Sofia Sans\"",
+ "~:height": 87,
+ "~:text": " "
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 2,
+ "~:stroke-color": "#d324ee",
+ "~:stroke-opacity": 1
+ },
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:center",
+ "~:stroke-width": 2,
+ "~:stroke-color": "#0ca6ff",
+ "~:stroke-opacity": 1
+ },
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 2,
+ "~:stroke-color": "#84ac00",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 1123.9999631135574,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 1123.9999631135574,
+ "~:y": 544.9999732821145,
+ "~:width": 1313.8100164113944,
+ "~:height": 1440.0000214576721,
+ "~:x1": 1123.9999631135574,
+ "~:y1": 544.9999732821145,
+ "~:x2": 2437.809979524952,
+ "~:y2": 1984.9999947397866
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 1440.0000214576721,
+ "~:flip-y": null
+ }
+ }
+ },
+ "~:id": "~ub4cb802d-4245-807d-8006-b4a4b90b79cd",
+ "~:name": "Page 1",
+ "~:background": "#e8e9ea"
+ }
+ },
+ "~:id": "~u44471494-966a-8178-8006-c1b0e4befad3",
+ "~:options": {
+ "~:components-v2": true,
+ "~:base-font-size": "16px"
+ },
+ "~:typographies": {
+ "~:count": 0,
+ "~:sample": []
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontend/playwright/data/render-wasm/get-file-text-shadows-and-blurs.json b/frontend/playwright/data/render-wasm/get-file-text-shadows-and-blurs.json
new file mode 100644
index 0000000000..06ee07870a
--- /dev/null
+++ b/frontend/playwright/data/render-wasm/get-file-text-shadows-and-blurs.json
@@ -0,0 +1,4701 @@
+{
+ "~:features": {
+ "~#set": [
+ "fdata/path-data",
+ "plugins/runtime",
+ "design-tokens/v1",
+ "variants/v1",
+ "layout/grid",
+ "styles/v2",
+ "fdata/objects-map",
+ "render-wasm/v1",
+ "components/v2",
+ "fdata/shape-data-type"
+ ]
+ },
+ "~:team-id": "~u6bd7c17d-4f59-815e-8006-5c1f6882469a",
+ "~:permissions": {
+ "~:type": "~:membership",
+ "~:is-owner": true,
+ "~:is-admin": true,
+ "~:can-edit": true,
+ "~:can-read": true,
+ "~:is-logged": true
+ },
+ "~:has-media-trimmed": false,
+ "~:comment-thread-seqn": 0,
+ "~:name": "text_strokes_shadows_opacity_blur",
+ "~:revn": 333,
+ "~:modified-at": "~m1757067323203",
+ "~:vern": 0,
+ "~:id": "~u15b74473-2908-8094-8006-bdb4fbd2c6a3",
+ "~:is-shared": false,
+ "~:migrations": {
+ "~#ordered-set": [
+ "legacy-2",
+ "legacy-3",
+ "legacy-5",
+ "legacy-6",
+ "legacy-7",
+ "legacy-8",
+ "legacy-9",
+ "legacy-10",
+ "legacy-11",
+ "legacy-12",
+ "legacy-13",
+ "legacy-14",
+ "legacy-16",
+ "legacy-17",
+ "legacy-18",
+ "legacy-19",
+ "legacy-25",
+ "legacy-26",
+ "legacy-27",
+ "legacy-28",
+ "legacy-29",
+ "legacy-31",
+ "legacy-32",
+ "legacy-33",
+ "legacy-34",
+ "legacy-36",
+ "legacy-37",
+ "legacy-38",
+ "legacy-39",
+ "legacy-40",
+ "legacy-41",
+ "legacy-42",
+ "legacy-43",
+ "legacy-44",
+ "legacy-45",
+ "legacy-46",
+ "legacy-47",
+ "legacy-48",
+ "legacy-49",
+ "legacy-50",
+ "legacy-51",
+ "legacy-52",
+ "legacy-53",
+ "legacy-54",
+ "legacy-55",
+ "legacy-56",
+ "legacy-57",
+ "legacy-59",
+ "legacy-62",
+ "legacy-65",
+ "legacy-66",
+ "legacy-67",
+ "0001-remove-tokens-from-groups",
+ "0002-normalize-bool-content-v2",
+ "0002-clean-shape-interactions",
+ "0003-fix-root-shape",
+ "0003-convert-path-content-v2",
+ "0004-clean-shadow-color",
+ "0005-deprecate-image-type",
+ "0006-fix-old-texts-fills",
+ "0007-clear-invalid-strokes-and-fills-v2",
+ "0008-fix-library-colors-v4",
+ "0009-clean-library-colors",
+ "0009-add-partial-text-touched-flags",
+ "0010-fix-swap-slots-pointing-non-existent-shapes"
+ ]
+ },
+ "~:version": 67,
+ "~:project-id": "~u6bd7c17d-4f59-815e-8006-5c1f68846e43",
+ "~:created-at": "~m1756805434187",
+ "~:data": {
+ "~:pages": [
+ "~u15b74473-2908-8094-8006-bdb4fbd2c6a4"
+ ],
+ "~:pages-index": {
+ "~u15b74473-2908-8094-8006-bdb4fbd2c6a4": {
+ "~:objects": {
+ "~u00000000-0000-0000-0000-000000000000": {
+ "~#shape": {
+ "~:y": 0,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:name": "Root Frame",
+ "~:width": 0.01,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 0,
+ "~:y": 0
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 0.01,
+ "~:y": 0
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 0.01,
+ "~:y": 0.01
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 0,
+ "~:y": 0.01
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:id": "~u00000000-0000-0000-0000-000000000000",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [],
+ "~:x": 0,
+ "~:proportion": 1,
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 0,
+ "~:y": 0,
+ "~:width": 0.01,
+ "~:height": 0.01,
+ "~:x1": 0,
+ "~:y1": 0,
+ "~:x2": 0.01,
+ "~:y2": 0.01
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#FFFFFF",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 0.01,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~uc469627b-737e-80a7-8006-c19b9bc554c9",
+ "~uc469627b-737e-80a7-8006-c19b9bc596e8",
+ "~uc469627b-737e-80a7-8006-c19b9bc596e9",
+ "~u199bd8a8-1f62-8077-8006-c09980f8a086",
+ "~u199bd8a8-1f62-8077-8006-c099c4d01fb8",
+ "~u199bd8a8-1f62-8077-8006-c099e8f3d114",
+ "~u199bd8a8-1f62-8077-8006-c09980f8a088",
+ "~u199bd8a8-1f62-8077-8006-c09918f84a1a",
+ "~u199bd8a8-1f62-8077-8006-c09918f84a1b",
+ "~u199bd8a8-1f62-8077-8006-c09918f84a1c",
+ "~u920149f5-9682-80b4-8006-bf004ecf1a26",
+ "~u920149f5-9682-80b4-8006-bf004ecf48a8",
+ "~u920149f5-9682-80b4-8006-bf004ecf48a9",
+ "~ua43799d4-2e7f-80d2-8006-bef061e80cb4",
+ "~ua43799d4-2e7f-80d2-8006-bef061e80cb5",
+ "~ua43799d4-2e7f-80d2-8006-bef061e80cb6",
+ "~ua43799d4-2e7f-80d2-8006-beef9d2c4b42",
+ "~ua43799d4-2e7f-80d2-8006-beef9d2c9a2d",
+ "~ua43799d4-2e7f-80d2-8006-beef9d2c9a2e",
+ "~ud50240ec-f763-80e3-8006-beef3ba2c4b3",
+ "~ud50240ec-f763-80e3-8006-beef18e3ac34",
+ "~ud50240ec-f763-80e3-8006-beef3ba2c4b4",
+ "~ud50240ec-f763-80e3-8006-beef280f5cb6",
+ "~ud50240ec-f763-80e3-8006-beef3ba2c4b5"
+ ]
+ }
+ },
+ "~u199bd8a8-1f62-8077-8006-c09980f8a086": {
+ "~#shape": {
+ "~:y": 8340.999804016881,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#46d622",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro",
+ "~:text": "drop shadow + fill + center stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#46d622",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 662.0000551742614,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11011.000297040166,
+ "~:y": 8340.999804016881
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10349.000241865904,
+ "~:y": 8340.999804016881
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10349.000241865904,
+ "~:y": 8398.999804302288
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11011.000297040166,
+ "~:y": 8398.999804302288
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:hidden": false,
+ "~:id": "~u199bd8a8-1f62-8077-8006-c09980f8a086",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 8401.049807068639,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.4499969482421875,
+ "~:width": 661.316650390625,
+ "~:text-decoration": "rgb(70, 214, 34)",
+ "~:letter-spacing": "normal",
+ "~:x": -11011.000297040166,
+ "~:x1": 0,
+ "~:y2": 60.05000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#46d622",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 661.316650390625,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 62.5,
+ "~:text": "drop shadow + fill + center stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:center",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -11011.000297040166,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#000000",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11011.000297040166,
+ "~:y": 8340.999804016881,
+ "~:width": 662.0000551742614,
+ "~:height": 58.00000028540671,
+ "~:x1": -11011.000297040166,
+ "~:y1": 8340.999804016881,
+ "~:x2": -10349.000241865904,
+ "~:y2": 8398.999804302288
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 58.00000028540671,
+ "~:flip-y": null
+ }
+ },
+ "~ua43799d4-2e7f-80d2-8006-bef061e80cb6": {
+ "~#shape": {
+ "~:y": 8593.000470161438,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro",
+ "~:text": "inner shadow + no fill + blur + outer stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 839,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11932.999999999969,
+ "~:y": 8593.000470161438
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11093.999999999969,
+ "~:y": 8593.000470161438
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11093.999999999969,
+ "~:y": 8651.000470446845
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11932.999999999969,
+ "~:y": 8651.000470446845
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:blur": {
+ "~:id": "~ua43799d4-2e7f-80d2-8006-beefd76a79a8",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": false
+ },
+ "~:hidden": false,
+ "~:id": "~ua43799d4-2e7f-80d2-8006-bef061e80cb6",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 8653.300473213196,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.6999969482421875,
+ "~:width": 838.7000122070312,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": -11932.999999999969,
+ "~:x1": 0,
+ "~:y2": 60.30000305175781,
+ "~:fills": [],
+ "~:x2": 838.7000122070312,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": "inner shadow + no fill + blur + outer stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -11932.999999999969,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#000000",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:inner-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11932.999999999969,
+ "~:y": 8593.000470161438,
+ "~:width": 839,
+ "~:height": 58.00000028540671,
+ "~:x1": -11932.999999999969,
+ "~:y1": 8593.000470161438,
+ "~:x2": -11093.999999999969,
+ "~:y2": 8651.000470446845
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 58.00000028540671,
+ "~:flip-y": null
+ }
+ },
+ "~ua43799d4-2e7f-80d2-8006-bef061e80cb4": {
+ "~#shape": {
+ "~:y": 8466.000139590858,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro",
+ "~:text": "inner shadow + no fill + blur + inner stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 835,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11933,
+ "~:y": 8466.000139590858
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11098,
+ "~:y": 8466.000139590858
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11098,
+ "~:y": 8524.000139859878
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11933,
+ "~:y": 8524.000139859878
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:blur": {
+ "~:id": "~ua43799d4-2e7f-80d2-8006-beefafd2df5f",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": false
+ },
+ "~:hidden": false,
+ "~:id": "~ua43799d4-2e7f-80d2-8006-bef061e80cb4",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 8526.050142642616,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.4499969482421875,
+ "~:width": 834.9833374023438,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": -11933,
+ "~:x1": 0,
+ "~:y2": 60.05000305175781,
+ "~:fills": [],
+ "~:x2": 834.9833374023438,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 62.5,
+ "~:text": "inner shadow + no fill + blur + inner stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -11933,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#000000",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:inner-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11933,
+ "~:y": 8466.000139590858,
+ "~:width": 835,
+ "~:height": 58.00000026901944,
+ "~:x1": -11933,
+ "~:y1": 8466.000139590858,
+ "~:x2": -11098,
+ "~:y2": 8524.000139859878
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 58.00000026901944,
+ "~:flip-y": null
+ }
+ },
+ "~ua43799d4-2e7f-80d2-8006-bef061e80cb5": {
+ "~#shape": {
+ "~:y": 8528.999816596508,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro",
+ "~:text": "inner shadow + no fill + blur + center stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 858,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11932.999999999978,
+ "~:y": 8528.999816596508
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11074.999999999978,
+ "~:y": 8528.999816596508
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11074.999999999978,
+ "~:y": 8586.999816881915
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11932.999999999978,
+ "~:y": 8586.999816881915
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:blur": {
+ "~:id": "~ua43799d4-2e7f-80d2-8006-beefd4d05fa5",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": false
+ },
+ "~:hidden": false,
+ "~:id": "~ua43799d4-2e7f-80d2-8006-bef061e80cb5",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 8589.299819648266,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.6999969482421875,
+ "~:width": 857.4666748046875,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": -11932.999999999978,
+ "~:x1": 0,
+ "~:y2": 60.30000305175781,
+ "~:fills": [],
+ "~:x2": 857.4666748046875,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": "inner shadow + no fill + blur + center stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:center",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -11932.999999999978,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#000000",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:inner-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11932.999999999978,
+ "~:y": 8528.999816596508,
+ "~:width": 858,
+ "~:height": 58.00000028540671,
+ "~:x1": -11932.999999999978,
+ "~:y1": 8528.999816596508,
+ "~:x2": -11074.999999999978,
+ "~:y2": 8586.999816881915
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 58.00000028540671,
+ "~:flip-y": null
+ }
+ },
+ "~ua43799d4-2e7f-80d2-8006-beef9d2c9a2d": {
+ "~#shape": {
+ "~:y": 8337.999809026718,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro",
+ "~:text": "drop shadow + no fill + blur + center stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 849,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11932.999999999978,
+ "~:y": 8337.999809026718
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11083.999999999978,
+ "~:y": 8337.999809026718
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11083.999999999978,
+ "~:y": 8395.999809312125
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11932.999999999978,
+ "~:y": 8395.999809312125
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:blur": {
+ "~:id": "~ua43799d4-2e7f-80d2-8006-beefd4d05fa5",
+ "~:type": "~:layer-blur",
+ "~:value": 1,
+ "~:hidden": false
+ },
+ "~:hidden": false,
+ "~:id": "~ua43799d4-2e7f-80d2-8006-beef9d2c9a2d",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 8398.049812078476,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.4499969482421875,
+ "~:width": 848.0499877929688,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": -11932.999999999978,
+ "~:x1": 0,
+ "~:y2": 60.05000305175781,
+ "~:fills": [],
+ "~:x2": 848.0499877929688,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 62.5,
+ "~:text": "drop shadow + no fill + blur + center stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:center",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -11932.999999999978,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#000000",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11932.999999999978,
+ "~:y": 8337.999809026718,
+ "~:width": 849,
+ "~:height": 58.00000028540671,
+ "~:x1": -11932.999999999978,
+ "~:y1": 8337.999809026718,
+ "~:x2": -11083.999999999978,
+ "~:y2": 8395.999809312125
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 58.00000028540671,
+ "~:flip-y": null
+ }
+ },
+ "~u920149f5-9682-80b4-8006-bf004ecf1a26": {
+ "~#shape": {
+ "~:y": 7888.999850913791,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#9c39ff",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro",
+ "~:text": "inner shadow + fill + inner stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#9c39ff",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 649,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11011.00029712164,
+ "~:y": 7888.999850913791
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10362.00029712164,
+ "~:y": 7888.999850913791
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10362.00029712164,
+ "~:y": 7946.999851199198
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11011.00029712164,
+ "~:y": 7946.999851199198
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:hidden": false,
+ "~:id": "~u920149f5-9682-80b4-8006-bf004ecf1a26",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 7949.049853965549,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.4499969482421875,
+ "~:width": 648.25,
+ "~:text-decoration": "rgb(156, 57, 255)",
+ "~:letter-spacing": "normal",
+ "~:x": -11011.00029712164,
+ "~:x1": 0,
+ "~:y2": 60.05000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#9c39ff",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 648.25,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 62.5,
+ "~:text": "inner shadow + fill + inner stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -11011.00029712164,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#da0c0c",
+ "~:opacity": 0.5
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:inner-shadow",
+ "~:blur": 2,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11011.00029712164,
+ "~:y": 7888.999850913791,
+ "~:width": 649,
+ "~:height": 58.00000028540671,
+ "~:x1": -11011.00029712164,
+ "~:y1": 7888.999850913791,
+ "~:x2": -10362.00029712164,
+ "~:y2": 7946.999851199198
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 58.00000028540671,
+ "~:flip-y": null
+ }
+ },
+ "~ua43799d4-2e7f-80d2-8006-beef9d2c9a2e": {
+ "~#shape": {
+ "~:y": 8402.000462532043,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro",
+ "~:text": "drop shadow + no fill + blur + outer stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 830,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11932.999999999969,
+ "~:y": 8402.000462532043
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11102.999999999969,
+ "~:y": 8402.000462532043
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11102.999999999969,
+ "~:y": 8460.00046281745
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11932.999999999969,
+ "~:y": 8460.00046281745
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:blur": {
+ "~:id": "~ua43799d4-2e7f-80d2-8006-beefd76a79a8",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": false
+ },
+ "~:hidden": false,
+ "~:id": "~ua43799d4-2e7f-80d2-8006-beef9d2c9a2e",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 8462.050465583801,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.4499969482421875,
+ "~:width": 829.2833251953125,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": -11932.999999999969,
+ "~:x1": 0,
+ "~:y2": 60.05000305175781,
+ "~:fills": [],
+ "~:x2": 829.2833251953125,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 62.5,
+ "~:text": "drop shadow + no fill + blur + outer stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -11932.999999999969,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#000000",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11932.999999999969,
+ "~:y": 8402.000462532043,
+ "~:width": 830,
+ "~:height": 58.00000028540671,
+ "~:x1": -11932.999999999969,
+ "~:y1": 8402.000462532043,
+ "~:x2": -11102.999999999969,
+ "~:y2": 8460.00046281745
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 58.00000028540671,
+ "~:flip-y": null
+ }
+ },
+ "~u920149f5-9682-80b4-8006-bf004ecf48a9": {
+ "~#shape": {
+ "~:y": 8017.999770209102,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#9c39ff",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro",
+ "~:text": "inner shadow + fill + outer stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#9c39ff",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 652,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11011.000297121609,
+ "~:y": 8017.999770209102
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10359.000297121609,
+ "~:y": 8017.999770209102
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10359.000297121609,
+ "~:y": 8075.999770494509
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11011.000297121609,
+ "~:y": 8075.999770494509
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:hidden": false,
+ "~:id": "~u920149f5-9682-80b4-8006-bf004ecf48a9",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 8078.04977326086,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.4499969482421875,
+ "~:width": 651.8333129882812,
+ "~:text-decoration": "rgb(156, 57, 255)",
+ "~:letter-spacing": "normal",
+ "~:x": -11011.000297121609,
+ "~:x1": 0,
+ "~:y2": 60.05000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#9c39ff",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 651.8333129882812,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 62.5,
+ "~:text": "inner shadow + fill + outer stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -11011.000297121609,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ee0c0c",
+ "~:opacity": 0.5
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:inner-shadow",
+ "~:blur": 2,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11011.000297121609,
+ "~:y": 8017.999770209102,
+ "~:width": 652,
+ "~:height": 58.00000028540671,
+ "~:x1": -11011.000297121609,
+ "~:y1": 8017.999770209102,
+ "~:x2": -10359.000297121609,
+ "~:y2": 8075.999770494509
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 58.00000028540671,
+ "~:flip-y": null
+ }
+ },
+ "~u920149f5-9682-80b4-8006-bf004ecf48a8": {
+ "~#shape": {
+ "~:y": 7954.000052977608,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#9c39ff",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro",
+ "~:text": "inner shadow + fill + center stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#9c39ff",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 671,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11011.000297121618,
+ "~:y": 7954.000052977608
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10340.000297121618,
+ "~:y": 7954.000052977608
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10340.000297121618,
+ "~:y": 8012.000056715959
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11011.000297121618,
+ "~:y": 8012.000056715959
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:hidden": false,
+ "~:id": "~u920149f5-9682-80b4-8006-bf004ecf48a8",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 8014.050056029366,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.4499969482421875,
+ "~:width": 670.5999755859375,
+ "~:text-decoration": "rgb(156, 57, 255)",
+ "~:letter-spacing": "normal",
+ "~:x": -11011.000297121618,
+ "~:x1": 0,
+ "~:y2": 60.05000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#9c39ff",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 670.5999755859375,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 62.5,
+ "~:text": "inner shadow + fill + center stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:center",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -11011.000297121618,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ee0c0c",
+ "~:opacity": 0.5
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:inner-shadow",
+ "~:blur": 2,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11011.000297121618,
+ "~:y": 7954.000052977608,
+ "~:width": 671,
+ "~:height": 58.00000373835064,
+ "~:x1": -11011.000297121618,
+ "~:y1": 7954.000052977608,
+ "~:x2": -10340.000297121618,
+ "~:y2": 8012.000056715959
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 58.00000373835064,
+ "~:flip-y": null
+ }
+ },
+ "~ua43799d4-2e7f-80d2-8006-beef9d2c4b42": {
+ "~#shape": {
+ "~:y": 8275.000131964684,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro",
+ "~:text": "drop shadow + no fill + blur + inner stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 826.0000000000018,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11933,
+ "~:y": 8275.000131964684
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11106.999999999998,
+ "~:y": 8275.000131964684
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11106.999999999998,
+ "~:y": 8333.00013225009
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11933,
+ "~:y": 8333.00013225009
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:blur": {
+ "~:id": "~ua43799d4-2e7f-80d2-8006-beefafd2df5f",
+ "~:type": "~:layer-blur",
+ "~:value": 1,
+ "~:hidden": false
+ },
+ "~:hidden": false,
+ "~:id": "~ua43799d4-2e7f-80d2-8006-beef9d2c4b42",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 8335.050135016441,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.4499969482421875,
+ "~:width": 825.7000122070312,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": -11933,
+ "~:x1": 0,
+ "~:y2": 60.05000305175781,
+ "~:fills": [],
+ "~:x2": 825.7000122070312,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 62.5,
+ "~:text": "drop shadow + no fill + blur + inner stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -11933,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#000000",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11933,
+ "~:y": 8275.000131964684,
+ "~:width": 826.0000000000018,
+ "~:height": 58.00000028540671,
+ "~:x1": -11933,
+ "~:y1": 8275.000131964684,
+ "~:x2": -11106.999999999998,
+ "~:y2": 8333.00013225009
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 58.00000028540671,
+ "~:flip-y": null
+ }
+ },
+ "~u199bd8a8-1f62-8077-8006-c09980f8a088": {
+ "~#shape": {
+ "~:y": 8405.99951793518,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#46d622",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro",
+ "~:text": "drop shadow + fill + outer stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#46d622",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 643.0000638284164,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11011.000297093136,
+ "~:y": 8405.99951793518
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10368.00023326472,
+ "~:y": 8405.99951793518
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10368.00023326472,
+ "~:y": 8463.999518220588
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11011.000297093136,
+ "~:y": 8463.999518220588
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:hidden": false,
+ "~:id": "~u199bd8a8-1f62-8077-8006-c09980f8a088",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 8466.049520986939,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.4499969482421875,
+ "~:width": 642.5499877929688,
+ "~:text-decoration": "rgb(70, 214, 34)",
+ "~:letter-spacing": "normal",
+ "~:x": -11011.000297093138,
+ "~:x1": 0,
+ "~:y2": 60.05000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#46d622",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 642.5499877929688,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 62.5,
+ "~:text": "drop shadow + fill + outer stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 0.6611111111111111
+ }
+ ],
+ "~:x": -11011.000297093138,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#000000",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11011.000297093138,
+ "~:y": 8405.99951793518,
+ "~:width": 643.0000638284164,
+ "~:height": 58.00000028540671,
+ "~:x1": -11011.000297093138,
+ "~:y1": 8405.99951793518,
+ "~:x2": -10368.000233264722,
+ "~:y2": 8463.999518220588
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 58.00000028540671,
+ "~:flip-y": null
+ }
+ },
+ "~uc469627b-737e-80a7-8006-c19b9bc596e9": {
+ "~#shape": {
+ "~:y": 8599.999635622788,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#46d622",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro",
+ "~:text": "drop shadow + fill + blur + outer stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#46d622",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 768,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11011.000297063973,
+ "~:y": 8599.999635622788
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10243.000297063973,
+ "~:y": 8599.999635622788
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10243.000297063973,
+ "~:y": 8657.999635908194
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11011.000297063973,
+ "~:y": 8657.999635908194
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:blur": {
+ "~:id": "~uc469627b-737e-80a7-8006-c19bc34bf392",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": false
+ },
+ "~:hidden": false,
+ "~:id": "~uc469627b-737e-80a7-8006-c19b9bc596e9",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 8660.049638674545,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.4499969482421875,
+ "~:width": 767.3333129882812,
+ "~:text-decoration": "rgb(70, 214, 34)",
+ "~:letter-spacing": "normal",
+ "~:x": -11011.000297063973,
+ "~:x1": 0,
+ "~:y2": 60.05000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#46d622",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 767.3333129882812,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 62.5,
+ "~:text": "drop shadow + fill + blur + outer stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 0.6611111111111111
+ }
+ ],
+ "~:x": -11011.000297063973,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#000000",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11011.000297063973,
+ "~:y": 8599.999635622788,
+ "~:width": 768,
+ "~:height": 58.00000028540671,
+ "~:x1": -11011.000297063973,
+ "~:y1": 8599.999635622788,
+ "~:x2": -10243.000297063973,
+ "~:y2": 8657.999635908194
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 58.00000028540671,
+ "~:flip-y": null
+ }
+ },
+ "~uc469627b-737e-80a7-8006-c19b9bc554c9": {
+ "~#shape": {
+ "~:y": 8534.999921823697,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#46d622",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro",
+ "~:text": "drop shadow + fill + blur + center stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#46d622",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 787,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11011.00029706397,
+ "~:y": 8534.999921823697
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10224.00029706397,
+ "~:y": 8534.999921823697
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10224.00029706397,
+ "~:y": 8592.999922109104
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11011.00029706397,
+ "~:y": 8592.999922109104
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:blur": {
+ "~:id": "~uc469627b-737e-80a7-8006-c19bc34d410f",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": false
+ },
+ "~:hidden": false,
+ "~:id": "~uc469627b-737e-80a7-8006-c19b9bc554c9",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 8595.049924875455,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.4499969482421875,
+ "~:width": 786.0999755859375,
+ "~:text-decoration": "rgb(70, 214, 34)",
+ "~:letter-spacing": "normal",
+ "~:x": -11011.00029706397,
+ "~:x1": 0,
+ "~:y2": 60.05000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#46d622",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 786.0999755859375,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 62.5,
+ "~:text": "drop shadow + fill + blur + center stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:center",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -11011.00029706397,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#000000",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11011.00029706397,
+ "~:y": 8534.999921823697,
+ "~:width": 787,
+ "~:height": 58.00000028540671,
+ "~:x1": -11011.00029706397,
+ "~:y1": 8534.999921823697,
+ "~:x2": -10224.00029706397,
+ "~:y2": 8592.999922109104
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 58.00000028540671,
+ "~:flip-y": null
+ }
+ },
+ "~uc469627b-737e-80a7-8006-c19b9bc596e8": {
+ "~#shape": {
+ "~:y": 8471.000207687573,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#46d622",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro",
+ "~:text": "drop shadow + fill + blur + inner stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#46d622",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 764,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11011.000297023293,
+ "~:y": 8471.000207687573
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10247.000297023293,
+ "~:y": 8471.000207687573
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10247.000297023293,
+ "~:y": 8529.00020797298
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11011.000297023293,
+ "~:y": 8529.00020797298
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:blur": {
+ "~:id": "~uc469627b-737e-80a7-8006-c19bc34dee28",
+ "~:type": "~:layer-blur",
+ "~:value": 4,
+ "~:hidden": false
+ },
+ "~:hidden": false,
+ "~:id": "~uc469627b-737e-80a7-8006-c19b9bc596e8",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 8531.050210739331,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.4499969482421875,
+ "~:width": 763.75,
+ "~:text-decoration": "rgb(70, 214, 34)",
+ "~:letter-spacing": "normal",
+ "~:x": -11011.000297023293,
+ "~:x1": 0,
+ "~:y2": 60.05000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#46d622",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 763.75,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 62.5,
+ "~:text": "drop shadow + fill + blur + inner stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -11011.000297023293,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#000000",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11011.000297023293,
+ "~:y": 8471.000207687573,
+ "~:width": 764,
+ "~:height": 58.00000028540671,
+ "~:x1": -11011.000297023293,
+ "~:y1": 8471.000207687573,
+ "~:x2": -10247.000297023293,
+ "~:y2": 8529.00020797298
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 58.00000028540671,
+ "~:flip-y": null
+ }
+ },
+ "~u199bd8a8-1f62-8077-8006-c099e8f3d114": {
+ "~#shape": {
+ "~:y": 8277.000090476804,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#46d622",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro",
+ "~:text": "drop shadow + fill + inner stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#46d622",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 639,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11011.000297067703,
+ "~:y": 8277.000090476804
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10372.000297067703,
+ "~:y": 8277.000090476804
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10372.000297067703,
+ "~:y": 8335.00009076221
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11011.000297067703,
+ "~:y": 8335.00009076221
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:hidden": false,
+ "~:id": "~u199bd8a8-1f62-8077-8006-c099e8f3d114",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 8337.050093528562,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.4499969482421875,
+ "~:width": 638.9666748046875,
+ "~:text-decoration": "rgb(70, 214, 34)",
+ "~:letter-spacing": "normal",
+ "~:x": -11011.000297067703,
+ "~:x1": 0,
+ "~:y2": 60.05000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#46d622",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 638.9666748046875,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 62.5,
+ "~:text": "drop shadow + fill + inner stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -11011.000297067703,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#000000",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11011.000297067703,
+ "~:y": 8277.000090476804,
+ "~:width": 639,
+ "~:height": 58.00000028540671,
+ "~:x1": -11011.000297067703,
+ "~:y1": 8277.000090476804,
+ "~:x2": -10372.000297067703,
+ "~:y2": 8335.00009076221
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 58.00000028540671,
+ "~:flip-y": null
+ }
+ },
+ "~ud50240ec-f763-80e3-8006-beef3ba2c4b3": {
+ "~#shape": {
+ "~:y": 8084.000120898814,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro",
+ "~:text": "inner shadow + no fill + inner stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 711,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11933.00000005209,
+ "~:y": 8084.000120898814
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11222.00000005209,
+ "~:y": 8084.000120898814
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11222.00000005209,
+ "~:y": 8142.000121184221
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11933.00000005209,
+ "~:y": 8142.000121184221
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef3ba2c4b3",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 8144.050123950572,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.4499969482421875,
+ "~:width": 710.2000122070312,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": -11933.00000005209,
+ "~:x1": 0,
+ "~:y2": 60.05000305175781,
+ "~:fills": [],
+ "~:x2": 710.2000122070312,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 62.5,
+ "~:text": "inner shadow + no fill + inner stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -11933.00000005209,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ee0c0c",
+ "~:opacity": 0.5
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:inner-shadow",
+ "~:blur": 2,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11933.00000005209,
+ "~:y": 8084.000120898814,
+ "~:width": 711,
+ "~:height": 58.00000028540671,
+ "~:x1": -11933.00000005209,
+ "~:y1": 8084.000120898814,
+ "~:x2": -11222.00000005209,
+ "~:y2": 8142.000121184221
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 58.00000028540671,
+ "~:flip-y": null
+ }
+ },
+ "~ud50240ec-f763-80e3-8006-beef3ba2c4b4": {
+ "~#shape": {
+ "~:y": 8147.999797905316,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro",
+ "~:text": "inner shadow + no fill + center stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 733,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11932.999999098394,
+ "~:y": 8147.999797905316
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11199.999999098394,
+ "~:y": 8147.999797905316
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11199.999999098394,
+ "~:y": 8205.999801643668
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11932.999999098394,
+ "~:y": 8205.999801643668
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef3ba2c4b4",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 8208.049800957073,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.4499969482421875,
+ "~:width": 732.5499877929688,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": -11932.999999098394,
+ "~:x1": 0,
+ "~:y2": 60.05000305175781,
+ "~:fills": [],
+ "~:x2": 732.5499877929688,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 62.5,
+ "~:text": "inner shadow + no fill + center stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:center",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -11932.999999098394,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ee0c0c",
+ "~:opacity": 0.5
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:inner-shadow",
+ "~:blur": 2,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11932.999999098394,
+ "~:y": 8147.999797905316,
+ "~:width": 733,
+ "~:height": 58.00000373835155,
+ "~:x1": -11932.999999098394,
+ "~:y1": 8147.999797905316,
+ "~:x2": -11199.999999098394,
+ "~:y2": 8205.999801643668
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 58.00000373835155,
+ "~:flip-y": null
+ }
+ },
+ "~ud50240ec-f763-80e3-8006-beef18e3ac34": {
+ "~#shape": {
+ "~:y": 7956.999790430069,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro",
+ "~:text": "drop shadow + no fill + center stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 724.0000642528557,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11933,
+ "~:y": 7956.999790430069
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11208.999935747144,
+ "~:y": 7956.999790430069
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11208.999935747144,
+ "~:y": 8014.999790715476
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11933,
+ "~:y": 8014.999790715476
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef18e3ac34",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 8017.049793481827,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.4499969482421875,
+ "~:width": 723.2666625976562,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": -11932.999999999998,
+ "~:x1": 0,
+ "~:y2": 60.05000305175781,
+ "~:fills": [],
+ "~:x2": 723.2666625976562,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 62.5,
+ "~:text": "drop shadow + no fill + center stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:center",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -11932.999999999998,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#000000",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11932.999999999998,
+ "~:y": 7956.999790430069,
+ "~:width": 724.0000642528557,
+ "~:height": 58.00000028540671,
+ "~:x1": -11932.999999999998,
+ "~:y1": 7956.999790430069,
+ "~:x2": -11208.999935747142,
+ "~:y2": 8014.999790715476
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 58.00000028540671,
+ "~:flip-y": null
+ }
+ },
+ "~ud50240ec-f763-80e3-8006-beef3ba2c4b5": {
+ "~#shape": {
+ "~:y": 8211.000454923244,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro",
+ "~:text": "inner shadow + no fill + outer stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 714,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11932.999999098385,
+ "~:y": 8211.000454923244
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11218.999999098385,
+ "~:y": 8211.000454923244
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11218.999999098385,
+ "~:y": 8269.00045520865
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11932.999999098385,
+ "~:y": 8269.00045520865
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef3ba2c4b5",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 8271.050457975001,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.4499969482421875,
+ "~:width": 713.7833251953125,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": -11932.999999098385,
+ "~:x1": 0,
+ "~:y2": 60.05000305175781,
+ "~:fills": [],
+ "~:x2": 713.7833251953125,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 62.5,
+ "~:text": "inner shadow + no fill + outer stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -11932.999999098385,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ee0c0c",
+ "~:opacity": 0.5
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:inner-shadow",
+ "~:blur": 2,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11932.999999098385,
+ "~:y": 8211.000454923244,
+ "~:width": 714,
+ "~:height": 58.00000028540671,
+ "~:x1": -11932.999999098385,
+ "~:y1": 8211.000454923244,
+ "~:x2": -11218.999999098385,
+ "~:y2": 8269.00045520865
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 58.00000028540671,
+ "~:flip-y": null
+ }
+ },
+ "~ud50240ec-f763-80e3-8006-beef280f5cb6": {
+ "~#shape": {
+ "~:y": 8019.999955674739,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro",
+ "~:text": "drop shadow + no fill + outer stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 705.0000649508474,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11932.999999098385,
+ "~:y": 8019.999955674739
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11227.999934147538,
+ "~:y": 8019.999955674739
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11227.999934147538,
+ "~:y": 8077.999955960146
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11932.999999098385,
+ "~:y": 8077.999955960146
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef280f5cb6",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 8080.049958726497,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.4499969482421875,
+ "~:width": 704.5,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": -11932.999999098385,
+ "~:x1": 0,
+ "~:y2": 60.05000305175781,
+ "~:fills": [],
+ "~:x2": 704.5,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 62.5,
+ "~:text": "drop shadow + no fill + outer stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 0.6611111111111111
+ }
+ ],
+ "~:x": -11932.999999098385,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#000000",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11932.999999098385,
+ "~:y": 8019.999955674739,
+ "~:width": 705.0000649508474,
+ "~:height": 58.00000028540671,
+ "~:x1": -11932.999999098385,
+ "~:y1": 8019.999955674739,
+ "~:x2": -11227.999934147538,
+ "~:y2": 8077.999955960146
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 58.00000028540671,
+ "~:flip-y": null
+ }
+ },
+ "~u199bd8a8-1f62-8077-8006-c09918f84a1c": {
+ "~#shape": {
+ "~:y": 8212.000376701355,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#9c39ff",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro",
+ "~:text": "inner shadow + fill + blur + outer stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#9c39ff",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 776.9999690055847,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11011.000297005885,
+ "~:y": 8212.000376701355
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10234.0003280003,
+ "~:y": 8212.000376701355
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10234.0003280003,
+ "~:y": 8270.000376986762
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11011.000297005885,
+ "~:y": 8270.000376986762
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:blur": {
+ "~:id": "~u199bd8a8-1f62-8077-8006-c0991e7a9433",
+ "~:type": "~:layer-blur",
+ "~:value": 2,
+ "~:hidden": false
+ },
+ "~:hidden": false,
+ "~:id": "~u199bd8a8-1f62-8077-8006-c09918f84a1c",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 8272.050379753113,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.4499969482421875,
+ "~:width": 776.61669921875,
+ "~:text-decoration": "rgb(156, 57, 255)",
+ "~:letter-spacing": "normal",
+ "~:x": -11011.000297005885,
+ "~:x1": 0,
+ "~:y2": 60.05000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#9c39ff",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 776.61669921875,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 62.5,
+ "~:text": "inner shadow + fill + blur + outer stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -11011.000297005885,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ee0c0c",
+ "~:opacity": 0.5
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:inner-shadow",
+ "~:blur": 2,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11011.000297005885,
+ "~:y": 8212.000376701355,
+ "~:width": 776.9999690055847,
+ "~:height": 58.00000028540671,
+ "~:x1": -11011.000297005885,
+ "~:y1": 8212.000376701355,
+ "~:x2": -10234.0003280003,
+ "~:y2": 8270.000376986762
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 58.00000028540671,
+ "~:flip-y": null
+ }
+ },
+ "~u199bd8a8-1f62-8077-8006-c09918f84a1a": {
+ "~#shape": {
+ "~:y": 8082.999973101323,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#9c39ff",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro",
+ "~:text": "inner shadow + fill + blur + inner stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#9c39ff",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 774.0000381469727,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11011.00029706955,
+ "~:y": 8082.999973101323
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10237.000258922577,
+ "~:y": 8082.999973101323
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10237.000258922577,
+ "~:y": 8140.99997338673
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11011.00029706955,
+ "~:y": 8140.99997338673
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:blur": {
+ "~:id": "~u199bd8a8-1f62-8077-8006-c0991e78ddd1",
+ "~:type": "~:layer-blur",
+ "~:value": 2,
+ "~:hidden": false
+ },
+ "~:hidden": false,
+ "~:id": "~u199bd8a8-1f62-8077-8006-c09918f84a1a",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 8143.049976153081,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.4499969482421875,
+ "~:width": 773.0333251953125,
+ "~:text-decoration": "rgb(156, 57, 255)",
+ "~:letter-spacing": "normal",
+ "~:x": -11011.00029706955,
+ "~:x1": 0,
+ "~:y2": 60.05000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#9c39ff",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 773.0333251953125,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 62.5,
+ "~:text": "inner shadow + fill + blur + inner stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -11011.00029706955,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#da0c0c",
+ "~:opacity": 0.5
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:inner-shadow",
+ "~:blur": 2,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11011.00029706955,
+ "~:y": 8082.999973101323,
+ "~:width": 774.0000381469727,
+ "~:height": 58.00000028540671,
+ "~:x1": -11011.00029706955,
+ "~:y1": 8082.999973101323,
+ "~:x2": -10237.000258922577,
+ "~:y2": 8140.99997338673
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 58.00000028540671,
+ "~:flip-y": null
+ }
+ },
+ "~u199bd8a8-1f62-8077-8006-c09918f84a1b": {
+ "~#shape": {
+ "~:y": 8148.000173137,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#9c39ff",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro",
+ "~:text": "inner shadow + fill + blur + center stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#9c39ff",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 795.9999673366547,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11011.00029707068,
+ "~:y": 8148.000173136999
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10215.000329734024,
+ "~:y": 8148.000173136999
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -10215.000329734024,
+ "~:y": 8206.000176871226
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11011.00029707068,
+ "~:y": 8206.000176871226
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:blur": {
+ "~:id": "~u199bd8a8-1f62-8077-8006-c0991e79c1d7",
+ "~:type": "~:layer-blur",
+ "~:value": 2,
+ "~:hidden": false
+ },
+ "~:hidden": false,
+ "~:id": "~u199bd8a8-1f62-8077-8006-c09918f84a1b",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 8208.050176188757,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.4499969482421875,
+ "~:width": 795.38330078125,
+ "~:text-decoration": "rgb(156, 57, 255)",
+ "~:letter-spacing": "normal",
+ "~:x": -11011.00029707068,
+ "~:x1": 0,
+ "~:y2": 60.05000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#9c39ff",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 795.38330078125,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 62.5,
+ "~:text": "inner shadow + fill + blur + center stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:center",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -11011.00029707068,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#ee0c0c",
+ "~:opacity": 0.5
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:inner-shadow",
+ "~:blur": 2,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11011.00029707068,
+ "~:y": 8148.000173137,
+ "~:width": 795.9999673366547,
+ "~:height": 58.000003734226084,
+ "~:x1": -11011.00029707068,
+ "~:y1": 8148.000173137,
+ "~:x2": -10215.000329734024,
+ "~:y2": 8206.000176871226
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 58.000003734226084,
+ "~:flip-y": null
+ }
+ },
+ "~u199bd8a8-1f62-8077-8006-c099c4d01fb8": {
+ "~#shape": {
+ "~:y": 7893.000113364988,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:auto-width",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "h459uv2brp",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro",
+ "~:text": "drop shadow + no fill + inner stroke"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "left",
+ "~:font-id": "sourcesanspro",
+ "~:key": "1c7ib7rc046",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 701.0000560127901,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -11933.000132173522,
+ "~:y": 7893.000113364988
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11232.000076160732,
+ "~:y": 7893.000113364988
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11232.000076160732,
+ "~:y": 7951.000113650394
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -11933.000132173522,
+ "~:y": 7951.000113650394
+ }
+ }
+ ],
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:hidden": false,
+ "~:id": "~u199bd8a8-1f62-8077-8006-c099c4d01fb8",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": 7953.050116416745,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.4499969482421875,
+ "~:width": 700.9166870117188,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": -11933.000132173522,
+ "~:x1": 0,
+ "~:y2": 60.05000305175781,
+ "~:fills": [],
+ "~:x2": 700.9166870117188,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 62.5,
+ "~:text": "drop shadow + no fill + inner stroke"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#040cff",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -11933.000132173522,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#000000",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~ud50240ec-f763-80e3-8006-beef01c35b41",
+ "~:offset-x": 4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -11933.000132173522,
+ "~:y": 7893.000113364988,
+ "~:width": 701.0000560127901,
+ "~:height": 58.00000028540671,
+ "~:x1": -11933.000132173522,
+ "~:y1": 7893.000113364988,
+ "~:x2": -11232.000076160732,
+ "~:y2": 7951.000113650394
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": null,
+ "~:height": 58.00000028540671,
+ "~:flip-y": null
+ }
+ }
+ },
+ "~:id": "~u15b74473-2908-8094-8006-bdb4fbd2c6a4",
+ "~:name": "Page 1"
+ }
+ },
+ "~:id": "~u15b74473-2908-8094-8006-bdb4fbd2c6a3",
+ "~:options": {
+ "~:components-v2": true,
+ "~:base-font-size": "16px"
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontend/playwright/data/render-wasm/get-file-text-shadows-combination.json b/frontend/playwright/data/render-wasm/get-file-text-shadows-combination.json
new file mode 100644
index 0000000000..6214ef93cb
--- /dev/null
+++ b/frontend/playwright/data/render-wasm/get-file-text-shadows-combination.json
@@ -0,0 +1,905 @@
+{
+ "~:features": {
+ "~#set": [
+ "fdata/path-data",
+ "plugins/runtime",
+ "design-tokens/v1",
+ "variants/v1",
+ "layout/grid",
+ "styles/v2",
+ "fdata/objects-map",
+ "render-wasm/v1",
+ "components/v2",
+ "fdata/shape-data-type"
+ ]
+ },
+ "~:team-id": "~u6bd7c17d-4f59-815e-8006-5c1f6882469a",
+ "~:permissions": {
+ "~:type": "~:membership",
+ "~:is-owner": true,
+ "~:is-admin": true,
+ "~:can-edit": true,
+ "~:can-read": true,
+ "~:is-logged": true
+ },
+ "~:has-media-trimmed": false,
+ "~:comment-thread-seqn": 0,
+ "~:name": "New File 2",
+ "~:revn": 401,
+ "~:modified-at": "~m1757076417573",
+ "~:vern": 0,
+ "~:id": "~u15b74473-2908-8094-8006-bc90c3982c73",
+ "~:is-shared": false,
+ "~:migrations": {
+ "~#ordered-set": [
+ "legacy-2",
+ "legacy-3",
+ "legacy-5",
+ "legacy-6",
+ "legacy-7",
+ "legacy-8",
+ "legacy-9",
+ "legacy-10",
+ "legacy-11",
+ "legacy-12",
+ "legacy-13",
+ "legacy-14",
+ "legacy-16",
+ "legacy-17",
+ "legacy-18",
+ "legacy-19",
+ "legacy-25",
+ "legacy-26",
+ "legacy-27",
+ "legacy-28",
+ "legacy-29",
+ "legacy-31",
+ "legacy-32",
+ "legacy-33",
+ "legacy-34",
+ "legacy-36",
+ "legacy-37",
+ "legacy-38",
+ "legacy-39",
+ "legacy-40",
+ "legacy-41",
+ "legacy-42",
+ "legacy-43",
+ "legacy-44",
+ "legacy-45",
+ "legacy-46",
+ "legacy-47",
+ "legacy-48",
+ "legacy-49",
+ "legacy-50",
+ "legacy-51",
+ "legacy-52",
+ "legacy-53",
+ "legacy-54",
+ "legacy-55",
+ "legacy-56",
+ "legacy-57",
+ "legacy-59",
+ "legacy-62",
+ "legacy-65",
+ "legacy-66",
+ "legacy-67",
+ "0001-remove-tokens-from-groups",
+ "0002-normalize-bool-content-v2",
+ "0002-clean-shape-interactions",
+ "0003-fix-root-shape",
+ "0003-convert-path-content-v2",
+ "0004-clean-shadow-color",
+ "0005-deprecate-image-type",
+ "0006-fix-old-texts-fills",
+ "0007-clear-invalid-strokes-and-fills-v2",
+ "0008-fix-library-colors-v4",
+ "0009-clean-library-colors",
+ "0009-add-partial-text-touched-flags",
+ "0010-fix-swap-slots-pointing-non-existent-shapes"
+ ]
+ },
+ "~:version": 67,
+ "~:project-id": "~u6bd7c17d-4f59-815e-8006-5c1f68846e43",
+ "~:created-at": "~m1756728830560",
+ "~:data": {
+ "~:pages": [
+ "~u15b74473-2908-8094-8006-bc90c3982c74"
+ ],
+ "~:pages-index": {
+ "~u15b74473-2908-8094-8006-bc90c3982c74": {
+ "~:objects": {
+ "~u00000000-0000-0000-0000-000000000000": {
+ "~#shape": {
+ "~:y": 0,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:name": "Root Frame",
+ "~:width": 0.01,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 0,
+ "~:y": 0
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 0.01,
+ "~:y": 0
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 0.01,
+ "~:y": 0.01
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 0,
+ "~:y": 0.01
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:id": "~u00000000-0000-0000-0000-000000000000",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [],
+ "~:x": 0,
+ "~:proportion": 1,
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 0,
+ "~:y": 0,
+ "~:width": 0.01,
+ "~:height": 0.01,
+ "~:x1": 0,
+ "~:y1": 0,
+ "~:x2": 0.01,
+ "~:y2": 0.01
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#FFFFFF",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 0.01,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~u88db2850-996a-804f-8006-c063323d68a4",
+ "~uf94516f3-2d43-80b3-8006-c1b5c96d7dae",
+ "~uf94516f3-2d43-80b3-8006-c1b60a252bcf"
+ ]
+ }
+ },
+ "~u88db2850-996a-804f-8006-c063323d68a4": {
+ "~#shape": {
+ "~:y": -865.0000046417117,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:last-resize-direction": "~:horizontal",
+ "~:grow-type": "~:auto-height",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "23svy7uenp6",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro",
+ "~:text": "shadows with multiple strokes and no fill"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "center",
+ "~:font-id": "sourcesanspro",
+ "~:key": "e92bgu67k4",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 506.1299901710943,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -251.00000411998855,
+ "~:y": -865.0000046417117
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 255.12998605110573,
+ "~:y": -865.0000046417117
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 255.12998605110573,
+ "~:y": -749.0000040708983
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -251.00000411998855,
+ "~:y": -749.0000040708983
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:hidden": false,
+ "~:id": "~u88db2850-996a-804f-8006-c063323d68a4",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": -804.7000015899539,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.6999969482421875,
+ "~:width": 464.2166748046875,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": -230.05000717174636,
+ "~:x1": 20.949996948242188,
+ "~:y2": 60.30000305175781,
+ "~:fills": [],
+ "~:x2": 485.1666717529297,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": "shadows with multiple "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": -747.1000107452273,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 54.899993896484375,
+ "~:width": 354.3333435058594,
+ "~:text-decoration": "rgb(0, 0, 0)",
+ "~:letter-spacing": "normal",
+ "~:x": -175.10001022350417,
+ "~:x1": 75.89999389648438,
+ "~:y2": 117.89999389648438,
+ "~:fills": [],
+ "~:x2": 430.23333740234375,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": "strokes and no fill"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#00ff11",
+ "~:stroke-opacity": 1
+ },
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#ff00b1",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -251.00000411998855,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#7750e1",
+ "~:opacity": 0.4722222222222222
+ },
+ "~:spread": 0,
+ "~:offset-y": 10,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~uf94516f3-2d43-80b3-8006-c1b5b7323de5",
+ "~:offset-x": 10
+ },
+ {
+ "~:color": {
+ "~:color": "#559fe1",
+ "~:opacity": 0.7333333333333333
+ },
+ "~:spread": 0,
+ "~:offset-y": -10,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~u427eca67-5b7f-80e6-8006-c0a7398ff4b4",
+ "~:offset-x": -10
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -251.00000411998855,
+ "~:y": -865.0000046417117,
+ "~:width": 506.1299901710943,
+ "~:height": 116.00000057081343,
+ "~:x1": -251.00000411998855,
+ "~:y1": -865.0000046417117,
+ "~:x2": 255.12998605110573,
+ "~:y2": -749.0000040708983
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 116.00000057081343,
+ "~:flip-y": null
+ }
+ },
+ "~uf94516f3-2d43-80b3-8006-c1b5c96d7dae": {
+ "~#shape": {
+ "~:y": -723.9999884292483,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:last-resize-direction": "~:horizontal",
+ "~:grow-type": "~:auto-height",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "23svy7uenp6",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#214ccd",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro",
+ "~:text": "shadows with multiple strokes and solid fill"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "center",
+ "~:font-id": "sourcesanspro",
+ "~:key": "e92bgu67k4",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#214ccd",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 609.1300277709961,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -303.0000086630885,
+ "~:y": -723.9999884292483
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 306.1300191079076,
+ "~:y": -723.9999884292483
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 306.1300191079076,
+ "~:y": -607.9999878584349
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -303.0000086630885,
+ "~:y": -607.9999878584349
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:hidden": false,
+ "~:id": "~uf94516f3-2d43-80b3-8006-c1b5c96d7dae",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": -663.6999853774905,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.6999969482421875,
+ "~:width": 464.2166748046875,
+ "~:text-decoration": "rgb(33, 76, 205)",
+ "~:letter-spacing": "normal",
+ "~:x": -230.55001171484633,
+ "~:x1": 72.44999694824219,
+ "~:y2": 60.30000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#214ccd",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 536.6666717529297,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": "shadows with multiple "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": -606.099994532764,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 54.899993896484375,
+ "~:width": 398.8500061035156,
+ "~:text-decoration": "rgb(33, 76, 205)",
+ "~:letter-spacing": "normal",
+ "~:x": -197.8666773642604,
+ "~:x1": 105.13333129882812,
+ "~:y2": 117.89999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#214ccd",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:x2": 503.98333740234375,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": "strokes and solid fill"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 1,
+ "~:stroke-color": "#00ff11",
+ "~:stroke-opacity": 1
+ },
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 3,
+ "~:stroke-color": "#ff00b1",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": -303.0000086630885,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#7750e1",
+ "~:opacity": 0.4722222222222222
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~uf94516f3-2d43-80b3-8006-c1b5b7323de5",
+ "~:offset-x": 4
+ },
+ {
+ "~:color": {
+ "~:color": "#559fe1",
+ "~:opacity": 0.7333333333333333
+ },
+ "~:spread": 0,
+ "~:offset-y": -4,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~u427eca67-5b7f-80e6-8006-c0a7398ff4b4",
+ "~:offset-x": -4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -303.0000086630885,
+ "~:y": -723.9999884292483,
+ "~:width": 609.1300277709961,
+ "~:height": 116.00000057081343,
+ "~:x1": -303.0000086630885,
+ "~:y1": -723.9999884292483,
+ "~:x2": 306.1300191079076,
+ "~:y2": -607.9999878584349
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 116.00000057081343,
+ "~:flip-y": null
+ }
+ },
+ "~uf94516f3-2d43-80b3-8006-c1b60a252bcf": {
+ "~#shape": {
+ "~:y": -581.9999718032777,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:grow-type": "~:fixed",
+ "~:content": {
+ "~:type": "root",
+ "~:key": "1ygxrlda8tl",
+ "~:children": [
+ {
+ "~:type": "paragraph-set",
+ "~:children": [
+ {
+ "~:line-height": "1.2",
+ "~:font-style": "normal",
+ "~:children": [
+ {
+ "~:line-height": "",
+ "~:font-style": "normal",
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:font-id": "sourcesanspro",
+ "~:key": "23svy7uenp6",
+ "~:font-size": "48",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#ff7700",
+ "~:fill-opacity": 0.38333333333333336
+ }
+ ],
+ "~:font-family": "sourcesanspro",
+ "~:text": "shadows with multiple strokes and transparent fill"
+ }
+ ],
+ "~:typography-ref-id": null,
+ "~:text-transform": "none",
+ "~:text-align": "center",
+ "~:font-id": "sourcesanspro",
+ "~:key": "e92bgu67k4",
+ "~:font-size": "0",
+ "~:font-weight": "400",
+ "~:typography-ref-file": null,
+ "~:text-direction": "ltr",
+ "~:type": "paragraph",
+ "~:font-variant-id": "regular",
+ "~:text-decoration": "none",
+ "~:letter-spacing": "0",
+ "~:fills": [
+ {
+ "~:fill-color": "#ff7700",
+ "~:fill-opacity": 0.38333333333333336
+ }
+ ],
+ "~:font-family": "sourcesanspro"
+ }
+ ]
+ }
+ ],
+ "~:vertical-align": "top"
+ },
+ "~:hide-in-viewer": false,
+ "~:name": "Text",
+ "~:width": 753.1299834251404,
+ "~:type": "~:text",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": -374.99998553834683,
+ "~:y": -581.9999718032777
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 378.1299978867936,
+ "~:y": -581.9999718032777
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 378.1299978867936,
+ "~:y": -523.999971517871
+ }
+ },
+ {
+ "~#point": {
+ "~:x": -374.99998553834683,
+ "~:y": -523.999971517871
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:hidden": false,
+ "~:id": "~uf94516f3-2d43-80b3-8006-c1b60a252bcf",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:position-data": [
+ {
+ "~#rect": {
+ "~:y": -521.6999687515199,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": -2.6999969482421875,
+ "~:width": 706.3333740234375,
+ "~:text-decoration": "rgba(255, 119, 0, 0.383)",
+ "~:letter-spacing": "normal",
+ "~:x": -351.5999916418624,
+ "~:x1": 23.399993896484375,
+ "~:y2": 60.30000305175781,
+ "~:fills": [
+ {
+ "~:fill-color": "#ff7700",
+ "~:fill-opacity": 0.38333333333333336
+ }
+ ],
+ "~:x2": 729.7333679199219,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": "shadows with multiple strokes and "
+ }
+ },
+ {
+ "~#rect": {
+ "~:y": -464.09997790679336,
+ "~:font-style": "normal",
+ "~:text-transform": "none",
+ "~:font-size": "48px",
+ "~:font-weight": "400",
+ "~:y1": 54.899993896484375,
+ "~:width": 295.48333740234375,
+ "~:text-decoration": "rgba(255, 119, 0, 0.383)",
+ "~:letter-spacing": "normal",
+ "~:x": -146.18331988893272,
+ "~:x1": 228.81666564941406,
+ "~:y2": 117.89999389648438,
+ "~:fills": [
+ {
+ "~:fill-color": "#ff7700",
+ "~:fill-opacity": 0.38333333333333336
+ }
+ ],
+ "~:x2": 524.3000030517578,
+ "~:direction": "ltr",
+ "~:font-family": "\"sourcesanspro\"",
+ "~:height": 63,
+ "~:text": "transparent fill"
+ }
+ }
+ ],
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 3,
+ "~:stroke-color": "#ff00b0",
+ "~:stroke-opacity": 0.37222222222222223
+ }
+ ],
+ "~:x": -374.9999855383468,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#00fb08",
+ "~:opacity": 1
+ },
+ "~:spread": 0,
+ "~:offset-y": 4,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~uf94516f3-2d43-80b3-8006-c1b5b7323de5",
+ "~:offset-x": 4
+ },
+ {
+ "~:color": {
+ "~:color": "#559fe1",
+ "~:opacity": 0.7333333333333333
+ },
+ "~:spread": 0,
+ "~:offset-y": -4,
+ "~:style": "~:drop-shadow",
+ "~:blur": 0,
+ "~:hidden": false,
+ "~:id": "~u427eca67-5b7f-80e6-8006-c0a7398ff4b4",
+ "~:offset-x": -4
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": -374.9999855383468,
+ "~:y": -581.9999718032777,
+ "~:width": 753.1299834251404,
+ "~:height": 58.00000028540671,
+ "~:x1": -374.9999855383468,
+ "~:y1": -581.9999718032777,
+ "~:x2": 378.1299978867936,
+ "~:y2": -523.999971517871
+ }
+ },
+ "~:flip-x": null,
+ "~:height": 58.00000028540671,
+ "~:flip-y": null
+ }
+ }
+ },
+ "~:id": "~u15b74473-2908-8094-8006-bc90c3982c74",
+ "~:name": "Page 1"
+ }
+ },
+ "~:id": "~u15b74473-2908-8094-8006-bc90c3982c73",
+ "~:options": {
+ "~:components-v2": true,
+ "~:base-font-size": "16px"
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontend/playwright/data/render-wasm/get-file-text-shadows-order.json b/frontend/playwright/data/render-wasm/get-file-text-shadows-order.json
new file mode 100644
index 0000000000..d5933c9689
--- /dev/null
+++ b/frontend/playwright/data/render-wasm/get-file-text-shadows-order.json
@@ -0,0 +1,130 @@
+{
+ "~:features": {
+ "~#set": [
+ "fdata/path-data",
+ "plugins/runtime",
+ "design-tokens/v1",
+ "variants/v1",
+ "layout/grid",
+ "styles/v2",
+ "fdata/objects-map",
+ "render-wasm/v1",
+ "components/v2",
+ "fdata/shape-data-type"
+ ]
+ },
+ "~:team-id": "~u6bd7c17d-4f59-815e-8006-5c1f6882469a",
+ "~:permissions": {
+ "~:type": "~:membership",
+ "~:is-owner": true,
+ "~:is-admin": true,
+ "~:can-edit": true,
+ "~:can-read": true,
+ "~:is-logged": true
+ },
+ "~:has-media-trimmed": false,
+ "~:comment-thread-seqn": 0,
+ "~:name": "test_shadows_order",
+ "~:revn": 13,
+ "~:modified-at": "~m1759415785228",
+ "~:vern": 0,
+ "~:id": "~u48ffa82f-6950-81b5-8006-e49a2a39657f",
+ "~:is-shared": false,
+ "~:migrations": {
+ "~#ordered-set": [
+ "legacy-2",
+ "legacy-3",
+ "legacy-5",
+ "legacy-6",
+ "legacy-7",
+ "legacy-8",
+ "legacy-9",
+ "legacy-10",
+ "legacy-11",
+ "legacy-12",
+ "legacy-13",
+ "legacy-14",
+ "legacy-16",
+ "legacy-17",
+ "legacy-18",
+ "legacy-19",
+ "legacy-25",
+ "legacy-26",
+ "legacy-27",
+ "legacy-28",
+ "legacy-29",
+ "legacy-31",
+ "legacy-32",
+ "legacy-33",
+ "legacy-34",
+ "legacy-36",
+ "legacy-37",
+ "legacy-38",
+ "legacy-39",
+ "legacy-40",
+ "legacy-41",
+ "legacy-42",
+ "legacy-43",
+ "legacy-44",
+ "legacy-45",
+ "legacy-46",
+ "legacy-47",
+ "legacy-48",
+ "legacy-49",
+ "legacy-50",
+ "legacy-51",
+ "legacy-52",
+ "legacy-53",
+ "legacy-54",
+ "legacy-55",
+ "legacy-56",
+ "legacy-57",
+ "legacy-59",
+ "legacy-62",
+ "legacy-65",
+ "legacy-66",
+ "legacy-67",
+ "0001-remove-tokens-from-groups",
+ "0002-normalize-bool-content-v2",
+ "0002-clean-shape-interactions",
+ "0003-fix-root-shape",
+ "0003-convert-path-content-v2",
+ "0004-clean-shadow-color",
+ "0005-deprecate-image-type",
+ "0006-fix-old-texts-fills",
+ "0007-clear-invalid-strokes-and-fills-v2",
+ "0008-fix-library-colors-v4",
+ "0009-clean-library-colors",
+ "0009-add-partial-text-touched-flags",
+ "0010-fix-swap-slots-pointing-non-existent-shapes",
+ "0011-fix-invalid-text-touched-flags",
+ "0012-fix-position-data"
+ ]
+ },
+ "~:version": 67,
+ "~:project-id": "~u6bd7c17d-4f59-815e-8006-5c1f68846e43",
+ "~:created-at": "~m1759415649509",
+ "~:data": {
+ "~:pages": [
+ "~u48ffa82f-6950-81b5-8006-e49a2a396580"
+ ],
+ "~:pages-index": {
+ "~u48ffa82f-6950-81b5-8006-e49a2a396580": {
+ "~:objects": {
+ "~#penpot/objects-map/v2": {
+ "~u00000000-0000-0000-0000-000000000000": "[\"~#shape\",[\"^ \",\"~:y\",0,\"~:hide-fill-on-export\",false,\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:rotation\",0,\"~:name\",\"Root Frame\",\"~:width\",0.01,\"~:type\",\"~:frame\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",0.0,\"~:y\",0.0]],[\"^:\",[\"^ \",\"~:x\",0.01,\"~:y\",0.0]],[\"^:\",[\"^ \",\"~:x\",0.01,\"~:y\",0.01]],[\"^:\",[\"^ \",\"~:x\",0.0,\"~:y\",0.01]]],\"~:r2\",0,\"~:proportion-lock\",false,\"~:transform-inverse\",[\"^3\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:r3\",0,\"~:r1\",0,\"~:id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[],\"~:x\",0,\"~:proportion\",1.0,\"~:r4\",0,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",0,\"~:y\",0,\"^6\",0.01,\"~:height\",0.01,\"~:x1\",0,\"~:y1\",0,\"~:x2\",0.01,\"~:y2\",0.01]],\"~:fills\",[[\"^ \",\"~:fill-color\",\"#FFFFFF\",\"~:fill-opacity\",1]],\"~:flip-x\",null,\"^H\",0.01,\"~:flip-y\",null,\"~:shapes\",[\"~uae1a2ead-2994-80a4-8006-e49a2b880688\",\"~uae1a2ead-2994-80a4-8006-e49a3c230916\"]]]",
+ "~uae1a2ead-2994-80a4-8006-e49a2b880688": "[\"~#shape\",[\"^ \",\"~:y\",483.4820356242563,\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",0.9788217705787964,\"~:b\",0.20471429222452875,\"~:c\",-0.20471415002509374,\"~:d\",0.9788218003188844,\"~:e\",0.0,\"~:f\",-9.094947017729282E-13]],\"~:rotation\",11.812776963021975,\"~:last-resize-direction\",\"horizontal\",\"~:grow-type\",\"~:fixed\",\"~:content\",[\"^ \",\"~:type\",\"root\",\"~:key\",\"1e7hxl490w2\",\"~:children\",[[\"^ \",\"^8\",\"paragraph-set\",\"^:\",[[\"^ \",\"~:line-height\",\"1.2\",\"~:font-style\",\"normal\",\"^:\",[[\"^ \",\"^;\",\"\",\"^<\",\"normal\",\"~:text-transform\",\"uppercase\",\"~:font-id\",\"gfont-seymour-one\",\"^9\",\"1q0daub9a4o\",\"~:font-size\",\"72\",\"~:font-weight\",\"400\",\"~:font-variant-id\",\"regular\",\"~:text-decoration\",\"none\",\"~:letter-spacing\",\"-10\",\"~:fills\",[[\"^ \",\"~:fill-color\",\"#80ffdb\",\"~:fill-opacity\",1]],\"~:font-family\",\"Seymour One\",\"~:text\",\"hello world\"]],\"^=\",\"uppercase\",\"~:text-align\",\"center\",\"^>\",\"gfont-seymour-one\",\"^9\",\"1njiv0webbj\",\"^?\",\"0\",\"^@\",\"400\",\"~:text-direction\",\"ltr\",\"^8\",\"paragraph\",\"^A\",\"regular\",\"^B\",\"none\",\"^C\",\"-10\",\"^D\",[[\"^ \",\"^E\",\"#80ffdb\",\"^F\",1]],\"^G\",\"Seymour One\"]]]],\"~:vertical-align\",\"top\"],\"~:hide-in-viewer\",false,\"~:name\",\"Text\",\"~:width\",696.7786469812631,\"^8\",\"^H\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",642.8707961222883,\"~:y\",415.00002146255576]],[\"^P\",[\"^ \",\"~:x\",1324.8929050619865,\"~:y\",557.6405690164898]],[\"^P\",[\"^ \",\"~:x\",1270.0221499044503,\"~:y\",820.0000167712013]],[\"^P\",[\"^ \",\"~:x\",588.0000409647498,\"~:y\",677.359469217266]]],\"~:layout-item-h-sizing\",\"~:fix\",\"~:transform-inverse\",[\"^2\",[\"^ \",\"~:a\",0.9788218003188955,\"~:b\",-0.20471429222453108,\"~:c\",0.20471415002509608,\"~:d\",0.9788217705788075,\"~:e\",1.8618643482577324E-13,\"~:f\",8.902332143214221E-13]],\"~:page-id\",\"~uca00b4e9-7831-806e-8006-e483daa11f18\",\"~:layout-item-v-sizing\",\"^R\",\"~:id\",\"~uae1a2ead-2994-80a4-8006-e49a2b880688\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:position-data\",[[\"~#rect\",[\"^ \",\"~:y\",550.8231760071114,\"^<\",\"normal\",\"^=\",\"uppercase\",\"^?\",\"72px\",\"^@\",\"400\",\"~:y1\",-2.3000030517578125,\"^N\",339.1499938964844,\"^B\",\"none\",\"^C\",\"-10px\",\"~:x\",689.2688958782501,\"~:x1\",69.91667175292969,\"~:y2\",88.69999694824219,\"^D\",[[\"^ \",\"^E\",\"#80ffdb\",\"^F\",1]],\"~:x2\",409.06666564941406,\"~:direction\",\"ltr\",\"^G\",\"\\\"Seymour One\\\"\",\"~:height\",91,\"^H\",\"hello \"]],[\"^Y\",[\"^ \",\"~:y\",637.2231851623849,\"^<\",\"normal\",\"^=\",\"uppercase\",\"^?\",\"72px\",\"^@\",\"400\",\"^Z\",84.10000610351562,\"^N\",380.4666748046875,\"^B\",\"none\",\"^C\",\"-10px\",\"~:x\",668.6188867229766,\"^[\",49.26666259765625,\"^10\",175.10000610351562,\"^D\",[[\"^ \",\"^E\",\"#80ffdb\",\"^F\",1]],\"^11\",429.73333740234375,\"^12\",\"ltr\",\"^G\",\"\\\"Seymour One\\\"\",\"^13\",91,\"^H\",\"world\"]]],\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[],\"~:x\",608.0571495227366,\"~:shadow\",[[\"^ \",\"^V\",\"~u68cfab5e-652d-8097-8006-e488b9656709\",\"~:style\",\"~:drop-shadow\",\"~:color\",[\"^ \",\"~:opacity\",1,\"^19\",\"#64dfdf\"],\"~:offset-x\",4,\"~:offset-y\",4,\"~:blur\",0,\"~:spread\",0,\"~:hidden\",false],[\"^ \",\"^V\",\"~u68cfab5e-652d-8097-8006-e4890c135b3b\",\"^17\",\"^18\",\"^19\",[\"^ \",\"^1:\",1,\"^19\",\"#56cfe1\"],\"^1;\",6,\"^1<\",8,\"^1=\",0,\"^1>\",0,\"^1?\",false],[\"^ \",\"^V\",\"~u68cfab5e-652d-8097-8006-e4894e9ec462\",\"^17\",\"^18\",\"^19\",[\"^ \",\"^1:\",1,\"^19\",\"#5390d9\"],\"^1;\",4,\"^1<\",12,\"^1=\",0,\"^1>\",0,\"^1?\",false],[\"^ \",\"^V\",\"~u68cfab5e-652d-8097-8006-e4898979e7f9\",\"^17\",\"^18\",\"^19\",[\"^ \",\"^1:\",1,\"^19\",\"#5e60ce\"],\"^1;\",2,\"^1<\",16,\"^1=\",0,\"^1>\",0,\"^1?\",false],[\"^ \",\"^V\",\"~u68cfab5e-652d-8097-8006-e489ba59dbd0\",\"^17\",\"^18\",\"^19\",[\"^ \",\"^1:\",1,\"^19\",\"#6930c3\"],\"^1;\",0,\"^1<\",20,\"^1=\",0,\"^1>\",0,\"^1?\",false]],\"~:selrect\",[\"^Y\",[\"^ \",\"~:x\",608.0571495227366,\"~:y\",483.4820356242563,\"^N\",696.7786469812631,\"^13\",268.03596698524456,\"^[\",608.0571495227366,\"^Z\",483.4820356242563,\"^11\",1304.8357965039997,\"^10\",751.5180026095009]],\"^D\",[],\"~:flip-x\",null,\"^13\",268.03596698524456,\"~:flip-y\",null]]",
+ "~uae1a2ead-2994-80a4-8006-e49a3c230916": "[\"~#shape\",[\"^ \",\"~:y\",574.6013159890737,\"~:transform\",[\"~#matrix\",[\"^ \",\"~:a\",0.8985240774403216,\"~:b\",-0.4389242329377807,\"~:c\",0.4389243127700668,\"~:d\",0.8985240384426714,\"~:e\",-2.5011104298755527E-12,\"~:f\",1.1937117960769683E-12]],\"~:rotation\",333.964740304884,\"~:last-resize-direction\",\"horizontal\",\"~:grow-type\",\"~:auto-height\",\"~:content\",[\"^ \",\"~:type\",\"root\",\"~:key\",\"1e7hxl490w2\",\"~:children\",[[\"^ \",\"^8\",\"paragraph-set\",\"^:\",[[\"^ \",\"~:line-height\",\"1.2\",\"~:font-style\",\"normal\",\"^:\",[[\"^ \",\"^;\",\"\",\"^<\",\"normal\",\"~:text-transform\",\"uppercase\",\"~:font-id\",\"gfont-seymour-one\",\"^9\",\"1q0daub9a4o\",\"~:font-size\",\"72\",\"~:font-weight\",\"400\",\"~:font-variant-id\",\"regular\",\"~:text-decoration\",\"none\",\"~:letter-spacing\",\"-10\",\"~:fills\",[[\"^ \",\"~:fill-color\",\"#80ffdb\",\"~:fill-opacity\",1]],\"~:font-family\",\"Seymour One\",\"~:text\",\"hello world\"]],\"^=\",\"uppercase\",\"~:text-align\",\"center\",\"^>\",\"gfont-seymour-one\",\"^9\",\"1njiv0webbj\",\"^?\",\"0\",\"^@\",\"400\",\"~:text-direction\",\"ltr\",\"^8\",\"paragraph\",\"^A\",\"regular\",\"^B\",\"none\",\"^C\",\"-10\",\"^D\",[[\"^ \",\"^E\",\"#80ffdb\",\"^F\",1]],\"^G\",\"Seymour One\"]]]],\"~:vertical-align\",\"top\"],\"~:hide-in-viewer\",false,\"~:name\",\"Text\",\"~:width\",697.0002208799245,\"^8\",\"^H\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",186.99991883808582,\"~:y\",731.9301311484297]],[\"^P\",[\"^ \",\"~:x\",813.2711110149318,\"~:y\",425.9999446754641]],[\"^P\",[\"^ \",\"~:x\",851.0186650659188,\"~:y\",503.27315214029437]],[\"^P\",[\"^ \",\"~:x\",224.74747288907042,\"~:y\",809.2033386132608]]],\"~:layout-item-h-sizing\",\"~:fix\",\"~:transform-inverse\",[\"^2\",[\"^ \",\"~:a\",0.8985240384426737,\"~:b\",0.4389242329377818,\"~:c\",-0.43892431277006794,\"~:d\",0.8985240774403239,\"~:e\",2.77125697378148E-12,\"~:f\",2.5219186626122624E-14]],\"~:page-id\",\"~uca00b4e9-7831-806e-8006-e483daa11f18\",\"~:layout-item-v-sizing\",\"^R\",\"~:id\",\"~uae1a2ead-2994-80a4-8006-e49a3c230916\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:position-data\",[[\"~#rect\",[\"^ \",\"~:y\",632.821684222062,\"^<\",\"normal\",\"^=\",\"uppercase\",\"^?\",\"72px\",\"^@\",\"400\",\"~:y1\",-2.3000030517578125,\"^N\",339.1499938964844,\"^B\",\"none\",\"^C\",\"-10px\",\"~:x\",291.2682359356231,\"~:x1\",69.91667175292969,\"~:y2\",88.69999694824219,\"^D\",[[\"^ \",\"^E\",\"#80ffdb\",\"^F\",1]],\"~:x2\",409.06666564941406,\"~:direction\",\"ltr\",\"^G\",\"\\\"Seymour One\\\"\",\"~:height\",91,\"^H\",\"hello \"]],[\"^Y\",[\"^ \",\"~:y\",719.2216933773354,\"^<\",\"normal\",\"^=\",\"uppercase\",\"^?\",\"72px\",\"^@\",\"400\",\"^Z\",84.10000610351562,\"^N\",380.4666748046875,\"^B\",\"none\",\"^C\",\"-10px\",\"~:x\",270.6182267803497,\"^[\",49.26666259765625,\"^10\",175.10000610351562,\"^D\",[[\"^ \",\"^E\",\"#80ffdb\",\"^F\",1]],\"^11\",429.73333740234375,\"^12\",\"ltr\",\"^G\",\"\\\"Seymour One\\\"\",\"^13\",91,\"^H\",\"world\"]]],\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[],\"~:x\",170.50918151203996,\"~:shadow\",[[\"^ \",\"^V\",\"~u68cfab5e-652d-8097-8006-e488b9656709\",\"~:style\",\"~:inner-shadow\",\"~:color\",[\"^ \",\"~:opacity\",1,\"^19\",\"#64dfdf\"],\"~:offset-x\",8,\"~:offset-y\",12,\"~:blur\",0,\"~:spread\",0,\"~:hidden\",false],[\"^ \",\"^V\",\"~u68cfab5e-652d-8097-8006-e4890c135b3b\",\"^17\",\"^18\",\"^19\",[\"^ \",\"^1:\",1,\"^19\",\"#56cfe1\"],\"^1;\",6,\"^1<\",10,\"^1=\",0,\"^1>\",0,\"^1?\",false],[\"^ \",\"^V\",\"~u68cfab5e-652d-8097-8006-e4894e9ec462\",\"^17\",\"^18\",\"^19\",[\"^ \",\"^1:\",1,\"^19\",\"#5390d9\"],\"^1;\",4,\"^1<\",12,\"^1=\",0,\"^1>\",0,\"^1?\",false],[\"^ \",\"^V\",\"~u68cfab5e-652d-8097-8006-e4898979e7f9\",\"^17\",\"^18\",\"^19\",[\"^ \",\"^1:\",1,\"^19\",\"#5e60ce\"],\"^1;\",4,\"^1<\",8,\"^1=\",0,\"^1>\",0,\"^1?\",false],[\"^ \",\"^V\",\"~u68cfab5e-652d-8097-8006-e489ba59dbd0\",\"^17\",\"^18\",\"^19\",[\"^ \",\"^1:\",1,\"^19\",\"#6930c3\"],\"^1;\",4,\"^1<\",4,\"^1=\",0,\"^1>\",0,\"^1?\",false]],\"~:selrect\",[\"^Y\",[\"^ \",\"~:x\",170.50918151203996,\"~:y\",574.6013159890737,\"^N\",697.0002208799245,\"^13\",86.00065131057738,\"^[\",170.50918151203996,\"^Z\",574.6013159890737,\"^11\",867.5094023919645,\"^10\",660.601967299651]],\"^D\",[],\"~:flip-x\",null,\"^13\",86.00065131057738,\"~:flip-y\",null]]"
+ }
+ },
+ "~:id": "~u48ffa82f-6950-81b5-8006-e49a2a396580",
+ "~:name": "Page 1"
+ }
+ },
+ "~:id": "~u48ffa82f-6950-81b5-8006-e49a2a39657f",
+ "~:options": {
+ "~:components-v2": true,
+ "~:base-font-size": "16px"
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontend/playwright/data/render-wasm/get-subpath-stroke-shadow.json b/frontend/playwright/data/render-wasm/get-subpath-stroke-shadow.json
new file mode 100644
index 0000000000..fe83df6227
--- /dev/null
+++ b/frontend/playwright/data/render-wasm/get-subpath-stroke-shadow.json
@@ -0,0 +1,567 @@
+{
+ "~:features": {
+ "~#set": [
+ "fdata/path-data",
+ "plugins/runtime",
+ "design-tokens/v1",
+ "variants/v1",
+ "layout/grid",
+ "styles/v2",
+ "fdata/objects-map",
+ "render-wasm/v1",
+ "components/v2",
+ "fdata/shape-data-type"
+ ]
+ },
+ "~:team-id": "~u6bd7c17d-4f59-815e-8006-5c1f6882469a",
+ "~:permissions": {
+ "~:type": "~:membership",
+ "~:is-owner": true,
+ "~:is-admin": true,
+ "~:can-edit": true,
+ "~:can-read": true,
+ "~:is-logged": true
+ },
+ "~:has-media-trimmed": false,
+ "~:comment-thread-seqn": 0,
+ "~:name": "small_closed_path",
+ "~:revn": 25,
+ "~:modified-at": "~m1758717395171",
+ "~:vern": 0,
+ "~:id": "~u3f7c3cc4-556d-80fa-8006-da2505231c2b",
+ "~:is-shared": false,
+ "~:migrations": {
+ "~#ordered-set": [
+ "legacy-2",
+ "legacy-3",
+ "legacy-5",
+ "legacy-6",
+ "legacy-7",
+ "legacy-8",
+ "legacy-9",
+ "legacy-10",
+ "legacy-11",
+ "legacy-12",
+ "legacy-13",
+ "legacy-14",
+ "legacy-16",
+ "legacy-17",
+ "legacy-18",
+ "legacy-19",
+ "legacy-25",
+ "legacy-26",
+ "legacy-27",
+ "legacy-28",
+ "legacy-29",
+ "legacy-31",
+ "legacy-32",
+ "legacy-33",
+ "legacy-34",
+ "legacy-36",
+ "legacy-37",
+ "legacy-38",
+ "legacy-39",
+ "legacy-40",
+ "legacy-41",
+ "legacy-42",
+ "legacy-43",
+ "legacy-44",
+ "legacy-45",
+ "legacy-46",
+ "legacy-47",
+ "legacy-48",
+ "legacy-49",
+ "legacy-50",
+ "legacy-51",
+ "legacy-52",
+ "legacy-53",
+ "legacy-54",
+ "legacy-55",
+ "legacy-56",
+ "legacy-57",
+ "legacy-59",
+ "legacy-62",
+ "legacy-65",
+ "legacy-66",
+ "legacy-67",
+ "0001-remove-tokens-from-groups",
+ "0002-normalize-bool-content-v2",
+ "0002-clean-shape-interactions",
+ "0003-fix-root-shape",
+ "0003-convert-path-content-v2",
+ "0004-clean-shadow-color",
+ "0005-deprecate-image-type",
+ "0006-fix-old-texts-fills",
+ "0007-clear-invalid-strokes-and-fills-v2",
+ "0008-fix-library-colors-v4",
+ "0009-clean-library-colors",
+ "0009-add-partial-text-touched-flags",
+ "0010-fix-swap-slots-pointing-non-existent-shapes",
+ "0011-fix-invalid-text-touched-flags"
+ ]
+ },
+ "~:version": 67,
+ "~:project-id": "~uf084c276-e46f-8168-8006-ce89321fde44",
+ "~:created-at": "~m1758713852044",
+ "~:data": {
+ "~:pages": [
+ "~u3f7c3cc4-556d-80fa-8006-da2505231c2c"
+ ],
+ "~:pages-index": {
+ "~u3f7c3cc4-556d-80fa-8006-da2505231c2c": {
+ "~:objects": {
+ "~u00000000-0000-0000-0000-000000000000": {
+ "~#shape": {
+ "~:y": 0,
+ "~:hide-fill-on-export": false,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:name": "Root Frame",
+ "~:width": 0.01,
+ "~:type": "~:frame",
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 0,
+ "~:y": 0
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 0.01,
+ "~:y": 0
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 0.01,
+ "~:y": 0.01
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 0,
+ "~:y": 0.01
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:id": "~u00000000-0000-0000-0000-000000000000",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [],
+ "~:x": 0,
+ "~:proportion": 1,
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 0,
+ "~:y": 0,
+ "~:width": 0.01,
+ "~:height": 0.01,
+ "~:x1": 0,
+ "~:y1": 0,
+ "~:x2": 0.01,
+ "~:y2": 0.01
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#FFFFFF",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 0.01,
+ "~:flip-y": null,
+ "~:shapes": [
+ "~ue758a369-49fb-801a-8006-da250da25b70"
+ ]
+ }
+ },
+ "~ue758a369-49fb-801a-8006-da250da25b70": {
+ "~#shape": {
+ "~:y": 289.0000254924257,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:name": "test",
+ "~:width": 1269.396990548183,
+ "~:type": "~:group",
+ "~:svg-attrs": {
+ "~:width": "36.938",
+ "~:height": "39.605"
+ },
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 15.99999664735742,
+ "~:y": 289.0000254924257
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1285.3969871955405,
+ "~:y": 289.0000254924257
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1285.3969871955405,
+ "~:y": 1473.2282874172934
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 15.99999664735742,
+ "~:y": 1473.2282874172934
+ }
+ }
+ ],
+ "~:layout-item-h-sizing": "~:fix",
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:layout-item-v-sizing": "~:fix",
+ "~:id": "~ue758a369-49fb-801a-8006-da250da25b70",
+ "~:parent-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [],
+ "~:x": 15.99999664735742,
+ "~:proportion": 1,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 15.99999664735742,
+ "~:y": 289.0000254924257,
+ "~:width": 1269.396990548183,
+ "~:height": 1184.2282619248676,
+ "~:x1": 15.99999664735742,
+ "~:y1": 289.0000254924257,
+ "~:x2": 1285.3969871955405,
+ "~:y2": 1473.2282874172934
+ }
+ },
+ "~:fills": [],
+ "~:flip-x": false,
+ "~:height": 1184.2282619248676,
+ "~:flip-y": false,
+ "~:shapes": [
+ "~ue758a369-49fb-801a-8006-da250da460cc",
+ "~ue758a369-49fb-801a-8006-da250da8073d"
+ ]
+ }
+ },
+ "~ue758a369-49fb-801a-8006-da250da460cc": {
+ "~#shape": {
+ "~:y": 289.00001521099387,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:name": "base-background",
+ "~:width": 1269.3871566880562,
+ "~:type": "~:rect",
+ "~:svg-attrs": {
+ "~:fill": "none",
+ "~:id": "base-background"
+ },
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 15.99999664735742,
+ "~:y": 289.000015210994
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1285.3871533354136,
+ "~:y": 289.000015210994
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1285.3871533354136,
+ "~:y": 1473.2279626015984
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 15.99999664735742,
+ "~:y": 1473.2279626015984
+ }
+ }
+ ],
+ "~:r2": 0,
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:r3": 0,
+ "~:r1": 0,
+ "~:hidden": true,
+ "~:id": "~ue758a369-49fb-801a-8006-da250da460cc",
+ "~:parent-id": "~ue758a369-49fb-801a-8006-da250da25b70",
+ "~:svg-viewbox": {
+ "~#rect": {
+ "~:x": 0,
+ "~:y": 0,
+ "~:width": 9.773,
+ "~:height": 10.479,
+ "~:x1": 0,
+ "~:y1": 0,
+ "~:x2": 9.773,
+ "~:y2": 10.479
+ }
+ },
+ "~:svg-defs": {},
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 10,
+ "~:stroke-color": "#cd0e8f",
+ "~:stroke-opacity": 1
+ },
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 10,
+ "~:stroke-color": "#0c31e0",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": 15.99999664735742,
+ "~:proportion": 1,
+ "~:r4": 0,
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 15.99999664735742,
+ "~:y": 289.00001521099387,
+ "~:width": 1269.3871566880562,
+ "~:height": 1184.2279473906046,
+ "~:x1": 15.99999664735742,
+ "~:y1": 289.00001521099387,
+ "~:x2": 1285.3871533354136,
+ "~:y2": 1473.2279626015984
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#5dde7f",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": 1184.2279473906046,
+ "~:flip-y": null
+ }
+ },
+ "~ue758a369-49fb-801a-8006-da250da8073d": {
+ "~#shape": {
+ "~:y": null,
+ "~:transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:rotation": 0,
+ "~:content": {
+ "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAADjUdRDEjSzRAMAAACCMVxDcLSoRNAmHELOeoxEwOGYQedsaEQDAAAAoJ8sQdsdVERgfotBn4tMRKCcckIpujJEAwAAAEISE0MUMv5DcbaDQ/I0qkMFm6tDvp6XQwMAAABdgM5DUnmIQ0vk80MGbZFDZuQNRK4ns0MDAAAANqYnRLiG3kNs9i9ERsH6Q8p4LUR7ng9EAwAAABz6KkSnEx5EdDksRLdzH0Rkn1FECwFGRAMAAABgLHtEn/9vRA3pgETb0HREhkKKRNvQdEQDAAAAosOXRNvQdERoGaZEFjGTRO+dnkSKhJ1EAwAAAFd2mkTiXqNErPB0RDjLsERkn1FEZGi0RAMAAABALSBEar65RJg/B0ROZrlE41HUQxI0s0QCAAAAAAAAAAAAAAAAAAAAAAAAAONR1EMSNLNEAQAAAAAAAAAAAAAAAAAAAAAAAAD2l1tEbOauRAMAAABXFIBEHEGqRNi5lkRWaZ9En4CbRP7emEQDAAAA/9OeRJSRlETvnZ5EKLWTRCnXmUS49otEAwAAALI6lESAU4JEYIGLRBXidkSzJIdEbft5RAMAAADUr4VEGQN7RGgogkQ1q3pEPn5+RBtCeEQDAAAAfBx0RNvQdES+/iVE5GYoRL7+JUTnhCFEAwAAAL7+JUS3cx9ETlQkRFC7HUSu1iFEULsdRAMAAAAIVx9EULsdRJSuHURZORhEuhgeRD+vEUQDAAAAzIMeRCSjBUTMgx5EJKMFRK7WIUTllQ5EAwAAAHi+JEQciRdEmCglRNnYFkSqkiVE4XQKRAMAAAC+/iVE3CD8Q+SqIkSyzPFDZuQNRAqQykMDAAAApW/iQwwtlEOhA8xDyluPQ91Io0Os6LVDAwAAAMeKhENEI9JDtmEgQ7YPE0RcLrVC9fQ5RAMAAACQc1FCJUxPRKAbMEJ551dEkHNRQktkZ0QDAAAAxOWTQvJQh0Rmem5DUiqiRFVXykPAqaxEAwAAAGBqBkTSRLVELH8jROTItUT2l1tEbOauRAIAAAAAAAAAAAAAAAAAAAAAAAAA9pdbRGzmrkQBAAAAAAAAAAAAAAAAAAAAAAAAAL0W7kMIK41EAwAAACtP2UMgvIREbTT8Q9HyeETA4BJE53x/RAMAAAA+cBxECKOBRJSuHURkq4JEXNkcRJ7diEQDAAAABpsbROiTj0SqXBpE+BeQRLxmC0RGnJBEAwAAAN3e/UNWIJFEu471QyhEkES9Fu5DCCuNRAIAAAAAAAAAAAAAAAAAAAAAAAAAvRbuQwgrjUQBAAAAAAAAAAAAAAAAAAAAAAAAAEj0FERKaopEAwAAAGQcGUQkLYhEZBwZRKLMhkRI9BREILyERAMAAABQeg1E4pqARPTABET2HoFEB7P+Q4DEhUQDAAAA7WT2Q57diEQlN/dD7hGKRMwtAERqcotEAwAAAPJ8CEQar41EwiQPRGaDjURI9BREDGqKRAIAAAAAAAAAAAAAAAAAAAAAAAAASPQURAxqikQBAAAAAAAAAAAAAAAAAAAAAAAAACaTRUSBtGZEAwAAAJgoJUQBYkdElK4dRC9mPUSUrh1EKboyRAMAAACUrh1EoTgtRBjDH0QhmS5EPusjRPgzN0QDAAAA0LopRCnoQkTecFdEv8hzROBlZkTLdH5EAwAAAPaOakTUxoBEGPhqRAijgUQqpGdEJvuBRAMAAACKJmVEJvuBRHTHVUQV4nZEJpNFRIG0ZkQCAAAAAAAAAAAAAAAAAAAAAAAAACaTRUSBtGZEAQAAAAAAAAAAAAAAAAAAAAAAAADNKtBDiFsHRAMAAADt1cxDzEoFRFN+zkMNeQBEp33TQ5gQ+kMDAAAAxc3bQ65L7EPFzdtDrkvsQwWi3EOYEPpDAwAAAAWi3EMNeQBEN8vgQw46A0SDxOVDDjoDRAMAAADfwepDDjoDRE9s7EPMSgVEmevpQ4hbB0QDAAAApW/iQ+PUC0RzztZD49QLRM0q0EOIWwdEAgAAAAAAAAAAAAAAAAAAAAAAAADNKtBDiFsHRAEAAAAAAAAAAAAAAAAAAAAAAAAAN/LkQ7BO90MDAAAAN/LkQ2598kNNGelDsszxQ70W7kPs3fNDAwAAAOU78kOwTvdD7WT2Q5gQ+kPtZPZD3CD8QwMAAADtZPZDFDL+Q+U78kPg4f5DvRbuQ+Dh/kMDAAAATRnpQ+Dh/kM38uRD3CD8Qzfy5EOiT/dDAgAAAAAAAAAAAAAAAAAAAAAAAAA38uRDok/3QwEAAAAAAAAAAAAAAAAAAAAAAAAATr0JRPxU2EMCAAAAAAAAAAAAAAAAAAAAAAAAADzYAUSWbsZDAgAAAAAAAAAAAAAAAAAAAAAAAAC8ZgtETuPUQwMAAAA6zBBEQibdQ0j0FERoueRDSPQURPQY5kMDAAAASPQURPia60NyoRFEennnQ069CUT8VNhDAgAAAAAAAAAAAAAAAAAAAAAAAABOvQlE/FTYQw=="
+ },
+ "~:name": "svg-path",
+ "~:width": null,
+ "~:type": "~:path",
+ "~:svg-attrs": {
+ "~:style": {
+ "~:strokeWidth": "0.296442"
+ }
+ },
+ "~:points": [
+ {
+ "~#point": {
+ "~:x": 16.000007651096666,
+ "~:y": 289.0000106633722
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1285.3965909402777,
+ "~:y": 289.0000106633722
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 1285.3965909402777,
+ "~:y": 1473.196270402294
+ }
+ },
+ {
+ "~#point": {
+ "~:x": 16.000007651096666,
+ "~:y": 1473.196270402294
+ }
+ }
+ ],
+ "~:proportion-lock": false,
+ "~:transform-inverse": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": 0,
+ "~:f": 0
+ }
+ },
+ "~:svg-transform": {
+ "~#matrix": {
+ "~:a": 1,
+ "~:b": 0,
+ "~:c": 0,
+ "~:d": 1,
+ "~:e": -83.989157,
+ "~:f": -73.223098
+ }
+ },
+ "~:id": "~ue758a369-49fb-801a-8006-da250da8073d",
+ "~:parent-id": "~ue758a369-49fb-801a-8006-da250da25b70",
+ "~:svg-viewbox": {
+ "~#rect": {
+ "~:x": 0.000003135483506132297,
+ "~:y": -0.0000027832518292754405,
+ "~:width": 9.773072575314877,
+ "~:height": 10.478719602207821,
+ "~:x1": 0.000003135483506132297,
+ "~:y1": -0.0000027832518292754405,
+ "~:x2": 9.773075710798384,
+ "~:y2": 10.478716818955991
+ }
+ },
+ "~:svg-defs": {},
+ "~:frame-id": "~u00000000-0000-0000-0000-000000000000",
+ "~:strokes": [
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:outer",
+ "~:stroke-width": 10,
+ "~:stroke-color": "#cd0e8f",
+ "~:stroke-opacity": 1
+ },
+ {
+ "~:stroke-style": "~:solid",
+ "~:stroke-alignment": "~:inner",
+ "~:stroke-width": 10,
+ "~:stroke-color": "#0c31e0",
+ "~:stroke-opacity": 1
+ }
+ ],
+ "~:x": null,
+ "~:proportion": 1,
+ "~:shadow": [
+ {
+ "~:color": {
+ "~:color": "#000000",
+ "~:opacity": 0.2
+ },
+ "~:spread": 0,
+ "~:offset-y": 20,
+ "~:style": "~:drop-shadow",
+ "~:blur": 4,
+ "~:hidden": false,
+ "~:id": "~u055fbfc6-9f69-80cb-8006-da327c4b1584",
+ "~:offset-x": 20
+ }
+ ],
+ "~:selrect": {
+ "~#rect": {
+ "~:x": 16.00000765109678,
+ "~:y": 289.0000106633721,
+ "~:width": 1269.3965832891809,
+ "~:height": 1184.196259738922,
+ "~:x1": 16.00000765109678,
+ "~:y1": 289.0000106633721,
+ "~:x2": 1285.3965909402777,
+ "~:y2": 1473.196270402294
+ }
+ },
+ "~:fills": [
+ {
+ "~:fill-color": "#5dde7f",
+ "~:fill-opacity": 1
+ }
+ ],
+ "~:flip-x": null,
+ "~:height": null,
+ "~:flip-y": null
+ }
+ }
+ },
+ "~:id": "~u3f7c3cc4-556d-80fa-8006-da2505231c2c",
+ "~:name": "Page 1"
+ }
+ },
+ "~:id": "~u3f7c3cc4-556d-80fa-8006-da2505231c2b",
+ "~:options": {
+ "~:components-v2": true,
+ "~:base-font-size": "16px"
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontend/playwright/data/workspace/get-file-typography-tokens.json b/frontend/playwright/data/workspace/get-file-typography-tokens.json
index 35ed171867..8e3497af70 100644
--- a/frontend/playwright/data/workspace/get-file-typography-tokens.json
+++ b/frontend/playwright/data/workspace/get-file-typography-tokens.json
@@ -92,6 +92,7 @@
"~:font-family": ["42dot Sans"],
"~:font-size": "100",
"~:font-weight": "300",
+ "~:line-height": "2",
"~:letter-spacing": "2",
"~:text-case": "uppercase",
"~:text-decoration": "underline"
diff --git a/frontend/playwright/ui/pages/DashboardPage.js b/frontend/playwright/ui/pages/DashboardPage.js
index f297218d3e..5967d0e74e 100644
--- a/frontend/playwright/ui/pages/DashboardPage.js
+++ b/frontend/playwright/ui/pages/DashboardPage.js
@@ -288,6 +288,14 @@ export class DashboardPage extends BaseWebSocketPage {
);
await expect(this.mainHeading).toHaveText("Libraries");
}
+
+ async openProfileMenu() {
+ await this.userAccount.click();
+ }
+
+ async clickProfileMenuItem(menuSection) {
+ await this.sidebarMenu.getByText(menuSection).click();
+ }
}
export default DashboardPage;
diff --git a/frontend/playwright/ui/render-wasm-specs/shapes.spec.js b/frontend/playwright/ui/render-wasm-specs/shapes.spec.js
index a2717632b4..c7b8810d22 100644
--- a/frontend/playwright/ui/render-wasm-specs/shapes.spec.js
+++ b/frontend/playwright/ui/render-wasm-specs/shapes.spec.js
@@ -179,3 +179,35 @@ test("Renders a file with blurs applied to any kind of shape", async ({
await expect(workspace.canvas).toHaveScreenshot();
});
+
+test("Renders a file with shadows applied to any kind of shape", async ({
+ page,
+}) => {
+ const workspace = new WasmWorkspacePage(page);
+ await workspace.setupEmptyFile();
+ await workspace.mockGetFile("render-wasm/get-file-shadows.json");
+
+ await workspace.goToWorkspace({
+ id: "9502081a-e1a4-80bc-8006-c2b968723199",
+ pageId: "9502081a-e1a4-80bc-8006-c2b96872319a",
+ });
+ await workspace.waitForFirstRender();
+
+ await expect(workspace.canvas).toHaveScreenshot();
+});
+
+test("Renders a file with a closed path shape with multiple segments using strokes and shadow", async ({
+ page,
+}) => {
+ const workspace = new WasmWorkspacePage(page);
+ await workspace.setupEmptyFile();
+ await workspace.mockGetFile("render-wasm/get-subpath-stroke-shadow.json");
+
+ await workspace.goToWorkspace({
+ id: "3f7c3cc4-556d-80fa-8006-da2505231c2b",
+ pageId: "3f7c3cc4-556d-80fa-8006-da2505231c2c",
+ });
+ await workspace.waitForFirstRender();
+
+ await expect(workspace.canvas).toHaveScreenshot();
+});
diff --git a/frontend/playwright/ui/render-wasm-specs/shapes.spec.js-snapshots/Renders-a-file-with-a-closed-path-shape-with-multiple-segments-using-strokes-and-shadow-1.png b/frontend/playwright/ui/render-wasm-specs/shapes.spec.js-snapshots/Renders-a-file-with-a-closed-path-shape-with-multiple-segments-using-strokes-and-shadow-1.png
new file mode 100644
index 0000000000..e57814f403
Binary files /dev/null and b/frontend/playwright/ui/render-wasm-specs/shapes.spec.js-snapshots/Renders-a-file-with-a-closed-path-shape-with-multiple-segments-using-strokes-and-shadow-1.png differ
diff --git a/frontend/playwright/ui/render-wasm-specs/shapes.spec.js-snapshots/Renders-a-file-with-shadows-applied-to-any-kind-of-shape-1.png b/frontend/playwright/ui/render-wasm-specs/shapes.spec.js-snapshots/Renders-a-file-with-shadows-applied-to-any-kind-of-shape-1.png
new file mode 100644
index 0000000000..b0e6c72e8d
Binary files /dev/null and b/frontend/playwright/ui/render-wasm-specs/shapes.spec.js-snapshots/Renders-a-file-with-shadows-applied-to-any-kind-of-shape-1.png differ
diff --git a/frontend/playwright/ui/render-wasm-specs/texts.spec.js b/frontend/playwright/ui/render-wasm-specs/texts.spec.js
index f7fcb4b754..7b6dc9aec8 100644
--- a/frontend/playwright/ui/render-wasm-specs/texts.spec.js
+++ b/frontend/playwright/ui/render-wasm-specs/texts.spec.js
@@ -227,6 +227,96 @@ test("Renders a file with multiple emoji", async ({ page }) => {
await expect(workspace.canvas).toHaveScreenshot();
});
+test("Renders a file with multiple text shadows, strokes, and blur combinations", async ({
+ page,
+}) => {
+ const workspace = new WasmWorkspacePage(page);
+ await workspace.setupEmptyFile();
+
+ await workspace.mockGetFile(
+ "render-wasm/get-file-text-shadows-and-blurs.json",
+ );
+
+ await workspace.goToWorkspace({
+ id: "15b74473-2908-8094-8006-bdb4fbd2c6a3",
+ pageId: "15b74473-2908-8094-8006-bdb4fbd2c6a4",
+ });
+ await workspace.waitForFirstRender();
+ await expect(workspace.canvas).toHaveScreenshot();
+});
+
+test("Renders a file with different text leaves decoration", async ({
+ page,
+}) => {
+ const workspace = new WasmWorkspacePage(page);
+ await workspace.setupEmptyFile();
+ await workspace.mockGetFile(
+ "render-wasm/get-file-text-leaves-decoration.json",
+ );
+
+ await workspace.goToWorkspace({
+ id: "15b74473-2908-8094-8006-bdb4fbd2c6a3",
+ pageId: "15b74473-2908-8094-8006-bdb4fbd2c6a4",
+ });
+
+ await workspace.waitForFirstRender();
+ await expect(workspace.canvas).toHaveScreenshot();
+});
+
+test("Renders a file with different text shadows combinations", async ({
+ page,
+}) => {
+ const workspace = new WasmWorkspacePage(page);
+ await workspace.setupEmptyFile();
+ await workspace.mockGetFile(
+ "render-wasm/get-file-text-shadows-combination.json",
+ );
+
+ await workspace.goToWorkspace({
+ id: "15b74473-2908-8094-8006-bdb4fbd2c6a3",
+ pageId: "15b74473-2908-8094-8006-bc90c3982c74",
+ });
+
+ await workspace.waitForFirstRender();
+ await expect(workspace.canvas).toHaveScreenshot();
+});
+
+test("Renders a file with multiple text shadows in order", async ({
+ page,
+}) => {
+ const workspace = new WasmWorkspacePage(page);
+ await workspace.setupEmptyFile();
+ await workspace.mockGetFile(
+ "render-wasm/get-file-text-shadows-order.json",
+ );
+
+ await workspace.goToWorkspace({
+ id: "48ffa82f-6950-81b5-8006-e49a2a39657f",
+ pageId: "48ffa82f-6950-81b5-8006-e49a2a396580",
+ });
+
+ await workspace.waitForFirstRender();
+ await expect(workspace.canvas).toHaveScreenshot();
+});
+
+test("Renders a file with text in frames and different strokes, shadows, and blurs", async ({
+ page,
+}) => {
+ const workspace = new WasmWorkspacePage(page);
+ await workspace.setupEmptyFile();
+ await workspace.mockGetFile(
+ "render-wasm/get-file-frame-clipping-shadows-and-texts.json",
+ );
+
+ await workspace.goToWorkspace({
+ id: "44471494-966a-8178-8006-c5bd93f0fe72",
+ pageId: "44471494-966a-8178-8006-c5bd93f0fe73",
+ });
+
+ await workspace.waitForFirstRender();
+ await expect(workspace.canvas).toHaveScreenshot();
+});
+
test("Renders a file with texts with different alignments", async ({
page,
}) => {
diff --git a/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-different-text-leaves-decoration-1.png b/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-different-text-leaves-decoration-1.png
new file mode 100644
index 0000000000..d519d9afab
Binary files /dev/null and b/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-different-text-leaves-decoration-1.png differ
diff --git a/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-different-text-shadows-combinations-1.png b/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-different-text-shadows-combinations-1.png
new file mode 100644
index 0000000000..ff8b34555d
Binary files /dev/null and b/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-different-text-shadows-combinations-1.png differ
diff --git a/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-emoji-and-text-decoration-1.png b/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-emoji-and-text-decoration-1.png
index 3fbabb451d..bde8aa497e 100644
Binary files a/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-emoji-and-text-decoration-1.png and b/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-emoji-and-text-decoration-1.png differ
diff --git a/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-multiple-text-shadows-in-order-1.png b/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-multiple-text-shadows-in-order-1.png
new file mode 100644
index 0000000000..103e1f87f7
Binary files /dev/null and b/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-multiple-text-shadows-in-order-1.png differ
diff --git a/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-multiple-text-shadows-strokes-and-blur-combinations-1.png b/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-multiple-text-shadows-strokes-and-blur-combinations-1.png
new file mode 100644
index 0000000000..6475826679
Binary files /dev/null and b/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-multiple-text-shadows-strokes-and-blur-combinations-1.png differ
diff --git a/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-styled-texts-1.png b/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-styled-texts-1.png
index 0fc974b205..d4f7241ea5 100644
Binary files a/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-styled-texts-1.png and b/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-styled-texts-1.png differ
diff --git a/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-text-in-frames-and-different-strokes-shadows-and-blurs-1.png b/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-text-in-frames-and-different-strokes-shadows-and-blurs-1.png
new file mode 100644
index 0000000000..75d9405c45
Binary files /dev/null and b/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-text-in-frames-and-different-strokes-shadows-and-blurs-1.png differ
diff --git a/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-texts-with-images-1.png b/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-texts-with-images-1.png
index 565b69d0bf..767cc7a0ed 100644
Binary files a/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-texts-with-images-1.png and b/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-texts-with-images-1.png differ
diff --git a/frontend/playwright/ui/specs/colorpicker.spec.js b/frontend/playwright/ui/specs/colorpicker.spec.js
index db2e3ccdfe..78244f0e63 100644
--- a/frontend/playwright/ui/specs/colorpicker.spec.js
+++ b/frontend/playwright/ui/specs/colorpicker.spec.js
@@ -93,7 +93,9 @@ test("Create a LINEAR gradient", async ({ page }) => {
await expect(inputOpacityGlobal).toHaveValue("50");
await expect(inputOpacityGlobal).toBeVisible();
- await expect(workspacePage.page.getByText("Linear gradient")).toBeVisible();
+ await expect(
+ workspacePage.page.getByText("Linear gradient").nth(1),
+ ).toBeVisible();
});
test("Create a RADIAL gradient", async ({ page }) => {
@@ -175,12 +177,14 @@ test("Create a RADIAL gradient", async ({ page }) => {
await expect(inputOpacityGlobal).toHaveValue("50");
await expect(inputOpacityGlobal).toBeVisible();
- await expect(workspacePage.page.getByText("Radial gradient")).toBeVisible();
+ await expect(
+ workspacePage.page.getByText("Radial gradient").nth(1),
+ ).toBeVisible();
});
test("Gradient stops limit", async ({ page }) => {
const workspacePage = new WorkspacePage(page);
- await workspacePage.mockConfigFlags(["enable-frontend-binary-fills"]);
+ await workspacePage.mockConfigFlags(["enable-feature-render-wasm"]);
await workspacePage.setupEmptyFile(page);
await workspacePage.mockRPC(
diff --git a/frontend/playwright/ui/specs/dashboard-teams.spec.js b/frontend/playwright/ui/specs/dashboard-teams.spec.js
new file mode 100644
index 0000000000..8a95cf8e12
--- /dev/null
+++ b/frontend/playwright/ui/specs/dashboard-teams.spec.js
@@ -0,0 +1,31 @@
+import { test, expect } from "@playwright/test";
+import DashboardPage from "../pages/DashboardPage";
+
+test.beforeEach(async ({ page }) => {
+ await DashboardPage.init(page);
+ await DashboardPage.mockRPC(
+ page,
+ "get-profile",
+ "logged-in-user/get-profile-logged-in-no-onboarding.json",
+ );
+});
+
+test("BUG 12359 - Selected invitations count is not pluralized", async ({
+ page,
+}) => {
+ const dashboardPage = new DashboardPage(page);
+ await dashboardPage.setupDashboardFull();
+ await dashboardPage.setupTeamInvitations();
+
+ await dashboardPage.goToSecondTeamInvitationsSection();
+
+ await expect(page.getByText("test1@mail.com")).toBeVisible();
+
+ // NOTE: we cannot use check() or getByLabel() because the checkbox
+ // is hidden inside the label.
+ await page.getByText("test1@mail.com").click();
+ await expect(page.getByText("1 invitation selected")).toBeVisible();
+
+ await page.getByText("test2@mail.com").check();
+ await expect(page.getByText("2 invitations selected")).toBeVisible();
+});
diff --git a/frontend/playwright/ui/specs/design-tab.spec.js b/frontend/playwright/ui/specs/design-tab.spec.js
index 1774b4f9b3..293c438ee7 100644
--- a/frontend/playwright/ui/specs/design-tab.spec.js
+++ b/frontend/playwright/ui/specs/design-tab.spec.js
@@ -71,7 +71,7 @@ test.describe("Shape attributes", () => {
page,
}) => {
const workspace = new WorkspacePage(page);
- await workspace.mockConfigFlags(["enable-frontend-binary-fills"]);
+ await workspace.mockConfigFlags(["enable-feature-render-wasm"]);
await workspace.setupEmptyFile();
await workspace.mockRPC(/get\-file\?/, "design/get-file-fills-limit.json");
@@ -251,3 +251,87 @@ test("BUG 11177 - Font size input not showing 'mixed' when needed", async ({
await expect(fontSizeInput).toHaveValue("");
await expect(fontSizeInput).toHaveAttribute("placeholder", "Mixed");
});
+
+test("BUG 12287 Fix identical text fills not being added/removed", async ({
+ page,
+}) => {
+ const workspace = new WorkspacePage(page);
+ await workspace.setupEmptyFile();
+ await workspace.mockRPC(/get\-file\?/, "design/get-file-12287.json");
+
+ await workspace.goToWorkspace({
+ fileId: "4bdef584-e28a-8155-8006-f3f8a71b382e",
+ pageId: "4bdef584-e28a-8155-8006-f3f8a71b382f",
+ });
+
+ await workspace.clickLeafLayer("Lorem ipsum");
+
+ const addFillButton = workspace.page.getByRole("button", {
+ name: "Add fill",
+ });
+
+ await addFillButton.click();
+ await addFillButton.click();
+ await addFillButton.click();
+ await addFillButton.click();
+
+ await expect(
+ workspace.page.getByRole("button", { name: "#B1B2B5" }),
+ ).toHaveCount(4);
+
+ await workspace.page
+ .getByRole("button", { name: "Remove color" })
+ .first()
+ .click();
+
+ await expect(
+ workspace.page.getByRole("button", { name: "#B1B2B5" }),
+ ).toHaveCount(3);
+});
+
+test("BUG 12384 - Export crashing when exporting a board", async ({ page }) => {
+ const workspace = new WorkspacePage(page);
+ await workspace.setupEmptyFile();
+ await workspace.mockRPC(/get\-file\?/, "design/get-file-12384.json");
+
+ let hasExportRequestBeenIntercepted = false;
+ await workspace.page.route("**/api/export", (route) => {
+ if (hasExportRequestBeenIntercepted) {
+ route.continue();
+ return;
+ }
+
+ hasExportRequestBeenIntercepted = true;
+ const payload = route.request().postData();
+ const parsedPayload = JSON.parse(payload);
+
+ expect(parsedPayload["~:exports"]).toHaveLength(1);
+ expect(parsedPayload["~:exports"][0]["~:file-id"]).toBe(
+ "~ufa6ce865-34dd-80ac-8006-fe0dab5539a7",
+ );
+ expect(parsedPayload["~:exports"][0]["~:page-id"]).toBe(
+ "~ufa6ce865-34dd-80ac-8006-fe0dab5539a8",
+ );
+
+ route.fulfill({
+ status: 200,
+ contentType: "application/json",
+ response: {},
+ });
+ });
+
+ await workspace.goToWorkspace({
+ fileId: "fa6ce865-34dd-80ac-8006-fe0dab5539a7",
+ pageId: "fa6ce865-34dd-80ac-8006-fe0dab5539a8",
+ });
+
+ await workspace.clickLeafLayer("Board");
+
+ let exportRequest = workspace.page.waitForRequest("**/api/export");
+
+ await workspace.rightSidebar
+ .getByRole("button", { name: "Export 1 element" })
+ .click();
+
+ await exportRequest;
+});
diff --git a/frontend/playwright/ui/specs/profile-menu.spec.js b/frontend/playwright/ui/specs/profile-menu.spec.js
new file mode 100644
index 0000000000..fdb35e28e6
--- /dev/null
+++ b/frontend/playwright/ui/specs/profile-menu.spec.js
@@ -0,0 +1,43 @@
+import { test, expect } from "@playwright/test";
+import DashboardPage from "../pages/DashboardPage";
+
+test.beforeEach(async ({ page }) => {
+ await DashboardPage.init(page);
+ await DashboardPage.mockRPC(
+ page,
+ "get-profile",
+ "logged-in-user/get-profile-logged-in-no-onboarding.json",
+ );
+});
+
+test("Navigate to penpot changelog from profile menu", async ({ page }) => {
+ const dashboardPage = new DashboardPage(page);
+ await dashboardPage.goToDashboard();
+
+ await dashboardPage.openProfileMenu();
+ await dashboardPage.clickProfileMenuItem("About Penpot");
+
+ // Listen for the new page (tab) that opens when clicking "Penpot Changelog"
+ const [newPage] = await Promise.all([
+ page.context().waitForEvent("page"),
+ dashboardPage.clickProfileMenuItem("Penpot Changelog"),
+ ]);
+
+ await newPage.waitForLoadState();
+ await expect(newPage).toHaveURL(
+ "https://github.com/penpot/penpot/blob/develop/CHANGES.md",
+ );
+});
+
+test("Opens release notes from current version from profile menu", async ({
+ page,
+}) => {
+ const dashboardPage = new DashboardPage(page);
+ await dashboardPage.goToDashboard();
+
+ await dashboardPage.openProfileMenu();
+ await dashboardPage.clickProfileMenuItem("About Penpot");
+ await expect(page.getByText("Version 0.0.0 notes")).toBeVisible();
+ await dashboardPage.clickProfileMenuItem("Version");
+ await expect(page.getByText("new in penpot?")).toBeVisible();
+});
diff --git a/frontend/playwright/ui/specs/render-wasm.spec.js b/frontend/playwright/ui/specs/render-wasm.spec.js
index abf8fae464..df33f19566 100644
--- a/frontend/playwright/ui/specs/render-wasm.spec.js
+++ b/frontend/playwright/ui/specs/render-wasm.spec.js
@@ -1,18 +1,12 @@
import { test, expect } from "@playwright/test";
-import { WorkspacePage } from "../pages/WorkspacePage";
-import { BaseWebSocketPage } from "../pages/BaseWebSocketPage";
+import { WasmWorkspacePage } from "../pages/WasmWorkspacePage";
test.beforeEach(async ({ page }) => {
- await WorkspacePage.init(page);
- await BaseWebSocketPage.mockRPC(
- page,
- "get-teams",
- "get-teams-render-wasm.json",
- );
+ await WasmWorkspacePage.init(page);
});
test("BUG 10867 - Crash when loading comments", async ({ page }) => {
- const workspacePage = new WorkspacePage(page);
+ const workspacePage = new WasmWorkspacePage(page);
await workspacePage.setupEmptyFile();
await workspacePage.goToWorkspace();
@@ -21,3 +15,45 @@ test("BUG 10867 - Crash when loading comments", async ({ page }) => {
workspacePage.rightSidebar.getByText("Show all comments"),
).toBeVisible();
});
+
+test("BUG 12164 - Crash when trying to fetch a missing font", async ({
+ page,
+}) => {
+ // mock fetching a missing font
+ // FIXME: this is very hacky. I suspect something might be going on with
+ // beicon, fetch or http/send and the way we handle requests failures that
+ // make Plawyright stop execution of the JS thread immediately.
+ await page.addInitScript(() => {
+ // Override fetch specifically for the failing font route
+ const originalFetch = window.fetch;
+ window.fetch = (url, options) => {
+ if (url.includes("/internal/gfonts/font/crimsonpro")) {
+ console.log("Intercepting font request:", url);
+ // Return a rejected promise that we handle
+ return Promise.reject(new Error("Font not found (mocked)"));
+ }
+ return originalFetch.call(window, url, options);
+ };
+ });
+
+ const workspacePage = new WasmWorkspacePage(page);
+ await workspacePage.setupEmptyFile();
+ await workspacePage.mockGetFile("render-wasm/get-file-12164.json");
+ // FIXME: remove this once we fix the issue of downloading emoji fonts that are
+ // not needed.
+ await workspacePage.mockGoogleFont(
+ "noto",
+ "render-wasm/assets/notosansjpsubset.ttf",
+ );
+
+ await workspacePage.goToWorkspace({
+ id: "2b7f0188-51a1-8193-8006-e05bad874e2e",
+ pageId: "2b7f0188-51a1-8193-8006-e05bad87b74d",
+ });
+
+ await workspacePage.waitForFirstRender({ hideUI: false });
+
+ await expect(
+ workspacePage.page.getByText("Internal Error"),
+ ).not.toBeVisible();
+});
diff --git a/frontend/playwright/ui/specs/tokens.spec.js b/frontend/playwright/ui/specs/tokens.spec.js
index e1d707268f..668d47e207 100644
--- a/frontend/playwright/ui/specs/tokens.spec.js
+++ b/frontend/playwright/ui/specs/tokens.spec.js
@@ -46,7 +46,7 @@ const setupTokensFile = async (page, options = {}) => {
} = options;
const workspacePage = new WorkspacePage(page);
- if (flags.length) {
+ if (flags.length > 0) {
await workspacePage.mockConfigFlags(flags);
}
@@ -95,6 +95,24 @@ const setupTypographyTokensFile = async (page, options = {}) => {
});
};
+const checkInputFieldWithError = async (tokenThemeUpdateCreateModal, inputLocator) => {
+ await expect(inputLocator).toHaveAttribute("aria-invalid", "true");
+
+ const errorMessageId = await inputLocator.getAttribute("aria-describedby");
+ await expect(
+ tokenThemeUpdateCreateModal.locator(`#${errorMessageId}`),
+ ).toBeVisible();
+};
+
+const checkInputFieldWithoutError = async (tokenThemeUpdateCreateModal, inputLocator) => {
+ expect(
+ await inputLocator.getAttribute("aria-invalid")
+ ).toBeNull();
+ expect(
+ await inputLocator.getAttribute("aria-describedby")
+ ).toBeNull();
+};
+
test.describe("Tokens: Tokens Tab", () => {
test("Clicking tokens tab button opens tokens sidebar tab", async ({
page,
@@ -174,7 +192,7 @@ test.describe("Tokens: Tokens Tab", () => {
).toBeEnabled();
// Tokens tab panel should have two tokens with the color red / #ff0000
- await expect(tokensTabPanel.getByTitle("#ff0000")).toHaveCount(2);
+ await expect(tokensTabPanel.getByRole("button", {name: "#ff0000"})).toHaveCount(2);
// Global set has been auto created and is active
await expect(
@@ -806,18 +824,25 @@ test.describe("Tokens: Themes modal", () => {
})
.click();
- await tokenThemeUpdateCreateModal
- .getByLabel("Group")
- .fill("New Group name");
- await tokenThemeUpdateCreateModal
- .getByLabel("Theme")
- .fill("New Theme name");
+ const groupInput = tokenThemeUpdateCreateModal.getByLabel("Group");
+ const nameInput = tokenThemeUpdateCreateModal.getByLabel("Theme");
+ const saveButton = tokenThemeUpdateCreateModal.getByRole("button", {
+ name: "Save theme",
+ });
+
+ await groupInput.fill("Core"); // Invalid because "Core / Light" theme already exists
+ await nameInput.fill("Light");
- await tokenThemeUpdateCreateModal
- .getByRole("button", {
- name: "Save theme",
- })
- .click();
+ await checkInputFieldWithError(tokenThemeUpdateCreateModal, nameInput);
+ await expect(saveButton).toBeDisabled();
+
+ await groupInput.fill("New Group name");
+ await nameInput.fill("New Theme name");
+
+ await checkInputFieldWithoutError(tokenThemeUpdateCreateModal, nameInput);
+ await expect(saveButton).not.toBeDisabled();
+
+ await saveButton.click();
await expect(
tokenThemeUpdateCreateModal.getByText("New Theme name"),
@@ -845,12 +870,36 @@ test.describe("Tokens: Themes modal", () => {
.first()
.click();
- await tokenThemeUpdateCreateModal
- .getByLabel("Theme")
- .fill("Changed Theme name");
- await tokenThemeUpdateCreateModal
- .getByLabel("Group")
- .fill("Changed Group name");
+ const groupInput = tokenThemeUpdateCreateModal.getByLabel("Group");
+ const nameInput = tokenThemeUpdateCreateModal.getByLabel("Theme");
+ const saveButton = tokenThemeUpdateCreateModal.getByRole("button", {
+ name: "Save theme",
+ });
+
+ await groupInput.fill("Core"); // Invalid because "Core / Dark" theme already exists
+ await nameInput.fill("Dark");
+
+ await checkInputFieldWithError(tokenThemeUpdateCreateModal, nameInput);
+ await expect(saveButton).toBeDisabled();
+
+ await groupInput.fill("Core"); // Valid because "Core / Light" theme already exists
+ await nameInput.fill("Light"); // but it's the same theme we are editing
+
+ await checkInputFieldWithoutError(tokenThemeUpdateCreateModal, nameInput);
+ await expect(saveButton).not.toBeDisabled();
+
+ await nameInput.fill("Changed Theme name"); // New names should be also valid
+ await groupInput.fill("Changed Group name");
+
+ await checkInputFieldWithoutError(tokenThemeUpdateCreateModal, nameInput);
+ await expect(saveButton).not.toBeDisabled();
+
+ expect(
+ await nameInput.getAttribute("aria-invalid")
+ ).toBeNull();
+ expect(
+ await nameInput.getAttribute("aria-describedby")
+ ).toBeNull();
const checkboxes = await tokenThemeUpdateCreateModal
.locator('[role="checkbox"]')
@@ -864,11 +913,15 @@ test.describe("Tokens: Themes modal", () => {
}
}
- await tokenThemeUpdateCreateModal
- .getByRole("button", {
- name: "Save theme",
- })
- .click();
+ const firstButton = await tokenThemeUpdateCreateModal
+ .getByTestId('tokens-set-item')
+ .first();
+
+ await firstButton.click();
+
+ await expect(saveButton).not.toBeDisabled();
+
+ await saveButton.click();
await expect(
tokenThemeUpdateCreateModal.getByText("Changed Theme name"),
@@ -879,7 +932,10 @@ test.describe("Tokens: Themes modal", () => {
});
test.describe("Tokens: Apply token", () => {
- test("User applies color token to a shape", async ({ page }) => {
+ // When deleting the "enable-token-color" flag, permanently remove this test.
+ test("User applies color token to a shape without tokens on design-tab", async ({
+ page,
+ }) => {
const { workspacePage, tokensSidebar, tokenContextMenuForToken } =
await setupTokensFile(page);
@@ -909,6 +965,35 @@ test.describe("Tokens: Themes modal", () => {
await expect(inputColor).toHaveValue("000000");
});
+ test("User applies color token to a shape", async ({ page }) => {
+ const { workspacePage, tokensSidebar, tokenContextMenuForToken } =
+ await setupTokensFile(page, { flags: ["enable-token-color"] });
+
+ await page.getByRole("tab", { name: "Layers" }).click();
+
+ await workspacePage.layers
+ .getByTestId("layer-row")
+ .filter({ hasText: "Button" })
+ .click();
+
+ const tokensTabButton = page.getByRole("tab", { name: "Tokens" });
+ await tokensTabButton.click();
+
+ await tokensSidebar
+ .getByRole("button")
+ .filter({ hasText: "Color" })
+ .click();
+
+ await tokensSidebar
+ .getByRole("button", { name: "colors.black" })
+ .click({ button: "right" });
+ await tokenContextMenuForToken.getByText("Fill").click();
+
+ await expect(
+ workspacePage.page.getByLabel("Name: colors.black"),
+ ).toBeVisible();
+ });
+
test("User applies typography token to a text shape", async ({ page }) => {
const { workspacePage, tokensSidebar, tokenContextMenuForToken } =
await setupTypographyTokensFile(page);
@@ -960,6 +1045,12 @@ test.describe("Tokens: Themes modal", () => {
name: /save/i,
});
+ // Fill font-family to verify to verify that input value doesn't get split into list of characters
+ const fontFamilyField = tokensUpdateCreateModal
+ .getByLabel("Font family")
+ .first();
+ await fontFamilyField.fill("OneWord");
+
// Invalidate incorrect values for font size
const fontSizeField = tokensUpdateCreateModal.getByLabel(/Font Size/i);
await fontSizeField.fill("invalid");
@@ -968,14 +1059,149 @@ test.describe("Tokens: Themes modal", () => {
).toBeVisible();
await expect(saveButton).toBeDisabled();
- // Allow empty fields
+ // Show error with line-height depending on invalid font-size
await fontSizeField.fill("");
+ await expect(saveButton).toBeDisabled();
+
+ // Fill in values for all fields and verify they persist when switching tabs
+ await fontSizeField.fill("16");
+
+ const fontWeightField =
+ tokensUpdateCreateModal.getByLabel(/Font Weight/i);
+ const letterSpacingField =
+ tokensUpdateCreateModal.getByLabel(/Letter Spacing/i);
+ const lineHeightField =
+ tokensUpdateCreateModal.getByLabel(/Line Height/i);
+ const textCaseField = tokensUpdateCreateModal.getByLabel(/Text Case/i);
+ const textDecorationField =
+ tokensUpdateCreateModal.getByLabel(/Text Decoration/i);
+
+ // Capture all values before switching tabs
+ const originalValues = {
+ fontSize: await fontSizeField.inputValue(),
+ fontFamily: await fontFamilyField.inputValue(),
+ fontWeight: await fontWeightField.inputValue(),
+ letterSpacing: await letterSpacingField.inputValue(),
+ lineHeight: await lineHeightField.inputValue(),
+ textCase: await textCaseField.inputValue(),
+ textDecoration: await textDecorationField.inputValue(),
+ };
+
+ // Switch to reference tab and back to composite tab
+ const referenceTabButton =
+ tokensUpdateCreateModal.getByTestId("reference-opt");
+ await referenceTabButton.click();
+
+ // Empty reference tab should be disabled
+ await expect(saveButton).toBeDisabled();
+
+ const compositeTabButton =
+ tokensUpdateCreateModal.getByTestId("composite-opt");
+ await compositeTabButton.click();
+
+ // Filled composite tab should be enabled
await expect(saveButton).toBeEnabled();
+ // Verify all values are preserved after switching tabs
+ await expect(fontSizeField).toHaveValue(originalValues.fontSize);
+ await expect(fontFamilyField).toHaveValue(originalValues.fontFamily);
+ await expect(fontWeightField).toHaveValue(originalValues.fontWeight);
+ await expect(letterSpacingField).toHaveValue(
+ originalValues.letterSpacing,
+ );
+ await expect(lineHeightField).toHaveValue(originalValues.lineHeight);
+ await expect(textCaseField).toHaveValue(originalValues.textCase);
+ await expect(textDecorationField).toHaveValue(
+ originalValues.textDecoration,
+ );
+
await saveButton.click();
// Modal should close, token should be visible (with new name) in sidebar
await expect(tokensUpdateCreateModal).not.toBeVisible();
});
+
+ test("User cant submit empty typography token or reference", async ({
+ page,
+ }) => {
+ const { tokensUpdateCreateModal, tokenThemesSetsSidebar, tokensSidebar } =
+ await setupTypographyTokensFile(page);
+
+ const tokensTabPanel = page.getByRole("tabpanel", { name: "tokens" });
+ await tokensTabPanel
+ .getByRole("button", { name: "Add Token: Typography" })
+ .click();
+
+ await expect(tokensUpdateCreateModal).toBeVisible();
+
+ const nameField = tokensUpdateCreateModal.getByLabel("Name");
+ await nameField.fill("typography.empty");
+
+ const valueField = tokensUpdateCreateModal.getByLabel("Font Size");
+
+ // Insert a value and then delete it
+ await valueField.fill("1");
+ await valueField.fill("");
+
+ // Submit button should be disabled when field is empty
+ const submitButton = tokensUpdateCreateModal.getByRole("button", {
+ name: "Save",
+ });
+ await expect(submitButton).toBeDisabled();
+
+ // Switch to reference tab, should not be submittable either
+ const referenceTabButton =
+ tokensUpdateCreateModal.getByTestId("reference-opt");
+ await referenceTabButton.click();
+ await expect(submitButton).toBeDisabled();
+ });
+
+ test("User adds typography token with reference", async ({ page }) => {
+ const { tokensUpdateCreateModal, tokenThemesSetsSidebar, tokensSidebar } =
+ await setupTypographyTokensFile(page);
+
+ const newTokenTitle = "NewReference";
+
+ const tokensTabPanel = page.getByRole("tabpanel", { name: "tokens" });
+ await tokensTabPanel
+ .getByRole("button", { name: "Add Token: Typography" })
+ .click();
+
+ await expect(tokensUpdateCreateModal).toBeVisible();
+
+ const nameField = tokensUpdateCreateModal.getByLabel("Name");
+ await nameField.fill(newTokenTitle);
+
+ const referenceTabButton =
+ tokensUpdateCreateModal.getByTestId("reference-opt");
+ referenceTabButton.click();
+
+ const referenceField = tokensUpdateCreateModal.getByLabel("Reference");
+ await referenceField.fill("{Full}");
+
+ const submitButton = tokensUpdateCreateModal.getByRole("button", {
+ name: "Save",
+ });
+
+ const resolvedValue =
+ await tokensUpdateCreateModal.getByText("Resolved value:");
+ await expect(resolvedValue).toBeVisible();
+ await expect(resolvedValue).toContainText("Font Family: 42dot Sans");
+ await expect(resolvedValue).toContainText("Font Size: 100");
+ await expect(resolvedValue).toContainText("Font Weight: 300");
+ await expect(resolvedValue).toContainText("Letter Spacing: 2");
+ await expect(resolvedValue).toContainText("Text Case: uppercase");
+ await expect(resolvedValue).toContainText("Text Decoration: underline");
+
+ await expect(submitButton).toBeEnabled();
+ await submitButton.click();
+
+ await expect(tokensUpdateCreateModal).not.toBeVisible();
+
+ const newToken = tokensSidebar.getByRole("button", {
+ name: newTokenTitle,
+ });
+ await expect(newToken).toBeVisible();
+ });
});
});
diff --git a/frontend/playwright/ui/specs/variants.spec.js b/frontend/playwright/ui/specs/variants.spec.js
index 5cfbb1ff9f..580017437a 100644
--- a/frontend/playwright/ui/specs/variants.spec.js
+++ b/frontend/playwright/ui/specs/variants.spec.js
@@ -150,8 +150,8 @@ test("User copy paste a variant container", async ({ page }) => {
await workspacePage.clickAt(500, 500);
await workspacePage.page.keyboard.press("Control+v");
- const variant_original = await findVariant(workspacePage, 0);
- const variant_duplicate = await findVariant(workspacePage, 1);
+ const variant_original = await findVariant(workspacePage, 1);
+ const variant_duplicate = await findVariant(workspacePage, 0);
// Expand the layers
await variant_duplicate.container.getByRole("button").first().click();
diff --git a/frontend/playwright/ui/specs/workspace.spec.js b/frontend/playwright/ui/specs/workspace.spec.js
index 107ea3189b..411d01d9a8 100644
--- a/frontend/playwright/ui/specs/workspace.spec.js
+++ b/frontend/playwright/ui/specs/workspace.spec.js
@@ -271,7 +271,7 @@ test("Bug 9066 - Problem with grid layout", async ({ page }) => {
await workspacePage.clickToggableLayer("Group");
await page.getByText("A", { exact: true }).click();
- await workspacePage.rightSidebar.getByTestId("swap-component-btn").click();
+ await workspacePage.rightSidebar.getByTestId("component-pill-button").click();
await page.getByTitle("C", { exact: true }).click();
diff --git a/frontend/playwright/ui/visual-specs/visual-viewer.spec.js b/frontend/playwright/ui/visual-specs/visual-viewer.spec.js
index ef6901f702..977eb57fcb 100644
--- a/frontend/playwright/ui/visual-specs/visual-viewer.spec.js
+++ b/frontend/playwright/ui/visual-specs/visual-viewer.spec.js
@@ -62,7 +62,7 @@ test("User goes to the Viewer Comments", async ({ page }) => {
await viewerPage.showComments();
await viewerPage.showCommentsThread(1);
await expect(
- viewerPage.page.getByRole("textbox", { name: "Reply" }),
+ viewerPage.page.getByRole("button", { name: "Post" }),
).toBeVisible();
await expect(viewerPage.page).toHaveScreenshot();
@@ -101,7 +101,11 @@ test("User goes to the Viewer Inspect code", async ({ page }) => {
await viewerPage.showCode();
- await expect(viewerPage.page.getByText("Size and position")).toBeVisible();
+ await expect(
+ viewerPage.page.getByRole("button", {
+ name: "Toggle panel Size & Position",
+ }),
+ ).toBeVisible();
await expect(viewerPage.page).toHaveScreenshot();
});
@@ -117,7 +121,11 @@ test("User goes to the Viewer Inspect code, code tab", async ({ page }) => {
});
await viewerPage.showCode();
- await viewerPage.page.getByRole("tab", { name: "code" }).click();
+ await viewerPage.page
+ .getByRole("combobox")
+ .filter({ hasText: "Styles" })
+ .click();
+ await viewerPage.page.getByRole("option", { name: "Code" }).click();
await expect(
viewerPage.page.getByRole("button", { name: "Copy all code" }),
diff --git a/frontend/playwright/ui/visual-specs/workspace.spec.js b/frontend/playwright/ui/visual-specs/workspace.spec.js
index e594ea343f..418b92861d 100644
--- a/frontend/playwright/ui/visual-specs/workspace.spec.js
+++ b/frontend/playwright/ui/visual-specs/workspace.spec.js
@@ -95,9 +95,7 @@ test.describe("Assets tab", () => {
await workspace.clickLibrary("Testing library 1");
await expect(
- workspace.librariesModal.getByText(
- "There are no Shared Libraries available",
- ),
+ workspace.librariesModal.getByText("File library"),
).toBeVisible();
await expect(workspace.page).toHaveScreenshot();
});
diff --git a/frontend/resources/images/features/2.11-invitations.gif b/frontend/resources/images/features/2.11-invitations.gif
new file mode 100644
index 0000000000..35556347e2
Binary files /dev/null and b/frontend/resources/images/features/2.11-invitations.gif differ
diff --git a/frontend/resources/images/features/2.11-menu.gif b/frontend/resources/images/features/2.11-menu.gif
new file mode 100644
index 0000000000..cc686593e5
Binary files /dev/null and b/frontend/resources/images/features/2.11-menu.gif differ
diff --git a/frontend/resources/images/features/2.11-slide-0.jpg b/frontend/resources/images/features/2.11-slide-0.jpg
new file mode 100644
index 0000000000..155bd8774c
Binary files /dev/null and b/frontend/resources/images/features/2.11-slide-0.jpg differ
diff --git a/frontend/resources/images/features/2.11-typography-token.gif b/frontend/resources/images/features/2.11-typography-token.gif
new file mode 100644
index 0000000000..ea87cb42c0
Binary files /dev/null and b/frontend/resources/images/features/2.11-typography-token.gif differ
diff --git a/frontend/resources/images/features/2.11-variants.gif b/frontend/resources/images/features/2.11-variants.gif
new file mode 100644
index 0000000000..8e44da260f
Binary files /dev/null and b/frontend/resources/images/features/2.11-variants.gif differ
diff --git a/frontend/resources/images/icons/drop-shadow.svg b/frontend/resources/images/icons/drop-shadow.svg
new file mode 100644
index 0000000000..5b5abcd8e7
--- /dev/null
+++ b/frontend/resources/images/icons/drop-shadow.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/frontend/resources/images/icons/inner-shadow.svg b/frontend/resources/images/icons/inner-shadow.svg
new file mode 100644
index 0000000000..9b9459d85d
--- /dev/null
+++ b/frontend/resources/images/icons/inner-shadow.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/frontend/resources/images/thumbnails/template-penpot-design-system.jpg b/frontend/resources/images/thumbnails/template-penpot-design-system.jpg
index 0b2db57f48..f675ff85f1 100644
Binary files a/frontend/resources/images/thumbnails/template-penpot-design-system.jpg and b/frontend/resources/images/thumbnails/template-penpot-design-system.jpg differ
diff --git a/frontend/resources/styles/common/refactor/basic-rules.scss b/frontend/resources/styles/common/refactor/basic-rules.scss
index c4e8ea422e..91093d5e0d 100644
--- a/frontend/resources/styles/common/refactor/basic-rules.scss
+++ b/frontend/resources/styles/common/refactor/basic-rules.scss
@@ -4,6 +4,13 @@
//
// Copyright (c) KALEIDOS INC
+@use "./spacing.scss" as *;
+@use "./borders.scss" as *;
+@use "./mixins.scss" as *;
+@use "./focus.scss" as *;
+@use "./shadows.scss" as *;
+@use "./z-index.scss" as *;
+
// SCROLLBAR
.new-scrollbar {
scrollbar-width: thin;
@@ -52,7 +59,6 @@
.button-primary {
@include buttonStyle;
@include flexCenter;
- @include focusPrimary;
@include headlineSmallTypography;
background-color: var(--button-primary-background-color-rest);
border: $s-1 solid var(--button-primary-border-color-rest);
@@ -63,15 +69,16 @@
span svg {
stroke: var(--button-primary-foreground-color-rest);
}
+ @include focusPrimary;
&:hover {
background-color: var(--button-primary-background-color-hover);
border: $s-1 solid var(--button-primary-border-color-hover);
color: var(--button-primary-foreground-color-hover);
+ text-decoration: none;
svg,
span svg {
stroke: var(--button-primary-foreground-color-hover);
}
- text-decoration: none;
}
&:active {
background-color: var(--button-primary-background-color-active);
@@ -96,7 +103,6 @@
.button-secondary {
@include buttonStyle;
@include flexCenter;
- @include focusSecondary;
border-radius: $br-8;
background-color: var(--button-secondary-background-color-rest);
border: $s-1 solid var(--button-secondary-border-color-rest);
@@ -105,6 +111,7 @@
span svg {
stroke: var(--button-secondary-foreground-color-rest);
}
+ @include focusSecondary;
&:hover {
background-color: var(--button-secondary-background-color-hover);
border: $s-1 solid var(--button-secondary-border-color-hover);
@@ -138,7 +145,6 @@
.button-tertiary {
@include buttonStyle;
@include flexCenter;
- @include focusTertiary;
--button-tertiary-border-width: #{$s-2};
border-radius: $br-8;
color: var(--button-tertiary-foreground-color-rest);
@@ -150,6 +156,7 @@
span svg {
stroke: var(--button-tertiary-foreground-color-rest);
}
+ @include focusTertiary;
&:hover {
background-color: var(--button-tertiary-background-color-hover);
color: var(--button-tertiary-foreground-color-hover);
@@ -197,7 +204,6 @@
.button-radio {
@include buttonStyle;
@include flexCenter;
- @include focusRadio;
border-radius: $br-8;
color: var(--button-radio-foreground-color-rest);
border-color: $s-1 solid var(--button-radio-background-color-rest);
@@ -205,6 +211,7 @@
span svg {
stroke: var(--button-radio-foreground-color-rest);
}
+ @include focusRadio;
&:hover {
background-color: var(--button-radio-background-color-rest);
color: var(--button-radio-foreground-color-hover);
@@ -324,7 +331,6 @@
}
.input-element {
- @include focusInput;
display: flex;
align-items: center;
height: $s-32;
@@ -349,6 +355,7 @@
color: var(--input-placeholder-color);
}
+ @include focusInput;
&:hover {
border: $s-1 solid var(--input-border-color-hover);
background-color: var(--input-background-color-hover);
diff --git a/frontend/resources/styles/common/refactor/borders.scss b/frontend/resources/styles/common/refactor/borders.scss
index 76949a647f..4c4d27ab00 100644
--- a/frontend/resources/styles/common/refactor/borders.scss
+++ b/frontend/resources/styles/common/refactor/borders.scss
@@ -5,12 +5,12 @@
// Copyright (c) KALEIDOS INC
// Border radius
-$br-0: $s-0;
-$br-2: $s-2;
-$br-4: $s-4;
+$br-0: 0;
+$br-2: 2px;
+$br-4: 4px;
$br-5: 0.313rem;
-$br-6: $s-6;
-$br-8: $s-8;
-$br-10: calc($s-8 + $s-2);
-$br-12: $s-12;
+$br-6: 6px;
+$br-8: 8px;
+$br-10: 10px;
+$br-12: 12px;
$br-circle: 50%;
diff --git a/frontend/resources/styles/common/refactor/common-refactor.scss b/frontend/resources/styles/common/refactor/common-refactor.scss
index 952beb6cc6..a6098ee978 100644
--- a/frontend/resources/styles/common/refactor/common-refactor.scss
+++ b/frontend/resources/styles/common/refactor/common-refactor.scss
@@ -8,13 +8,13 @@
// MAIN STYLES
//#################################################
-@import "common/refactor/fonts.scss";
-@import "common/refactor/spacing.scss";
-@import "common/refactor/borders.scss";
-@import "common/refactor/opacity.scss";
-@import "common/refactor/shadows.scss";
-@import "common/refactor/z-index.scss";
-@import "common/refactor/mixins.scss";
-@import "common/refactor/focus.scss";
-@import "common/refactor/animations.scss";
-@import "common/refactor/basic-rules.scss";
+@forward "./fonts.scss";
+@forward "./spacing.scss";
+@forward "./borders.scss";
+@forward "./opacity.scss";
+@forward "./shadows.scss";
+@forward "./z-index.scss";
+@forward "./mixins.scss";
+@forward "./focus.scss";
+@forward "./animations.scss";
+@forward "./basic-rules.scss";
diff --git a/frontend/resources/styles/common/refactor/design-tokens.scss b/frontend/resources/styles/common/refactor/design-tokens.scss
index 54ccc918ca..3caa88cdd5 100644
--- a/frontend/resources/styles/common/refactor/design-tokens.scss
+++ b/frontend/resources/styles/common/refactor/design-tokens.scss
@@ -384,11 +384,6 @@
--dashboard-list-foreground-color: var(--color-foreground-primary);
--dashboard-list-text-foreground-color: var(--color-foreground-secondary);
- --flow-tag-background-color: var(--color-background-tertiary);
- --flow-tag-foreground-color: var(--color-foreground-secondary);
- --flow-tag-background-color-hover: var(--color-background-quaternary);
- --flow-tag-foreground-color-hover: var(--color-accent-primary);
-
--communication-tag-background-color: var(--color-foreground-primary);
--communication-tag-foreground-color: var(--color-background-tertiary);
diff --git a/frontend/resources/styles/common/refactor/focus.scss b/frontend/resources/styles/common/refactor/focus.scss
index 8efdeebd5e..0ac2dde780 100644
--- a/frontend/resources/styles/common/refactor/focus.scss
+++ b/frontend/resources/styles/common/refactor/focus.scss
@@ -4,6 +4,8 @@
//
// Copyright (c) KALEIDOS INC
+@use "./spacing.scss" as *;
+
@mixin focusType($type) {
$realType: "";
@if $type {
diff --git a/frontend/resources/styles/common/refactor/mixins.scss b/frontend/resources/styles/common/refactor/mixins.scss
index f2d734ccf0..c4d07d09e2 100644
--- a/frontend/resources/styles/common/refactor/mixins.scss
+++ b/frontend/resources/styles/common/refactor/mixins.scss
@@ -4,6 +4,9 @@
//
// Copyright (c) KALEIDOS INC
+@use "./fonts.scss" as *;
+@use "./spacing.scss" as *;
+
@mixin flexCenter {
display: flex;
justify-content: center;
@@ -146,7 +149,6 @@
position: relative;
min-height: $s-32;
width: $s-144;
- max-width: $s-144;
padding: calc($s-8 - $s-1) 0 calc($s-8 - $s-1) calc($s-8 - $s-1);
border-radius: $s-8;
box-sizing: border-box;
diff --git a/frontend/resources/styles/common/refactor/shadows.scss b/frontend/resources/styles/common/refactor/shadows.scss
index ec1e172d2d..c936ca115d 100644
--- a/frontend/resources/styles/common/refactor/shadows.scss
+++ b/frontend/resources/styles/common/refactor/shadows.scss
@@ -4,6 +4,8 @@
//
// Copyright (c) KALEIDOS INC
+@use "./spacing.scss" as *;
+
@mixin menuShadow {
box-shadow: 0px 0px $s-12 0px var(--menu-shadow-color);
}
diff --git a/frontend/resources/styles/common/refactor/themes.scss b/frontend/resources/styles/common/refactor/themes.scss
index 3df0c6f253..9a5a9a1e64 100644
--- a/frontend/resources/styles/common/refactor/themes.scss
+++ b/frontend/resources/styles/common/refactor/themes.scss
@@ -4,5 +4,5 @@
//
// Copyright (c) KALEIDOS INC
-@import "./themes/default-theme.scss";
-@import "./themes/light-theme.scss";
+@forward "./themes/default-theme.scss";
+@forward "./themes/light-theme.scss";
diff --git a/frontend/resources/styles/main-default.scss b/frontend/resources/styles/main-default.scss
index 341606c7ea..5b6c1cb247 100644
--- a/frontend/resources/styles/main-default.scss
+++ b/frontend/resources/styles/main-default.scss
@@ -8,21 +8,21 @@
// MAIN STYLES
//#################################################
-@import "common/dependencies/reset";
-@import "common/refactor/color-defs.scss";
-@import "common/dependencies/fonts";
-@import "common/dependencies/animations";
-@import "common/dependencies/highlight.scss";
-@import "common/dependencies/storybook.scss";
+@forward "common/dependencies/reset";
+@forward "common/refactor/color-defs.scss";
+@forward "common/dependencies/fonts";
+@forward "common/dependencies/animations";
+@forward "common/dependencies/highlight.scss";
+@forward "common/dependencies/storybook.scss";
-@import "common/refactor/themes.scss";
-@import "common/refactor/design-tokens.scss";
+@forward "common/refactor/themes.scss";
+@forward "common/refactor/design-tokens.scss";
//#################################################
// Layouts
//#################################################
-@import "common/base";
+@forward "common/base";
//#################################################
// Commons
@@ -30,4 +30,4 @@
// TODO: remove this stylesheet once the new text editor is in place
// https: //tree.taiga.io/project/penpot/us/8165
-@import "main/partials/texts";
+@forward "main/partials/texts";
diff --git a/frontend/scripts/_worker.js b/frontend/scripts/_worker.js
index dab3e68c43..80ba2f6bf6 100644
--- a/frontend/scripts/_worker.js
+++ b/frontend/scripts/_worker.js
@@ -24,9 +24,9 @@ async function compileFile(path) {
"node_modules/animate.css",
"resources/styles/common/",
"resources/styles",
+ "src/app/main/ui/",
],
sourceMap: false,
- silenceDeprecations: ["import", "mixed-decls"],
});
// console.dir(result);
resolve({
diff --git a/frontend/scripts/build-storybook b/frontend/scripts/build-storybook
new file mode 100755
index 0000000000..8588fd7866
--- /dev/null
+++ b/frontend/scripts/build-storybook
@@ -0,0 +1,21 @@
+#!/usr/bin/env bash
+# NOTE: this script should be called from the parent directory to
+# properly work.
+
+export CURRENT_VERSION=$1;
+export BUILD_DATE=$(date -R);
+export CURRENT_HASH=${CURRENT_HASH:-$(git rev-parse --short HEAD)};
+export TS=$(date +%s);
+
+export NODE_ENV=production;
+
+echo "Current path:"
+echo $PATH
+
+set -ex
+
+corepack enable;
+corepack install || exit 1;
+yarn install || exit 1;
+
+yarn run build:storybook || exit 1;
diff --git a/frontend/scripts/watch.js b/frontend/scripts/watch.js
index eeeb06eec9..57e9be6016 100644
--- a/frontend/scripts/watch.js
+++ b/frontend/scripts/watch.js
@@ -5,6 +5,8 @@ import log from "fancy-log";
import * as h from "./_helpers.js";
import ppt from "pretty-time";
+const isDebug = process.env.NODE_ENV !== "production";
+
const worker = h.startWorker();
let sass = null;
@@ -16,6 +18,11 @@ async function compileSassAll() {
let output = await h.concatSass(sass);
await fs.writeFile("./resources/public/css/main.css", output);
+ if (isDebug) {
+ let debugCSS = await h.compileSassDebug(worker);
+ await fs.writeFile("./resources/public/css/debug.css", debugCSS);
+ }
+
const end = process.hrtime(start);
log.info("done: compile styles", `(${ppt(end)})`);
}
diff --git a/frontend/src/app/main.cljs b/frontend/src/app/main.cljs
index 06fde42430..d027e0ba57 100644
--- a/frontend/src/app/main.cljs
+++ b/frontend/src/app/main.cljs
@@ -29,6 +29,7 @@
[app.util.dom :as dom]
[app.util.i18n :as i18n]
[beicon.v2.core :as rx]
+ [cuerdas.core :as str]
[debug]
[features]
[potok.v2.core :as ptk]
@@ -42,8 +43,7 @@
:asserts *assert*
:build-date cf/build-date
:public-uri (dm/str cf/public-uri))
- (doseq [flag cf/flags]
- (log/dbg :hint "flag enabled" :flag (name flag))))
+ (log/inf :hint "enabled flags" :flags (str/join " " (map name cf/flags))))
(declare reinit)
diff --git a/frontend/src/app/main/data/changes.cljs b/frontend/src/app/main/data/changes.cljs
index 6f7799d088..8e914ec00f 100644
--- a/frontend/src/app/main/data/changes.cljs
+++ b/frontend/src/app/main/data/changes.cljs
@@ -12,6 +12,7 @@
[app.common.time :as ct]
[app.common.types.shape-tree :as ctst]
[app.common.uuid :as uuid]
+ [app.main.data.event :as ev]
[app.main.data.helpers :as dsh]
[app.main.worker :as mw]
[beicon.v2.core :as rx]
@@ -173,6 +174,8 @@
tags #{}}
:as params}]
(ptk/reify ::commit-changes
+ ev/PerformanceEvent
+
ptk/WatchEvent
(watch [_ state _]
(let [file-id (or file-id (:current-file-id state))
diff --git a/frontend/src/app/main/data/common.cljs b/frontend/src/app/main/data/common.cljs
index b202dfcdb1..101db147ff 100644
--- a/frontend/src/app/main/data/common.cljs
+++ b/frontend/src/app/main/data/common.cljs
@@ -10,7 +10,6 @@
[app.common.data :as d]
[app.common.data.macros :as dm]
[app.common.schema :as sm]
- [app.common.types.components-list :as ctkl]
[app.common.types.team :as ctt]
[app.main.data.helpers :as dsh]
[app.main.data.modal :as modal]
@@ -105,32 +104,21 @@
[file-id add-shared]
(ptk/reify ::show-shared-dialog
ptk/WatchEvent
- (watch [_ state _]
- (let [features (get state :features)
- file (dsh/lookup-file state)
- data (get file :data)]
-
- (->> (if (and data file)
- (rx/of {:name (:name file)
- :components-count (count (ctkl/components-seq data))
- :graphics-count (count (:media data))
- :colors-count (count (:colors data))
- :typography-count (count (:typographies data))})
- (rp/cmd! :get-file-summary {:id file-id :features features}))
- (rx/map (fn [summary]
- (let [count (+ (:components-count summary)
- (:graphics-count summary)
- (:colors-count summary)
- (:typography-count summary))]
- (modal/show
- {:type :confirm
- :title (tr "modals.add-shared-confirm.message" (:name summary))
- :message (if (zero? count) (tr "modals.add-shared-confirm-empty.hint") (tr "modals.add-shared-confirm.hint"))
- :cancel-label (if (zero? count) (tr "labels.cancel") :omit)
- :accept-label (tr "modals.add-shared-confirm.accept")
- :accept-style :primary
- :on-accept add-shared})))))))))
-
+ (watch [_ _ _]
+ (->> (rp/cmd! :get-file-summary {:id file-id})
+ (rx/map (fn [summary]
+ (let [count (+ (-> summary :components :count)
+ (-> summary :graphics :count)
+ (-> summary :colors :count)
+ (-> summary :typographies :count))]
+ (modal/show
+ {:type :confirm
+ :title (tr "modals.add-shared-confirm.message" (:name summary))
+ :message (if (zero? count) (tr "modals.add-shared-confirm-empty.hint") (tr "modals.add-shared-confirm.hint"))
+ :cancel-label (if (zero? count) (tr "labels.cancel") :omit)
+ :accept-label (tr "modals.add-shared-confirm.accept")
+ :accept-style :primary
+ :on-accept add-shared}))))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Exportations
diff --git a/frontend/src/app/main/data/dashboard.cljs b/frontend/src/app/main/data/dashboard.cljs
index 11da2135a0..8937c3180d 100644
--- a/frontend/src/app/main/data/dashboard.cljs
+++ b/frontend/src/app/main/data/dashboard.cljs
@@ -444,7 +444,7 @@
(when is-shared
(->> (rp/cmd! :get-file-summary {:id id})
(rx/map (fn [summary]
- (when (pos? (:variants-count summary))
+ (when (-> summary :variants :count pos?)
(ptk/event ::ev/event {::ev/name "set-file-variants-shared" ::ev/origin "dashboard"})))))))))))
(defn set-file-thumbnail
diff --git a/frontend/src/app/main/data/event.cljs b/frontend/src/app/main/data/event.cljs
index 79cbde6d7e..bc9a449a7b 100644
--- a/frontend/src/app/main/data/event.cljs
+++ b/frontend/src/app/main/data/event.cljs
@@ -8,15 +8,20 @@
(:require
["ua-parser-js" :as ua]
[app.common.data :as d]
+ [app.common.data.macros :as dm]
[app.common.json :as json]
[app.common.logging :as l]
+ [app.common.math :as math]
[app.common.time :as ct]
[app.config :as cf]
+ [app.main.refs :as refs]
[app.main.repo :as rp]
+ [app.main.store :as st]
[app.util.globals :as g]
[app.util.http :as http]
[app.util.i18n :as i18n]
[app.util.object :as obj]
+ [app.util.perf :as perf]
[app.util.storage :as storage]
[beicon.v2.core :as rx]
[beicon.v2.operators :as rxo]
@@ -34,6 +39,28 @@
;; Defines the time window (in ms) within events belong to the same session.
(def session-timeout (* 1000 60 30))
+
+;; Min time for a long task to be reported to telemetry
+(def min-longtask-time 1000)
+
+;; Min time between long task reports
+(def debounce-longtask-time 1000)
+
+;; Min time for a long task to be reported to telemetry
+(def min-browser-event-time 1000)
+
+;; Min time between long task reports
+(def debounce-browser-event-time 1000)
+
+;; Min time for a long task to be reported to telemetry
+(def min-performace-event-time 1000)
+
+;; Min time between long task reports
+(def debounce-performance-event-time 1000)
+
+;; Def micro-benchmark iterations
+(def micro-benchmark-iterations 1e6)
+
;; --- CONTEXT
(defn- collect-context
@@ -78,6 +105,8 @@
(defprotocol Event
(-data [_] "Get event data"))
+(defprotocol PerformanceEvent)
+
(defn- coerce-to-string
[v]
(cond
@@ -148,6 +177,48 @@
:context context
:props props}))))
+(defn performance-payload
+ ([result]
+ (let [props (aget result 0)
+ profile-id (aget result 1)]
+ (performance-payload profile-id props)))
+ ([profile-id props]
+ (let [{:keys [performance-info]} @st/state]
+ {:type "action"
+ :name "performance"
+ :context (merge @context performance-info)
+ :props props
+ :profile-id profile-id})))
+
+(defn- process-performance-event
+ [result]
+ (let [event (aget result 0)
+ profile-id (aget result 1)]
+
+ (if (and (satisfies? PerformanceEvent event)
+ (exists? js/globalThis)
+ (exists? (.-requestAnimationFrame js/globalThis))
+ (exists? (.-scheduler js/globalThis))
+ (exists? (.-postTask (.-scheduler js/globalThis))))
+ (rx/create
+ (fn [subs]
+ (let [start (perf/timestamp)]
+ (js/requestAnimationFrame
+ #(js/scheduler.postTask
+ (fn []
+ (let [time (- (perf/timestamp) start)]
+ (when (> time min-performace-event-time)
+ (rx/push!
+ subs
+ (performance-payload
+ profile-id
+ {::event (str (ptk/type event))
+ :time time}))))
+ (rx/end! subs))
+ #js {"priority" "user-blocking"})))
+ nil))
+ (rx/empty))))
+
(defn- process-event
[event]
(cond
@@ -183,10 +254,126 @@
(rx/of nil)))
+
+(defn performance-observer-event-stream
+ []
+ (if (and (exists? js/globalThis)
+ (exists? (.-PerformanceObserver js/globalThis)))
+ (rx/create
+ (fn [subs]
+ (let [observer
+ (js/PerformanceObserver.
+ (fn [list]
+ (run!
+ (fn [entry]
+ (when (and (= "event" (.-entryType entry))
+ (> (.-duration entry) min-browser-event-time))
+ (rx/push!
+ subs
+ {::event :observer-event
+ :duration (.-duration entry)
+ :event-name (.-name entry)})))
+ (.getEntries list))))]
+ (.observe observer #js {:entryTypes #js ["event"]})
+ (fn []
+ (.disconnect observer)))))
+ (rx/empty)))
+
+(defn performance-observer-longtask-stream
+ []
+ (if (and (exists? js/globalThis)
+ (exists? (.-PerformanceObserver js/globalThis)))
+ (rx/create
+ (fn [subs]
+ (let [observer
+ (js/PerformanceObserver.
+ (fn [list]
+ (run!
+ (fn [entry]
+ (when (and (= "longtask" (.-entryType entry))
+ (> (.-duration entry) min-longtask-time))
+ (rx/push! subs
+ {::event :observer-longtask
+ :duration (.-duration entry)})))
+ (.getEntries list))))]
+ (.observe observer #js {:entryTypes #js ["longtask"]})
+ (fn []
+ (.disconnect observer)))))
+ (rx/empty)))
+
+(defn- save-performance-info
+ []
+ (ptk/reify ::save-performance-info
+ ptk/UpdateEvent
+ (update [_ state]
+ (letfn [(count-shapes [file]
+ (->> file :data :pages-index
+ (reduce-kv
+ (fn [sum _ page]
+ (+ sum (count (:objects page))))
+ 0)))
+ (count-library-data [files {:keys [id]}]
+ (let [data (dm/get-in files [id :data])]
+ {:components (count (:components data))
+ :colors (count (:colors data))
+ :typographies (count (:typographies data))}))]
+ (let [file-id (get state :current-file-id)
+ file (get-in state [:files file-id])
+ file-size (count-shapes file)
+
+ libraries
+ (-> (refs/select-libraries (:files state) (:id file))
+ (d/update-vals (partial count-library-data (:files state))))
+
+ lib-sizes
+ (->> libraries
+ (reduce-kv
+ (fn [acc _ {:keys [components colors typographies]}]
+ (-> acc
+ (update :components + components)
+ (update :colors + colors)
+ (update :typographies + typographies)))
+ {}))]
+ (update state :performance-info
+ (fn [info]
+ (-> info
+ (assoc :file-size file-size)
+ (assoc :library-sizes lib-sizes)
+ (assoc :file-start-time (perf/now))))))))))
+
+(defn store-performace-info
+ []
+ (letfn [(micro-benchmark [state]
+ (let [start (perf/now)]
+ (loop [i micro-benchmark-iterations]
+ (when-not (zero? i)
+ (* (math/sin i) (math/sqrt i))
+ (recur (dec i))))
+ (let [end (perf/now)]
+ (update state :performance-info assoc :bench-result (- end start)))))]
+
+ (ptk/reify ::store-performace-info
+ ptk/UpdateEvent
+ (update [_ state]
+ (-> state
+ micro-benchmark
+ (assoc-in [:performance-info :app-start-time] (perf/now))))
+
+ ptk/WatchEvent
+ (watch [_ _ stream]
+ (->> stream
+ (rx/filter (ptk/type? :app.main.data.workspace/all-libraries-resolved))
+ (rx/take 1)
+ (rx/map save-performance-info))))))
+
(defn initialize
[]
(when (contains? cf/flags :audit-log)
(ptk/reify ::initialize
+ ptk/WatchEvent
+ (watch [_ _ _]
+ (rx/of (store-performace-info)))
+
ptk/EffectEvent
(effect [_ _ stream]
(let [session (atom nil)
@@ -223,13 +410,30 @@
(fn []
(l/debug :hint "audit persistence terminated"))))
- (->> stream
- (rx/with-latest-from profile)
- (rx/map (fn [result]
- (let [event (aget result 0)
- profile-id (aget result 1)]
- (some-> (process-event event)
- (update :profile-id #(or % profile-id))))))
+ (->> (rx/merge
+ (->> stream
+ (rx/with-latest-from profile)
+ (rx/map (fn [result]
+ (let [event (aget result 0)
+ profile-id (aget result 1)]
+ (some-> (process-event event)
+ (update :profile-id #(or % profile-id)))))))
+
+ (->> (performance-observer-event-stream)
+ (rx/with-latest-from profile)
+ (rx/map performance-payload)
+ (rx/debounce debounce-browser-event-time))
+
+ (->> (performance-observer-longtask-stream)
+ (rx/with-latest-from profile)
+ (rx/map performance-payload)
+ (rx/debounce debounce-longtask-time))
+
+ (->> stream
+ (rx/with-latest-from profile)
+ (rx/merge-map process-performance-event)
+ (rx/debounce debounce-performance-event-time)))
+
(rx/filter :profile-id)
(rx/map (fn [event]
(let [session* (or @session (ct/now))
diff --git a/frontend/src/app/main/data/profile.cljs b/frontend/src/app/main/data/profile.cljs
index 33186a7208..01dd5ba7d3 100644
--- a/frontend/src/app/main/data/profile.cljs
+++ b/frontend/src/app/main/data/profile.cljs
@@ -407,7 +407,8 @@
(watch [_ _ _]
(let [{:keys [on-error on-success]
:or {on-error rx/throw
- on-success identity}} (meta data)]
+ on-success identity}}
+ (meta data)]
(->> (rp/cmd! :request-profile-recovery data)
(rx/tap on-success)
diff --git a/frontend/src/app/main/data/style_dictionary.cljs b/frontend/src/app/main/data/style_dictionary.cljs
index b341d35a96..1262b1d134 100644
--- a/frontend/src/app/main/data/style_dictionary.cljs
+++ b/frontend/src/app/main/data/style_dictionary.cljs
@@ -12,7 +12,7 @@
[app.common.logging :as l]
[app.common.schema :as sm]
[app.common.time :as ct]
- [app.common.types.token :as ctt]
+ [app.common.types.token :as cto]
[app.common.types.tokens-lib :as ctob]
[app.main.data.tinycolor :as tinycolor]
[app.main.data.workspace.tokens.errors :as wte]
@@ -88,8 +88,8 @@
out-of-bounds
{:errors [(wte/error-with-value :error.token/number-too-large value)]}
- (seq (ctob/find-token-value-references value))
- (let [references (seq (ctob/find-token-value-references value))]
+ (seq (cto/find-token-value-references value))
+ (let [references (seq (cto/find-token-value-references value))]
{:errors [(wte/error-with-value :error.style-dictionary/missing-reference references)]
:references references})
@@ -110,7 +110,7 @@
parsed-value
(if out-of-bounds
{:errors [(wte/error-with-value :error.token/number-too-large value)]}
- (if-let [references (seq (ctob/find-token-value-references value))]
+ (if-let [references (seq (cto/find-token-value-references value))]
{:errors [(wte/error-with-value :error.style-dictionary/missing-reference references)]
:references references}
{:errors [(wte/error-with-value :error.style-dictionary/invalid-token-value value)]})))))
@@ -120,10 +120,10 @@
If the `value` is not parseable and/or has missing references returns a map with `:errors`.
If the `value` is parseable but is out of range returns a map with `warnings`."
[value]
- (let [missing-references? (seq (ctob/find-token-value-references value))
+ (let [missing-references? (seq (cto/find-token-value-references value))
parsed-value (cft/parse-token-value value)
out-of-scope (not (<= 0 (:value parsed-value) 1))
- references (seq (ctob/find-token-value-references value))]
+ references (seq (cto/find-token-value-references value))]
(cond (and parsed-value (not out-of-scope))
parsed-value
@@ -144,10 +144,10 @@
If the `value` is not parseable and/or has missing references returns a map with `:errors`.
If the `value` is parseable but is out of range returns a map with `warnings`."
[value]
- (let [missing-references? (seq (ctob/find-token-value-references value))
+ (let [missing-references? (seq (cto/find-token-value-references value))
parsed-value (cft/parse-token-value value)
out-of-scope (< (:value parsed-value) 0)
- references (seq (ctob/find-token-value-references value))]
+ references (seq (cto/find-token-value-references value))]
(cond
(and parsed-value (not out-of-scope))
parsed-value
@@ -179,7 +179,7 @@
[value]
(let [normalized-value (str/lower (str/trim value))
valid? (contains? #{"none" "uppercase" "lowercase" "capitalize"} normalized-value)
- references (seq (ctob/find-token-value-references value))]
+ references (seq (cto/find-token-value-references value))]
(cond
valid?
{:value normalized-value}
@@ -195,8 +195,8 @@
"Parses `value` of a text-decoration `sd-token` into a map like `{:value \"underline\"}`.
If the `value` is not parseable and/or has missing references returns a map with `:errors`."
[value]
- (let [valid-text-decoration (ctt/valid-text-decoration value)
- references (seq (ctob/find-token-value-references value))]
+ (let [valid-text-decoration (cto/valid-text-decoration value)
+ references (seq (cto/find-token-value-references value))]
(cond
valid-text-decoration
{:value valid-text-decoration}
@@ -212,8 +212,8 @@
"Parses `value` of a font-weight `sd-token` into a map like `{:value \"700\"}` or `{:value \"700 Italic\"}`.
If the `value` is not parseable and/or has missing references returns a map with `:errors`."
[value]
- (let [valid-font-weight (ctt/valid-font-weight-variant value)
- references (seq (ctob/find-token-value-references value))]
+ (let [valid-font-weight (cto/valid-font-weight-variant value)
+ references (seq (cto/find-token-value-references value))]
(cond
valid-font-weight
{:value value}
@@ -225,9 +225,37 @@
:else
{:errors [(wte/error-with-value :error.style-dictionary/invalid-token-value-font-weight value)]})))
+(defn- parse-sd-token-typography-line-height
+ "Parses `line-height-value` of a composite typography token.
+ 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))
+ error
+ (cond
+ missing-references
+ {:errors [(wte/error-with-value :error.style-dictionary/missing-reference missing-references)]
+ :references missing-references}
+
+ (or
+ (not font-size-value)
+ (seq font-size-errors))
+ {:errors [(wte/error-with-value :error.style-dictionary/composite-line-height-needs-font-size font-size-value)]
+ :font-size-value font-size-value})]
+ (or error
+ (try
+ (when-let [{:keys [unit value]} (cft/parse-token-value line-height-value)]
+ (case unit
+ "%" (/ value 100)
+ "px" (/ value font-size-value)
+ nil value
+ nil))
+ (catch :default _ nil))
+ {:errors [(wte/error-with-value :error.style-dictionary/invalid-token-value line-height-value)]})))
+
(defn- parse-sd-token-font-family-value
[value]
- (let [missing-references (seq (some ctob/find-token-value-references value))]
+ (let [missing-references (seq (some cto/find-token-value-references value))]
(cond
missing-references
{:errors [(wte/error-with-value :error.style-dictionary/missing-reference missing-references)]
@@ -247,10 +275,12 @@
nil))
(defn- parse-composite-typography-value
+ "Parses composite typography `value` map.
+ Processes the `:line-height` based on the `:font-size` value in the map."
[value]
(let [missing-references
(when (string? value)
- (seq (ctob/find-token-value-references value)))]
+ (seq (cto/find-token-value-references value)))]
(cond
missing-references
{:errors [(wte/error-with-value :error.style-dictionary/missing-reference missing-references)]
@@ -261,14 +291,34 @@
:else
(let [converted (js->clj value :keywordize-keys true)
+ add-keyed-errors (fn [typography-map k errors]
+ (update typography-map :errors concat (map #(assoc % :typography-key k) errors)))
+ ;; Separate line-height to process in an extra step
+ without-line-height (dissoc converted :line-height)
valid-typography (reduce
(fn [acc [k v]]
(let [{:keys [errors value]} (parse-atomic-typography-value k v)]
(if (seq errors)
- (update acc :errors concat (map #(assoc % :typography-key k) errors))
+ (add-keyed-errors acc k errors)
(assoc-in acc [:value k] (or value v)))))
{:value {}}
- converted)]
+ without-line-height)
+
+ ;; Calculate line-height based on the resolved font-size and add it back to the map
+ line-height (when-let [line-height (:line-height converted)]
+ (-> (parse-sd-token-typography-line-height
+ line-height
+ (get-in valid-typography [:value :font-size])
+ (get-in valid-typography [:errors :font-size]))))
+ valid-typography (cond
+ (:errors line-height)
+ (add-keyed-errors valid-typography :line-height (:errors line-height))
+
+ line-height
+ (assoc-in valid-typography [:value :line-height] line-height)
+
+ :else
+ valid-typography)]
valid-typography))))
(defn collect-typography-errors [token]
@@ -417,7 +467,6 @@
;; FIXME: this with effect with trigger all the time because
;; `config` will be always a different instance
-
(mf/with-effect [tokens config]
(let [cached (get @cache-atom tokens)]
(cond
diff --git a/frontend/src/app/main/data/team.cljs b/frontend/src/app/main/data/team.cljs
index 3b63bdd5af..059ac58140 100644
--- a/frontend/src/app/main/data/team.cljs
+++ b/frontend/src/app/main/data/team.cljs
@@ -23,6 +23,7 @@
[app.util.storage :as storage]
[app.util.webapi :as wapi]
[beicon.v2.core :as rx]
+ [clojure.string :as str]
[potok.v2.core :as ptk]))
(log/set-level! :warn)
@@ -351,26 +352,46 @@
(rx/catch on-error))))))
(defn create-invitations
- [{:keys [emails role team-id resend?] :as params}]
+ "Unified function to create invitations. Supports two parameter formats:
+ 1. {:emails #{...} :role :admin :team-id uuid} - single role for all emails
+ 2. {:invitations [{:email ... :role ...}] :team-id uuid} - individual roles per email"
+ [{:keys [emails role team-id invitations resend?] :as params}]
- (assert (keyword? role))
(assert (uuid? team-id))
- (assert (sm/check-set-of-emails emails))
+ ;; Validate input format - must have either emails+role OR invitations
+ (assert (or (and emails role (sm/check-set-of-emails emails) (keyword? role))
+ (and invitations
+ (sm/check-set-of-emails (map :email invitations))
+ (every? #(contains? ctt/valid-roles (:role %)) invitations)))
+ "Must provide either emails+role or invitations with individual roles")
(ptk/reify ::create-invitations
ev/Event
(-data [_]
- {:role role
+ {:role (if invitations
+ (->> invitations (map :role) distinct (map name) (str/join ", "))
+ (name role))
:team-id team-id
- :resend resend?})
+ :resend (boolean resend?)})
ptk/WatchEvent
(watch [it _ _]
(let [{:keys [on-success on-error]
:or {on-success identity
on-error rx/throw}} (meta params)
- params (dissoc params :resend?)]
- (->> (rp/cmd! :create-team-invitations (with-meta params (meta it)))
+ ;; Prepare parameters based on format
+ rpc-params (cond
+ ;; Format 1: emails + single role
+ (and emails role)
+ {:emails emails :role role :team-id team-id}
+
+ ;; Format 2: invitations with individual roles
+ invitations
+ {:invitations invitations :team-id team-id}
+
+ :else
+ (throw (ex-info " Invalid parameters " params)))]
+ (->> (rp/cmd! :create-team-invitations (with-meta rpc-params (meta it)))
(rx/tap on-success)
(rx/catch on-error))))))
diff --git a/frontend/src/app/main/data/workspace.cljs b/frontend/src/app/main/data/workspace.cljs
index 048908202f..d32d9b0439 100644
--- a/frontend/src/app/main/data/workspace.cljs
+++ b/frontend/src/app/main/data/workspace.cljs
@@ -17,12 +17,11 @@
[app.common.geom.proportions :as gpp]
[app.common.geom.shapes :as gsh]
[app.common.logging :as log]
+ [app.common.path-names :as cpn]
[app.common.transit :as t]
[app.common.types.component :as ctc]
- [app.common.types.fills :as types.fills]
[app.common.types.shape :as cts]
[app.common.uuid :as uuid]
- [app.config :as cf]
[app.main.data.changes :as dch]
[app.main.data.comments :as dcmt]
[app.main.data.common :as dcm]
@@ -77,11 +76,10 @@
[app.util.timers :as tm]
[app.util.webapi :as wapi]
[beicon.v2.core :as rx]
- [clojure.walk :as walk]
[cuerdas.core :as str]
[potok.v2.core :as ptk]))
-(log/set-level! :debug)
+(log/set-level! :info)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Workspace Initialization
@@ -89,7 +87,6 @@
(declare ^:private workspace-initialized)
(declare ^:private fetch-libraries)
-(declare ^:private libraries-fetched)
;; --- Initialize Workspace
@@ -131,37 +128,20 @@
(rx/of [k v])))))))
(rx/reduce conj {})))
-
-(defn process-fills
- "A function responsible to analyze the file data or shape for references
- and apply lookup-index on it."
- [data]
- (letfn [(process-map-form [form]
- (let [fills (get form :fills)]
- (if (vector? fills)
- (assoc form :fills (types.fills/from-plain fills))
- form)))
-
- (process-form [form]
- (if (map? form)
- (process-map-form form)
- form))]
- (if (contains? cf/flags :frontend-binary-fills)
- (walk/postwalk process-form data)
- data)))
-
(defn- resolve-file
[file]
+ (log/inf :hint "resolve file"
+ :file-id (str (:id file))
+ :features (str/join " " (:features file)))
(->> (fpmap/resolve-file file)
(rx/map :data)
- (rx/map process-fills)
(rx/map
(fn [data]
(assoc file :data (d/removem (comp t/pointer? val) data))))))
-(defn- check-libraries-synchronozation
+(defn- check-libraries-synchronization
[file-id libraries]
- (ptk/reify ::check-libraries-synchronozation
+ (ptk/reify ::check-libraries-synchronization
ptk/WatchEvent
(watch [_ state _]
(let [file (dsh/lookup-file state file-id)
@@ -174,7 +154,7 @@
libraries)]
(when needs-check?
- (->> (rx/of (dwl/notify-sync-file file-id))
+ (->> (rx/of (dwl/notify-sync-file))
(rx/delay 1000)))))))
(defn- library-resolved
@@ -184,40 +164,36 @@
(update [_ state]
(update state :files assoc (:id library) library))))
-(defn- libraries-fetched
- [file-id libraries]
- (ptk/reify ::libraries-fetched
- ptk/UpdateEvent
- (update [_ state]
- (update state :files merge
- (->> libraries
- (map #(assoc % :library-of file-id))
- (d/index-by :id))))))
-
(defn- fetch-libraries
[file-id features]
(ptk/reify ::fetch-libries
ptk/WatchEvent
- (watch [_ _ _]
- (->> (rp/cmd! :get-file-libraries {:file-id file-id})
- (rx/mapcat
- (fn [libraries]
- (rx/concat
- (rx/of (libraries-fetched file-id libraries))
- (rx/merge
- (->> (rx/from libraries)
- (rx/merge-map
- (fn [{:keys [id synced-at]}]
- (->> (rp/cmd! :get-file {:id id :features features})
- (rx/map #(assoc % :synced-at synced-at :library-of file-id)))))
- (rx/mapcat resolve-file)
- (rx/map library-resolved))
- (->> (rx/from libraries)
- (rx/map :id)
- (rx/mapcat (fn [file-id]
- (rp/cmd! :get-file-object-thumbnails {:file-id file-id :tag "component"})))
- (rx/map dwl/library-thumbnails-fetched)))
- (rx/of (check-libraries-synchronozation file-id libraries)))))))))
+ (watch [_ _ stream]
+ (let [stopper-s (rx/filter (ptk/type? ::finalize-workspace) stream)]
+ (->> (rx/concat
+ (->> (rp/cmd! :get-file-libraries {:file-id file-id})
+ (rx/mapcat
+ (fn [libraries]
+ (rx/concat
+ (rx/of (dwl/libraries-fetched file-id libraries))
+ (rx/merge
+ (->> (rx/from libraries)
+ (rx/merge-map
+ (fn [{:keys [id synced-at]}]
+ (->> (rp/cmd! :get-file {:id id :features features})
+ (rx/map #(assoc % :synced-at synced-at :library-of file-id)))))
+ (rx/mapcat resolve-file)
+ (rx/map library-resolved))
+ (->> (rx/from libraries)
+ (rx/map :id)
+ (rx/mapcat (fn [file-id]
+ (rp/cmd! :get-file-object-thumbnails {:file-id file-id :tag "component"})))
+ (rx/map dwl/library-thumbnails-fetched)))
+ (rx/of (check-libraries-synchronization file-id libraries))))))
+
+ ;; This events marks that all the libraries have been resolved
+ (rx/of (ptk/data-event ::all-libraries-resolved)))
+ (rx/take-until stopper-s))))))
(defn- workspace-initialized
[file-id]
@@ -563,7 +539,7 @@
(when-let [shape-id (d/nilv shape-id (dm/get-in state [:workspace-local :shape-for-rename]))]
(let [shape (dsh/lookup-shape state shape-id)
name (str/trim name)
- clean-name (cfh/clean-path name)
+ clean-name (cpn/clean-path name)
valid? (and (not (str/ends-with? name "/"))
(string? clean-name)
(not (str/blank? clean-name)))
@@ -940,8 +916,8 @@
fdata (dsh/lookup-file-data state file-id)
component (cfv/get-primary-component fdata component-id)
cpath (:path component)
- cpath (cfh/split-path cpath)
- paths (map (fn [i] (cfh/join-path (take (inc i) cpath)))
+ cpath (cpn/split-path cpath)
+ paths (map (fn [i] (cpn/join-path (take (inc i) cpath)))
(range (count cpath)))]
(rx/concat
(rx/from (map #(set-assets-group-open file-id :components % true) paths))
diff --git a/frontend/src/app/main/data/workspace/clipboard.cljs b/frontend/src/app/main/data/workspace/clipboard.cljs
index f53519074f..194fe983d7 100644
--- a/frontend/src/app/main/data/workspace/clipboard.cljs
+++ b/frontend/src/app/main/data/workspace/clipboard.cljs
@@ -848,6 +848,10 @@
index
0)
+ index (if index
+ index
+ (dec (count (dm/get-in page-objects [parent-id :shapes]))))
+
selected (if (and (ctl/flex-layout? page-objects parent-id) (not (ctl/reverse? page-objects parent-id)))
(into (d/ordered-set) (reverse selected))
selected)
@@ -874,12 +878,17 @@
orig-shapes (map (d/getf all-objects) selected)
+ children-after (-> (pcb/get-objects changes)
+ (dm/get-in [parent-id :shapes])
+ set)
+
+ ;; At the end of the process, we want to select the new created shapes
+ ;; that are a direct child of the shape parent-id
selected (into (d/ordered-set)
(comp
(filter add-obj?)
- (filter #(contains? selected (:old-id %)))
- (map :obj)
- (map :id))
+ (map (comp :id :obj))
+ (filter #(contains? children-after %)))
(:redo-changes changes))
changes (cond-> changes
diff --git a/frontend/src/app/main/data/workspace/colors.cljs b/frontend/src/app/main/data/workspace/colors.cljs
index 266df3483c..e03ba440b7 100644
--- a/frontend/src/app/main/data/workspace/colors.cljs
+++ b/frontend/src/app/main/data/workspace/colors.cljs
@@ -16,7 +16,6 @@
[app.common.types.shape :as shp]
[app.common.types.shape.shadow :refer [check-shadow]]
[app.common.types.text :as txt]
- [app.config :as cfg]
[app.main.broadcast :as mbc]
[app.main.data.helpers :as dsh]
[app.main.data.modal :as md]
@@ -155,23 +154,8 @@
(transform-fill* state ids transform-attrs options))))
-(defn swap-attrs [shape attr index new-index]
- (let [first (get-in shape [attr index])
- second (get-in shape [attr new-index])]
- (-> shape
- (assoc-in [attr index] second)
- (assoc-in [attr new-index] first))))
-
-(defn- swap-fills-index
- [fills index new-index]
- (let [first (get fills index)
- second (get fills new-index)]
- (-> fills
- (assoc index second)
- (assoc new-index first))))
-
(defn reorder-fills
- [ids index new-index]
+ [ids from-pos to-space-between-pos]
(ptk/reify ::reorder-fills
ptk/WatchEvent
(watch [_ state _]
@@ -183,7 +167,7 @@
transform-attrs
(fn [object]
- (update object :fills types.fills/update swap-fills-index index new-index))]
+ (update object :fills types.fills/update d/reorder from-pos to-space-between-pos))]
(rx/concat
(rx/from (map #(dwt/update-text-with-function % transform-attrs) text-ids))
@@ -516,22 +500,22 @@
{:attrs [:strokes]}))))))
(defn reorder-shadows
- [ids index new-index]
+ [ids from-pos to-space-between-pos]
(ptk/reify ::reorder-shadow
ptk/WatchEvent
(watch [_ _ _]
(rx/of (dwsh/update-shapes
ids
- #(swap-attrs % :shadow index new-index))))))
+ #(update % :shadow d/reorder from-pos to-space-between-pos))))))
(defn reorder-strokes
- [ids index new-index]
+ [ids from-pos to-space-between-pos]
(ptk/reify ::reorder-strokes
ptk/WatchEvent
(watch [_ _ _]
(rx/of (dwsh/update-shapes
ids
- #(swap-attrs % :strokes index new-index)
+ #(update % :strokes d/reorder from-pos to-space-between-pos)
{:attrs [:strokes]})))))
(defn picker-for-selected-shape
@@ -899,7 +883,7 @@
(update [_ state]
(update state :colorpicker
(fn [{:keys [stops editing-stop] :as state}]
- (let [cap-stops? (or (features/active-feature? state "render-wasm/v1") (contains? cfg/flags :frontend-binary-fills))
+ (let [cap-stops? (features/active-feature? state "render-wasm/v1")
can-add-stop? (or (not cap-stops?) (< (count stops) types.fills/MAX-GRADIENT-STOPS))]
(if can-add-stop?
(if (clr/uniform-spread? stops)
@@ -945,9 +929,9 @@
(update state :colorpicker
(fn [state]
(let [stops (:stops state)
+
cap-stops?
- (or (features/active-feature? state "render-wasm/v1")
- (contains? cfg/flags :frontend-binary-fills))
+ (features/active-feature? state "render-wasm/v1")
can-add-stop?
(or (not cap-stops?) (< (count stops) types.fills/MAX-GRADIENT-STOPS))]
@@ -972,8 +956,7 @@
(update state :colorpicker
(fn [state]
(let [stop (or (:editing-stop state) 0)
- cap-stops? (or (features/active-feature? state "render-wasm/v1")
- (contains? cfg/flags :frontend-binary-fills))
+ cap-stops? (features/active-feature? state "render-wasm/v1")
stops (mapv split-color-components
(if cap-stops?
(take types.fills/MAX-GRADIENT-STOPS stops)
diff --git a/frontend/src/app/main/data/workspace/libraries.cljs b/frontend/src/app/main/data/workspace/libraries.cljs
index 287531d458..1ad85bd56a 100644
--- a/frontend/src/app/main/data/workspace/libraries.cljs
+++ b/frontend/src/app/main/data/workspace/libraries.cljs
@@ -17,6 +17,7 @@
[app.common.logic.libraries :as cll]
[app.common.logic.shapes :as cls]
[app.common.logic.variants :as clv]
+ [app.common.path-names :as cpn]
[app.common.time :as ct]
[app.common.types.color :as ctc]
[app.common.types.component :as ctk]
@@ -103,7 +104,7 @@
(defn extract-path-if-missing
[item]
- (let [[path name] (cfh/parse-path-name (:name item))]
+ (let [[path name] (cpn/split-group-name (:name item))]
(if (and
(= (:name item) name)
(contains? item :path))
@@ -145,7 +146,7 @@
(defn- update-color*
[it state color file-id]
(let [data (dsh/lookup-file-data state)
- [path name] (cfh/parse-path-name (:name color))
+ [path name] (cpn/split-group-name (:name color))
color (assoc color :path path :name name)
changes (-> (pcb/empty-changes it)
(pcb/with-library-data data)
@@ -250,7 +251,7 @@
(let [new-name (str/trim new-name)]
(if (str/empty? new-name)
(rx/empty)
- (let [[path name] (cfh/parse-path-name new-name)
+ (let [[path name] (cpn/split-group-name new-name)
data (dsh/lookup-file-data state)
object (get-in data [:media id])
new-object (assoc object :path path :name name)
@@ -327,7 +328,7 @@
(watch [it state _]
(when (and (some? new-name) (not= "" new-name))
(let [data (dsh/lookup-file-data state)
- [path name] (cfh/parse-path-name new-name)
+ [path name] (cpn/split-group-name new-name)
object (get-in data [:typographies id])
new-object (assoc object :path path :name name)]
(do-update-tipography it state new-object file-id))))))
@@ -449,7 +450,7 @@
ptk/WatchEvent
(watch [_ state _]
(let [name (str/trim name)
- clean-name (cfh/clean-path name)
+ clean-name (cpn/clean-path name)
valid? (and (not (str/ends-with? name "/"))
(string? clean-name)
(not (str/blank? clean-name)))
@@ -709,11 +710,14 @@
(fn [ids]
(let [parent-ids (when update-layout?
(map #(-> (get objects %) :parent-id) ids))]
- (rx/of
- (dws/select-shapes ids)
- dwz/zoom-to-selected-shape
+ (rx/concat
+ (rx/of
+ (dws/select-shapes ids)
+ dwz/zoom-to-selected-shape)
(when update-layout?
- (ptk/data-event :layout/update {:ids parent-ids})))))
+ (->> (rx/of (ptk/data-event :layout/update {:ids parent-ids}))
+ ;; Delay so the navigation can finish
+ (rx/delay 250))))))
redirect-to-page
(fn [page-id ids]
@@ -1189,19 +1193,22 @@
(ctf/used-assets-changed-since file-data library sync-date))))))
(defn notify-sync-file
- ;; file-id is the id of the modified library
- [file-id]
- (dm/assert! (uuid? file-id))
+ "Notify the user that there are updates in the libraries used by the
+ current file, and ask if he wants to update them now."
+ []
(ptk/reify ::notify-sync-file
ptk/WatchEvent
(watch [_ state _]
- (let [file (dsh/lookup-file state (:current-file-id state))
+ (let [file-id (:current-file-id state)
+ file (dsh/lookup-file state file-id)
file-data (get file :data)
ignore-until (get file :ignore-sync-until)
libraries-need-sync
- (filter #(seq (assets-need-sync % file-data ignore-until))
- (vals (get state :files)))
+ (->> (vals (get state :files))
+ (filter #(= (:library-of %) file-id))
+ (filter #(seq (assets-need-sync % file-data ignore-until))))
+
do-more-info
#(modal/show! :libraries-dialog {:starting-tab "updates" :file-id file-id})
@@ -1380,6 +1387,32 @@
;; --- Link and unlink Files
+(defn libraries-fetched
+ [file-id libraries]
+ (ptk/reify ::libraries-fetched
+ ptk/UpdateEvent
+ (update [_ state]
+ (update state :files merge
+ (->> libraries
+ (map #(assoc % :library-of file-id))
+ (d/index-by :id))))))
+
+(defn- load-library-file
+ [file-id library-id]
+ (ptk/reify ::load-library-file
+ ptk/WatchEvent
+ (watch [_ state _]
+ (let [features (get state :features)]
+ (rx/merge
+ (->> (rp/cmd! :get-file {:id library-id :features features})
+ (rx/merge-map fpmap/resolve-file)
+ (rx/map (fn [file]
+ (libraries-fetched file-id [file]))))
+ (->> (rp/cmd! :get-file-object-thumbnails {:file-id library-id :tag "component"})
+ (rx/map (fn [thumbnails]
+ (fn [state]
+ (update state :thumbnails merge thumbnails))))))))))
+
(defn link-file-to-library
[file-id library-id]
(ptk/reify ::attach-library
@@ -1389,41 +1422,26 @@
:file-id file-id
:library-id library-id})
- ;; NOTE: this event implements UpdateEvent protocol for perform an
- ;; optimistic update state for make the UI feel more responsive.
- ptk/UpdateEvent
- (update [_ state]
- (let [libraries (:workspace-shared-files state)
- library (d/seek #(= (:id %) library-id) libraries)]
- (if library
- (update state :files assoc library-id
- (-> library
- (dissoc :library-summary)
- (assoc :library-of file-id)))
- state)))
-
ptk/WatchEvent
(watch [_ state _]
- (let [libraries (:shared-files state)
- library (get libraries library-id)
- features (get state :features)
- variants-count (-> library :library-summary :components :variants-count)]
+ (let [libraries (:shared-files state)
+ library (get libraries library-id)
+ variants-count (-> library :library-summary :variants count)
+
+ loaded-libraries (->> (dsh/lookup-libraries state)
+ (remove (fn [[_ lib]]
+ (or (nil? (:data lib))
+ (empty? (:data lib)))))
+ (map first)
+ set)]
(rx/concat
(rx/merge
(->> (rp/cmd! :link-file-to-library {:file-id file-id :library-id library-id})
- (rx/ignore))
- (->> (rp/cmd! :get-file {:id library-id :features features})
- (rx/merge-map fpmap/resolve-file)
- ;; FIXME: this should call the libraries-fetched event instead of ad-hoc assoc event
- (rx/map (fn [file]
- (assoc file :library-of file-id)))
- (rx/map (fn [file]
- (fn [state]
- (assoc-in state [:files library-id] file)))))
- (->> (rp/cmd! :get-file-object-thumbnails {:file-id library-id :tag "component"})
- (rx/map (fn [thumbnails]
- (fn [state]
- (update state :thumbnails merge thumbnails))))))
+ (rx/merge-map (fn [libraries-to-load]
+ (as-> libraries-to-load $
+ (remove loaded-libraries $)
+ (conj $ library-id)
+ (map #(load-library-file file-id %) $))))))
(rx/of (ptk/reify ::attach-library-finished))
(when (pos? variants-count)
(->> (rp/cmd! :get-library-usage {:file-id library-id})
diff --git a/frontend/src/app/main/data/workspace/modifiers.cljs b/frontend/src/app/main/data/workspace/modifiers.cljs
index 23b751c72e..123f8cee78 100644
--- a/frontend/src/app/main/data/workspace/modifiers.cljs
+++ b/frontend/src/app/main/data/workspace/modifiers.cljs
@@ -191,20 +191,6 @@
(d/not-empty? position-data)
(assoc :position-data position-data))))
-(defn update-grow-type
- [shape old-shape]
- (let [auto-width? (= :auto-width (:grow-type shape))
- auto-height? (= :auto-height (:grow-type shape))
-
- changed-width? (> (mth/abs (- (:width shape) (:width old-shape))) 0.1)
- changed-height? (> (mth/abs (- (:height shape) (:height old-shape))) 0.1)
-
- change-to-fixed? (or (and auto-width? (or changed-height? changed-width?))
- (and auto-height? changed-height?))]
- (cond-> shape
- change-to-fixed?
- (assoc :grow-type :fixed))))
-
(defn- set-wasm-props!
[objects prev-wasm-props wasm-props]
(let [;; Set old value for previous properties
@@ -800,9 +786,7 @@
(-> shape
(gsh/transform-shape modifiers)
(cond-> (d/not-empty? pos-data)
- (assoc-position-data pos-data shape))
- (cond-> text-shape?
- (update-grow-type shape)))))]
+ (assoc-position-data pos-data shape)))))]
(rx/of (ptk/event ::dwg/move-frame-guides {:ids ids-with-children :modifiers object-modifiers})
(ptk/event ::dwcm/move-frame-comment-threads ids-with-children)
@@ -847,23 +831,20 @@
(rx/empty))))))))
;; Pure function to determine next grow-type for text layers
-(defn next-grow-type [current-grow-type resize-direction]
+(defn next-grow-type
+ [current-grow-type scalev]
(cond
(= current-grow-type :fixed)
:fixed
- (and (= resize-direction :horizontal)
- (= current-grow-type :auto-width))
- :auto-height
-
- (and (= resize-direction :horizontal)
- (= current-grow-type :auto-height))
- :auto-height
-
- (and (= resize-direction :vertical)
+ (and (not (mth/close? (:y scalev) 1.0))
(or (= current-grow-type :auto-width)
(= current-grow-type :auto-height)))
:fixed
+ (and (not (mth/close? (:x scalev) 1.0))
+ (= current-grow-type :auto-width))
+ :auto-height
+
:else
current-grow-type))
diff --git a/frontend/src/app/main/data/workspace/notifications.cljs b/frontend/src/app/main/data/workspace/notifications.cljs
index 4ecda05c32..9bfc7ac8a2 100644
--- a/frontend/src/app/main/data/workspace/notifications.cljs
+++ b/frontend/src/app/main/data/workspace/notifications.cljs
@@ -24,6 +24,7 @@
[app.main.data.workspace.layout :as dwly]
[app.main.data.workspace.libraries :as dwl]
[app.main.data.workspace.texts :as dwt]
+ [app.main.router :as rt]
[app.util.globals :refer [global]]
[app.util.mouse :as mse]
[app.util.object :as obj]
@@ -38,6 +39,7 @@
(declare handle-presence)
(declare handle-pointer-update)
(declare handle-file-change)
+(declare handle-file-deleted)
(declare handle-file-restore)
(declare handle-library-change)
(declare handle-pointer-send)
@@ -129,6 +131,7 @@
:disconnect (handle-presence msg)
:pointer-update (handle-pointer-update msg)
:file-change (handle-file-change msg)
+ :file-deleted (handle-file-deleted msg)
:file-restore (handle-file-restore msg)
:library-change (handle-library-change msg)
:notification (dc/handle-notification msg)
@@ -266,6 +269,18 @@
:redo-changes (vec changes)
:undo-changes []})))))
+(defn handle-file-deleted
+ [{:keys [file-id] :as msg}]
+ (ptk/reify ::handle-file-deleted
+ ptk/WatchEvent
+ (watch [_ state _]
+ (let [curr-file-id (:current-file-id state)
+ team-id (:current-team-id state)]
+ ;; If the deleted file is the currently open one
+ (when (= file-id curr-file-id)
+ (rx/of
+ (rt/nav :dashboard-recent {:team-id team-id})))))))
+
(def ^:private
schema:handle-file-restore
[:map {:title "handle-file-restore"}
@@ -316,4 +331,4 @@
(watch [_ state _]
(when (contains? (:files state) file-id)
(rx/of (dwl/ext-library-changed file-id modified-at revn changes)
- (dwl/notify-sync-file file-id))))))
+ (dwl/notify-sync-file))))))
diff --git a/frontend/src/app/main/data/workspace/selection.cljs b/frontend/src/app/main/data/workspace/selection.cljs
index 0320573b15..16459d7408 100644
--- a/frontend/src/app/main/data/workspace/selection.cljs
+++ b/frontend/src/app/main/data/workspace/selection.cljs
@@ -131,6 +131,8 @@
([id toggle?]
(dm/assert! (uuid? id))
(ptk/reify ::select-shape
+ ev/PerformanceEvent
+
ptk/UpdateEvent
(update [_ state]
(-> state
@@ -248,6 +250,8 @@
(d/ordered-set? ids)))
(ptk/reify ::select-shapes
+ ev/PerformanceEvent
+
ptk/UpdateEvent
(update [_ state]
(let [objects (dsh/lookup-page-objects state)
@@ -267,6 +271,8 @@
(defn select-all
[]
(ptk/reify ::select-all
+ ev/PerformanceEvent
+
ptk/WatchEvent
(watch [_ state _]
(let [;; Make the select-all aware of the focus mode; in this
@@ -457,7 +463,7 @@
library-data (dsh/lookup-file-data state file-id)
changes (-> (pcb/empty-changes it)
- (cll/generate-duplicate-changes objects page ids delta libraries library-data file-id)
+ (cll/generate-duplicate-changes objects page ids delta libraries library-data file-id {:alt-duplication? alt-duplication?})
(cll/generate-duplicate-changes-update-indices objects ids))
tags (or (:tags changes) #{})
diff --git a/frontend/src/app/main/data/workspace/shape_layout.cljs b/frontend/src/app/main/data/workspace/shape_layout.cljs
index 2279000ae0..e31b892a8f 100644
--- a/frontend/src/app/main/data/workspace/shape_layout.cljs
+++ b/frontend/src/app/main/data/workspace/shape_layout.cljs
@@ -235,13 +235,8 @@
[ids]
(ptk/reify ::remove-shape-layout
ptk/WatchEvent
- (watch [_ state _]
- (let [objects (dsh/lookup-page-objects state)
- ids (->> ids
- (remove #(->> %
- (get objects)
- (ctc/is-variant?))))
- undo-id (js/Symbol)]
+ (watch [_ _ _]
+ (let [undo-id (js/Symbol)]
(rx/of
(dwu/start-undo-transaction undo-id)
(dwsh/update-shapes ids #(apply dissoc % layout-keys))
diff --git a/frontend/src/app/main/data/workspace/texts.cljs b/frontend/src/app/main/data/workspace/texts.cljs
index 9c92f72f91..ae616f29a6 100644
--- a/frontend/src/app/main/data/workspace/texts.cljs
+++ b/frontend/src/app/main/data/workspace/texts.cljs
@@ -17,6 +17,7 @@
[app.common.math :as mth]
[app.common.types.fills :as types.fills]
[app.common.types.modifiers :as ctm]
+ [app.common.types.shape.layout :as ctl]
[app.common.types.text :as txt]
[app.common.uuid :as uuid]
[app.main.data.event :as ev]
@@ -490,11 +491,7 @@
;; We don't have the fills attribute. It's an old text without color
;; so need to be black
(and (nil? (:fills node)) (empty? color-attrs))
- (assoc :fills (txt/get-default-text-fills))
-
- ;; Remove duplicates from the fills
- :always
- (update :fills types.fills/update distinct))))
+ (assoc :fills (txt/get-default-text-fills)))))
(defn migrate-content
[content]
@@ -585,12 +582,17 @@
shape
(cond-> shape
- (and (not-changed? shape-width new-width) (= grow-type :auto-width))
+ (and (or (not (ctl/any-layout-immediate-child? objects shape))
+ (not (ctl/fill-width? shape)))
+ (not-changed? shape-width new-width)
+ (= grow-type :auto-width))
(gsh/transform-shape (ctm/change-dimensions-modifiers shape :width new-width {:ignore-lock? true})))
shape
(cond-> shape
- (and (not-changed? shape-height new-height)
+ (and (or (not (ctl/any-layout-immediate-child? objects shape))
+ (not (ctl/fill-height? shape)))
+ (not-changed? shape-height new-height)
(or (= grow-type :auto-height) (= grow-type :auto-width)))
(gsh/transform-shape (ctm/change-dimensions-modifiers shape :height new-height {:ignore-lock? true})))]
@@ -598,7 +600,8 @@
(let [ids (into #{} (filter changed-text?) (keys props))]
(rx/of (dwu/start-undo-transaction undo-id)
- (dwsh/update-shapes ids update-fn {:reg-objects? true
+ (dwsh/update-shapes ids update-fn {:with-objects? true
+ :reg-objects? true
:stack-undo? true
:ignore-touched true})
(ptk/data-event :layout/update {:ids ids})
diff --git a/frontend/src/app/main/data/workspace/tokens/application.cljs b/frontend/src/app/main/data/workspace/tokens/application.cljs
index 1e2a1bc8f1..47caaaf64c 100644
--- a/frontend/src/app/main/data/workspace/tokens/application.cljs
+++ b/frontend/src/app/main/data/workspace/tokens/application.cljs
@@ -38,6 +38,7 @@
[potok.v2.core :as ptk]))
(declare token-properties)
+(declare update-layout-item-margin)
;; Events to update the value of attributes with applied tokens ---------------------------------------------------------
@@ -115,7 +116,7 @@
(f shape-ids {:color hex :opacity opacity} 0 {:ignore-touched true
:page-id page-id}))))
-(defn- value->color
+(defn value->color
"Transform a token color value into penpot color data structure"
[color]
(when-let [tc (tinycolor/valid-color color)]
@@ -433,7 +434,8 @@
:font-weight update-font-weight
:letter-spacing update-letter-spacing
:text-case update-text-case
- :text-decoration update-text-decoration}
+ :text-decoration update-text-decoration
+ :line-height update-line-height}
value
[shape-ids attributes page-id])))))
@@ -498,7 +500,7 @@
(rx/of
(st/emit! (ev/event {::ev/name "apply-tokens"
:type type
- :applyed-to attributes
+ :applied-to attributes
:applied-to-variant any-variant?}))
(dwu/start-undo-transaction undo-id)
(dwsh/update-shapes shape-ids (fn [shape]
@@ -520,7 +522,7 @@
Splits out `shape-ids` into seperate default actions:
- Layouts take the `default` update function
- Shapes inside layout will only take margin"
- [{:keys [token shapes]}]
+ [{:keys [token shapes attr]}]
(ptk/reify ::apply-spacing-token
ptk/WatchEvent
(watch [_ state _]
@@ -533,7 +535,7 @@
(group-by #(if (ctsl/any-layout-immediate-child? objects %) :frame-children :other) shapes)]
(rx/of
- (apply-token {:attributes attributes
+ (apply-token {:attributes (or attr attributes)
:token token
:shape-ids (map :id other)
:on-update-shape on-update-shape})
@@ -558,7 +560,7 @@
(update shape :applied-tokens remove-token))))))))
(defn toggle-token
- [{:keys [token shapes]}]
+ [{:keys [token shapes attrs]}]
(ptk/reify ::on-toggle-token
ptk/WatchEvent
(watch [_ _ _]
@@ -566,24 +568,53 @@
(get token-properties (:type token))
unapply-tokens?
- (cft/shapes-token-applied? token shapes (or all-attributes attributes))
-
+ (cft/shapes-token-applied? token shapes (or attrs all-attributes attributes))
shape-ids (map :id shapes)]
(if unapply-tokens?
(rx/of
- (unapply-token {:attributes (or all-attributes attributes)
+ (unapply-token {:attributes (or attrs all-attributes attributes)
:token token
:shape-ids shape-ids}))
(rx/of
(case (:type token)
:spacing
(apply-spacing-token {:token token
+ :attr attrs
:shapes shapes})
- (apply-token {:attributes attributes
+ (apply-token {:attributes (or attrs attributes)
:token token
:shape-ids shape-ids
:on-update-shape on-update-shape}))))))))
+
+(defn apply-token-on-selected
+ [color-operations token]
+ (ptk/reify ::apply-token-on-selected
+ ptk/WatchEvent
+ (watch [_ _ _]
+ (let [undo-id (js/Symbol)]
+ (rx/concat
+ (rx/of (dwu/start-undo-transaction undo-id))
+ (->> (rx/from color-operations)
+ (rx/map
+ (fn [cop]
+ (let [shape-ids [(:shape-id cop)]]
+ (case (:prop cop)
+ :fill (apply-token {:attributes #{:fill}
+ :token token
+ :shape-ids shape-ids
+ :on-update-shape update-fill})
+ :stroke (apply-token {:attributes #{:stroke-color}
+ :token token
+ :shape-ids shape-ids
+ :on-update-shape update-stroke-color})
+ ;; Text
+ :content (apply-token {:attributes #{:fill}
+ :token token
+ :shape-ids shape-ids
+ :on-update-shape update-fill})
+ :shadow (rx/empty))))))
+ (rx/of (dwu/commit-undo-transaction undo-id)))))))
;; Map token types to different properties used along the cokde ---------------------------------------------
;; FIXME: the values should be lazy evaluated, probably a function,
diff --git a/frontend/src/app/main/data/workspace/tokens/errors.cljs b/frontend/src/app/main/data/workspace/tokens/errors.cljs
index 75e1649911..c63c78381a 100644
--- a/frontend/src/app/main/data/workspace/tokens/errors.cljs
+++ b/frontend/src/app/main/data/workspace/tokens/errors.cljs
@@ -23,7 +23,7 @@
:error/fn #(tr "workspace.tokens.invalid-json")}
:error.import/invalid-token-name
- {:error/code :error.import/invalid-json-data
+ {:error/code :error.import/invalid-token-name
:error/fn #(tr "workspace.tokens.invalid-json-token-name")
:error/detail #(tr "workspace.tokens.invalid-json-token-name-detail" %)}
@@ -88,6 +88,14 @@
{:error/code :error.style-dictionary/invalid-token-value-font-weight
:error/fn #(tr "workspace.tokens.invalid-font-weight-token-value" %)}
+ :error.style-dictionary/invalid-token-value-typography
+ {:error/code :error.style-dictionary/invalid-token-value-typography
+ :error/fn #(tr "workspace.tokens.invalid-token-value-typography" %)}
+
+ :error.style-dictionary/composite-line-height-needs-font-size
+ {:error/code :error.style-dictionary/composite-line-height-needs-font-size
+ :error/fn #(tr "workspace.tokens.composite-line-height-needs-font-size" %)}
+
:error/unknown
{:error/code :error/unknown
:error/fn #(tr "labels.unknown-error")}})
diff --git a/frontend/src/app/main/data/workspace/tokens/format.cljs b/frontend/src/app/main/data/workspace/tokens/format.cljs
new file mode 100644
index 0000000000..e9ce1e84ae
--- /dev/null
+++ b/frontend/src/app/main/data/workspace/tokens/format.cljs
@@ -0,0 +1,33 @@
+(ns app.main.data.workspace.tokens.format
+ (:require
+ [cuerdas.core :as str]))
+
+(def category-dictionary
+ {:stroke-width "Stroke Width"
+ :spacing "Spacing"
+ :sizing "Sizing"
+ :border-radius "Border Radius"
+ :x "X"
+ :y "Y"
+ :font-size "Font Size"
+ :font-family "Font Family"
+ :font-weight "Font Weight"
+ :line-height "Line Height"
+ :letter-spacing "Letter Spacing"
+ :text-case "Text Case"
+ :text-decoration "Text Decoration"})
+
+(defn format-token-value
+ "Converts token value of any shape to a string."
+ [token-value]
+ (cond
+ (map? token-value)
+ (->> (map (fn [[k v]] (str "- " (category-dictionary k) ": " (format-token-value v))) token-value)
+ (str/join "\n")
+ (str "\n"))
+
+ (sequential? token-value)
+ (str/join ", " token-value)
+
+ :else
+ (str token-value)))
diff --git a/frontend/src/app/main/data/workspace/tokens/import_export.cljs b/frontend/src/app/main/data/workspace/tokens/import_export.cljs
index ae0017ade7..88ae05e5e1 100644
--- a/frontend/src/app/main/data/workspace/tokens/import_export.cljs
+++ b/frontend/src/app/main/data/workspace/tokens/import_export.cljs
@@ -6,8 +6,8 @@
(ns app.main.data.workspace.tokens.import-export
(:require
- [app.common.files.helpers :as cfh]
[app.common.json :as json]
+ [app.common.path-names :as cpn]
[app.common.types.token :as ctt]
[app.common.types.tokens-lib :as ctob]
[app.config :as cf]
@@ -99,7 +99,7 @@
(defn- drop-parent-directory
[path]
- (->> (cfh/split-path path)
+ (->> (cpn/split-path path)
(rest)
(str/join "/")))
diff --git a/frontend/src/app/main/data/workspace/tokens/library_edit.cljs b/frontend/src/app/main/data/workspace/tokens/library_edit.cljs
index d25c60b99d..b5e63979c7 100644
--- a/frontend/src/app/main/data/workspace/tokens/library_edit.cljs
+++ b/frontend/src/app/main/data/workspace/tokens/library_edit.cljs
@@ -24,7 +24,7 @@
[beicon.v2.core :as rx]
[potok.v2.core :as ptk]))
-(declare set-selected-token-set-name)
+(declare set-selected-token-set-id)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; TOKENS Getters
@@ -39,11 +39,11 @@
(defn lookup-token-set
([state]
- (when-let [selected (dm/get-in state [:workspace-tokens :selected-token-set-name])]
+ (when-let [selected (dm/get-in state [:workspace-tokens :selected-token-set-id])]
(lookup-token-set state selected)))
- ([state name]
+ ([state id]
(some-> (get-tokens-lib state)
- (ctob/get-set name))))
+ (ctob/get-set id))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Helpers
@@ -73,65 +73,62 @@
(let [data (dsh/lookup-file-data state)
tokens-lib (get data :tokens-lib)]
- (if (and tokens-lib (ctob/get-theme tokens-lib (:group token-theme) (:name token-theme)))
+ (if (and tokens-lib (ctob/get-theme tokens-lib (ctob/get-id token-theme)))
(rx/of (ntf/show {:content (tr "errors.token-theme-already-exists")
:type :toast
:level :error
:timeout 9000}))
(let [changes (-> (pcb/empty-changes it)
(pcb/with-library-data data)
- (pcb/set-token-theme (:group new-token-theme)
- (:name new-token-theme)
+ (pcb/set-token-theme (ctob/get-id new-token-theme)
new-token-theme))]
(rx/of (dch/commit-changes changes)))))))))
-(defn update-token-theme [[group name] token-theme]
+(defn update-token-theme [id token-theme]
(ptk/reify ::update-token-theme
ptk/WatchEvent
(watch [it state _]
(let [data (dsh/lookup-file-data state)
tokens-lib (get data :tokens-lib)]
- (if (and (or (not= group (:group token-theme))
- (not= name (:name token-theme)))
- (ctob/get-theme tokens-lib
- (:group token-theme)
- (:name token-theme)))
+ (if (and (not= id (ctob/get-id token-theme))
+ (ctob/get-theme tokens-lib (ctob/get-id token-theme)))
(rx/of (ntf/show {:content (tr "errors.token-theme-already-exists")
:type :toast
:level :error
:timeout 9000}))
(let [changes (-> (pcb/empty-changes it)
(pcb/with-library-data data)
- (pcb/set-token-theme group name token-theme))]
+ (pcb/set-token-theme (ctob/get-id token-theme) token-theme))]
(rx/of (dch/commit-changes changes))))))))
-(defn toggle-token-theme-active? [group name]
+(defn toggle-token-theme-active? [id]
(ptk/reify ::toggle-token-theme-active?
ptk/WatchEvent
(watch [it state _]
- (let [tokens-lib (get-tokens-lib state)
- prev-active-token-themes (some-> tokens-lib
- (ctob/get-active-theme-paths))
+ (let [data (dsh/lookup-file-data state)
+
+ tokens-lib (get-tokens-lib state)
active-token-themes (some-> tokens-lib
- (ctob/toggle-theme-active? group name)
+ (ctob/toggle-theme-active? id)
(ctob/get-active-theme-paths))
active-token-themes' (if (= active-token-themes #{ctob/hidden-theme-path})
active-token-themes
(disj active-token-themes ctob/hidden-theme-path))
changes (-> (pcb/empty-changes it)
- (pcb/update-active-token-themes active-token-themes' prev-active-token-themes))]
+ (pcb/with-library-data data)
+ (pcb/set-active-token-themes active-token-themes'))]
(rx/of
(dch/commit-changes changes)
(dwtp/propagate-workspace-tokens))))))
-(defn delete-token-theme [group theme-name]
+(defn delete-token-theme [id]
(ptk/reify ::delete-token-theme
ptk/WatchEvent
(watch [it state _]
(let [data (dsh/lookup-file-data state)
changes (-> (pcb/empty-changes it)
(pcb/with-library-data data)
- (pcb/set-token-theme group theme-name nil))]
+ (pcb/set-token-theme id nil))]
(rx/of
(dch/commit-changes changes)
(dwtp/propagate-workspace-tokens))))))
@@ -149,7 +146,7 @@
(let [data (dsh/lookup-file-data state)
tokens-lib (get data :tokens-lib)
set-name (ctob/normalize-set-name set-name)]
- (if (and tokens-lib (ctob/get-set tokens-lib set-name))
+ (if (and tokens-lib (ctob/get-set-by-name tokens-lib set-name))
(rx/of (ntf/show {:content (tr "errors.token-set-already-exists")
:type :toast
:level :error
@@ -157,8 +154,8 @@
(let [token-set (ctob/make-token-set :name set-name)
changes (-> (pcb/empty-changes it)
(pcb/with-library-data data)
- (pcb/set-token-set set-name false token-set))]
- (rx/of (set-selected-token-set-name set-name)
+ (pcb/set-token-set (ctob/get-id token-set) token-set))]
+ (rx/of (set-selected-token-set-id (ctob/get-id token-set))
(dch/commit-changes changes))))))))
(defn rename-token-set-group [set-group-path set-group-fname]
@@ -179,32 +176,31 @@
name (ctob/normalize-set-name name (ctob/get-name token-set))
tokens-lib (get data :tokens-lib)]
- (if (ctob/get-set tokens-lib name)
+ (if (ctob/get-set-by-name tokens-lib name)
(rx/of (ntf/show {:content (tr "errors.token-set-already-exists")
:type :toast
:level :error
:timeout 9000}))
(let [changes (-> (pcb/empty-changes it)
(pcb/with-library-data data)
- (pcb/rename-token-set (ctob/get-name token-set) name))]
- (rx/of (set-selected-token-set-name name)
+ (pcb/rename-token-set (ctob/get-id token-set) name))]
+ (rx/of (set-selected-token-set-id (ctob/get-id token-set))
(dch/commit-changes changes))))))))
(defn duplicate-token-set
- [id is-group]
+ [id]
(ptk/reify ::duplicate-token-set
ptk/WatchEvent
(watch [it state _]
(let [data (dsh/lookup-file-data state)
- name (ctob/normalize-set-name id)
tokens-lib (get data :tokens-lib)
suffix (tr "workspace.tokens.duplicate-suffix")]
- (when-let [set (ctob/duplicate-set name tokens-lib {:suffix suffix})]
+ (when-let [token-set (ctob/duplicate-set id tokens-lib {:suffix suffix})]
(let [changes (-> (pcb/empty-changes it)
(pcb/with-library-data data)
- (pcb/set-token-set (ctob/get-name set) is-group set))]
- (rx/of (set-selected-token-set-name name)
+ (pcb/set-token-set (ctob/get-id token-set) token-set))]
+ (rx/of (set-selected-token-set-id (ctob/get-id token-set))
(dch/commit-changes changes))))))))
(defn toggle-token-set
@@ -245,15 +241,27 @@
(rx/of (dch/commit-changes changes)
(dwtp/propagate-workspace-tokens))))))
-(defn delete-token-set-path
- [group? path]
- (ptk/reify ::delete-token-set-path
+(defn delete-token-set
+ [id]
+ (ptk/reify ::delete-token-set
ptk/WatchEvent
(watch [it state _]
(let [data (dsh/lookup-file-data state)
changes (-> (pcb/empty-changes it)
(pcb/with-library-data data)
- (pcb/set-token-set (ctob/join-set-path path) group? nil))]
+ (pcb/set-token-set id nil))]
+ (rx/of (dch/commit-changes changes)
+ (dwtp/propagate-workspace-tokens))))))
+
+(defn delete-token-set-group
+ [path]
+ (ptk/reify ::delete-token-set-group
+ ptk/WatchEvent
+ (watch [it state _]
+ (let [data (dsh/lookup-file-data state)
+ changes (-> (pcb/empty-changes it)
+ (pcb/with-library-data data)
+ (clt/generate-delete-token-set-group (get-tokens-lib state) path))]
(rx/of (dch/commit-changes changes)
(dwtp/propagate-workspace-tokens))))))
@@ -316,8 +324,7 @@
"Global"
token-set
- (-> (ctob/make-token-set :name set-name)
- (ctob/add-token token))
+ (ctob/make-token-set :name set-name)
hidden-theme
(ctob/make-hidden-theme)
@@ -328,13 +335,13 @@
changes
(-> (pcb/empty-changes)
(pcb/with-library-data data)
- (pcb/set-token-set set-name false token-set)
- (pcb/set-token-theme (:group hidden-theme)
- (:name hidden-theme)
+ (pcb/set-token-set (ctob/get-id token-set) token-set)
+ (pcb/set-token (ctob/get-id token-set) (:id token) token)
+ (pcb/set-token-theme (ctob/get-id hidden-theme)
hidden-theme-with-set)
- (pcb/update-active-token-themes #{ctob/hidden-theme-path} #{}))]
+ (pcb/set-active-token-themes #{ctob/hidden-theme-path}))]
(rx/of (dch/commit-changes changes)
- (set-selected-token-set-name set-name))))))
+ (set-selected-token-set-id (ctob/get-id token-set)))))))
(defn create-token
[params]
@@ -347,7 +354,7 @@
token-type (:type token)
changes (-> (pcb/empty-changes it)
(pcb/with-library-data data)
- (pcb/set-token (ctob/get-name token-set)
+ (pcb/set-token (ctob/get-id token-set)
(:id token)
token))]
@@ -365,23 +372,23 @@
(watch [it state _]
(let [token-set (lookup-token-set state)
data (dsh/lookup-file-data state)
- token (ctob/get-token token-set id)
+ token (-> (get-tokens-lib state)
+ (ctob/get-token (ctob/get-id token-set) id))
token' (->> (merge token params)
(into {})
(ctob/make-token))
token-type (:type token)
changes (-> (pcb/empty-changes it)
(pcb/with-library-data data)
- (pcb/set-token (ctob/get-name token-set)
+ (pcb/set-token (ctob/get-id token-set)
id
token'))]
-
(rx/of (dch/commit-changes changes)
(ptk/data-event ::ev/event {::ev/name "edit-token" :type token-type}))))))
(defn delete-token
- [set-name token-id]
- (dm/assert! (string? set-name))
+ [set-id token-id]
+ (dm/assert! (uuid? set-id))
(dm/assert! (uuid? token-id))
(ptk/reify ::delete-token
ptk/WatchEvent
@@ -389,7 +396,7 @@
(let [data (dsh/lookup-file-data state)
changes (-> (pcb/empty-changes it)
(pcb/with-library-data data)
- (pcb/set-token set-name token-id nil))]
+ (pcb/set-token set-id token-id nil))]
(rx/of (dch/commit-changes changes))))))
(defn duplicate-token
@@ -399,15 +406,17 @@
ptk/WatchEvent
(watch [_ state _]
(when-let [token-set (lookup-token-set state)]
- (when-let [token (ctob/get-token token-set token-id)]
- (let [tokens (ctob/get-tokens token-set)
- unames (map :name tokens)
- suffix (tr "workspace.tokens.duplicate-suffix")
- copy-name (cfh/generate-unique-name (:name token) unames :suffix suffix)]
-
- (rx/of (create-token (assoc token
- :id (uuid/next)
- :name copy-name)))))))))
+ (when-let [tokens-lib (get-tokens-lib state)]
+ (when-let [token (ctob/get-token tokens-lib
+ (ctob/get-id token-set)
+ token-id)]
+ (let [tokens (vals (ctob/get-tokens tokens-lib (ctob/get-id token-set)))
+ unames (map :name tokens)
+ suffix (tr "workspace.tokens.duplicate-suffix")
+ copy-name (cfh/generate-unique-name (:name token) unames :suffix suffix)]
+ (rx/of (create-token (assoc token
+ :id (uuid/next)
+ :name copy-name))))))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; TOKEN UI OPS
@@ -449,16 +458,17 @@
(update state :workspace-tokens assoc :token-set-context-menu params)
(update state :workspace-tokens dissoc :token-set-context-menu)))))
-(defn set-selected-token-set-name
- [name]
- (ptk/reify ::set-selected-token-set-name
+(defn set-selected-token-set-id
+ [id]
+ (ptk/reify ::set-selected-token-set-id
ptk/UpdateEvent
(update [_ state]
- (update state :workspace-tokens assoc :selected-token-set-name name))))
+ (update state :workspace-tokens assoc :selected-token-set-id id))))
(defn start-token-set-edition
[edition-id]
- (assert (string? edition-id) "expected a string for `edition-id`")
+ ;; Path string for edition of a group, UUID for edition of a set.
+ (assert (or (string? edition-id) (uuid? edition-id)) "expected a string or uuid for `edition-id`")
(ptk/reify ::start-token-set-edition
ptk/UpdateEvent
diff --git a/frontend/src/app/main/data/workspace/tokens/selected_set.cljs b/frontend/src/app/main/data/workspace/tokens/selected_set.cljs
index c072ea3642..c3ca926e8c 100644
--- a/frontend/src/app/main/data/workspace/tokens/selected_set.cljs
+++ b/frontend/src/app/main/data/workspace/tokens/selected_set.cljs
@@ -11,24 +11,28 @@
[app.common.types.tokens-lib :as ctob]
[app.main.data.helpers :as dsh]))
-(defn- get-selected-token-set-name [state]
- (or (get-in state [:workspace-tokens :selected-token-set-name])
+(defn- get-selected-token-set-id [state]
+ (or (get-in state [:workspace-tokens :selected-token-set-id])
(some-> (dsh/lookup-file-data state)
(get :tokens-lib)
(ctob/get-sets)
(first)
- (ctob/get-name))))
+ (ctob/get-id))))
(defn get-selected-token-set [state]
- (when-let [set-name (get-selected-token-set-name state)]
+ (when-let [set-id (get-selected-token-set-id state)]
(some-> (dsh/lookup-file-data state)
(get :tokens-lib)
- (ctob/get-set set-name))))
+ (ctob/get-set set-id))))
(defn get-token-in-selected-set [state token-id]
- (some-> (get-selected-token-set state)
- (ctob/get-token token-id)))
+ (when-let [set-id (get-selected-token-set-id state)]
+ (some-> (dsh/lookup-file-data state)
+ (get :tokens-lib)
+ (ctob/get-token set-id token-id))))
(defn get-all-tokens-in-selected-set [state]
- (some-> (get-selected-token-set state)
- (ctob/get-tokens-map)))
+ (when-let [set-id (get-selected-token-set-id state)]
+ (some-> (dsh/lookup-file-data state)
+ (get :tokens-lib)
+ (ctob/get-tokens set-id))))
diff --git a/frontend/src/app/main/data/workspace/transforms.cljs b/frontend/src/app/main/data/workspace/transforms.cljs
index 9a1bcaa319..12bec8ca59 100644
--- a/frontend/src/app/main/data/workspace/transforms.cljs
+++ b/frontend/src/app/main/data/workspace/transforms.cljs
@@ -218,15 +218,10 @@
(gpt/add resize-origin displacement)
resize-origin)
- ;; Determine resize direction for grow-type logic
- resize-direction (cond
- (or (= handler :left) (= handler :right)) :horizontal
- (or (= handler :top) (= handler :bottom)) :vertical
- :else nil)
-
;; Calculate new grow-type for text layers
- new-grow-type (when (cfh/text-shape? shape)
- (dwm/next-grow-type (dm/get-prop shape :grow-type) resize-direction))
+ new-grow-type
+ (when (cfh/text-shape? shape)
+ (dwm/next-grow-type (dm/get-prop shape :grow-type) scalev))
;; When the horizontal/vertical scale a flex children with auto/fill
;; we change it too fixed
@@ -387,7 +382,19 @@
get-modifier
(fn [shape]
- (ctm/change-dimensions-modifiers shape attr value))
+ (let [modifiers (ctm/change-dimensions-modifiers shape attr value)]
+ ;; For text shapes, also update grow-type based on the resize
+ (if (cfh/text-shape? shape)
+ (let [{sr-width :width sr-height :height} (:selrect shape)
+ new-width (if (= attr :width) value sr-width)
+ new-height (if (= attr :height) value sr-height)
+ scalev (gpt/point (/ new-width sr-width) (/ new-height sr-height))
+ current-grow-type (dm/get-prop shape :grow-type)
+ new-grow-type (dwm/next-grow-type current-grow-type scalev)]
+ (cond-> modifiers
+ (not= new-grow-type current-grow-type)
+ (ctm/change-property :grow-type new-grow-type)))
+ modifiers)))
modif-tree
(-> (dwm/build-modif-tree ids objects get-modifier)
diff --git a/frontend/src/app/main/data/workspace/variants.cljs b/frontend/src/app/main/data/workspace/variants.cljs
index 33b11396ce..2dc9358737 100644
--- a/frontend/src/app/main/data/workspace/variants.cljs
+++ b/frontend/src/app/main/data/workspace/variants.cljs
@@ -7,15 +7,18 @@
(ns app.main.data.workspace.variants
(:require
[app.common.data :as d]
+ [app.common.data.macros :as dm]
[app.common.files.changes-builder :as pcb]
[app.common.files.helpers :as cfh]
[app.common.files.variant :as cfv]
[app.common.geom.point :as gpt]
[app.common.logic.variant-properties :as clvp]
[app.common.logic.variants :as clv]
+ [app.common.path-names :as cpn]
[app.common.types.color :as clr]
[app.common.types.component :as ctc]
[app.common.types.components-list :as ctkl]
+ [app.common.types.file :as ctf]
[app.common.types.shape.layout :as ctsl]
[app.common.types.variant :as ctv]
[app.common.uuid :as uuid]
@@ -96,9 +99,25 @@
(defn update-property-name
"Update the variant property name on the position pos
- in all the components with this variant-id"
+ in all the components with this variant-id and remove the focus"
[variant-id pos new-name {:keys [trigger]}]
(ptk/reify ::update-property-name
+ ptk/UpdateEvent
+ (update [_ state]
+ (let [file-id (:current-file-id state)
+ data (dsh/lookup-file-data state)
+ objects (dsh/lookup-page-objects state)
+
+ related-components (cfv/find-variant-components data objects variant-id)]
+
+ (reduce
+ (fn [s related-component]
+ (update-in s
+ [:files file-id :data :components (:id related-component) :variant-properties]
+ (fn [props] (mapv #(with-meta % nil) props))))
+ state
+ related-components)))
+
ptk/WatchEvent
(watch [it state _]
(let [page-id (:current-page-id state)
@@ -259,6 +278,28 @@
(dch/commit-changes changes)
(dwu/commit-undo-transaction undo-id))))))
+(defn reorder-variant-poperties
+ "Reorder properties by moving a property from some position to some space between positions"
+ [variant-id from-pos to-space-between-pos]
+ (ptk/reify ::reorder-variant-properties
+ ptk/WatchEvent
+ (watch [it state _]
+ (let [page-id (:current-page-id state)
+ data (dsh/lookup-file-data state)
+ objects (-> (dsh/get-page data page-id)
+ (get :objects))
+
+ changes (-> (pcb/empty-changes it page-id)
+ (pcb/with-library-data data)
+ (pcb/with-objects objects)
+ (clvp/generate-reorder-variant-poperties variant-id from-pos to-space-between-pos))
+
+ undo-id (js/Symbol)]
+ (rx/of
+ (dwu/start-undo-transaction undo-id)
+ (dch/commit-changes changes)
+ (dwu/commit-undo-transaction undo-id))))))
+
(defn- set-variant-id
"Sets the variant-id on a component"
[component-id variant-id]
@@ -372,11 +413,11 @@
(:name main))
;; If there is a prefix, set is as first item of path
cpath (-> name
- cfh/split-path
+ cpn/split-path
(cond->
(seq prefix)
(->> (drop (count prefix))
- (cons (cfh/join-path prefix))
+ (cons (cpn/join-path prefix))
vec)))
name (first cpath)
@@ -520,7 +561,7 @@
objects (-> (dsh/get-page data page-id)
(get :objects))
variant-components (cfv/find-variant-components data objects variant-id)
- clean-name (cfh/clean-path name)
+ clean-name (cpn/clean-path name)
undo-id (js/Symbol)]
(rx/concat
@@ -589,7 +630,7 @@
(let [shapes (mapv #(get objects %) ids)
rect (bounding-rect shapes)
prefix (->> shapes
- (mapv #(cfh/split-path (:name %)))
+ (mapv #(cpn/split-path (:name %)))
(common-prefix))
;; When the common parent is root, add a wrapper
add-wrapper? (empty? prefix)
@@ -653,3 +694,59 @@
(let [selected (dsh/lookup-selected state)]
(rx/of (combine-as-variants selected options))))))
+(defn- variant-switch
+ "Switch the shape (that must be a variant copy head) for the closest one with the property value passed as parameter"
+ [shape {:keys [pos val] :as params}]
+ (ptk/reify ::variant-switch
+ ptk/WatchEvent
+ (watch [_ state _]
+ (let [libraries (dsh/lookup-libraries state)
+ component-id (:component-id shape)
+ component (ctf/get-component libraries (:component-file shape) component-id :include-deleted? false)]
+ ;; If the value is already val, do nothing
+ (when (not= val (dm/get-in component [:variant-properties pos :value]))
+ (let [current-page-objects (dsh/lookup-page-objects state)
+ variant-id (:variant-id component)
+ component-file-data (dm/get-in libraries [(:component-file shape) :data])
+ component-page-objects (-> (dsh/get-page component-file-data (:main-instance-page component))
+ (get :objects))
+ variant-comps (cfv/find-variant-components component-file-data component-page-objects variant-id)
+ target-props (-> (:variant-properties component)
+ (update pos assoc :value val))
+ valid-comps (->> variant-comps
+ (remove #(= (:id %) component-id))
+ (filter #(= (dm/get-in % [:variant-properties pos :value]) val))
+ (reverse))
+ nearest-comp (apply min-key #(ctv/distance target-props (:variant-properties %)) valid-comps)
+ shape-parents (cfh/get-parents-with-self current-page-objects (:parent-id shape))
+ nearest-comp-children (cfh/get-children-with-self component-page-objects (:main-instance-id nearest-comp))
+ comps-nesting-loop? (seq? (cfh/components-nesting-loop? nearest-comp-children shape-parents))
+
+ {:keys [on-error]
+ :or {on-error rx/throw}} (meta params)]
+
+ ;; If there is no nearest-comp, do nothing
+ (when nearest-comp
+ (if comps-nesting-loop?
+ (do
+ (on-error)
+ (rx/empty))
+ (rx/of
+ (dwl/component-swap shape (:component-file shape) (:id nearest-comp) true)
+ (ev/event {::ev/name "variant-switch" ::ev/origin "workspace:design-tab"}))))))))))
+
+(defn variants-switch
+ "Switch each shape (that must be a variant copy head) for the closest one with the property value passed as parameter"
+ [{:keys [shapes] :as params}]
+ (ptk/reify ::variants-switch
+ ptk/WatchEvent
+ (watch [_ _ _]
+ (let [ids (into (d/ordered-set) d/xf:map-id shapes)
+ undo-id (js/Symbol)]
+ (rx/concat
+ (rx/of (dwu/start-undo-transaction undo-id))
+ (->> (rx/from shapes)
+ (rx/map #(variant-switch % params)))
+ (rx/of (dwu/commit-undo-transaction undo-id)
+ (dws/select-shapes ids)))))))
+
diff --git a/frontend/src/app/main/data/workspace/viewport.cljs b/frontend/src/app/main/data/workspace/viewport.cljs
index d9f523003a..79da7ba477 100644
--- a/frontend/src/app/main/data/workspace/viewport.cljs
+++ b/frontend/src/app/main/data/workspace/viewport.cljs
@@ -14,6 +14,7 @@
[app.common.geom.rect :as gpr]
[app.common.geom.shapes :as gsh]
[app.common.math :as mth]
+ [app.main.data.event :as ev]
[app.main.data.helpers :as dsh]
[app.util.mouse :as mse]
[beicon.v2.core :as rx]
@@ -113,6 +114,8 @@
(fn? y))
(ptk/reify ::update-viewport-position
+ ev/PerformanceEvent
+
ptk/UpdateEvent
(update [_ state]
(update-in state [:workspace-local :vbox]
diff --git a/frontend/src/app/main/data/workspace/zoom.cljs b/frontend/src/app/main/data/workspace/zoom.cljs
index 843ea5f3f9..fbdd24a344 100644
--- a/frontend/src/app/main/data/workspace/zoom.cljs
+++ b/frontend/src/app/main/data/workspace/zoom.cljs
@@ -14,6 +14,7 @@
[app.common.geom.point :as gpt]
[app.common.geom.rect :as grc]
[app.common.geom.shapes :as gsh]
+ [app.main.data.event :as ev]
[app.main.data.helpers :as dsh]
[app.main.streams :as ms]
[app.util.mouse :as mse]
@@ -38,6 +39,8 @@
(increase-zoom ::auto))
([center]
(ptk/reify ::increase-zoom
+ ev/PerformanceEvent
+
ptk/UpdateEvent
(update [_ state]
(let [center (if (= center ::auto) @ms/mouse-position center)]
@@ -49,6 +52,8 @@
(decrease-zoom ::auto))
([center]
(ptk/reify ::decrease-zoom
+ ev/PerformanceEvent
+
ptk/UpdateEvent
(update [_ state]
(let [center (if (= center ::auto) @ms/mouse-position center)]
@@ -60,6 +65,8 @@
(set-zoom nil scale))
([center scale]
(ptk/reify ::set-zoom
+ ev/PerformanceEvent
+
ptk/UpdateEvent
(update [_ state]
(let [vp (dm/get-in state [:workspace-local :vbox])
diff --git a/frontend/src/app/main/features.cljs b/frontend/src/app/main/features.cljs
index 314cbdbec1..130549451d 100644
--- a/frontend/src/app/main/features.cljs
+++ b/frontend/src/app/main/features.cljs
@@ -125,5 +125,4 @@
(wasm/initialize false))
(log/inf :hint "initialized"
- :enabled (str/join "," features)
- :runtime (str/join "," (:features-runtime state)))))))
+ :enabled (str/join " " features))))))
diff --git a/frontend/src/app/main/fonts.cljs b/frontend/src/app/main/fonts.cljs
index 247d53c3c7..f186f5b774 100644
--- a/frontend/src/app/main/fonts.cljs
+++ b/frontend/src/app/main/fonts.cljs
@@ -23,7 +23,7 @@
[okulary.core :as l]
[promesa.core :as p]))
-(log/set-level! :info)
+(log/set-level! :debug)
(def google-fonts
(preload-gfonts "fonts/gfonts.2025.05.19.json"))
@@ -121,11 +121,11 @@
(defmethod load-font :default
[{:keys [backend] :as font}]
- (log/warn :msg "no implementation found for" :backend backend))
+ (log/wrn :msg "no implementation found for" :backend backend))
(defmethod load-font :builtin
[{:keys [id ::on-loaded] :as font}]
- (log/debug :hint "load-font" :font-id id :backend "builtin")
+ (log/dbg :hint "load-font" :font-id id :backend "builtin")
(when (fn? on-loaded)
(on-loaded id)))
@@ -157,7 +157,7 @@
(defmethod load-font :google
[{:keys [id ::on-loaded] :as font}]
(when (exists? js/window)
- (log/info :hint "load-font" :font-id id :backend "google")
+ (log/dbg :hint "load-font" :font-id id :backend "google")
(let [url (generate-gfonts-url font)]
(->> (fetch-gfont-css url)
(rx/map process-gfont-css)
@@ -197,7 +197,7 @@
(defmethod load-font :custom
[{:keys [id ::on-loaded] :as font}]
(when (exists? js/window)
- (log/info :hint "load-font" :font-id id :backend "custom")
+ (log/dbg :hint "load-font" :font-id id :backend "custom")
(let [css (generate-custom-font-css font)]
(add-font-css! id css)
(when (fn? on-loaded)
@@ -210,7 +210,7 @@
(defn ensure-loaded!
([font-id] (ensure-loaded! font-id nil))
([font-id variant-id]
- (log/debug :action "try-ensure-loaded!" :font-id font-id :variant-id variant-id)
+ (log/dbg :action "try-ensure-loaded!" :font-id font-id :variant-id variant-id)
(if-not (exists? js/window)
;; If we are in the worker environment, we just mark it as loaded
;; without really loading it.
diff --git a/frontend/src/app/main/refs.cljs b/frontend/src/app/main/refs.cljs
index 74b509ff6b..f699ce20f1 100644
--- a/frontend/src/app/main/refs.cljs
+++ b/frontend/src/app/main/refs.cljs
@@ -84,6 +84,9 @@
(l/derived :shared-files st/state))
(defn select-libraries
+ "Find between all the given files, those who are libraries of the file-id.
+ Also include the file-id file itself.
+ Return a map of id -> library."
[files file-id]
(persistent!
(reduce-kv (fn [result id file]
@@ -437,18 +440,18 @@
(l/derived (d/nilf ctob/get-theme-groups) tokens-lib))
(defn workspace-token-theme
- [group name]
+ [id]
(l/derived
(fn [lib]
(when lib
- (ctob/get-theme lib group name)))
+ (ctob/get-theme lib id)))
tokens-lib))
(def workspace-token-theme-tree-no-hidden
(l/derived (fn [lib]
(or
(some-> lib
- (ctob/delete-theme ctob/hidden-theme-group ctob/hidden-theme-name)
+ (ctob/delete-theme ctob/hidden-theme-id)
(ctob/get-theme-tree))
[]))
tokens-lib))
@@ -459,8 +462,8 @@
(def workspace-token-themes-no-hidden
(l/derived #(remove ctob/hidden-theme? %) workspace-token-themes))
-(def selected-token-set-name
- (l/derived (l/key :selected-token-set-name) workspace-tokens))
+(def selected-token-set-id
+ (l/derived (l/key :selected-token-set-id) workspace-tokens))
(def workspace-ordered-token-sets
(l/derived #(or (some-> % ctob/get-sets) []) tokens-lib))
diff --git a/frontend/src/app/main/store.cljs b/frontend/src/app/main/store.cljs
index 949e3b77e9..6bd199daec 100644
--- a/frontend/src/app/main/store.cljs
+++ b/frontend/src/app/main/store.cljs
@@ -11,6 +11,7 @@
[app.util.timers :as tm]
[beicon.v2.core :as rx]
[beicon.v2.operators :as rxo]
+ [cuerdas.core :as str]
[okulary.core :as l]
[potok.v2.core :as ptk]))
@@ -28,6 +29,28 @@
(def on-event identity)
(def ^:dynamic *debug-events* false)
+(def ^:dynamic *debug-events-time* false)
+
+(def current-measure (atom nil))
+
+(defn measure-time-to-render [event]
+ (if @current-measure
+ (swap! current-measure conj event)
+
+ (let [start (js/performance.now)]
+ (reset! current-measure [event])
+
+ (tm/raf
+ #(js/scheduler.postTask
+ (fn []
+ (let [time (- (js/performance.now) start)]
+ ;; Only print sets that last over 1second
+ (when (> time 1000)
+ (println
+ (str time "|" (str/join "," @current-measure)))))
+ (reset! current-measure nil))
+
+ #js {"priority" "user-blocking"})))))
;; Only created in development build
(when *assert*
@@ -38,6 +61,8 @@
:app.main.data.workspace.selection/change-hover-state})
(set! on-event (fn [e]
+ (when (and *debug-events-time* (ptk/event? e))
+ (measure-time-to-render (ptk/type e)))
(when (and *debug-events*
(ptk/event? e)
(not (debug-exclude-events (ptk/type e))))
diff --git a/frontend/src/app/main/ui/alert.scss b/frontend/src/app/main/ui/alert.scss
index 6955de2517..f50ee50d41 100644
--- a/frontend/src/app/main/ui/alert.scss
+++ b/frontend/src/app/main/ui/alert.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -19,11 +19,11 @@
}
.modal-header {
- margin-bottom: $s-24;
+ margin-bottom: deprecated.$s-24;
}
.modal-title {
- @include headlineMediumTypography;
+ @include deprecated.headlineMediumTypography;
color: var(--modal-title-foreground-color);
}
@@ -32,8 +32,8 @@
}
.modal-content {
- @include bodyLargeTypography;
- margin-bottom: $s-24;
+ @include deprecated.bodyLargeTypography;
+ margin-bottom: deprecated.$s-24;
}
.action-buttons {
@@ -55,7 +55,7 @@
.modal-scd-msg,
.modal-subtitle,
.modal-msg {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-text-foreground-color);
line-height: 1.5;
}
diff --git a/frontend/src/app/main/ui/auth.scss b/frontend/src/app/main/ui/auth.scss
index 7a4d67c72d..762430314b 100644
--- a/frontend/src/app/main/ui/auth.scss
+++ b/frontend/src/app/main/ui/auth.scss
@@ -4,17 +4,17 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
.auth-section {
position: relative;
align-items: center;
background: var(--panel-background-color);
display: grid;
- gap: $s-32;
+ gap: deprecated.$s-32;
grid-template-columns: repeat(5, 1fr);
height: 100%;
- padding: $s-32;
+ padding: deprecated.$s-32;
width: 100%;
overflow: auto;
@@ -36,13 +36,13 @@
.logo-container {
position: absolute;
- top: $s-20;
- left: $s-20;
+ top: deprecated.$s-20;
+ left: deprecated.$s-20;
display: flex;
justify-content: flex-start;
- width: $s-120;
- height: $s-96;
- margin-block-end: $s-52;
+ width: deprecated.$s-120;
+ height: deprecated.$s-96;
+ margin-block-end: deprecated.$s-52;
}
.login-illustration {
@@ -67,18 +67,18 @@
grid-column: 4 / 6;
display: grid;
grid-template-rows: 1fr auto;
- gap: $s-24;
+ gap: deprecated.$s-24;
height: fit-content;
- max-width: $s-412;
- padding-block-end: $s-8;
+ max-width: deprecated.$s-412;
+ padding-block-end: deprecated.$s-8;
position: relative;
width: 100%;
}
.logo-btn {
svg {
- width: $s-120;
- height: $s-40;
+ width: deprecated.$s-120;
+ height: deprecated.$s-40;
fill: var(--main-icon-foreground);
}
}
diff --git a/frontend/src/app/main/ui/auth/common.scss b/frontend/src/app/main/ui/auth/common.scss
index 872ce47ddb..e8605871d8 100644
--- a/frontend/src/app/main/ui/auth/common.scss
+++ b/frontend/src/app/main/ui/auth/common.scss
@@ -4,18 +4,18 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
.auth-form-wrapper {
width: 100%;
padding-block-end: 0;
display: grid;
- gap: $s-12;
+ gap: deprecated.$s-12;
form {
display: flex;
flex-direction: column;
- gap: $s-12;
- margin-top: $s-12;
+ gap: deprecated.$s-12;
+ margin-top: deprecated.$s-12;
}
}
@@ -23,7 +23,7 @@
width: 100%;
padding-block-end: 0;
display: grid;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.separator {
@@ -32,57 +32,57 @@
}
.auth-title {
- @include bigTitleTipography;
+ @include deprecated.bigTitleTipography;
color: var(--title-foreground-color-hover);
}
.auth-subtitle {
- @include smallTitleTipography;
+ @include deprecated.smallTitleTipography;
color: var(--title-foreground-color);
}
.auth-tagline {
- @include smallTitleTipography;
+ @include deprecated.smallTitleTipography;
margin: 0;
color: var(--title-foreground-color);
}
.form-field {
--input-width: 100%;
- --input-height: #{$s-40};
+ --input-height: #{deprecated.$s-40};
--input-min-width: 100%;
}
.buttons-stack {
display: grid;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.login-button,
.login-ldap-button {
@extend .button-primary;
- @include uppercaseTitleTipography;
- height: $s-40;
+ @include deprecated.uppercaseTitleTipography;
+ height: deprecated.$s-40;
width: 100%;
}
.go-back {
display: flex;
flex-direction: column;
- gap: $s-12;
+ gap: deprecated.$s-12;
padding: 0;
border-block-start: none;
}
.go-back-link {
@extend .button-secondary;
- @include uppercaseTitleTipography;
- height: $s-40;
+ @include deprecated.uppercaseTitleTipography;
+ height: deprecated.$s-40;
}
.links {
display: grid;
- gap: $s-24;
+ gap: deprecated.$s-24;
}
.register,
@@ -91,7 +91,7 @@
.demo-account {
display: flex;
justify-content: center;
- gap: $s-8;
+ gap: deprecated.$s-8;
padding: 0;
}
@@ -99,7 +99,7 @@
.account-text,
.recovery-text,
.demo-account-text {
- @include smallTitleTipography;
+ @include deprecated.smallTitleTipography;
text-align: right;
color: var(--title-foreground-color);
}
@@ -109,7 +109,7 @@
.recovery-link,
.forgot-pass-link,
.demo-account-link {
- @include smallTitleTipography;
+ @include deprecated.smallTitleTipography;
text-align: left;
background-color: transparent;
border: none;
@@ -130,22 +130,22 @@
.register-btn,
.recover-btn {
@extend .button-primary;
- @include uppercaseTitleTipography;
- height: $s-40;
+ @include deprecated.uppercaseTitleTipography;
+ height: deprecated.$s-40;
width: 100%;
}
.login-btn {
- @include smallTitleTipography;
+ @include deprecated.smallTitleTipography;
display: flex;
align-items: center;
- gap: $s-6;
+ gap: deprecated.$s-6;
width: 100%;
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
background-color: var(--button-secondary-background-color-rest);
color: var(--button-foreground-color-focus);
span {
- padding-block-start: $s-2;
+ padding-block-start: deprecated.$s-2;
}
&:hover {
@@ -156,5 +156,5 @@
.auth-buttons {
display: flex;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
diff --git a/frontend/src/app/main/ui/auth/recovery.scss b/frontend/src/app/main/ui/auth/recovery.scss
index 743034faad..a89055b061 100644
--- a/frontend/src/app/main/ui/auth/recovery.scss
+++ b/frontend/src/app/main/ui/auth/recovery.scss
@@ -4,9 +4,9 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
@use "./common.scss";
.submit-btn {
- margin-top: $s-16;
+ margin-top: deprecated.$s-16;
}
diff --git a/frontend/src/app/main/ui/auth/recovery_request.scss b/frontend/src/app/main/ui/auth/recovery_request.scss
index 8b384e59dd..c774a575a3 100644
--- a/frontend/src/app/main/ui/auth/recovery_request.scss
+++ b/frontend/src/app/main/ui/auth/recovery_request.scss
@@ -4,16 +4,16 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
@use "./common.scss";
.fields-row {
- margin-bottom: $s-8;
+ margin-bottom: deprecated.$s-8;
}
.notification-text-email {
- @include medTitleTipography;
- font-size: $fs-20;
+ @include deprecated.medTitleTipography;
+ font-size: deprecated.$fs-20;
color: var(--register-confirmation-color);
- margin-inline: $s-36;
+ margin-inline: deprecated.$s-36;
}
diff --git a/frontend/src/app/main/ui/auth/register.scss b/frontend/src/app/main/ui/auth/register.scss
index f4fd493a1b..182dfddbaa 100644
--- a/frontend/src/app/main/ui/auth/register.scss
+++ b/frontend/src/app/main/ui/auth/register.scss
@@ -4,13 +4,13 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
@use "./common.scss";
.accept-terms-and-privacy-wrapper {
:global(a) {
color: var(--color-foreground-secondary);
- font-weight: $fw700;
+ font-weight: deprecated.$fw700;
}
}
@@ -20,13 +20,13 @@
}
.register-form {
- gap: $s-24;
+ gap: deprecated.$s-24;
}
.register-success {
- gap: $s-24;
+ gap: deprecated.$s-24;
.auth-title {
- @include medTitleTipography;
+ @include deprecated.medTitleTipography;
}
}
@@ -34,30 +34,30 @@
fill: var(--main-icon-foreground);
display: flex;
justify-content: center;
- margin-bottom: $s-32;
+ margin-bottom: deprecated.$s-32;
svg {
- width: $s-92;
- height: $s-92;
+ width: deprecated.$s-92;
+ height: deprecated.$s-92;
}
}
.notification-text {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
color: var(--title-foreground-color);
}
.notification-text-email {
- @include medTitleTipography;
- font-size: $fs-20;
+ @include deprecated.medTitleTipography;
+ font-size: deprecated.$fs-20;
color: var(--register-confirmation-color);
- margin-inline: $s-36;
+ margin-inline: deprecated.$s-36;
}
.logo-btn {
- height: $s-40;
+ height: deprecated.$s-40;
svg {
- width: $s-120;
- height: $s-40;
+ width: deprecated.$s-120;
+ height: deprecated.$s-40;
fill: var(--main-icon-foreground);
}
}
@@ -65,20 +65,20 @@
.logo-container {
display: flex;
justify-content: flex-start;
- width: $s-120;
- margin-block-end: $s-24;
+ width: deprecated.$s-120;
+ margin-block-end: deprecated.$s-24;
}
.terms-register {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
display: flex;
- gap: $s-4;
+ gap: deprecated.$s-4;
justify-content: center;
width: 100%;
}
.and-text {
- border-bottom: $s-1 solid transparent;
+ border-bottom: deprecated.$s-1 solid transparent;
color: var(--title-foreground-color);
}
diff --git a/frontend/src/app/main/ui/comments.cljs b/frontend/src/app/main/ui/comments.cljs
index 920510610b..1ea7ab7985 100644
--- a/frontend/src/app/main/ui/comments.cljs
+++ b/frontend/src/app/main/ui/comments.cljs
@@ -666,11 +666,12 @@
[:div {:class (stl/css :form-buttons-wrapper)}
[:> mentions-button*]
- [:> button* {:variant "ghost"
- :type "button"
- :on-key-down handle-cancel
- :on-click on-cancel}
- (tr "ds.confirm-cancel")]
+ (when (some? on-cancel)
+ [:> button* {:variant "ghost"
+ :type "button"
+ :on-key-down handle-cancel
+ :on-click on-cancel}
+ (tr "ds.confirm-cancel")])
[:> button* {:variant "primary"
:type "button"
:on-key-down handle-submit
@@ -686,52 +687,39 @@
{::mf/props :obj
::mf/private true}
[{:keys [on-submit]}]
- (let [show-buttons? (mf/use-state false)
- content (mf/use-state "")
+ (let [content (mf/use-state "")
disabled? (or (blank-content? @content)
(exceeds-length? @content))
- on-focus
+ on-cancel
(mf/use-fn
- #(reset! show-buttons? true))
-
- on-blur
- (mf/use-fn
- #(reset! show-buttons? false))
+ #(st/emit! :interrupt))
on-change
(mf/use-fn
#(reset! content %))
- on-cancel
- (mf/use-fn
- #(do (reset! content "")
- (reset! show-buttons? false)))
-
on-submit*
(mf/use-fn
(mf/deps @content)
(fn []
(on-submit @content)
- (on-cancel)))]
+ (reset! content "")))]
[:div {:class (stl/css :form)}
[:> comment-input*
{:value @content
:placeholder (tr "labels.reply.thread")
:autofocus true
- :on-blur on-blur
- :on-focus on-focus
:on-ctrl-enter on-submit*
:on-change on-change}]
(when (exceeds-length? @content)
[:div {:class (stl/css :error-text)}
(tr "errors.character-limit-exceeded")])
- (when (or @show-buttons? (seq @content))
- [:> comment-form-buttons* {:on-submit on-submit*
- :on-cancel on-cancel
- :is-disabled disabled?}])]))
+ [:> comment-form-buttons* {:on-submit on-submit*
+ :on-cancel on-cancel
+ :is-disabled disabled?}]]))
(mf/defc comment-edit-form*
{::mf/private true}
diff --git a/frontend/src/app/main/ui/comments.scss b/frontend/src/app/main/ui/comments.scss
index 62cd9977ff..9da4eef616 100644
--- a/frontend/src/app/main/ui/comments.scss
+++ b/frontend/src/app/main/ui/comments.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.cursor-grabbing {
cursor: grabbing;
@@ -23,7 +23,7 @@
}
.error-text {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--color-foreground-error);
}
@@ -31,7 +31,7 @@
color: var(--comment-subtitle-color);
display: flex;
align-items: center;
- gap: $s-6;
+ gap: deprecated.$s-6;
}
.location-icon {
@@ -39,14 +39,14 @@
}
.location-text {
- @include textEllipsis;
+ @include deprecated.textEllipsis;
}
.author {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
display: flex;
align-items: center;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.author-identity {
@@ -54,56 +54,56 @@
}
.author-fullname {
- @include textEllipsis;
+ @include deprecated.textEllipsis;
color: var(--comment-title-color);
}
.author-timeago {
- @include textEllipsis;
+ @include deprecated.textEllipsis;
color: var(--comment-subtitle-color);
}
.avatar {
position: relative;
- height: $s-24;
- width: $s-24;
- border-radius: $br-circle;
+ height: deprecated.$s-24;
+ width: deprecated.$s-24;
+ border-radius: deprecated.$br-circle;
}
.avatar-lg {
- height: $s-32;
- width: $s-32;
+ height: deprecated.$s-32;
+ width: deprecated.$s-32;
}
.avatar-read {
- border: $s-2 solid var(--color-background-tertiary);
+ border: deprecated.$s-2 solid var(--color-background-tertiary);
}
.avatar-unread {
- border: $s-2 solid var(--color-accent-primary);
+ border: deprecated.$s-2 solid var(--color-accent-primary);
}
.avatar-solved {
- border: $s-2 solid var(--color-background-tertiary);
+ border: deprecated.$s-2 solid var(--color-background-tertiary);
}
.avatar-image {
- border-radius: $br-circle;
+ border-radius: deprecated.$br-circle;
}
.avatar-text {
- border-radius: $br-circle;
+ border-radius: deprecated.$br-circle;
height: 100%;
width: 100%;
display: flex;
align-items: center;
justify-content: center;
- font-size: $fs-12;
+ font-size: deprecated.$fs-12;
background-color: var(--color-background-quaternary);
}
.avatar-mask {
- border-radius: $br-circle;
+ border-radius: deprecated.$br-circle;
position: absolute;
height: 100%;
width: 100%;
@@ -116,17 +116,17 @@
}
.cover {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
cursor: pointer;
display: flex;
flex-direction: column;
- gap: $s-8;
- padding: $s-20;
- border-bottom: $s-1 solid var(--color-background-quaternary);
+ gap: deprecated.$s-8;
+ padding: deprecated.$s-20;
+ border-bottom: deprecated.$s-1 solid var(--color-background-quaternary);
}
.item {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--color-foreground-primary);
word-wrap: break-word;
overflow-wrap: break-word;
@@ -135,9 +135,9 @@
}
.replies {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
display: flex;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.replies-total {
@@ -148,12 +148,12 @@
}
.floating-preview-wrapper {
- z-index: $z-index-1;
+ z-index: deprecated.$z-index-1;
position: absolute;
user-select: none;
cursor: pointer;
pointer-events: auto;
- transform: translate(calc(-1 * $s-16), calc(-1 * $s-16));
+ transform: translate(calc(-1 * deprecated.$s-16), calc(-1 * deprecated.$s-16));
}
.floating-preview-bubble {
@@ -164,7 +164,7 @@
position: absolute;
display: flex;
flex-direction: row;
- column-gap: $s-12;
+ column-gap: deprecated.$s-12;
--translate-x: 0%;
--translate-y: 0%;
@@ -184,31 +184,31 @@
.floating-thread-draft-inner-wrapper {
display: flex;
flex-direction: column;
- gap: $s-12;
- width: $s-284;
- padding: $s-8 $s-12 $s-8 $s-12;
+ gap: deprecated.$s-12;
+ width: deprecated.$s-284;
+ padding: deprecated.$s-8 deprecated.$s-12 deprecated.$s-8 deprecated.$s-12;
pointer-events: auto;
- border-radius: $br-8;
- border: $s-2 solid var(--modal-border-color);
+ border-radius: deprecated.$br-8;
+ border: deprecated.$s-2 solid var(--modal-border-color);
background-color: var(--comment-modal-background-color);
max-height: var(--comment-height);
}
.floating-preview-displacement {
- margin-left: calc(-1 * ($s-12 + $s-2));
- margin-top: calc(-1 * ($s-8 + $s-2));
+ margin-left: calc(-1 * (deprecated.$s-12 + deprecated.$s-2));
+ margin-top: calc(-1 * (deprecated.$s-8 + deprecated.$s-2));
}
.floating-thread-wrapper {
position: absolute;
display: flex;
flex-direction: column;
- gap: $s-12;
- width: $s-284;
- padding: $s-8 $s-12 $s-8 $s-12;
+ gap: deprecated.$s-12;
+ width: deprecated.$s-284;
+ padding: deprecated.$s-8 deprecated.$s-12 deprecated.$s-8 deprecated.$s-12;
pointer-events: auto;
- border-radius: $br-8;
- border: $s-2 solid var(--modal-border-color);
+ border-radius: deprecated.$br-8;
+ border: deprecated.$s-2 solid var(--modal-border-color);
background-color: var(--comment-modal-background-color);
max-height: var(--comment-height);
@@ -228,11 +228,11 @@
display: flex;
justify-content: space-between;
align-items: center;
- height: $s-32;
+ height: deprecated.$s-32;
}
.floating-thread-header-left {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--color-foreground-primary);
}
@@ -244,9 +244,9 @@
.floating-thread-main {
display: flex;
flex-direction: column;
- gap: $s-16;
+ gap: deprecated.$s-16;
overflow-y: auto;
- padding-bottom: $s-16;
+ padding-bottom: deprecated.$s-16;
}
.floating-thread-item-wrapper {
@@ -256,15 +256,15 @@
.floating-thread-item {
display: flex;
flex-direction: column;
- gap: $s-8;
- @include bodySmallTypography;
+ gap: deprecated.$s-8;
+ @include deprecated.bodySmallTypography;
}
.checkbox-wrapper {
- @include flexCenter;
- width: $s-16;
- height: $s-24;
- margin-right: $s-8;
+ @include deprecated.flexCenter;
+ width: deprecated.$s-16;
+ height: deprecated.$s-24;
+ margin-right: deprecated.$s-8;
}
.checkbox {
@@ -275,8 +275,8 @@
@extend .dropdown-wrapper;
position: absolute;
width: fit-content;
- max-width: $s-200;
- right: $s-32;
+ max-width: deprecated.$s-200;
+ right: deprecated.$s-32;
top: 0;
left: unset;
}
@@ -288,16 +288,16 @@
.form {
display: flex;
flex-direction: column;
- gap: $s-8;
- max-height: calc(var(--comment-height) - $s-132);
+ gap: deprecated.$s-8;
+ max-height: calc(var(--comment-height) - deprecated.$s-132);
}
.form-buttons-wrapper {
display: grid;
grid-template-columns: 1fr auto auto;
justify-content: flex-end;
- gap: $s-8;
- margin-top: $s-8;
+ gap: deprecated.$s-8;
+ margin-top: deprecated.$s-8;
}
.open-mentions-button {
@@ -310,17 +310,17 @@
.comments-mentions-choice {
background: var(--color-background-tertiary);
- border-radius: $s-8;
+ border-radius: deprecated.$s-8;
border: none;
display: flex;
flex-direction: column;
- left: calc(-1 * $s-2);
- margin-top: $s-8;
+ left: calc(-1 * deprecated.$s-2);
+ margin-top: deprecated.$s-8;
overflow: hidden;
- padding: $s-2;
+ padding: deprecated.$s-2;
position: absolute;
top: 100%;
- width: calc(100% + $s-4);
+ width: calc(100% + deprecated.$s-4);
}
.comments-mentions-entry {
@@ -329,12 +329,12 @@
grid-template-areas:
"avatar name"
"avatar email";
- grid-template-columns: $s-32 1fr;
- column-gap: $s-8;
- margin: $s-4 $s-8;
- padding: 0 $s-4;
- border-radius: $br-8;
- border: $s-1 solid transparent;
+ grid-template-columns: deprecated.$s-32 1fr;
+ column-gap: deprecated.$s-8;
+ margin: deprecated.$s-4 deprecated.$s-8;
+ padding: 0 deprecated.$s-4;
+ border-radius: deprecated.$br-8;
+ border: deprecated.$s-1 solid transparent;
&:hover {
background: var(--color-background-quaternary);
@@ -347,13 +347,13 @@
.comments-mentions-name {
grid-area: name;
- font-size: $fs-12;
+ font-size: deprecated.$fs-12;
color: var(--color-foreground-primary);
}
.comments-mentions-email {
grid-area: email;
- font-size: $fs-12;
+ font-size: deprecated.$fs-12;
color: var(--color-foreground-secondary);
}
@@ -364,23 +364,23 @@
}
.comment-input {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
white-space: pre-line;
background: var(--input-background-color);
- border-radius: $br-8;
- border: $s-1 solid var(--input-border-color);
+ border-radius: deprecated.$br-8;
+ border: deprecated.$s-1 solid var(--input-border-color);
color: var(--input-foreground-color);
- height: $s-36;
- max-width: $s-260;
+ height: deprecated.$s-36;
+ max-width: deprecated.$s-260;
overflow-y: auto;
- padding: $s-8;
+ padding: deprecated.$s-8;
resize: vertical;
width: 100%;
white-space: pre-wrap;
overflow-wrap: break-word;
&:focus {
- border: $s-1 solid var(--input-border-color-active);
+ border: deprecated.$s-1 solid var(--input-border-color-active);
outline: none;
}
@@ -402,7 +402,7 @@
}
.comments-mentions-empty {
- font-size: $fs-12;
+ font-size: deprecated.$fs-12;
color: var(--color-foreground-secondary);
- padding: $s-6 $s-8;
+ padding: deprecated.$s-6 deprecated.$s-8;
}
diff --git a/frontend/src/app/main/ui/components/button_link.scss b/frontend/src/app/main/ui/components/button_link.scss
index 81b0538d9a..bb58dcc4a5 100644
--- a/frontend/src/app/main/ui/components/button_link.scss
+++ b/frontend/src/app/main/ui/components/button_link.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.button {
appearance: none;
diff --git a/frontend/src/app/main/ui/components/code_block.scss b/frontend/src/app/main/ui/components/code_block.scss
index 5f28cd4624..69b4658f0f 100644
--- a/frontend/src/app/main/ui/components/code_block.scss
+++ b/frontend/src/app/main/ui/components/code_block.scss
@@ -4,15 +4,15 @@
//
// Copyright (c) KALEIDOS INC
-@use "../ds/typography.scss" as t;
-@import "refactor/common-refactor.scss";
+@use "ds/typography.scss" as t;
+@use "ds/_borders.scss" as *;
.code-display {
@include t.use-typography("code-font");
user-select: text;
border-radius: $br-8;
- margin-top: $s-8;
- padding: $s-12;
+ margin-top: var(--sp-s);
+ padding: var(--sp-m);
background-color: var(--menu-background-color);
color: var(--input-foreground-color-active);
overflow: auto;
diff --git a/frontend/src/app/main/ui/components/color_bullet.scss b/frontend/src/app/main/ui/components/color_bullet.scss
index 37b733f34d..52fc242fac 100644
--- a/frontend/src/app/main/ui/components/color_bullet.scss
+++ b/frontend/src/app/main/ui/components/color_bullet.scss
@@ -4,38 +4,38 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.color-bullet {
position: relative;
display: flex;
flex-direction: row;
- width: var(--bullet-size, $s-24);
- height: var(--bullet-size, $s-24);
- min-width: var(--bullet-size, $s-24);
- min-height: var(--bullet-size, $s-24);
- border: $s-2 solid var(--color-bullet-border-color);
- border-radius: $br-circle;
+ width: var(--bullet-size, deprecated.$s-24);
+ height: var(--bullet-size, deprecated.$s-24);
+ min-width: var(--bullet-size, deprecated.$s-24);
+ min-height: var(--bullet-size, deprecated.$s-24);
+ border: deprecated.$s-2 solid var(--color-bullet-border-color);
+ border-radius: deprecated.$br-circle;
&.grid-area {
grid-area: color;
}
&.mini {
- width: var(--bullet-size, $s-16);
- height: var(--bullet-size, $s-16);
- min-width: var(--bullet-size, $s-16);
- min-height: var(--bullet-size, $s-16);
+ width: var(--bullet-size, deprecated.$s-16);
+ height: var(--bullet-size, deprecated.$s-16);
+ min-width: var(--bullet-size, deprecated.$s-16);
+ min-height: var(--bullet-size, deprecated.$s-16);
margin-top: 0;
border: 1px solid var(--color-bullet-border-color);
}
&.is-not-library-color {
overflow: hidden;
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
& .color-bullet-wrapper {
clip-path: none;
}
&.mini {
- border-radius: $br-4;
+ border-radius: deprecated.$br-4;
}
}
&.is-gradient {
@@ -65,27 +65,27 @@
background-color: var(--color-bullet-background-color);
}
&:hover:not(.read-only) {
- border: $s-2 solid var(--color-bullet-border-color-selected);
+ border: deprecated.$s-2 solid var(--color-bullet-border-color-selected);
}
}
.color-text {
- @include twoLineTextEllipsis;
- @include bodySmallTypography;
- width: $s-80;
+ @include deprecated.twoLineTextEllipsis;
+ @include deprecated.bodySmallTypography;
+ width: deprecated.$s-80;
text-align: center;
- margin-top: $s-2;
- max-height: $s-28;
+ margin-top: deprecated.$s-2;
+ max-height: deprecated.$s-28;
color: var(--palette-text-color);
&.small-text {
- @include textEllipsis;
- max-height: $s-16;
+ @include deprecated.textEllipsis;
+ max-height: deprecated.$s-16;
}
}
.big-text {
- @include inspectValue;
- @include twoLineTextEllipsis;
+ @include deprecated.inspectValue;
+ @include deprecated.twoLineTextEllipsis;
line-height: 1;
color: var(--palette-text-color);
text-align: center;
diff --git a/frontend/src/app/main/ui/components/context_menu_a11y.scss b/frontend/src/app/main/ui/components/context_menu_a11y.scss
index d15988775d..e0fc29989e 100644
--- a/frontend/src/app/main/ui/components/context_menu_a11y.scss
+++ b/frontend/src/app/main/ui/components/context_menu_a11y.scss
@@ -4,18 +4,18 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.context-menu {
position: relative;
visibility: hidden;
- opacity: $op-0;
- z-index: $z-index-4;
+ opacity: deprecated.$op-0;
+ z-index: deprecated.$z-index-4;
&.is-open {
position: relative;
display: block;
- opacity: $op-10;
+ opacity: deprecated.$op-10;
visibility: visible;
}
@@ -24,39 +24,39 @@
}
.context-menu-items {
- @include menuShadow;
+ @include deprecated.menuShadow;
position: absolute;
- top: $s-12;
- left: calc(-1 * $s-6);
- max-height: $s-480;
- min-width: $s-96;
- margin: $s-0;
- padding: $s-4;
- border-radius: $br-8;
- border: $s-2 solid var(--panel-border-color);
+ top: deprecated.$s-12;
+ left: calc(-1 * deprecated.$s-6);
+ max-height: deprecated.$s-480;
+ min-width: deprecated.$s-96;
+ margin: deprecated.$s-0;
+ padding: deprecated.$s-4;
+ border-radius: deprecated.$br-8;
+ border: deprecated.$s-2 solid var(--panel-border-color);
background-color: var(--menu-background-color);
overflow: auto;
& .separator {
- border-top: solid $s-1 var(--color-background-quaternary);
+ border-top: solid deprecated.$s-1 var(--color-background-quaternary);
}
&.min-width {
- min-width: $s-192;
+ min-width: deprecated.$s-192;
}
.context-menu-item {
display: flex;
.context-menu-action {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
display: flex;
align-items: center;
justify-content: flex-start;
- height: $s-28;
+ height: deprecated.$s-28;
width: 100%;
- padding: $s-6;
- border-radius: $br-8;
+ padding: deprecated.$s-6;
+ border-radius: deprecated.$br-8;
white-space: nowrap;
color: var(--menu-foreground-color);
@@ -78,7 +78,7 @@
&.submenu-back {
display: flex;
align-items: center;
- font-weight: $fw700;
+ font-weight: deprecated.$fw700;
background: none;
border: none;
cursor: pointer;
@@ -141,7 +141,7 @@
.selected-icon {
@extend .button-tag;
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
height: 100%;
svg {
@@ -153,12 +153,12 @@
}
.is-selected .context-menu-action {
- padding-left: $s-28;
+ padding-left: deprecated.$s-28;
background-image: url(/images/icons/tick.svg);
background-repeat: no-repeat;
background-position: 5% 48%;
- background-size: $s-12;
- font-weight: $fw700;
+ background-size: deprecated.$s-12;
+ font-weight: deprecated.$fw700;
}
}
diff --git a/frontend/src/app/main/ui/components/copy_button.scss b/frontend/src/app/main/ui/components/copy_button.scss
index ec8e362bb5..0239900938 100644
--- a/frontend/src/app/main/ui/components/copy_button.scss
+++ b/frontend/src/app/main/ui/components/copy_button.scss
@@ -4,21 +4,21 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.copy-button {
- @include buttonStyle;
+ @include deprecated.buttonStyle;
width: 100%;
- height: $s-32;
- border: $s-1 solid transparent;
- border-radius: $br-8;
+ height: deprecated.$s-32;
+ border: deprecated.$s-1 solid transparent;
+ border-radius: deprecated.$br-8;
background-color: transparent;
box-sizing: border-box;
.icon-btn {
- @include flexCenter;
- height: $s-32;
- min-width: $s-28;
- width: $s-28;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-32;
+ min-width: deprecated.$s-28;
+ width: deprecated.$s-28;
svg {
@extend .button-icon-small;
stroke: var(--icon-foreground);
@@ -28,7 +28,7 @@
&:hover {
background-color: var(--color-background-tertiary);
color: var(--color-foreground-primary);
- border: $s-1 solid var(--color-background-tertiary);
+ border: deprecated.$s-1 solid var(--color-background-tertiary);
.icon-btn {
svg {
stroke: var(--button-tertiary-foreground-color-active);
@@ -38,7 +38,7 @@
&:focus,
&:focus-visible {
outline: none;
- border: $s-1 solid var(--button-tertiary-border-color-focus);
+ border: deprecated.$s-1 solid var(--button-tertiary-border-color-focus);
background-color: transparent;
color: var(--button-tertiary-foreground-color-focus);
.icon-btn svg {
@@ -48,19 +48,19 @@
}
.copy-wrapper {
- @include buttonStyle;
- @include copyWrapperBase;
+ @include deprecated.buttonStyle;
+ @include deprecated.copyWrapperBase;
width: 100%;
height: fit-content;
text-align: left;
- border: $s-1 solid transparent;
+ border: deprecated.$s-1 solid transparent;
.icon-btn {
- @include flexCenter;
+ @include deprecated.flexCenter;
position: absolute;
top: 0;
right: 0;
- height: $s-32;
- width: $s-28;
+ height: deprecated.$s-32;
+ width: deprecated.$s-28;
svg {
@extend .button-icon-small;
stroke: var(--button-tertiary-foreground-color-focus);
@@ -70,7 +70,7 @@
&:hover {
background-color: var(--button-tertiary-background-color-focus);
color: var(--button-tertiary-foreground-color-focus);
- border: $s-1 solid var(--button-tertiary-background-color-focus);
+ border: deprecated.$s-1 solid var(--button-tertiary-background-color-focus);
.icon-btn svg {
display: flex;
}
@@ -79,7 +79,7 @@
&:focus,
&:focus-visible {
outline: none;
- border: $s-1 solid var(--button-tertiary-border-color-focus);
+ border: deprecated.$s-1 solid var(--button-tertiary-border-color-focus);
background-color: transparent;
color: var(--button-tertiary-foreground-color-focus);
}
diff --git a/frontend/src/app/main/ui/components/editable_label.cljs b/frontend/src/app/main/ui/components/editable_label.cljs
index 744804a1eb..95103ddb67 100644
--- a/frontend/src/app/main/ui/components/editable_label.cljs
+++ b/frontend/src/app/main/ui/components/editable_label.cljs
@@ -7,29 +7,15 @@
(ns app.main.ui.components.editable-label
(:require-macros [app.main.style :as stl])
(:require
- [app.common.data.macros :as dm]
[app.main.constants :refer [max-input-length]]
- [app.main.ui.icons :as deprecated-icon]
[app.util.dom :as dom]
[app.util.keyboard :as kbd]
[app.util.timers :as timers]
[rumext.v2 :as mf]))
-(mf/defc editable-label
- {::mf/wrap-props false}
- [props]
- (let [value (unchecked-get props "value")
- on-change (unchecked-get props "on-change")
- on-cancel (unchecked-get props "on-cancel")
- editing? (unchecked-get props "editing")
- dbl-click? (unchecked-get props "disable-dbl-click")
- class (unchecked-get props "class")
- tooltip (unchecked-get props "tooltip")
- display-value (unchecked-get props "display-value")
-
-
- final-class (dm/str class " " (stl/css :editable-label))
- input-ref (mf/use-ref nil)
+(mf/defc editable-label*
+ [{:keys [value class-input class-label is-editing tooltip display-value on-change on-cancel]}]
+ (let [input-ref (mf/use-ref nil)
internal-editing* (mf/use-state false)
internal-editing? (deref internal-editing*)
@@ -63,14 +49,6 @@
(when (fn? on-cancel)
(on-cancel))))
-
- on-dbl-click
- (mf/use-fn
- (mf/deps dbl-click? start-edition)
- (fn [_]
- (when-not dbl-click?
- (start-edition))))
-
on-key-up
(mf/use-fn
(mf/deps cancel-edition accept-edition)
@@ -82,26 +60,18 @@
(kbd/enter? event)
(accept-edition))))]
- (mf/with-effect [editing? internal-editing? start-edition]
- (when (and editing? (not internal-editing?))
+ (mf/with-effect [is-editing internal-editing? start-edition]
+ (when (and is-editing (not internal-editing?))
(start-edition)))
(if ^boolean internal-editing?
- [:div {:class final-class}
- [:input
- {:class (stl/css :editable-label-input)
- :ref input-ref
- :default-value value
- :on-key-up on-key-up
- :on-double-click on-dbl-click
- :max-length max-input-length
- :on-blur cancel-edition}]
+ [:input {:class [(stl/css :editable-label-input) class-input]
+ :ref input-ref
+ :default-value value
+ :on-key-up on-key-up
+ :max-length max-input-length
+ :on-blur cancel-edition}]
- [:span {:class (stl/css :editable-label-close)
- :on-click cancel-edition}
- deprecated-icon/delete-text]]
-
- [:span {:class final-class
- :title tooltip
- :on-double-click on-dbl-click}
+ [:span {:class [(stl/css :editable-label-text) class-label]
+ :title tooltip}
display-value])))
diff --git a/frontend/src/app/main/ui/components/editable_label.scss b/frontend/src/app/main/ui/components/editable_label.scss
index a8c3991589..29a57d551d 100644
--- a/frontend/src/app/main/ui/components/editable_label.scss
+++ b/frontend/src/app/main/ui/components/editable_label.scss
@@ -4,34 +4,26 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "ds/_borders.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/colors.scss" as *;
+@use "ds/typography.scss" as t;
.editable-label-input {
- @include textEllipsis;
- @include bodySmallTypography;
- @include removeInputStyle;
- flex-grow: 1;
- height: $s-28;
- max-width: calc(var(--parent-size) - (var(--depth) * var(--layer-indentation-size)));
+ @include t.use-typography("body-small");
+ outline: none;
+ width: 100%;
+ height: 100%;
margin: 0;
- padding-left: $s-6;
- border-radius: $br-4;
- border: $s-1 solid var(--input-border-color-active);
- color: var(--input-foreground-color-active);
+ padding: 0 var(--sp-s);
+ border: $b-1 solid var(--color-accent-primary);
+ color: var(--color-foreground-primary);
+ background: var(--color-background-primary);
}
-.editable-label.is-hidden {
- display: none;
-}
-
-.editable-label-close {
- cursor: pointer;
-
- svg {
- @extend .button-icon;
- height: $s-12;
- width: $s-12;
- stroke: var(--icon-foreground);
- margin: 0;
- }
+.editable-label-text {
+ @include t.use-typography("body-small");
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
}
diff --git a/frontend/src/app/main/ui/components/editable_select.scss b/frontend/src/app/main/ui/components/editable_select.scss
index 6edb393932..16962b6d22 100644
--- a/frontend/src/app/main/ui/components/editable_select.scss
+++ b/frontend/src/app/main/ui/components/editable_select.scss
@@ -4,22 +4,22 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.editable-select {
@extend .asset-element;
margin: 0;
padding: 0;
- border: $s-1 solid var(--input-border-color);
+ border: deprecated.$s-1 solid var(--input-border-color);
position: relative;
display: flex;
- height: $s-32;
+ height: deprecated.$s-32;
width: 100%;
- padding: $s-8;
- border-radius: $br-8;
+ padding: deprecated.$s-8;
+ border-radius: deprecated.$br-8;
cursor: pointer;
.dropdown-button {
- @include flexCenter;
+ @include deprecated.flexCenter;
svg {
@extend .button-icon-small;
transform: rotate(90deg);
@@ -29,10 +29,10 @@
.custom-select-dropdown {
@extend .dropdown-wrapper;
- max-height: $s-320;
+ max-height: deprecated.$s-320;
.separator {
margin: 0;
- height: $s-12;
+ height: deprecated.$s-12;
}
.dropdown-element {
@extend .dropdown-element-base;
@@ -43,7 +43,7 @@
}
.check-icon {
- @include flexCenter;
+ @include deprecated.flexCenter;
svg {
@extend .button-icon-small;
visibility: hidden;
diff --git a/frontend/src/app/main/ui/components/forms.scss b/frontend/src/app/main/ui/components/forms.scss
index 61960d2609..6a81a0fcb9 100644
--- a/frontend/src/app/main/ui/components/forms.scss
+++ b/frontend/src/app/main/ui/components/forms.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
// INPUT
.input-wrapper {
@@ -15,33 +15,33 @@
position: relative;
&.valid {
input {
- border: $s-1 solid var(--input-border-color-success);
+ border: deprecated.$s-1 solid var(--input-border-color-success);
@extend .disabled-input;
&:hover,
&:focus {
- border: $s-1 solid var(--input-border-color-success);
+ border: deprecated.$s-1 solid var(--input-border-color-success);
}
}
}
&.invalid {
input {
- border: $s-1 solid var(--input-border-color-error);
+ border: deprecated.$s-1 solid var(--input-border-color-error);
@extend .disabled-input;
&:hover,
&:focus {
- border: $s-1 solid var(--input-border-color-error);
+ border: deprecated.$s-1 solid var(--input-border-color-error);
}
}
}
&.valid .help-icon,
&.invalid .help-icon {
- right: $s-40;
+ right: deprecated.$s-40;
}
}
.input-with-label-form {
- @include flexColumn;
- gap: $s-8;
+ @include deprecated.flexColumn;
+ gap: deprecated.$s-8;
justify-content: flex-start;
align-items: flex-start;
height: 100%;
@@ -57,12 +57,12 @@
width: 100%;
max-width: 100%;
height: 100%;
- padding: 0 $s-8;
+ padding: 0 deprecated.$s-8;
&:focus {
outline: none;
- border: $s-1 solid var(--input-border-color-focus);
- border-radius: $br-8;
+ border: deprecated.$s-1 solid var(--input-border-color-focus);
+ border-radius: deprecated.$br-8;
}
}
@@ -73,7 +73,7 @@
input:-webkit-autofill:active {
-webkit-text-fill-color: var(--input-foreground-color-active);
-webkit-box-shadow: inset 0 0 20px 20px var(--input-background-color);
- border: $s-1 solid var(--input-border-color);
+ border: deprecated.$s-1 solid var(--input-border-color);
-webkit-background-clip: text;
transition: background-color 5000s ease-in-out 0s;
caret-color: var(--input-foreground-color-active);
@@ -82,27 +82,27 @@
.input-and-icon {
position: relative;
- width: var(--input-width, calc(100% - $s-1));
+ width: var(--input-width, calc(100% - deprecated.$s-1));
min-width: var(--input-min-width);
- height: var(--input-height, $s-32);
+ height: var(--input-height, deprecated.$s-32);
}
.help-icon {
cursor: pointer;
position: absolute;
- right: $s-16;
- top: calc(50% - $s-8);
+ right: deprecated.$s-16;
+ top: calc(50% - deprecated.$s-8);
svg {
@extend .button-icon-small;
stroke: var(--color-foreground-secondary);
- width: $s-16;
- height: $s-16;
+ width: deprecated.$s-16;
+ height: deprecated.$s-16;
}
}
.invalid-icon {
- width: $s-16;
- height: $s-16;
+ width: deprecated.$s-16;
+ height: deprecated.$s-16;
background: var(--input-border-color-error);
border-radius: 50%;
display: flex;
@@ -110,28 +110,28 @@
justify-content: center;
position: absolute;
right: var(--input-icon-padding);
- top: calc(50% - $s-8);
+ top: calc(50% - deprecated.$s-8);
svg {
- width: $s-12;
- height: $s-12;
+ width: deprecated.$s-12;
+ height: deprecated.$s-12;
stroke: var(--input-background-color);
}
}
.valid-icon {
- width: $s-16;
- height: $s-16;
+ width: deprecated.$s-16;
+ height: deprecated.$s-16;
background: var(--input-border-color-success);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
position: absolute;
- right: $s-16;
- top: calc(50% - $s-8);
+ right: deprecated.$s-16;
+ top: calc(50% - deprecated.$s-8);
svg {
- width: $s-12;
- height: $s-12;
+ width: deprecated.$s-12;
+ height: deprecated.$s-12;
fill: var(--input-border-color-success);
stroke: var(--input-background-color);
}
@@ -140,25 +140,25 @@
.error {
color: var(--input-border-color-error);
width: 100%;
- font-size: $fs-14;
+ font-size: deprecated.$fs-14;
}
.hint {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
width: 99%;
- margin-block-start: $s-8;
+ margin-block-start: deprecated.$s-8;
color: var(--modal-text-foreground-color);
}
.checkbox {
@extend .input-checkbox;
.checkbox-label {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
display: flex;
align-items: center;
flex-direction: row-reverse;
- gap: $s-6;
- min-height: $s-32;
+ gap: deprecated.$s-6;
+ min-height: deprecated.$s-32;
cursor: pointer;
span {
@extend .checkbox-icon;
@@ -181,23 +181,23 @@
// SELECT
.custom-select {
@extend .select-wrapper;
- height: $s-32;
+ height: deprecated.$s-32;
.input-container {
- @include flexRow;
- height: $s-32;
+ @include deprecated.flexRow;
+ height: deprecated.$s-32;
width: 100%;
- border-radius: $br-8;
- border: $s-1 solid var(--input-border-color);
+ border-radius: deprecated.$br-8;
+ border: deprecated.$s-1 solid var(--input-border-color);
color: var(--input-foreground-color-active);
background-color: var(--input-background-color);
.main-content {
- @include flexColumn;
- @include bodySmallTypography;
+ @include deprecated.flexColumn;
+ @include deprecated.bodySmallTypography;
position: relative;
justify-content: center;
flex-grow: 1;
height: 100%;
- padding: $s-8;
+ padding: deprecated.$s-8;
.label {
color: var(--input-foreground-color);
@@ -211,9 +211,9 @@
}
}
.icon {
- @include flexCenter;
- height: $s-32;
- width: $s-24;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-32;
+ width: deprecated.$s-24;
pointer-events: none;
svg {
@extend .button-icon-small;
@@ -224,40 +224,40 @@
&.disabled {
background-color: var(--input-background-color-disabled);
- border: $s-1 solid var(--input-border-color-disabled);
+ border: deprecated.$s-1 solid var(--input-border-color-disabled);
color: var(--input-foreground-color-disabled);
}
&.focus {
outline: none;
color: var(--input-foreground-color-active);
background-color: var(--input-background-color-active);
- border: $s-1 solid var(--input-border-color-active);
+ border: deprecated.$s-1 solid var(--input-border-color-active);
}
}
select {
@extend .menu-dropdown;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
box-sizing: border-box;
position: absolute;
top: 0;
left: 0;
- min-height: $s-32;
+ min-height: deprecated.$s-32;
height: auto;
width: calc(100% - 1px);
- padding: 0 $s-12;
+ padding: 0 deprecated.$s-12;
margin: 0;
border: none;
opacity: 0;
- z-index: $z-index-10;
+ z-index: deprecated.$z-index-10;
background-color: transparent;
cursor: pointer;
option {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--title-foreground-color-hover);
background-color: var(--menu-background-color);
appearance: none;
- height: $s-32;
+ height: deprecated.$s-32;
}
}
}
@@ -267,7 +267,7 @@
@extend .button-primary;
&:disabled {
@extend .button-disabled;
- min-height: $s-32;
+ min-height: deprecated.$s-32;
}
}
@@ -276,33 +276,33 @@
display: flex;
flex-direction: column;
position: relative;
- min-height: $s-40;
- max-height: $s-180;
+ min-height: deprecated.$s-40;
+ max-height: deprecated.$s-180;
width: 100%;
overflow-y: hidden;
.inside-input {
- @include removeInputStyle;
- @include bodySmallTypography;
- @include textEllipsis;
+ @include deprecated.removeInputStyle;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.textEllipsis;
width: 100%;
- max-width: calc(100% - $s-1);
- min-height: $s-32;
+ max-width: calc(100% - deprecated.$s-1);
+ min-height: deprecated.$s-32;
padding-top: 0;
- height: $s-32;
- padding: $s-8;
+ height: deprecated.$s-32;
+ padding: deprecated.$s-8;
margin: 0;
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
color: var(--input-foreground-color-active);
background-color: var(--input-background-color);
&:focus {
outline: none;
- border: $s-1 solid var(--input-border-color-focus);
+ border: deprecated.$s-1 solid var(--input-border-color-focus);
}
&.invalid {
- border: $s-1 solid var(--input-border-color-error);
+ border: deprecated.$s-1 solid var(--input-border-color-error);
&:hover,
&:focus {
- border: $s-1 solid var(--input-border-color-error);
+ border: deprecated.$s-1 solid var(--input-border-color-error);
}
}
}
@@ -312,31 +312,31 @@
.selected-items {
display: flex;
flex-wrap: wrap;
- gap: $s-4;
- max-height: $s-136;
- padding: $s-4 0;
+ gap: deprecated.$s-4;
+ max-height: deprecated.$s-136;
+ padding: deprecated.$s-4 0;
overflow-y: scroll;
.selected-item {
.around {
- @include flexRow;
- height: $s-24;
+ @include deprecated.flexRow;
+ height: deprecated.$s-24;
width: fit-content;
- padding-left: $s-6;
- border-radius: $br-6;
+ padding-left: deprecated.$s-6;
+ border-radius: deprecated.$br-6;
background-color: var(--pill-background-color);
- border: $s-1 solid var(--pill-background-color);
+ border: deprecated.$s-1 solid var(--pill-background-color);
box-sizing: border-box;
.text {
- @include bodySmallTypography;
- padding-right: $s-8;
+ @include deprecated.bodySmallTypography;
+ padding-right: deprecated.$s-8;
color: var(--pill-foreground-color);
}
.icon {
- @include flexCenter;
- @include buttonStyle;
- height: $s-32;
- width: $s-24;
+ @include deprecated.flexCenter;
+ @include deprecated.buttonStyle;
+ height: deprecated.$s-32;
+ width: deprecated.$s-24;
svg {
@extend .button-icon-small;
stroke: var(--icon-foreground);
@@ -360,31 +360,31 @@
.custom-radio {
display: grid;
grid-template-columns: repeat(3, 1fr);
- gap: $s-16;
+ gap: deprecated.$s-16;
}
.radio-label {
- @include bodySmallTypography;
- @include flexRow;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.flexRow;
align-items: flex-start;
- gap: $s-8;
- min-height: $s-32;
+ gap: deprecated.$s-8;
+ min-height: deprecated.$s-32;
height: fit-content;
- border-radius: $br-8;
- padding: $s-8;
+ border-radius: deprecated.$br-8;
+ padding: deprecated.$s-8;
color: var(--input-foreground-color-rest);
- border: $s-1 solid transparent;
+ border: deprecated.$s-1 solid transparent;
&:focus,
&:focus-within {
outline: none;
- border: $s-1 solid var(--input-border-color-active);
+ border: deprecated.$s-1 solid var(--input-border-color-active);
}
}
.radio-dot {
- height: $s-8;
- width: $s-8;
- border-radius: $br-circle;
+ height: deprecated.$s-8;
+ width: deprecated.$s-8;
+ border-radius: deprecated.$br-circle;
background-color: var(--color-background-tertiary);
}
@@ -395,16 +395,16 @@
.radio-icon {
@extend .checkbox-icon;
- border-radius: $br-circle;
+ border-radius: deprecated.$br-circle;
}
.radio-label-image {
- @include smallTitleTipography;
+ @include deprecated.smallTitleTipography;
display: grid;
grid-template-rows: auto auto 0px;
justify-items: center;
gap: 0;
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
margin: 0;
border: 1px solid var(--color-background-tertiary);
cursor: pointer;
@@ -414,28 +414,28 @@
&:focus,
&:focus-within {
outline: none;
- border: $s-1 solid var(--input-border-color-active);
+ border: deprecated.$s-1 solid var(--input-border-color-active);
}
.image-text {
color: var(--input-foreground-color-rest);
display: grid;
align-self: center;
- margin-bottom: $s-16;
- padding-inline: $s-8;
+ margin-bottom: deprecated.$s-16;
+ padding-inline: deprecated.$s-8;
text-align: center;
}
}
.image-inside {
- margin: $s-16;
+ margin: deprecated.$s-16;
background-size: 100%;
background-repeat: no-repeat;
background-position: center;
}
.icon-inside {
- margin: $s-16;
- @include flexCenter;
+ margin: deprecated.$s-16;
+ @include deprecated.flexCenter;
svg {
width: 40px;
height: 60px;
@@ -447,10 +447,10 @@
//TEXTAREA
.textarea-label {
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
color: var(--modal-title-foreground-color);
text-transform: uppercase;
- margin-bottom: $s-8;
+ margin-bottom: deprecated.$s-8;
}
.textarea-wrapper {
diff --git a/frontend/src/app/main/ui/components/radio_buttons.cljs b/frontend/src/app/main/ui/components/radio_buttons.cljs
index 53e46834f5..85ec06a793 100644
--- a/frontend/src/app/main/ui/components/radio_buttons.cljs
+++ b/frontend/src/app/main/ui/components/radio_buttons.cljs
@@ -38,6 +38,7 @@
[:label {:html-for id
+ :data-testid id
:title title
:class (stl/css-case
:radio-icon true
diff --git a/frontend/src/app/main/ui/components/radio_buttons.scss b/frontend/src/app/main/ui/components/radio_buttons.scss
index 88c0913387..6ef73339ad 100644
--- a/frontend/src/app/main/ui/components/radio_buttons.scss
+++ b/frontend/src/app/main/ui/components/radio_buttons.scss
@@ -4,27 +4,27 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.radio-btn-wrapper {
- @include flexCenter;
- border-radius: $br-8;
- height: $s-32;
+ @include deprecated.flexCenter;
+ border-radius: deprecated.$br-8;
+ height: deprecated.$s-32;
background-color: var(--input-background-color);
- gap: $s-4;
+ gap: deprecated.$s-4;
}
.radio-icon {
--radio-icon-border-color: var(--radio-btn-border-color);
- @include buttonStyle;
- @include flexCenter;
- @include focusRadio;
- height: $s-32;
+ @include deprecated.buttonStyle;
+ @include deprecated.flexCenter;
+ @include deprecated.focusRadio;
+ height: deprecated.$s-32;
flex-grow: 1;
- border-radius: $s-8;
+ border-radius: deprecated.$s-8;
box-sizing: border-box;
- border: $br-2 solid var(--radio-icon-border-color);
+ border: deprecated.$br-2 solid var(--radio-icon-border-color);
input {
display: none;
@@ -34,7 +34,7 @@
stroke: var(--radio-btn-foreground-color);
}
.title-name {
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
color: var(--radio-btn-foreground-color);
}
&:hover {
@@ -59,7 +59,7 @@
.disabled {
cursor: default;
background-color: transparent;
- border: $s-2 solid transparent;
+ border: deprecated.$s-2 solid transparent;
svg {
stroke: var(--button-foreground-color-disabled);
}
@@ -68,7 +68,7 @@
}
&:hover {
background-color: transparent;
- border: $s-2 solid transparent;
+ border: deprecated.$s-2 solid transparent;
svg {
stroke: var(--button-foreground-color-disabled);
}
diff --git a/frontend/src/app/main/ui/components/reorder_handler.scss b/frontend/src/app/main/ui/components/reorder_handler.scss
index 692a24c156..499ff56ad5 100644
--- a/frontend/src/app/main/ui/components/reorder_handler.scss
+++ b/frontend/src/app/main/ui/components/reorder_handler.scss
@@ -8,16 +8,16 @@
cursor: grab;
display: flex;
flex-direction: column;
- height: calc(100% + var(--sp-m));
+ block-size: calc(100% + var(--sp-m));
justify-content: center;
- left: var(--reorder-left-position, calc(-1 * var(--sp-l)));
+ inset-inline-start: var(--reorder-left-position, -11px);
position: absolute;
- top: calc(-1 * (var(--sp-m) / 2));
+ inset-block-start: calc(-1 * (var(--sp-m) / 2));
z-index: var(--z-index-panels);
}
.reorder-icon {
- height: var(--sp-l);
+ block-size: var(--sp-l);
pointer-events: none;
visibility: var(--reorder-icon-visibility, hidden);
--icon-stroke-color: var(--color-foreground-secondary);
@@ -28,15 +28,15 @@
border-color: var(--color-accent-primary);
margin: 0;
position: absolute;
- width: 100%;
+ inline-size: 100%;
}
.reorder-separator-top {
display: var(--reorder-top-display, none);
- top: calc(-1 * var(--sp-xxs));
+ inset-block-start: calc(-1 * var(--sp-xxs));
}
.reorder-separator-bottom {
display: var(--reorder-bottom-display, none);
- bottom: calc(-1 * var(--sp-xxs));
+ inset-block-end: calc(-1 * var(--sp-xxs));
}
diff --git a/frontend/src/app/main/ui/components/search_bar.scss b/frontend/src/app/main/ui/components/search_bar.scss
index 5dfa161079..96855005a1 100644
--- a/frontend/src/app/main/ui/components/search_bar.scss
+++ b/frontend/src/app/main/ui/components/search_bar.scss
@@ -4,33 +4,33 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.search-box {
display: flex;
- gap: $s-2;
- height: $s-32;
+ gap: deprecated.$s-2;
+ height: deprecated.$s-32;
width: 100%;
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
background-color: var(--search-bar-background-color);
}
.icon {
- margin-left: $s-8;
- flex: 0 0 $s-16;
+ margin-left: deprecated.$s-8;
+ flex: 0 0 deprecated.$s-16;
color: var(--color-foreground-primary);
}
.search-input-wrapper {
- @include flexCenter;
- height: $s-32;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-32;
width: 100%;
- border: $s-1 solid var(--search-bar-input-border-color);
- border-radius: $br-8;
+ border: deprecated.$s-1 solid var(--search-bar-input-border-color);
+ border-radius: deprecated.$br-8;
background-color: var(--search-bar-input-background-color);
&:hover {
- border: $s-1 solid var(--input-border-color-hover);
+ border: deprecated.$s-1 solid var(--input-border-color-hover);
background-color: var(--input-background-color-hover);
.search-input {
background-color: var(--input-background-color-hover);
@@ -40,7 +40,7 @@
&:focus-within {
background-color: var(--input-background-color-active);
color: var(--input-foreground-color-active);
- border: $s-1 solid var(--input-border-color-focus);
+ border: deprecated.$s-1 solid var(--input-border-color-focus);
.search-input {
background-color: var(--input-background-color-active);
}
@@ -50,12 +50,12 @@
.search-input {
width: 100%;
height: 100%;
- margin: 0 $s-8 0 $s-4;
+ margin: 0 deprecated.$s-8 0 deprecated.$s-4;
border: 0;
background-color: var(--input-background-color);
- font-size: $fs-12;
+ font-size: deprecated.$fs-12;
color: var(--input-foreground-color);
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
&:focus {
outline: none;
}
@@ -63,12 +63,12 @@
.clear-icon {
@extend .button-tag;
- flex: 0 0 $s-32;
+ flex: 0 0 deprecated.$s-32;
height: 100%;
color: var(--color-icon-default);
}
.search-box.has-children .search-input-wrapper {
- border-radius: 0 $br-8 $br-8 0;
+ border-radius: 0 deprecated.$br-8 deprecated.$br-8 0;
margin-left: 0;
}
diff --git a/frontend/src/app/main/ui/components/select.cljs b/frontend/src/app/main/ui/components/select.cljs
index 25fd0e8bb3..03e10ff299 100644
--- a/frontend/src/app/main/ui/components/select.cljs
+++ b/frontend/src/app/main/ui/components/select.cljs
@@ -13,34 +13,99 @@
[app.main.ui.components.dropdown :refer [dropdown]]
[app.main.ui.icons :as deprecated-icon]
[app.util.dom :as dom]
+ [app.util.keyboard :as kbd]
[rumext.v2 :as mf]))
-
(defn- as-key-value
[item]
(if (map? item)
[(:value item) (:label item) (:icon item)]
[item item item]))
+(defn- rotate-index-forward
+ [index length]
+ (let [last-index (dec length)
+ index (if (< index 0) 0 index)
+ index (inc index)
+ index (if (> index last-index) 0 index)]
+ index))
+
+(defn- rotate-index-backward
+ [index length]
+ (let [last-index (dec length)
+ index (if (< index 0) 0 index)
+ index (dec index)
+ index (if (< index 0) last-index index)]
+ index))
+
+(defn- rotate-option-forward
+ [options index]
+ (:value (nth options (rotate-index-forward index (count options)))))
+
+(defn- rotate-option-backward
+ [options index length]
+ (:value (nth options (rotate-index-backward index length))))
+
(mf/defc select
[{:keys [default-value options class dropdown-class is-open? on-change on-pointer-enter-option on-pointer-leave-option disabled data-direction]}]
- (let [label-index (mf/with-memo [options]
- (into {} (map as-key-value) options))
+ (let [label-index (mf/with-memo [options]
+ (into {} (map as-key-value) options))
- state* (mf/use-state
- {:id (uuid/next)
- :is-open? (or is-open? false)
- :current-value default-value})
+ state* (mf/use-state
+ #(-> {:id (uuid/next)
+ :is-open? (or is-open? false)
+ :current-value default-value}))
- state (deref state*)
- current-id (get state :id)
- current-value (get state :current-value)
- current-label (get label-index current-value)
- is-open? (:is-open? state)
+ state (deref state*)
+ current-id (get state :id)
+ current-value (get state :current-value)
+ current-label (get label-index current-value)
+ is-open? (get state :is-open?)
- dropdown-element* (mf/use-ref nil)
- dropdown-direction* (mf/use-state "down")
- dropdown-direction-change* (mf/use-ref 0)
+ node-ref (mf/use-ref nil)
+
+ dropdown-direction*
+ (mf/use-state "down")
+
+ dropdown-direction
+ (deref dropdown-direction*)
+
+ dropdown-direction-change*
+ (mf/use-ref 0)
+
+ handle-key-up
+ (mf/use-fn
+ (mf/deps disabled options current-value)
+ (fn [e]
+ (when-not disabled
+ (let [options (into [] (remove :disabled) options)
+ length (count options)
+ index (d/index-of-pred options #(= (:value %) current-value))
+ index (d/nilv index 0)]
+
+ (cond
+ (or (kbd/left-arrow? e)
+ (kbd/up-arrow? e))
+ (let [value (rotate-option-backward options index length)]
+ (swap! state* assoc :current-value value)
+ (when (fn? on-change)
+ (on-change (dm/str value))))
+
+ (or (kbd/right-arrow? e)
+ (kbd/down-arrow? e))
+ (let [value (rotate-option-forward options index)]
+ (swap! state* assoc :current-value value)
+ (when (fn? on-change)
+ (on-change (dm/str value))))
+
+ (or (kbd/enter? e)
+ (kbd/space? e))
+ (swap! state* assoc :is-open? false)
+
+ (kbd/tab? e)
+ (swap! state* assoc
+ :is-open? true
+ :current-value (-> options first :value)))))))
open-dropdown
(mf/use-fn
@@ -49,7 +114,8 @@
(when-not disabled
(swap! state* assoc :is-open? true))))
- close-dropdown (mf/use-fn #(swap! state* assoc :is-open? false))
+ close-dropdown
+ (mf/use-fn #(swap! state* assoc :is-open? false))
select-item
(mf/use-fn
@@ -91,8 +157,8 @@
(reset! dropdown-direction* "down")
(mf/set-ref-val! dropdown-direction-change* 0)))
- (mf/with-effect [is-open? dropdown-element*]
- (let [dropdown-element (mf/ref-val dropdown-element*)]
+ (mf/with-effect [is-open?]
+ (let [dropdown-element (mf/ref-val node-ref)]
(when (and (= 0 (mf/ref-val dropdown-direction-change*)) dropdown-element)
(let [is-outside? (dom/is-element-outside? dropdown-element)]
(reset! dropdown-direction* (if is-outside? "up" "down"))
@@ -101,7 +167,10 @@
(let [selected-option (first (filter #(= (:value %) default-value) options))
current-icon (:icon selected-option)
current-icon-ref (deprecated-icon/key->icon current-icon)]
- [:div {:on-click open-dropdown
+ [:div {:id (dm/str current-id)
+ :on-click open-dropdown
+ :on-key-up handle-key-up
+ :tab-index "0"
:role "combobox"
:class (dm/str (stl/css-case :custom-select true
:disabled disabled
@@ -112,23 +181,29 @@
[:span {:class (stl/css :current-label)} current-label]
[:span {:class (stl/css :dropdown-button)} deprecated-icon/arrow]
[:& dropdown {:show is-open? :on-close close-dropdown}
- [:ul {:ref dropdown-element* :data-direction (or data-direction @dropdown-direction*)
+ [:ul {:ref node-ref
+ :data-direction (d/nilv data-direction dropdown-direction)
:class (dm/str dropdown-class " " (stl/css :custom-select-dropdown))}
(for [[index item] (d/enumerate options)]
(if (= :separator item)
- [:li {:class (dom/classnames (stl/css :separator) true)
- :role "option"
- :key (dm/str current-id "-" index)}]
+ [:li {:id (dm/str current-id "-" index)
+ :key (dm/str current-id "-" index)
+ :class (stl/css :separator)
+ :tab-index "-1"
+ :role "option"}]
(let [[value label icon] (as-key-value item)
icon-ref (deprecated-icon/key->icon icon)]
[:li
- {:key (dm/str current-id "-" index)
+ {:id (dm/str current-id "-" index)
+ :key (dm/str current-id "-" index)
+ :tab-index "-1"
:role "option"
:class (stl/css-case
:checked-element true
:disabled (:disabled item)
:is-selected (= value current-value))
:data-value (pr-str value)
+ :on-key-up select-item
:on-pointer-enter highlight-item
:on-pointer-leave unhighlight-item
:on-click select-item}
diff --git a/frontend/src/app/main/ui/components/select.scss b/frontend/src/app/main/ui/components/select.scss
index 386ba4db4f..ba01e42e08 100644
--- a/frontend/src/app/main/ui/components/select.scss
+++ b/frontend/src/app/main/ui/components/select.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.custom-select {
--border-color: var(--menu-background-color);
@@ -12,18 +12,18 @@
--icon-color: var(--icon-foreground);
--text-color: var(--menu-foreground-color);
@extend .new-scrollbar;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
position: relative;
display: grid;
grid-template-columns: 1fr auto;
align-items: center;
- height: $s-32;
+ height: deprecated.$s-32;
width: 100%;
margin: 0;
- padding: $s-8;
- border-radius: $br-8;
+ padding: deprecated.$s-8;
+ border-radius: deprecated.$br-8;
background-color: var(--bg-color);
- border: $s-1 solid var(--border-color);
+ border: deprecated.$s-1 solid var(--border-color);
color: var(--text-color);
cursor: pointer;
@@ -53,7 +53,7 @@
}
.dropdown-button {
- @include flexCenter;
+ @include deprecated.flexCenter;
margin-inline-end: var(--sp-xxs);
svg {
@extend .button-icon-small;
@@ -63,9 +63,9 @@
}
.current-icon {
- @include flexCenter;
- width: $s-24;
- padding-right: $s-4;
+ @include deprecated.flexCenter;
+ width: deprecated.$s-24;
+ padding-right: deprecated.$s-4;
svg {
@extend .button-icon-small;
stroke: var(--icon-foreground);
@@ -76,23 +76,23 @@
@extend .dropdown-wrapper;
.separator {
margin: 0;
- height: $s-12;
- border-block-start: $s-1 solid var(--dropdown-separator-color);
+ height: deprecated.$s-12;
+ border-block-start: deprecated.$s-1 solid var(--dropdown-separator-color);
}
}
.custom-select-dropdown[data-direction="up"] {
- bottom: $s-32;
+ bottom: deprecated.$s-32;
top: auto;
}
.checked-element {
@extend .dropdown-element-base;
.icon {
- @include flexCenter;
- height: $s-24;
- width: $s-24;
- padding-right: $s-4;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-24;
+ width: deprecated.$s-24;
+ padding-right: deprecated.$s-4;
svg {
@extend .button-icon;
stroke: var(--icon-foreground);
@@ -105,7 +105,7 @@
}
.check-icon {
- @include flexCenter;
+ @include deprecated.flexCenter;
svg {
@extend .button-icon-small;
visibility: hidden;
@@ -126,5 +126,5 @@
}
.current-label {
- @include textEllipsis;
+ @include deprecated.textEllipsis;
}
diff --git a/frontend/src/app/main/ui/components/tab_container.scss b/frontend/src/app/main/ui/components/tab_container.scss
index c01715bd42..aab1d5ffdd 100644
--- a/frontend/src/app/main/ui/components/tab_container.scss
+++ b/frontend/src/app/main/ui/components/tab_container.scss
@@ -3,11 +3,11 @@
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.tab-container {
display: grid;
- grid-template-rows: $s-32 1fr;
+ grid-template-rows: deprecated.$s-32 1fr;
height: 100%;
}
@@ -15,11 +15,11 @@
display: flex;
align-items: center;
flex-direction: row;
- gap: $s-2;
- border-radius: $br-8;
+ gap: deprecated.$s-2;
+ border-radius: deprecated.$br-8;
background: var(--tabs-background-color);
cursor: pointer;
- font-size: $fs-12;
+ font-size: deprecated.$fs-12;
height: 100%;
}
@@ -31,15 +31,15 @@
}
.tab-container-tab-title {
- @include flexCenter;
+ @include deprecated.flexCenter;
height: 100%;
width: 100%;
- padding: 0 $s-8;
+ padding: 0 deprecated.$s-8;
margin: 0;
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
background-color: transparent;
color: var(--tab-foreground-color);
- border: $s-2 solid var(--tab-border-color);
+ border: deprecated.$s-2 solid var(--tab-border-color);
min-width: 0;
svg {
@@ -48,7 +48,7 @@
}
.content {
- @include headlineSmallTypography;
+ @include deprecated.headlineSmallTypography;
text-align: center;
white-space: nowrap;
overflow: hidden;
@@ -76,18 +76,18 @@
}
.collapse-sidebar {
- @include flexCenter;
- @include buttonStyle;
+ @include deprecated.flexCenter;
+ @include deprecated.buttonStyle;
height: 100%;
- width: $s-24;
- min-width: $s-24;
- padding: 0 $s-6;
- border-radius: $br-5;
+ width: deprecated.$s-24;
+ min-width: deprecated.$s-24;
+ padding: 0 deprecated.$s-6;
+ border-radius: deprecated.$br-5;
svg {
- @include flexCenter;
- height: $s-16;
- width: $s-16;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-16;
+ width: deprecated.$s-16;
stroke: var(--icon-foreground);
transform: rotate(180deg);
fill: none;
@@ -103,7 +103,7 @@
&.collapsed {
svg {
transform: rotate(0deg);
- padding: 0 0 0 $s-6;
+ padding: 0 0 0 deprecated.$s-6;
}
}
}
@@ -118,6 +118,6 @@
//Firefox doesn't respect scrollbar-gutter
@supports (-moz-appearance: none) {
.tab-container-content {
- padding-right: $s-8;
+ padding-right: deprecated.$s-8;
}
}
diff --git a/frontend/src/app/main/ui/components/title_bar.scss b/frontend/src/app/main/ui/components/title_bar.scss
index 08ec58ebbb..b4b5b84554 100644
--- a/frontend/src/app/main/ui/components/title_bar.scss
+++ b/frontend/src/app/main/ui/components/title_bar.scss
@@ -4,15 +4,16 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "ds/typography.scss" as t;
+@use "refactor/common-refactor.scss" as deprecated;
.title-bar {
display: flex;
align-items: center;
justify-content: space-between;
- height: $s-32;
+ height: deprecated.$s-32;
width: 100%;
- min-height: $s-32;
+ min-height: deprecated.$s-32;
--arrow-icon-color: var(--icon-foreground);
--title-color: var(--title-foreground-color);
}
@@ -20,28 +21,29 @@
.title,
.title-only,
.inspect-title {
- @include headlineSmallTypography;
display: grid;
align-items: center;
justify-content: flex-start;
grid-auto-flow: column;
height: 100%;
- min-height: $s-32;
+ min-height: deprecated.$s-32;
overflow: hidden;
}
.title {
+ @include t.use-typography("headline-small");
color: var(--title-color);
}
.title-only {
+ @include t.use-typography("headline-small");
+ --title-bar-title-margin: #{deprecated.$s-8};
color: var(--title-color);
- --title-bar-title-margin: #{$s-8};
margin-inline-start: var(--title-bar-title-margin);
}
.title-only-icon-gap {
- --title-bar-title-margin: #{$s-12};
+ --title-bar-title-margin: #{deprecated.$s-12};
}
.inspect-title {
@@ -61,7 +63,7 @@
}
.icon-text-btn {
- @include buttonStyle;
+ @include deprecated.buttonStyle;
display: flex;
align-items: center;
flex-grow: 1;
@@ -75,8 +77,8 @@
}
.icon-btn {
- @include buttonStyle;
- @include flexCenter;
+ @include deprecated.buttonStyle;
+ @include deprecated.flexCenter;
&:hover {
--arrow-icon-color: var(--icon-foreground-hover);
diff --git a/frontend/src/app/main/ui/confirm.scss b/frontend/src/app/main/ui/confirm.scss
index 3dfec11100..e517a7b685 100644
--- a/frontend/src/app/main/ui/confirm.scss
+++ b/frontend/src/app/main/ui/confirm.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -18,11 +18,11 @@
}
.modal-header {
- margin-bottom: $s-24;
+ margin-bottom: deprecated.$s-24;
}
.modal-title {
- @include headlineMediumTypography;
+ @include deprecated.headlineMediumTypography;
color: var(--modal-title-foreground-color);
}
@@ -31,25 +31,25 @@
}
.modal-content {
- @include bodyLargeTypography;
- margin-bottom: $s-24;
+ @include deprecated.bodyLargeTypography;
+ margin-bottom: deprecated.$s-24;
}
.modal-item-element {
- @include flexRow;
+ @include deprecated.flexRow;
}
.modal-component-icon {
- @include flexCenter;
- height: $s-16;
- width: $s-16;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-16;
+ width: deprecated.$s-16;
svg {
@extend .button-icon-small;
stroke: var(--color);
}
}
.modal-component-name {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
}
.action-buttons {
@@ -70,6 +70,6 @@
.modal-scd-msg,
.modal-subtitle,
.modal-msg {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-text-foreground-color);
}
diff --git a/frontend/src/app/main/ui/context.cljs b/frontend/src/app/main/ui/context.cljs
index 57672d4f14..59c2631ba6 100644
--- a/frontend/src/app/main/ui/context.cljs
+++ b/frontend/src/app/main/ui/context.cljs
@@ -24,6 +24,7 @@
(def libraries (mf/create-context nil))
(def design-tokens (mf/create-context nil))
+(def token-inputs (mf/create-context nil))
(def current-scroll (mf/create-context nil))
(def current-zoom (mf/create-context nil))
diff --git a/frontend/src/app/main/ui/dashboard.scss b/frontend/src/app/main/ui/dashboard.scss
index 26d4f051a8..994f56a723 100644
--- a/frontend/src/app/main/ui/dashboard.scss
+++ b/frontend/src/app/main/ui/dashboard.scss
@@ -4,23 +4,23 @@
//
// Copyright (c) KALEIDOS INC
-@use "refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
.dashboard {
@extend .new-scrollbar;
background-color: var(--app-background);
display: grid;
- grid-template-columns: $s-40 $s-256 1fr;
- grid-template-rows: $s-52 1fr;
+ grid-template-columns: deprecated.$s-40 deprecated.$s-256 1fr;
+ grid-template-rows: deprecated.$s-52 1fr;
height: 100vh;
}
.dashboard-content {
display: grid;
- grid-template-rows: $s-64 1fr;
+ grid-template-rows: deprecated.$s-64 1fr;
position: relative;
grid-row: 1 / span 2;
- padding: $s-16 $s-16 0 0;
+ padding: deprecated.$s-16 deprecated.$s-16 0 0;
overflow: hidden;
width: 100%;
}
diff --git a/frontend/src/app/main/ui/dashboard/change_owner.scss b/frontend/src/app/main/ui/dashboard/change_owner.scss
index 0e960020e0..40e8387274 100644
--- a/frontend/src/app/main/ui/dashboard/change_owner.scss
+++ b/frontend/src/app/main/ui/dashboard/change_owner.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -15,11 +15,11 @@
}
.modal-header {
- margin-bottom: $s-24;
+ margin-bottom: deprecated.$s-24;
}
.modal-title {
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
color: var(--modal-title-foreground-color);
}
@@ -28,13 +28,13 @@
}
.modal-content {
- @include bodySmallTypography;
- margin-bottom: $s-24;
+ @include deprecated.bodySmallTypography;
+ margin-bottom: deprecated.$s-24;
}
.input-wrapper {
@extend .input-with-label;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
}
.action-buttons {
diff --git a/frontend/src/app/main/ui/dashboard/comments.scss b/frontend/src/app/main/ui/dashboard/comments.scss
index 4d56ef43dd..c81fd1ee71 100644
--- a/frontend/src/app/main/ui/dashboard/comments.scss
+++ b/frontend/src/app/main/ui/dashboard/comments.scss
@@ -4,32 +4,32 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
.dashboard-comments-section {
- @include flexCenter;
+ @include deprecated.flexCenter;
position: relative;
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
}
.thread-groups {
- height: calc(100% - $s-32);
- max-height: $s-440;
+ height: calc(100% - deprecated.$s-32);
+ max-height: deprecated.$s-440;
overflow: auto;
}
.thread-group {
display: flex;
flex-direction: column;
- font-size: $fs-12;
+ font-size: deprecated.$fs-12;
}
.thread-groups-placeholder {
align-items: center;
display: flex;
flex-direction: column;
- font-size: $fs-12;
- padding: $s-24;
+ font-size: deprecated.$fs-12;
+ padding: deprecated.$s-24;
text-align: center;
color: var(--color-foreground-secondary);
}
@@ -37,22 +37,22 @@
.comments-icon {
@extend .button-icon;
stroke: var(--icon-foreground);
- height: $s-24;
- width: $s-24;
- margin-bottom: $s-24;
+ height: deprecated.$s-24;
+ width: deprecated.$s-24;
+ margin-bottom: deprecated.$s-24;
}
.comment-button {
position: relative;
.unread {
position: absolute;
- width: $s-8;
- height: $s-8;
- border: $s-2 solid var(--color-background-tertiary);
+ width: deprecated.$s-8;
+ height: deprecated.$s-8;
+ border: deprecated.$s-2 solid var(--color-background-tertiary);
border-radius: 50%;
background: red;
- top: $s-6;
- right: $s-6;
+ top: deprecated.$s-6;
+ right: deprecated.$s-6;
}
}
@@ -62,18 +62,18 @@
}
.dropdown {
- @include menuShadow;
+ @include deprecated.menuShadow;
background-color: var(--color-background-tertiary);
- border-radius: $br-8;
- border: $s-1 solid transparent;
- bottom: $s-4;
+ border-radius: deprecated.$br-8;
+ border: deprecated.$s-1 solid transparent;
+ bottom: deprecated.$s-4;
height: 40vh;
- max-height: $s-480;
- min-height: $s-200;
+ max-height: deprecated.$s-480;
+ min-height: deprecated.$s-200;
position: absolute;
overflow: hidden;
width: 100%;
- z-index: $z-index-4;
+ z-index: deprecated.$z-index-4;
hr {
margin: 0;
@@ -83,15 +83,15 @@
.header {
display: flex;
- height: $s-40;
+ height: deprecated.$s-40;
align-items: center;
- padding: 0 $s-12;
- gap: $s-4;
+ padding: 0 deprecated.$s-12;
+ gap: deprecated.$s-4;
}
.header-title {
color: var(--color-foreground-secondary);
- font-size: $fs-11;
+ font-size: deprecated.$fs-11;
line-height: 1.28;
flex-grow: 1;
text-transform: uppercase;
@@ -102,7 +102,7 @@
cursor: pointer;
}
&.mark-all-as-read-button {
- border-radius: $s-8;
- border: $s-1 solid;
+ border-radius: deprecated.$s-8;
+ border: deprecated.$s-1 solid;
}
}
diff --git a/frontend/src/app/main/ui/dashboard/files.scss b/frontend/src/app/main/ui/dashboard/files.scss
index 692eed37cd..79f3563168 100644
--- a/frontend/src/app/main/ui/dashboard/files.scss
+++ b/frontend/src/app/main/ui/dashboard/files.scss
@@ -4,31 +4,31 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
@use "common/refactor/common-dashboard";
.dashboard-container {
flex: 1 0 0;
- margin-right: $s-16;
+ margin-right: deprecated.$s-16;
overflow-y: auto;
width: 100%;
- border-top: $s-1 solid var(--color-background-quaternary);
+ border-top: deprecated.$s-1 solid var(--color-background-quaternary);
&.dashboard-projects {
user-select: none;
}
&.dashboard-shared {
- width: calc(100vw - $s-320);
- margin-right: $s-52;
+ width: calc(100vw - deprecated.$s-320);
+ margin-right: deprecated.$s-52;
}
&.search {
- margin-top: $s-12;
+ margin-top: deprecated.$s-12;
}
}
.new-file {
- margin-inline-end: $s-8;
+ margin-inline-end: deprecated.$s-8;
}
.menu-icon {
@@ -37,5 +37,5 @@
}
.placeholder-placement {
- margin: $s-16 $s-32;
+ margin: deprecated.$s-16 deprecated.$s-32;
}
diff --git a/frontend/src/app/main/ui/dashboard/fonts.scss b/frontend/src/app/main/ui/dashboard/fonts.scss
index a49a10cbf7..8a064213df 100644
--- a/frontend/src/app/main/ui/dashboard/fonts.scss
+++ b/frontend/src/app/main/ui/dashboard/fonts.scss
@@ -4,35 +4,41 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
@use "common/refactor/common-dashboard";
+@use "ds/_utils.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/typography.scss" as t;
+@use "ds/spacing.scss" as *;
+@use "ds/mixins.scss" as *;
+
.dashboard-fonts {
- border-top: $s-1 solid var(--color-background-quaternary);
+ border-top: $b-1 solid var(--color-background-quaternary);
display: flex;
flex-direction: column;
- padding-left: $s-120;
+ padding-left: px2rem(120);
+ padding-bottom: px2rem(120);
overflow-y: auto;
- padding-bottom: $s-120;
.btn-primary {
- font-size: $fs-11;
- height: $s-32;
- min-width: $s-100;
+ font-size: px2rem(11);
+ height: $sz-32;
+ min-width: px2rem(100);
}
}
.dashboard-installed-fonts {
- max-width: $s-1000;
+ max-width: px2rem(1000);
width: 100%;
display: flex;
- margin-top: $s-24;
+ margin-top: var(--sp-xxl);
flex-direction: column;
h3 {
- font-size: $fs-14;
+ @include t.use-typography("title-small");
color: var(--color-foreground-secondary);
- margin: $s-4;
+ margin: var(--sp-xs);
}
.font-item {
@@ -41,21 +47,21 @@
}
.installed-fonts-header {
+ @include t.use-typography("headline-small");
align-items: center;
color: var(--color-foreground-secondary);
display: flex;
- font-size: $fs-12;
- height: $s-40;
- padding-left: $s-24;
- text-transform: uppercase;
+ height: $sz-40;
+ padding-left: var(--sp-xxl);
> .family {
- min-width: $s-200;
- width: $s-200;
+ @include twoLineTextEllipsis;
+ min-width: $sz-200;
+ width: $sz-200;
}
> .variants {
- padding-left: $s-12;
+ padding-left: var(--sp-m);
}
}
@@ -65,19 +71,19 @@
justify-content: flex-end;
input {
+ @include t.use-typography("body-medium");
background-color: var(--color-background-tertiary);
border-color: transparent;
border-radius: $br-8;
- border: $s-1 solid transparent;
+ border: $b-1 solid transparent;
color: var(--color-foreground-primary);
- font-size: $fs-14;
- height: $s-32;
+ height: $sz-32;
margin: 0;
- padding: 0 $s-8;
- width: $s-152;
+ padding: 0 var(--sp-s);
+ width: px2rem(152);
&:focus {
- outline: $s-1 solid var(--color-accent-primary);
+ outline: $b-1 solid var(--color-accent-primary);
}
&::placeholder {
color: var(--color-foreground-secondary);
@@ -86,67 +92,72 @@
}
.font-item {
+ @include t.use-typography("body-medium");
align-items: center;
background-color: var(--color-background-tertiary);
border-radius: $br-4;
color: var(--color-foreground-secondary);
display: flex;
- font-size: $fs-14;
justify-content: space-between;
- margin-top: $s-4;
- max-width: $s-1000;
- padding: $s-12 $s-24;
+ margin-top: var(--sp-xs);
+ max-width: px2rem(1000);
+ padding: var(--sp-m) var(--sp-xxl);
width: 100%;
input {
- border: $s-1 solid transparent;
+ @include t.use-typography("body-medium");
+ @include textEllipsis;
+ border: $b-1 solid transparent;
margin: 0;
- padding: $s-8;
+ padding: var(--sp-s);
background-color: var(--color-background-tertiary);
border-radius: $br-8;
color: var(--color-foreground-primary);
- font-size: $fs-14;
&:focus {
- outline: $s-1 solid var(--color-accent-primary);
+ outline: $b-1 solid var(--color-accent-primary);
+ overflow: visible;
+ text-overflow: unset;
}
}
> .family {
- min-width: $s-200;
- width: $s-200;
+ @include twoLineTextEllipsis;
+ min-width: $sz-200;
+ width: $sz-200;
}
> .filenames {
- min-width: $s-200;
+ @include textEllipsis;
+ min-width: $sz-200;
}
> .variants {
- font-size: $fs-14;
+ @include t.use-typography("body-medium");
display: flex;
flex-wrap: wrap;
flex-grow: 1;
- padding-left: $s-16;
- gap: $s-6;
+ padding-left: var(--sp-l);
+ gap: $sz-6;
.variant {
display: flex;
justify-content: space-between;
align-items: center;
- padding: $s-8 $s-12;
+ padding: var(--sp-s) var(--sp-m);
cursor: pointer;
- gap: $s-4;
+ gap: var(--sp-xs);
.icon {
display: flex;
align-items: center;
justify-content: center;
- height: $s-16;
- width: $s-16;
+ height: $sz-16;
+ width: $sz-16;
svg {
fill: none;
- width: $s-12;
- height: $s-12;
+ width: $sz-12;
+ height: $sz-12;
transform: rotate(45deg);
}
}
@@ -171,32 +182,33 @@
}
.filenames {
- display: flex;
- flex-direction: column;
- font-size: $fs-12;
+ @include t.use-typography("body-small");
+ @include textEllipsis;
+ min-width: $sz-400;
+ padding-left: var(--sp-xxxl);
}
.options {
display: flex;
justify-content: flex-end;
- min-width: $s-180;
+ min-width: px2rem(180);
.icon {
- width: $s-24;
+ width: $sz-24;
cursor: pointer;
display: flex;
- margin-left: $s-12;
+ margin-left: var(--sp-m);
justify-content: center;
align-items: center;
svg {
- width: $s-16;
- height: $s-16;
+ width: $sz-16;
+ height: $sz-16;
stroke: var(--color-foreground-secondary);
fill: none;
}
&.failure {
- margin-right: $s-12;
+ margin-right: var(--sp-m);
svg {
stroke: var(--element-foreground-warning);
}
@@ -214,46 +226,47 @@
}
.dashboard-fonts-upload {
- max-width: $s-1000;
+ max-width: px2rem(1000);
width: 100%;
display: flex;
flex-direction: column;
.upload-button {
- width: $s-100;
+ width: px2rem(100);
}
.btn-secondary {
- margin-left: $s-12;
+ margin-left: var(--sp-m);
}
}
.dashboard-fonts-hero {
- font-size: $fs-14;
- padding: $s-32 0;
- margin-top: $s-80;
+ @include t.use-typography("body-medium");
+ padding: var(--sp-xxxl) 0;
+ margin-top: px2rem(80);
display: flex;
justify-content: space-between;
.btn-primary {
- height: $s-40;
+ height: $sz-40;
width: 100%;
}
.desc {
display: flex;
flex-direction: column;
- gap: $s-24;
+ gap: var(--sp-xxl);
color: var(--color-background-secondary);
- width: $s-500;
+ width: $sz-500;
h2 {
color: var(--color-foreground-primary);
font-weight: 400;
}
+
p {
+ @include t.use-typography("body-large");
color: var(--color-foreground-secondary);
- font-size: $fs-16;
}
}
@@ -265,24 +278,24 @@
.fonts-placeholder {
align-items: center;
border-radius: $br-8;
- border: $s-1 solid var(--color-background-quaternary);
+ border: $b-1 solid var(--color-background-quaternary);
display: flex;
flex-direction: column;
- height: $s-160;
+ height: $sz-160;
justify-content: center;
- margin-top: $s-16;
- max-width: $s-1000;
+ margin-top: var(--sp-l);
+ max-width: px2rem(1000);
width: 100%;
.icon svg {
stroke: var(--color-foreground-secondary);
fill: none;
- width: $s-32;
- height: $s-32;
+ width: $sz-32;
+ height: $sz-32;
}
.label {
+ @include t.use-typography("body-medium");
color: var(--color-foreground-secondary);
- font-size: $fs-14;
}
}
diff --git a/frontend/src/app/main/ui/dashboard/grid.scss b/frontend/src/app/main/ui/dashboard/grid.scss
index fe58c48252..ae9807214d 100644
--- a/frontend/src/app/main/ui/dashboard/grid.scss
+++ b/frontend/src/app/main/ui/dashboard/grid.scss
@@ -4,28 +4,28 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
// TODO: Legacy sass variables. We should remove them in favor of DS tokens.
$bp-max-1366: "(max-width: 1366px)";
-$thumbnail-default-width: $s-252; // Default width
-$thumbnail-default-height: $s-168; // Default width
+$thumbnail-default-width: deprecated.$s-252; // Default width
+$thumbnail-default-height: deprecated.$s-168; // Default width
.dashboard-grid {
- font-size: $fs-14;
+ font-size: deprecated.$fs-14;
height: 100%;
overflow-y: auto;
overflow-x: hidden;
- padding: 0 $s-16;
+ padding: 0 deprecated.$s-16;
}
.grid-row {
display: grid;
grid-auto-flow: column;
- grid-auto-columns: calc($s-12 + var(--th-width, #{$thumbnail-default-width}));
+ grid-auto-columns: calc(deprecated.$s-12 + var(--th-width, #{$thumbnail-default-width}));
width: 100%;
- gap: $s-24;
+ gap: deprecated.$s-24;
}
.grid-item {
@@ -33,23 +33,23 @@ $thumbnail-default-height: $s-168; // Default width
cursor: pointer;
display: flex;
flex-direction: column;
- margin: $s-12 0;
+ margin: deprecated.$s-12 0;
position: relative;
text-align: center;
a,
button {
width: 100%;
- font-weight: $fw400;
+ font-weight: deprecated.$fw400;
}
button {
background-color: transparent;
border: none;
- padding: 0 $s-6;
+ padding: 0 deprecated.$s-6;
}
.grid-item-th {
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
text-align: initial;
width: var(--th-width, #{$thumbnail-default-width});
height: var(--th-height, #{$thumbnail-default-height});
@@ -62,22 +62,22 @@ $thumbnail-default-height: $s-168; // Default width
}
&.dragged {
- border-radius: $br-4;
- outline: $br-4 solid var(--color-accent-primary);
+ border-radius: deprecated.$br-4;
+ outline: deprecated.$br-4 solid var(--color-accent-primary);
text-align: initial;
- width: calc(var(--th-width) + $s-12);
+ width: calc(var(--th-width) + deprecated.$s-12);
height: var(--th-height, #{$thumbnail-default-height});
}
&.overlay {
- border-radius: $br-4;
- border: $s-2 solid var(--color-accent-tertiary);
+ border-radius: deprecated.$br-4;
+ border: deprecated.$s-2 solid var(--color-accent-tertiary);
height: 100%;
opacity: 0;
pointer-events: none;
position: absolute;
width: 100%;
- z-index: $z-index-1;
+ z-index: deprecated.$z-index-1;
}
&:hover .overlay {
@@ -94,28 +94,28 @@ $thumbnail-default-height: $s-168; // Default width
.item-info {
display: grid;
- padding: $s-8;
+ padding: deprecated.$s-8;
text-align: left;
width: 100%;
- font-size: $fs-12;
+ font-size: deprecated.$fs-12;
h3 {
- border: $s-1 solid transparent;
+ border: deprecated.$s-1 solid transparent;
color: var(--color-foreground-primary);
- font-size: $fs-16;
- font-weight: $fw400;
- height: $s-28;
+ font-size: deprecated.$fs-16;
+ font-weight: deprecated.$fw400;
+ height: deprecated.$s-28;
line-height: 1.92;
- max-width: $s-260;
+ max-width: deprecated.$s-260;
overflow: hidden;
- padding-right: $s-8;
+ padding-right: deprecated.$s-8;
padding: 0;
text-overflow: ellipsis;
white-space: nowrap;
width: 100%;
@media #{$bp-max-1366} {
- max-width: $s-232;
+ max-width: deprecated.$s-232;
}
}
@@ -125,12 +125,12 @@ $thumbnail-default-height: $s-168; // Default width
text-overflow: ellipsis;
width: 100%;
white-space: nowrap;
- max-width: $s-260;
+ max-width: deprecated.$s-260;
&::first-letter {
text-transform: capitalize;
}
@media #{$bp-max-1366} {
- max-width: $s-232;
+ max-width: deprecated.$s-232;
}
}
}
@@ -138,12 +138,12 @@ $thumbnail-default-height: $s-168; // Default width
.item-badge {
background-color: var(--color-accent-primary);
border: none;
- border-radius: $br-6;
+ border-radius: deprecated.$br-6;
position: absolute;
- top: $s-12;
- right: $s-12;
- height: $s-32;
- width: $s-32;
+ top: deprecated.$s-12;
+ right: deprecated.$s-12;
+ height: deprecated.$s-32;
+ width: deprecated.$s-32;
display: flex;
align-items: center;
justify-content: center;
@@ -151,38 +151,38 @@ $thumbnail-default-height: $s-168; // Default width
svg {
stroke: var(--color-background-secondary);
fill: none;
- height: $s-16;
- width: $s-16;
+ height: deprecated.$s-16;
+ width: deprecated.$s-16;
}
}
&.add-file {
- border: $s-1 dashed var(--color-foreground-secondary);
+ border: deprecated.$s-1 dashed var(--color-foreground-secondary);
justify-content: center;
box-shadow: none;
span {
color: var(--color-background-primary);
- font-size: $fs-14;
+ font-size: deprecated.$fs-14;
}
&:hover {
background-color: var(--color-foreground-primary);
- border: $s-2 solid var(--color-accent-tertiary);
+ border: deprecated.$s-2 solid var(--color-accent-tertiary);
}
}
}
.drag-counter {
position: absolute;
- top: $s-4;
- left: $s-4;
- width: $s-32;
- height: $s-32;
+ top: deprecated.$s-4;
+ left: deprecated.$s-4;
+ width: deprecated.$s-32;
+ height: deprecated.$s-32;
background-color: var(--color-accent-tertiary);
- border-radius: $br-circle;
+ border-radius: deprecated.$br-circle;
color: var(--color-background-secondary);
- font-size: $fs-16;
+ font-size: deprecated.$fs-16;
display: flex;
justify-content: center;
align-items: center;
@@ -191,8 +191,8 @@ $thumbnail-default-height: $s-168; // Default width
// PROJECTS, ELEMENTS & ICONS GRID
.project-th {
background-color: transparent;
- border-radius: $br-8;
- padding-top: $s-6;
+ border-radius: deprecated.$br-8;
+ padding-top: deprecated.$s-6;
&:hover,
&:focus,
@@ -208,7 +208,7 @@ $thumbnail-default-height: $s-168; // Default width
.selected {
.grid-item-th {
- outline: $s-4 solid var(--color-accent-tertiary);
+ outline: deprecated.$s-4 solid var(--color-accent-tertiary);
}
}
}
@@ -219,8 +219,8 @@ $thumbnail-default-height: $s-168; // Default width
height: 100%;
justify-content: center;
opacity: 0;
- right: $s-6;
- width: $s-32;
+ right: deprecated.$s-6;
+ width: deprecated.$s-32;
span {
color: var(--color-background-secondary);
@@ -230,7 +230,7 @@ $thumbnail-default-height: $s-168; // Default width
.project-th-icon {
align-items: center;
display: flex;
- margin-right: $s-8;
+ margin-right: deprecated.$s-8;
margin-top: 0;
}
@@ -238,10 +238,10 @@ $thumbnail-default-height: $s-168; // Default width
align-items: flex-end;
display: flex;
flex-direction: column;
- height: $s-32;
+ height: deprecated.$s-32;
justify-content: center;
margin-right: 0;
- margin-top: $s-20;
+ margin-top: deprecated.$s-20;
width: 100%;
--menu-icon-color: var(--button-tertiary-foreground-color-rest);
@@ -255,8 +255,8 @@ $thumbnail-default-height: $s-168; // Default width
stroke: var(--menu-icon-color);
fill: none;
margin-right: 0;
- height: $s-16;
- width: $s-16;
+ height: deprecated.$s-16;
+ width: deprecated.$s-16;
}
.project-th-actions.force-display {
@@ -264,7 +264,7 @@ $thumbnail-default-height: $s-168; // Default width
}
.grid-item-th {
- border-radius: $br-4;
+ border-radius: deprecated.$br-4;
cursor: pointer;
height: 100%;
overflow: hidden;
@@ -282,11 +282,11 @@ $thumbnail-default-height: $s-168; // Default width
// LIBRARY VIEW
.library {
- height: $s-580;
+ height: deprecated.$s-580;
}
.grid-item.project-th.library {
- height: $s-612;
+ height: deprecated.$s-612;
}
.grid-item-th.library {
@@ -294,21 +294,21 @@ $thumbnail-default-height: $s-168; // Default width
flex-direction: column;
height: 90%;
justify-content: flex-start;
- max-height: $s-580;
- padding: $s-32;
+ max-height: deprecated.$s-580;
+ padding: deprecated.$s-32;
.asset-section {
- font-size: $fs-12;
+ font-size: deprecated.$fs-12;
color: var(--color-foreground-secondary);
&:not(:first-child) {
- margin-top: $s-16;
+ margin-top: deprecated.$s-16;
}
}
.asset-title {
display: flex;
- font-size: $fs-12;
+ font-size: deprecated.$fs-12;
text-transform: uppercase;
.num-assets {
@@ -318,18 +318,18 @@ $thumbnail-default-height: $s-168; // Default width
.asset-list-item {
align-items: center;
- border-radius: $br-4;
- border: $s-1 solid transparent;
+ border-radius: deprecated.$br-4;
+ border: deprecated.$s-1 solid transparent;
color: var(--color-foreground-primary);
display: flex;
- font-size: $fs-12;
- margin-top: $s-4;
- padding: $s-2;
+ font-size: deprecated.$fs-12;
+ margin-top: deprecated.$s-4;
+ padding: deprecated.$s-2;
position: relative;
.name-block {
color: var(--color-foreground-secondary);
- width: calc(100% - $s-24 - $s-8);
+ width: calc(100% - deprecated.$s-24 - deprecated.$s-8);
}
.item-name {
@@ -341,11 +341,11 @@ $thumbnail-default-height: $s-168; // Default width
svg {
background-color: var(--color-canvas);
- border-radius: $br-4;
- border: $s-2 solid transparent;
- height: $s-24;
- margin-right: $s-8;
- width: $s-24;
+ border-radius: deprecated.$br-4;
+ border: deprecated.$s-2 solid transparent;
+ height: deprecated.$s-24;
+ margin-right: deprecated.$s-8;
+ width: deprecated.$s-24;
}
.color-name {
@@ -354,14 +354,14 @@ $thumbnail-default-height: $s-168; // Default width
.color-value {
color: var(--color-foreground-secondary);
- margin-left: $s-4;
+ margin-left: deprecated.$s-4;
text-transform: uppercase;
}
.typography-sample {
- height: $s-20;
- margin-right: $s-4;
- width: $s-20;
+ height: deprecated.$s-20;
+ margin-right: deprecated.$s-4;
+ width: deprecated.$s-20;
}
}
}
@@ -369,7 +369,7 @@ $thumbnail-default-height: $s-168; // Default width
.color-item {
display: grid;
grid-template-columns: auto 1fr;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.grid-loader {
diff --git a/frontend/src/app/main/ui/dashboard/import.scss b/frontend/src/app/main/ui/dashboard/import.scss
index 0ce6ae41a5..cf7cea13ae 100644
--- a/frontend/src/app/main/ui/dashboard/import.scss
+++ b/frontend/src/app/main/ui/dashboard/import.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -17,11 +17,11 @@
}
.modal-header {
- margin-bottom: $s-24;
+ margin-bottom: deprecated.$s-24;
}
.modal-title {
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
color: var(--modal-title-foreground-color);
}
@@ -30,14 +30,14 @@
}
.modal-content {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
flex: 1;
overflow-y: auto;
overflow-x: hidden;
display: grid;
grid-template-columns: 1fr;
- gap: $s-16;
- margin-bottom: $s-24;
+ gap: deprecated.$s-16;
+ margin-bottom: deprecated.$s-24;
min-height: 40px;
}
@@ -58,7 +58,7 @@
.modal-scd-msg,
.modal-subtitle,
.modal-msg {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--modal-text-foreground-color);
line-height: 1.5;
}
@@ -66,11 +66,11 @@
.file-entry {
display: flex;
.file-name {
- @include flexRow;
+ @include deprecated.flexRow;
.file-icon {
- @include flexCenter;
- height: $s-24;
- width: $s-16;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-24;
+ width: deprecated.$s-16;
svg {
@extend .button-icon;
stroke: var(--icon-foreground);
@@ -81,19 +81,19 @@
}
.file-name-edit {
@extend .input-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
flex-grow: 1;
}
.file-name-label {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
display: flex;
align-items: center;
- gap: $s-12;
+ gap: deprecated.$s-12;
flex-grow: 1;
.icon {
- @include flexCenter;
- height: $s-16;
- width: $s-16;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-16;
+ width: deprecated.$s-16;
svg {
@extend .button-icon-small;
stroke: var(--icon-foreground);
@@ -101,11 +101,11 @@
}
}
.edit-entry-buttons {
- @include flexRow;
+ @include deprecated.flexRow;
button {
@extend .button-tertiary;
- width: $s-28;
- height: $s-32;
+ width: deprecated.$s-28;
+ height: deprecated.$s-32;
svg {
@extend .button-icon;
stroke: var(--icon-foreground);
@@ -117,19 +117,19 @@
.progress-message {
display: flex;
align-items: center;
- height: $s-32;
+ height: deprecated.$s-32;
color: var(--modal-text-foreground-color);
}
.linked-library {
display: flex;
align-items: center;
- gap: $s-12;
+ gap: deprecated.$s-12;
color: var(--modal-text-foreground-color);
.linked-library-tag {
- @include flexCenter;
- height: $s-24;
- width: $s-24;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-24;
+ width: deprecated.$s-24;
svg {
@extend .button-icon;
stroke: var(--icon-foreground);
diff --git a/frontend/src/app/main/ui/dashboard/inline_edition.scss b/frontend/src/app/main/ui/dashboard/inline_edition.scss
index 4b4a17eb1c..4f62033011 100644
--- a/frontend/src/app/main/ui/dashboard/inline_edition.scss
+++ b/frontend/src/app/main/ui/dashboard/inline_edition.scss
@@ -4,29 +4,29 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
.edit-wrapper {
- border-radius: $br-4;
+ border-radius: deprecated.$br-4;
display: flex;
- padding-right: $s-24;
+ padding-right: deprecated.$s-24;
position: relative;
- margin-right: $s-24;
+ margin-right: deprecated.$s-24;
}
input.element-title {
background-color: var(--input-background-color-active);
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
color: var(--color-foreground-primary);
- font-size: $fs-16;
- height: $s-32;
+ font-size: deprecated.$fs-16;
+ height: deprecated.$s-32;
margin: 0;
border: none;
- padding: $s-6;
+ padding: deprecated.$s-6;
width: 100%;
&:focus-visible {
- border: $s-1 solid var(--color-accent-primary);
+ border: deprecated.$s-1 solid var(--color-accent-primary);
outline: none;
}
}
@@ -35,14 +35,14 @@ input.element-title {
cursor: pointer;
position: absolute;
- top: $s-1;
- right: calc(-1 * $s-8);
+ top: deprecated.$s-1;
+ right: calc(-1 * deprecated.$s-8);
svg {
fill: var(--color-foreground-secondary);
- height: $s-16;
+ height: deprecated.$s-16;
transform: rotate(45deg) translateY(7px);
- width: $s-16;
+ width: deprecated.$s-16;
margin: 0;
}
&:hover {
diff --git a/frontend/src/app/main/ui/dashboard/libraries.scss b/frontend/src/app/main/ui/dashboard/libraries.scss
index 5a79d8e33f..07d20bf939 100644
--- a/frontend/src/app/main/ui/dashboard/libraries.scss
+++ b/frontend/src/app/main/ui/dashboard/libraries.scss
@@ -4,21 +4,21 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
@use "common/refactor/common-dashboard";
.dashboard-container {
flex: 1 0 0;
- margin-right: $s-16;
+ margin-right: deprecated.$s-16;
overflow-y: auto;
width: 100%;
- border-top: $s-1 solid var(--color-background-quaternary);
+ border-top: deprecated.$s-1 solid var(--color-background-quaternary);
&.dashboard-projects {
user-select: none;
}
&.search {
- margin-top: $s-12;
+ margin-top: deprecated.$s-12;
}
}
diff --git a/frontend/src/app/main/ui/dashboard/pin_button.scss b/frontend/src/app/main/ui/dashboard/pin_button.scss
index 9b00a1307c..49093b223e 100644
--- a/frontend/src/app/main/ui/dashboard/pin_button.scss
+++ b/frontend/src/app/main/ui/dashboard/pin_button.scss
@@ -4,18 +4,18 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
.button {
--pin-button-icon-color: var(--button-icon-foreground-color);
--pin-button-bg-color: none;
--pin-button-border-color: none;
- width: $s-32;
- height: $s-32;
+ width: deprecated.$s-32;
+ height: deprecated.$s-32;
background: var(--pin-button-bg-color);
- border: $s-2 solid var(--pin-button-border-color);
- border-radius: $br-8;
+ border: deprecated.$s-2 solid var(--pin-button-border-color);
+ border-radius: deprecated.$br-8;
display: grid;
place-content: center;
cursor: pointer;
@@ -28,8 +28,8 @@
}
.icon {
- width: $s-16;
- height: $s-16;
+ width: deprecated.$s-16;
+ height: deprecated.$s-16;
fill: none;
stroke: var(--pin-button-icon-color);
}
diff --git a/frontend/src/app/main/ui/dashboard/placeholder.scss b/frontend/src/app/main/ui/dashboard/placeholder.scss
index 590d38289a..ca47399436 100644
--- a/frontend/src/app/main/ui/dashboard/placeholder.scss
+++ b/frontend/src/app/main/ui/dashboard/placeholder.scss
@@ -4,14 +4,14 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
@use "./grid.scss" as g;
-@use "../ds/typography.scss" as t;
+@use "ds/typography.scss" as t;
.grid-empty-placeholder {
- border-radius: $br-12;
+ border-radius: deprecated.$br-12;
display: grid;
- padding: $s-12 0;
+ padding: deprecated.$s-12 0;
&.libs {
background-image: url(/images/ph-left.svg), url(/images/ph-right.svg);
@@ -20,13 +20,13 @@
85% top;
background-repeat: no-repeat;
align-items: center;
- border: $s-1 solid var(--color-background-quaternary);
- border-radius: $br-4;
+ border: deprecated.$s-1 solid var(--color-background-quaternary);
+ border-radius: deprecated.$br-4;
display: flex;
flex-direction: column;
- height: $s-200;
- margin: $s-16;
- padding: $s-48;
+ height: deprecated.$s-200;
+ margin: deprecated.$s-16;
+ padding: deprecated.$s-48;
justify-content: center;
.text {
@@ -35,32 +35,32 @@
}
p {
- max-width: $s-360;
+ max-width: deprecated.$s-360;
text-align: center;
- font-size: $fs-16;
+ font-size: deprecated.$fs-16;
}
}
}
.create-new {
background-color: var(--color-background-tertiary);
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
color: var(--color-foreground-primary);
cursor: pointer;
- height: $s-160;
- margin: $s-8;
- border: $s-2 solid transparent;
+ height: deprecated.$s-160;
+ margin: deprecated.$s-8;
+ border: deprecated.$s-2 solid transparent;
width: var(--th-width, #{g.$thumbnail-default-width});
height: var(--th-height, #{g.$thumbnail-default-height});
svg {
- width: $s-32;
- height: $s-32;
+ width: deprecated.$s-32;
+ height: deprecated.$s-32;
stroke: var(--color-foreground-secondary);
}
&:hover {
- border: $s-2 solid var(--color-accent-tertiary);
+ border: deprecated.$s-2 solid var(--color-accent-tertiary);
background-color: var(--color-background-quaternary);
color: var(--color-accent-primary);
@@ -71,9 +71,9 @@
}
.text {
- margin-top: $s-12;
+ margin-top: deprecated.$s-12;
color: var(--color-foreground-secondary);
- font-size: $fs-16;
+ font-size: deprecated.$fs-16;
}
}
@@ -87,7 +87,7 @@
.placeholder-text {
color: var(--color-foreground-secondary);
- font-size: $fs-16;
+ font-size: deprecated.$fs-16;
text-align: center;
}
@@ -100,15 +100,15 @@
}
.empty-placeholder-libraries {
- margin: $s-16;
+ margin: deprecated.$s-16;
}
.empty-project-container {
width: 100%;
display: grid;
- gap: $s-16;
+ gap: deprecated.$s-16;
grid-template-columns: 1fr 1fr 1fr;
- margin-top: $s-12;
+ margin-top: deprecated.$s-12;
}
.empty-project-card {
@@ -121,8 +121,8 @@
justify-content: center;
align-items: center;
background-color: var(--color-card-background);
- border: $s-2 solid var(--color-background-quaternary);
- border-radius: $br-8;
+ border: deprecated.$s-2 solid var(--color-background-quaternary);
+ border-radius: deprecated.$br-8;
padding: var(--sp-m) 0;
&:hover {
@@ -132,7 +132,7 @@
cursor: pointer;
.empty-project-card-title {
- font-weight: $fw500;
+ font-weight: deprecated.$fw500;
}
}
diff --git a/frontend/src/app/main/ui/dashboard/projects.scss b/frontend/src/app/main/ui/dashboard/projects.scss
index 252da62cd8..b72a793890 100644
--- a/frontend/src/app/main/ui/dashboard/projects.scss
+++ b/frontend/src/app/main/ui/dashboard/projects.scss
@@ -4,39 +4,39 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
@use "common/refactor/common-dashboard";
.dashboard-container {
flex: 1 0 0;
width: 100%;
- margin-right: $s-16;
- border-top: $s-1 solid var(--panel-border-color);
+ margin-right: deprecated.$s-16;
+ border-top: deprecated.$s-1 solid var(--panel-border-color);
overflow-y: auto;
- padding-bottom: $s-32;
+ padding-bottom: deprecated.$s-32;
}
.dashboard-projects {
user-select: none;
- height: calc(100vh - $s-64);
+ height: calc(100vh - deprecated.$s-64);
}
.with-team-hero {
- height: calc(100vh - $s-280);
+ height: calc(100vh - deprecated.$s-280);
}
.dashboard-shared {
- width: calc(100vw - $s-320);
- margin-right: $s-52;
+ width: calc(100vw - deprecated.$s-320);
+ margin-right: deprecated.$s-52;
}
.search {
- margin-top: $s-12;
+ margin-top: deprecated.$s-12;
}
.dashboard-project-row {
--actions-opacity: 0;
- margin-bottom: $s-24;
+ margin-bottom: deprecated.$s-24;
position: relative;
&:hover,
@@ -60,12 +60,12 @@
flex-direction: row;
align-items: center;
justify-content: space-between;
- gap: $s-8;
+ gap: deprecated.$s-8;
width: 99%;
- max-height: $s-40;
- padding: $s-8 $s-8 $s-8 $s-16;
- margin-top: $s-16;
- border-radius: $br-4;
+ max-height: deprecated.$s-40;
+ padding: deprecated.$s-8 deprecated.$s-8 deprecated.$s-8 deprecated.$s-16;
+ margin-top: deprecated.$s-16;
+ border-radius: deprecated.$br-4;
}
.project-name-wrapper {
@@ -73,30 +73,30 @@
align-items: center;
justify-content: flex-start;
width: 100%;
- min-height: $s-32;
- margin-left: $s-8;
+ min-height: deprecated.$s-32;
+ margin-left: deprecated.$s-8;
}
.project-name {
- @include bodyLargeTypography;
- @include textEllipsis;
+ @include deprecated.bodyLargeTypography;
+ @include deprecated.textEllipsis;
width: fit-content;
- margin-right: $s-12;
+ margin-right: deprecated.$s-12;
line-height: 0.8;
color: var(--title-foreground-color-hover);
cursor: pointer;
- height: $s-16;
+ height: deprecated.$s-16;
}
.info-wrapper {
display: flex;
align-items: center;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.info,
.recent-files-row-title-info {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
color: var(--title-foreground-color);
@media (max-width: 760px) {
display: none;
@@ -106,16 +106,16 @@
.project-actions {
display: flex;
opacity: var(--actions-opacity);
- margin-left: $s-32;
+ margin-left: deprecated.$s-32;
}
.add-file-btn,
.options-btn {
@extend .button-tertiary;
- height: $s-32;
- width: $s-32;
- margin: 0 $s-8;
- padding: $s-8;
+ height: deprecated.$s-32;
+ width: deprecated.$s-32;
+ margin: 0 deprecated.$s-8;
+ padding: deprecated.$s-8;
}
.add-icon,
@@ -126,24 +126,24 @@
.grid-container {
width: 100%;
- padding: 0 $s-4;
+ padding: 0 deprecated.$s-4;
}
.placeholder-placement {
- margin: $s-16 $s-32;
+ margin: deprecated.$s-16 deprecated.$s-32;
}
.show-more {
--show-more-color: var(--button-secondary-foreground-color-rest);
- @include buttonStyle;
- @include bodyMediumTypography;
+ @include deprecated.buttonStyle;
+ @include deprecated.bodyMediumTypography;
position: absolute;
- top: $s-8;
- right: $s-52;
+ top: deprecated.$s-8;
+ right: deprecated.$s-52;
display: flex;
align-items: center;
justify-content: space-between;
- column-gap: $s-12;
+ column-gap: deprecated.$s-12;
color: var(--show-more-color);
&:hover {
@@ -152,8 +152,8 @@
}
.show-more-icon {
- height: $s-16;
- width: $s-16;
+ height: deprecated.$s-16;
+ width: deprecated.$s-16;
fill: none;
stroke: var(--show-more-color);
}
@@ -161,16 +161,16 @@
// Team hero
.team-hero {
background-color: var(--color-background-tertiary);
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
border: none;
display: flex;
- margin: $s-16;
- padding: $s-8;
+ margin: deprecated.$s-16;
+ padding: deprecated.$s-8;
position: relative;
img {
- border-radius: $br-4;
- height: $s-200;
+ border-radius: deprecated.$br-4;
+ height: deprecated.$s-200;
width: auto;
@media (max-width: 1200px) {
@@ -185,18 +185,18 @@
flex-direction: column;
align-items: flex-start;
flex-grow: 1;
- padding: $s-20 $s-20;
+ padding: deprecated.$s-20 deprecated.$s-20;
}
.title {
- font-size: $fs-24;
+ font-size: deprecated.$fs-24;
color: var(--color-foreground-primary);
- font-weight: $fw400;
+ font-weight: deprecated.$fw400;
}
.info {
flex: 1;
- font-size: $fs-16;
+ font-size: deprecated.$fs-16;
span {
color: var(--color-foreground-secondary);
display: block;
@@ -204,15 +204,15 @@
a {
color: var(--color-accent-primary);
}
- padding: $s-8 0;
+ padding: deprecated.$s-8 0;
}
.close {
--close-icon-foreground-color: var(--icon-foreground);
position: absolute;
- top: $s-20;
- right: $s-24;
- width: $s-24;
+ top: deprecated.$s-20;
+ right: deprecated.$s-24;
+ width: deprecated.$s-24;
background-color: transparent;
border: none;
cursor: pointer;
@@ -227,18 +227,18 @@
}
.invite {
- height: $s-32;
- width: $s-180;
+ height: deprecated.$s-32;
+ width: deprecated.$s-180;
}
.img-wrapper {
display: flex;
align-items: center;
justify-content: center;
- width: $s-200;
- height: $s-200;
+ width: deprecated.$s-200;
+ height: deprecated.$s-200;
overflow: hidden;
- border-radius: $br-4;
+ border-radius: deprecated.$br-4;
@media (max-width: 1200px) {
display: none;
width: 0;
diff --git a/frontend/src/app/main/ui/dashboard/search.scss b/frontend/src/app/main/ui/dashboard/search.scss
index f0180ed414..c360ac61ac 100644
--- a/frontend/src/app/main/ui/dashboard/search.scss
+++ b/frontend/src/app/main/ui/dashboard/search.scss
@@ -4,27 +4,27 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
@use "common/refactor/common-dashboard";
@use "./placeholder.scss";
.dashboard-container {
flex: 1 0 0;
- margin-right: $s-16;
+ margin-right: deprecated.$s-16;
overflow-y: auto;
width: 100%;
- border-top: $s-1 solid var(--color-background-quaternary);
+ border-top: deprecated.$s-1 solid var(--color-background-quaternary);
&.dashboard-projects {
user-select: none;
}
&.dashboard-shared {
- width: calc(100vw - $s-320);
- margin-right: $s-52;
+ width: calc(100vw - deprecated.$s-320);
+ margin-right: deprecated.$s-52;
}
&.search {
- margin-top: $s-12;
+ margin-top: deprecated.$s-12;
}
}
@@ -33,17 +33,17 @@
display: flex;
justify-content: center;
flex-direction: column;
- height: $s-200;
+ height: deprecated.$s-200;
background: transparent;
- border: $s-1 solid var(--color-background-quaternary);
- border-radius: $br-8;
+ border: deprecated.$s-1 solid var(--color-background-quaternary);
+ border-radius: deprecated.$br-8;
.text {
color: var(--color-foreground-primary);
}
.icon svg {
stroke: var(--color-foreground-secondary);
- width: $s-32;
- height: $s-32;
+ width: deprecated.$s-32;
+ height: deprecated.$s-32;
}
}
diff --git a/frontend/src/app/main/ui/dashboard/sidebar.cljs b/frontend/src/app/main/ui/dashboard/sidebar.cljs
index d4a071709e..d73ea8faae 100644
--- a/frontend/src/app/main/ui/dashboard/sidebar.cljs
+++ b/frontend/src/app/main/ui/dashboard/sidebar.cljs
@@ -33,6 +33,7 @@
show-subscription-dashboard-banner?
get-subscription-type]]
[app.main.ui.dashboard.team-form]
+ [app.main.ui.ds.foundations.assets.icon :refer [icon*] :as i]
[app.main.ui.icons :as deprecated-icon]
[app.util.dom :as dom]
[app.util.dom.dnd :as dnd]
@@ -762,10 +763,139 @@
[:span {:class (stl/css :empty-text)} (tr "dashboard.no-projects-placeholder")]])]]
[:div {:class (stl/css-case :separator true :overflow-separator overflow?)}]]))
+(mf/defc help-learning-menu*
+ {::mf/props :obj
+ ::mf/private true}
+ [{:keys [on-close on-click]}]
+ (let [handle-click-url
+ (mf/use-fn
+ (fn [event]
+ (let [url (-> (dom/get-current-target event)
+ (dom/get-data "url"))
+ eventname (-> (dom/get-current-target event)
+ (dom/get-data "eventname"))]
+ (st/emit! (ptk/event ::ev/event {::ev/name eventname
+ ::ev/origin "menu:in-app"}))
+ (dom/open-new-window url))))
+
+ handle-feedback-click
+ (mf/use-fn #(on-click :settings-feedback %))]
+
+ [:> dropdown-menu* {:show true
+ :class (stl/css :sub-menu :help-learning)
+ :on-close on-close}
+
+ [:> dropdown-menu-item* {:class (stl/css :submenu-item)
+ :data-url "https://help.penpot.app"
+ :on-click handle-click-url
+ :data-eventname "explore-help-center-click"}
+ (tr "labels.help-center")]
+
+ [:> dropdown-menu-item* {:class (stl/css :submenu-item)
+ :data-url "https://penpot.app/learning-center"
+ :on-click handle-click-url
+ :data-eventname "explore-learning-center-click"}
+ (tr "labels.learning-center")]
+
+ [:> dropdown-menu-item* {:class (stl/css :submenu-item)
+ :data-url "https://penpot.app/penpothub"
+ :on-click handle-click-url
+ :data-eventname "explore-penpot-hub-click"}
+ (tr "labels.penpot-hub")]
+
+ (when (contains? cf/flags :user-feedback)
+ [:> dropdown-menu-item* {:class (stl/css :submenu-item)
+ :on-click handle-feedback-click}
+ (tr "labels.give-feedback")])]))
+
+(mf/defc community-contributions-menu*
+ {::mf/props :obj
+ ::mf/private true}
+ [{:keys [on-close]}]
+ (let [handle-click-url
+ (mf/use-fn
+ (fn [event]
+ (let [url (-> (dom/get-current-target event)
+ (dom/get-data "url"))
+ eventname (-> (dom/get-current-target event)
+ (dom/get-data "eventname"))]
+ (st/emit! (ptk/event ::ev/event {::ev/name eventname
+ ::ev/origin "menu:in-app"}))
+ (dom/open-new-window url))))]
+
+ [:> dropdown-menu* {:show true
+ :class (stl/css :sub-menu :community)
+ :on-close on-close}
+
+ [:> dropdown-menu-item* {:class (stl/css :submenu-item)
+ :data-url "https://github.com/penpot/penpot"
+ :on-click handle-click-url
+ :data-eventname "explore-github-repository-click"}
+ (tr "labels.github-repo")]
+
+ [:> dropdown-menu-item* {:class (stl/css :submenu-item)
+ :data-url "https://community.penpot.app"
+ :on-click handle-click-url
+ :data-eventname "explore-community-click"}
+ (tr "labels.community")]]))
+
+(mf/defc about-penpot-menu*
+ {::mf/props :obj
+ ::mf/private true}
+ [{:keys [on-close]}]
+ (let [version cf/version
+ show-release-notes
+ (mf/use-fn
+ (fn [event]
+ (st/emit! (ptk/event ::ev/event {::ev/name "show-release-notes" :version (:main version)}))
+ (if (and (kbd/alt? event) (kbd/mod? event))
+ (st/emit! (modal/show {:type :onboarding}))
+ (st/emit! (modal/show {:type :release-notes :version (:main version)})))))
+
+ handle-click-url
+ (mf/use-fn
+ (fn [event]
+ (let [url (-> (dom/get-current-target event)
+ (dom/get-data "url"))
+ eventname (-> (dom/get-current-target event)
+ (dom/get-data "eventname"))]
+ (st/emit! (ptk/event ::ev/event {::ev/name eventname
+ ::ev/origin "menu:in-app"}))
+ (dom/open-new-window url))))]
+
+ [:> dropdown-menu* {:show true
+ :class (stl/css :sub-menu :about)
+ :on-close on-close}
+
+ [:> dropdown-menu-item* {:class (stl/css :submenu-item)
+ :on-click show-release-notes}
+ (tr "labels.version-notes" (:base version))]
+
+ [:> dropdown-menu-item* {:class (stl/css :submenu-item)
+ :data-url "https://github.com/penpot/penpot/blob/develop/CHANGES.md"
+ :on-click handle-click-url
+ :data-eventname "explore-changelog-click"}
+ (tr "labels.penpot-changelog")]
+
+ [:> dropdown-menu-item* {:class (stl/css :submenu-item)
+ :data-url "https://penpot.app/terms"
+ :on-click handle-click-url
+ :data-eventname "explore-terms-service-click"}
+ (tr "auth.terms-of-service")]]))
+
(mf/defc profile-section*
[{:keys [profile team]}]
(let [show-profile-menu* (mf/use-state false)
show-profile-menu? (deref show-profile-menu*)
+ sub-menu* (mf/use-state false)
+ sub-menu (deref sub-menu*)
+ version (:base cf/version)
+
+ close-sub-menu
+ (mf/use-fn
+ (fn [event]
+ (dom/stop-propagation event)
+ (reset! sub-menu* nil)))
photo
(cf/resolve-profile-photo-url profile)
@@ -779,15 +909,6 @@
(st/emit! (rt/nav section))
(st/emit! section))))
- show-release-notes
- (mf/use-fn
- (fn [event]
- (let [version (:main cf/version)]
- (st/emit! (ptk/event ::ev/event {::ev/name "show-release-notes" :version version}))
- (if (and (kbd/alt? event) (kbd/mod? event))
- (st/emit! (modal/show {:type :onboarding}))
- (st/emit! (modal/show {:type :release-notes :version version}))))))
-
show-comments* (mf/use-state false)
show-comments? @show-comments*
@@ -816,16 +937,6 @@
on-close
(mf/use-fn #(reset! show-profile-menu* false))
- handle-click-url
- (mf/use-fn
- (fn [event]
- (let [url (-> (dom/get-current-target event)
- (dom/get-data "url"))]
- (dom/open-new-window url))))
-
- handle-feedback-click
- (mf/use-fn #(on-click :settings-feedback %))
-
handle-logout-click
(mf/use-fn
#(on-click (da/logout) %))
@@ -834,6 +945,15 @@
(mf/use-fn
#(on-click :settings-profile %))
+ on-menu-click
+ (mf/use-fn
+ (fn [event]
+ (dom/stop-propagation event)
+ (let [menu (-> (dom/get-current-target event)
+ (dom/get-data "testid")
+ (keyword))]
+ (reset! sub-menu* menu))))
+
on-power-up-click
(mf/use-fn
(fn []
@@ -887,53 +1007,45 @@
[:li {:class (stl/css :profile-separator)}]
- [:> dropdown-menu-item* {:class (stl/css :profile-dropdown-item)
- :data-url "https://help.penpot.app"
- :on-click handle-click-url
- :data-testid "help-center-profile-opt"}
- (tr "labels.help-center")]
- [:> dropdown-menu-item* {:class (stl/css :profile-dropdown-item)
- :data-url "https://community.penpot.app"
- :on-click handle-click-url}
- (tr "labels.community")]
+ [:> dropdown-menu-item* {:class (stl/css-case :profile-dropdown-item true)
+ :on-click on-menu-click
+ :on-key-down (fn [event]
+ (when (kbd/enter? event)
+ (on-menu-click event)))
+ :on-pointer-enter on-menu-click
+ :data-testid "help-learning"
+ :id "help-learning"}
+ [:span {:class (stl/css :item-name)} (tr "labels.help-learning")]
+ [:> icon* {:icon-id i/arrow :class (stl/css :open-arrow)}]]
- [:> dropdown-menu-item* {:class (stl/css :profile-dropdown-item)
- :data-url "https://www.youtube.com/c/Penpot"
- :on-click handle-click-url}
- (tr "labels.tutorials")]
+ [:> dropdown-menu-item* {:class (stl/css-case :profile-dropdown-item true)
+ :on-click on-menu-click
+ :on-key-down (fn [event]
+ (when (kbd/enter? event)
+ (on-menu-click event)))
+ :on-pointer-enter on-menu-click
+ :data-testid "community-contributions"
+ :id "community-contributions"}
+ [:span {:class (stl/css :item-name)} (tr "labels.community-contributions")]
+ [:> icon* {:icon-id i/arrow :class (stl/css :open-arrow)}]]
- [:> dropdown-menu-item* {:tab-index "0"
- :class (stl/css :profile-dropdown-item)
- :on-click show-release-notes}
- (tr "labels.release-notes")]
+ [:> dropdown-menu-item* {:class (stl/css-case :profile-dropdown-item true)
+ :on-click on-menu-click
+ :on-key-down (fn [event]
+ (when (kbd/enter? event)
+ (on-menu-click event)))
+ :on-pointer-enter on-menu-click
+ :data-testid "about-penpot"
+ :id "about-penpot"}
+
+ [:div {:class (stl/css :about-penpot)}
+ [:span {:class (stl/css :item-name)} (tr "labels.about-penpot")]
+ [:span {:class (stl/css :menu-version) :title version} version]]
+ [:> icon* {:icon-id i/arrow :class (stl/css :open-arrow)}]]
[:li {:class (stl/css :profile-separator)}]
- [:> dropdown-menu-item* {:class (stl/css :profile-dropdown-item)
- :data-url "https://penpot.app/libraries-templates"
- :on-click handle-click-url
- :data-testid "libraries-templates-profile-opt"}
- (tr "labels.libraries-and-templates")]
-
- [:> dropdown-menu-item* {:class (stl/css :profile-dropdown-item)
- :data-url "https://github.com/penpot/penpot"
- :on-click handle-click-url}
- (tr "labels.github-repo")]
-
- [:> dropdown-menu-item* {:class (stl/css :profile-dropdown-item)
- :data-url "https://penpot.app/terms"
- :on-click handle-click-url}
- (tr "auth.terms-of-service")]
-
- [:li {:class (stl/css :profile-separator)}]
-
- (when (contains? cf/flags :user-feedback)
- [:> dropdown-menu-item* {:class (stl/css :profile-dropdown-item)
- :on-click handle-feedback-click
- :data-testid "feedback-profile-opt"}
- (tr "labels.give-feedback")])
-
[:> dropdown-menu-item* {:class (stl/css :profile-dropdown-item :item-with-icon)
:on-click handle-logout-click
:data-testid "logout-profile-opt"}
@@ -943,7 +1055,19 @@
(when (and team profile)
[:> comments-icon*
{:profile profile
- :on-show-comments handle-show-comments}])]]))
+ :on-show-comments handle-show-comments}])]
+
+ (when show-profile-menu?
+ (case sub-menu
+ :help-learning
+ [:> help-learning-menu* {:on-close close-sub-menu :on-click on-click}]
+
+ :community-contributions
+ [:> community-contributions-menu* {:on-close close-sub-menu}]
+
+ :about-penpot
+ [:> about-penpot-menu* {:on-close close-sub-menu}]
+ nil))]))
(mf/defc sidebar*
{::mf/props :obj
diff --git a/frontend/src/app/main/ui/dashboard/sidebar.scss b/frontend/src/app/main/ui/dashboard/sidebar.scss
index a885a89f3e..4c62bdcff6 100644
--- a/frontend/src/app/main/ui/dashboard/sidebar.scss
+++ b/frontend/src/app/main/ui/dashboard/sidebar.scss
@@ -4,11 +4,13 @@
//
// Copyright (c) KALEIDOS INC
-@use "../ds/typography.scss" as t;
-@use "../ds/colors.scss" as *;
-@use "../ds/spacing.scss" as *;
-@use "../ds/_borders.scss" as *;
-@use "../ds/_sizes.scss" as *;
+@use "ds/typography.scss" as t;
+@use "ds/colors.scss" as *;
+@use "ds/spacing.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/_utils.scss" as *;
+@use "ds/z-index.scss" as *;
@use "common/refactor/common-dashboard";
@use "common/refactor/common-refactor.scss" as deprecated;
@@ -24,7 +26,7 @@
margin: 0 var(--sp-l) 0 0;
border-right: $b-1 solid var(--panel-border-color);
background-color: var(--panel-background-color);
- z-index: deprecated.$z-index-1;
+ z-index: var(--z-index-dropdown);
}
//SIDEBAR CONTENT COMPONENT
@@ -392,17 +394,81 @@
.profile-dropdown {
@extend .menu-dropdown;
- left: var(--sp-l);
- bottom: deprecated.$s-72;
- min-width: $sz-252;
+ inset-inline-start: var(--sp-s);
+ inset-block-end: px2rem(72); // 72 is the height of the profile button
+ min-width: calc(100% - var(--sp-s));
// TODO ADD animation fadeInUp
}
.profile-dropdown-item {
@extend .menu-item-base;
- @include t.use-typography("title-small");
- height: $sz-40;
- padding: var(--sp-s) var(--sp-l);
+ @include t.use-typography("body-medium");
+ block-size: $sz-40;
+ margin-block-end: var(--sp-xs);
+ padding: var(--sp-s);
+ padding-inline-start: var(--sp-l);
+
+ &:hover {
+ color: var(--menu-foreground-color-hover);
+
+ .open-arrow {
+ --icon-stroke-color: var(--menu-foreground-color-hover);
+ }
+ }
+}
+
+.profile-dropdown-item .open-arrow {
+ @include deprecated.flexCenter;
+}
+
+.profile-dropdown-item .open-arrow svg {
+ @extend .button-icon;
+ stroke: var(--icon-foreground);
+}
+
+.sub-menu {
+ @extend .menu-dropdown;
+ inset-inline-start: calc(deprecated.$s-292 + var(--sp-s));
+ min-width: deprecated.$s-192;
+}
+
+.sub-menu.help-learning {
+ inset-block-end: deprecated.$s-72;
+}
+
+.sub-menu.community {
+ inset-block-end: deprecated.$s-120;
+}
+
+.sub-menu.about {
+ inset-block-end: $sz-24;
+}
+
+.submenu-item {
+ @extend .menu-item-base;
+ @include t.use-typography("body-medium");
+ block-size: $sz-40;
+ margin-block-end: var(--sp-xs);
+ padding-block: var(--sp-s);
+ padding-inline: var(--sp-l);
+
+ &:hover {
+ color: var(--menu-foreground-color-hover);
+ }
+}
+
+.about-penpot {
+ align-items: baseline;
+ display: grid;
+ grid-template-columns: auto 1fr;
+}
+
+.menu-version {
+ @include t.use-typography("code-font");
+ @include deprecated.textEllipsis;
+ color: var(--color-foreground-secondary);
+ margin-inline-start: var(--sp-s);
+ text-transform: uppercase;
}
.profile-separator {
diff --git a/frontend/src/app/main/ui/dashboard/subscription.scss b/frontend/src/app/main/ui/dashboard/subscription.scss
index edf4616c08..7dc51ad6d6 100644
--- a/frontend/src/app/main/ui/dashboard/subscription.scss
+++ b/frontend/src/app/main/ui/dashboard/subscription.scss
@@ -1,8 +1,14 @@
-@use "common/refactor/common-refactor.scss" as *;
+// 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 "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/typography.scss" as t;
+@use "ds/_borders.scss" as *;
+@use "ds/spacing.scss" as *;
.cta-power-up {
display: flex;
@@ -14,7 +20,7 @@
}
.cta-top-section {
- @include buttonStyle;
+ @include deprecated.buttonStyle;
display: grid;
color: var(--color-foreground-secondary);
grid-template-columns: 1fr auto;
@@ -31,7 +37,7 @@
}
.icon-dropdown {
- @include flexCenter;
+ @include deprecated.flexCenter;
height: 100%;
width: var(--sp-l);
}
@@ -50,7 +56,7 @@
}
.cta-bottom-section .content {
@include t.use-typography("body-medium");
- @include buttonStyle;
+ @include deprecated.buttonStyle;
color: var(--color-foreground-secondary);
display: inline-block;
text-align: left;
@@ -77,7 +83,7 @@
}
.cta-link {
- @include buttonStyle;
+ @include deprecated.buttonStyle;
align-self: end;
margin-inline-start: var(--sp-xs);
}
@@ -86,7 +92,7 @@
display: grid;
grid-auto-rows: min-content;
gap: var(--sp-s);
- max-width: $s-1000;
+ max-width: deprecated.$s-1000;
width: 100%;
}
@@ -101,7 +107,7 @@
}
.manage-subscription-link {
- @include buttonStyle;
+ @include deprecated.buttonStyle;
@include t.use-typography("body-medium");
color: var(--color-accent-tertiary);
display: flex;
@@ -143,8 +149,8 @@
.members-cta {
height: fit-content;
margin-block-start: var(--sp-s);
- margin-inline-start: $s-52;
- max-width: $s-220;
+ margin-inline-start: deprecated.$s-52;
+ max-width: deprecated.$s-220;
.cta-title {
line-height: 1.2;
diff --git a/frontend/src/app/main/ui/dashboard/team.cljs b/frontend/src/app/main/ui/dashboard/team.cljs
index b883736094..96afda2563 100644
--- a/frontend/src/app/main/ui/dashboard/team.cljs
+++ b/frontend/src/app/main/ui/dashboard/team.cljs
@@ -22,10 +22,12 @@
[app.main.ui.components.file-uploader :refer [file-uploader]]
[app.main.ui.components.forms :as fm]
[app.main.ui.dashboard.change-owner]
- [app.main.ui.dashboard.subscription :refer [team*
- members-cta*
- show-subscription-members-banner?]]
+ [app.main.ui.dashboard.subscription :refer [members-cta*
+ show-subscription-members-banner?
+ team*]]
[app.main.ui.dashboard.team-form]
+ [app.main.ui.ds.buttons.button :refer [button*]]
+ [app.main.ui.ds.buttons.icon-button :refer [icon-button*]]
[app.main.ui.ds.foundations.assets.icon :refer [icon*] :as i]
[app.main.ui.icons :as deprecated-icon]
[app.main.ui.notifications.badge :refer [badge-notification]]
@@ -604,11 +606,7 @@
{::mf/props :obj
::mf/private true}
[{:keys [invitation team-id]}]
- (let [show? (mf/use-state false)
-
- email (:email invitation)
- role (:role invitation)
-
+ (let [email (:email invitation)
on-error
(mf/use-fn
(mf/deps email)
@@ -631,35 +629,6 @@
:else
(rx/throw cause)))))
- on-delete
- (mf/use-fn
- (mf/deps email team-id)
- (fn []
- (let [params {:email email :team-id team-id}
- mdata {:on-success #(st/emit! (dtm/fetch-invitations))}]
- (st/emit! (dtm/delete-invitation (with-meta params mdata))))))
-
- on-resend-success
- (mf/use-fn
- (fn []
- (st/emit! (ntf/success (tr "notifications.invitation-email-sent"))
- (modal/hide)
- (dtm/fetch-invitations))))
-
- on-resend
- (mf/use-fn
- (mf/deps email team-id)
- (fn []
- (let [params (with-meta {:emails #{email}
- :team-id team-id
- :resend? true
- :role role}
- {:on-success on-resend-success
- :on-error on-error})]
- (st/emit!
- (-> (dtm/create-invitations params)
- (with-meta {::ev/origin :team}))))))
-
on-copy-success
(mf/use-fn
(fn []
@@ -675,33 +644,18 @@
:on-error on-error})]
(st/emit!
(-> (dtm/copy-invitation-link params)
- (with-meta {::ev/origin :team}))))))
+ (with-meta {::ev/origin :team}))))))]
- on-hide (mf/use-fn #(reset! show? false))
- on-show (mf/use-fn #(reset! show? true))]
-
- [:*
- [:button {:class (stl/css :menu-btn)
- :on-click on-show}
- menu-icon]
-
- [:& dropdown {:show @show? :on-close on-hide :dropdown-id "invitation-actions"}
- [:ul {:class (stl/css :actions-dropdown :invitations-dropdown)}
- [:li {:on-click on-copy
- :class (stl/css :action-dropdown-item)}
- (tr "labels.copy-invitation-link")]
- [:li {:on-click on-resend
- :class (stl/css :action-dropdown-item)}
- (tr "labels.resend-invitation")]
- [:li {:on-click on-delete
- :class (stl/css :action-dropdown-item)}
- (tr "labels.delete-invitation")]]]]))
+ [:> icon-button* {:variant "ghost"
+ :aria-label (tr "labels.copy-invitation-link")
+ :on-click on-copy
+ :icon "clipboard"}]))
(mf/defc invitation-row*
{::mf/wrap [mf/memo]
::mf/private true
::mf/props :obj}
- [{:keys [invitation can-invite team-id]}]
+ [{:keys [invitation can-invite team-id selected on-select-change]}]
(let [expired? (:expired invitation)
email (:email invitation)
@@ -714,6 +668,17 @@
(tr "labels.expired-invitation")
(tr "labels.pending-invitation"))
+ is-selected? (fn [email]
+ (contains? @selected email))
+
+ on-change
+ (mf/use-fn
+ (mf/deps on-select-change)
+ (fn [event]
+ (let [email (-> (dom/get-current-target event)
+ (dom/get-data "attr"))]
+ (on-select-change email))))
+
on-change-role
(mf/use-fn
(mf/deps email team-id)
@@ -723,7 +688,20 @@
(st/emit! (dtm/update-invitation-role (with-meta params mdata))))))]
[:div {:class (stl/css :table-row :table-row-invitations)}
- [:div {:class (stl/css :table-field :field-email)} email]
+ [:div {:class (stl/css :table-field :field-email)}
+ [:div {:class (stl/css :input-wrapper)}
+ [:label
+ [:span {:class (stl/css-case :input-checkbox true
+ :global/checked (is-selected? email))}
+ deprecated-icon/status-tick]
+
+ [:input {:type "checkbox"
+ :id (dm/str "email-" email)
+ :data-attr email
+ :value email
+ :checked (is-selected? email)
+ :on-change on-change}]
+ email]]]
[:div {:class (stl/css :table-field :field-roles)}
[:> invitation-role-selector*
@@ -766,33 +744,233 @@
(tr "dashboard.invite-profile")]
[:div {:class (stl/css :blank-space)}]])]))
+(mf/defc invitation-modal
+ {::mf/register modal/components
+ ::mf/register-as :invitation-modal}
+ [{:keys [selected delete on-confirm]}]
+ [:div {:class (stl/css :modal-overlay)}
+ [:div {:class (stl/css :modal-invitation-container :modal-container)}
+ [:div {:class (stl/css :modal-header)}
+ [:h2 {:class (stl/css :modal-title)}
+ (if delete
+ (tr "dashboard.invitation-modal.title.delete-invitations")
+ (tr "dashboard.invitation-modal.title.resend-invitations"))]
+
+ [:button {:class (stl/css :modal-close-btn)
+ :on-click modal/hide!} deprecated-icon/close]]
+
+ [:div {:class (stl/css :modal-invitation-content)}
+ [:p
+ (if delete
+ (tr "dashboard.invitation-modal.delete")
+ (tr "dashboard.invitation-modal.resend"))]
+ [:div {:class (stl/css :invitation-list)}
+ (for [{:keys [email role]} selected]
+ [:p {:key email}
+ (str "- " email " (" (tr (str "labels." (name role))) ")")])]]
+
+ [:div {:class (stl/css :modal-footer)}
+ [:div {:class (stl/css :action-buttons :modal-invitation-action-buttons)}
+ (when-not delete
+ [:> button*
+ {:class (stl/css :cancel-button)
+ :variant "secondary"
+ :type "button"
+ :on-click modal/hide!}
+ (tr "labels.cancel")])
+ [:> button*
+ {:class (stl/css :accept-btn)
+ :variant "primary"
+ :type "button"
+ :on-click on-confirm}
+ (if delete
+ (tr "labels.continue")
+ (tr "labels.resend"))]]]]])
+
(mf/defc invitation-section*
{::mf/props :obj
::mf/private true}
[{:keys [team]}]
(let [permissions (get team :permissions)
- invitations (get team :invitations)
+ invitations (mf/use-state (get team :invitations))
team-id (get team :id)
owner? (get permissions :is-owner)
admin? (get permissions :is-admin)
- can-invite? (or owner? admin?)]
+ can-invite? (or owner? admin?)
+
+ selected (mf/use-state #{})
+
+ ;; Sort state: {:field :status/:role, :direction :asc/:desc}
+ sort-state (mf/use-state {:field nil :direction :asc})
+
+ selected-invitations (mf/with-memo [selected invitations]
+ (filterv #(contains? @selected (:email %)) @invitations))
+
+ on-select-change
+ (mf/use-fn
+ (mf/deps selected)
+ (fn [email]
+ (if (contains? @selected email)
+ (swap! selected disj email)
+ (swap! selected conj email))))
+
+ on-confirm-delete
+ (mf/use-fn
+ (mf/deps selected team-id)
+ (fn []
+ (doseq [email @selected]
+ (let [params {:email email :team-id team-id}
+ mdata {:on-success #(st/emit! (ntf/success (tr "notifications.invitation-deleted"))
+ (dtm/fetch-invitations)
+ (modal/hide))}]
+ (st/emit! (dtm/delete-invitation (with-meta params mdata)))))
+ (reset! selected #{})))
+
+ on-delete
+ (mf/use-fn
+ (mf/deps selected-invitations team-id)
+ (fn []
+ (st/emit! (modal/show :invitation-modal {:selected selected-invitations :delete true :on-confirm on-confirm-delete}))))
+
+ on-error
+ (fn [form]
+ (let [{:keys [type code] :as error} (ex-data form)]
+ (println form)
+ (cond
+ (and (= :validation type)
+ (= :profile-is-muted code))
+ (st/emit! (ntf/error (tr "errors.profile-is-muted"))
+ (modal/hide))
+
+ (and (= :validation type)
+ (= :max-invitations-by-request code))
+ (st/emit! (ntf/error (tr "errors.maximum-invitations-by-request-reached" (:threshold error))))
+
+ (and (= :restriction type)
+ (= :max-quote-reached code))
+ (st/emit! (ntf/error (tr "errors.max-quote-reached" (:target error))))
+
+ (or (= :member-is-muted code)
+ (= :email-has-permanent-bounces code)
+ (= :email-has-complaints code))
+ (st/emit! (ntf/error (tr "errors.email-spam-or-permanent-bounces" (:email error))))
+
+ :else
+ (st/emit! (ntf/error (tr "errors.generic"))
+ (modal/hide)))))
+
+ on-resend-success
+ (mf/use-fn
+ (fn []
+ (st/emit! (ntf/success (tr "notifications.invitation-email-sent"))
+ (modal/hide)
+ (dtm/fetch-invitations))
+ (reset! selected #{})))
+
+ on-confirm-resend
+ (mf/use-fn
+ (mf/deps selected-invitations team-id on-resend-success)
+ (fn []
+ (modal/hide!)
+ (let [params (with-meta {:invitations selected-invitations
+ :team-id team-id
+ :resend? true}
+ {:on-success on-resend-success
+ :on-error on-error})]
+
+ (st/emit!
+ (-> (dtm/create-invitations params)
+ (with-meta {::ev/origin :team}))))))
+
+ on-resend
+ (mf/use-fn
+ (mf/deps team-id selected-invitations)
+ (fn []
+ (st/emit! (modal/show :invitation-modal {:selected selected-invitations :on-confirm on-confirm-resend}))))
+
+ on-order-by-status
+ (mf/use-fn
+ (mf/deps sort-state)
+ (fn []
+ (let [current-field (:field @sort-state)
+ current-direction (:direction @sort-state)
+ new-direction (if (= current-field :status)
+ (if (= current-direction :asc) :desc :asc)
+ :asc)]
+ (println @invitations)
+ (swap! sort-state assoc :field :status :direction new-direction)
+ (swap! invitations #(let [sorted (sort-by (juxt :expired :email) %)]
+ (if (= new-direction :desc)
+ (reverse sorted)
+ sorted))))))
+
+ on-order-by-role
+ (mf/use-fn
+ (mf/deps sort-state)
+ (fn []
+ (let [current-field (:field @sort-state)
+ current-direction (:direction @sort-state)
+ new-direction (if (= current-field :role)
+ (if (= current-direction :asc) :desc :asc)
+ :asc)]
+ (swap! sort-state assoc :field :role :direction new-direction)
+ (swap! invitations #(let [sorted (sort-by (juxt :role :email) %)]
+ (if (= new-direction :desc)
+ (reverse sorted)
+ sorted))))))]
+
+ (mf/with-effect [team]
+ (reset! invitations (get team :invitations))
+ (reset! sort-state {:field nil :direction :asc}))
[:div {:class (stl/css :invitations)}
+ (when (> (count @selected) 0)
+ [:*
+ [:div {:class (stl/css :invitations-actions)}
+ [:div
+ (tr "team.invitations-selected" (i18n/c (count @selected)))]
+ [:div
+ [:> button* {:variant "secondary"
+ :type "button"
+ :on-click on-resend}
+ (tr "labels.resend-invitation")]]
+ [:> icon-button* {:on-click on-delete
+ :variant "destructive"
+ :aria-label (tr "labels.delete-invitation")
+ :icon "delete"}]]])
[:div {:class (stl/css :table-header)}
[:div {:class (stl/css :title-field-name)} (tr "labels.invitations")]
- [:div {:class (stl/css :title-field-role)} (tr "labels.role")]
- [:div {:class (stl/css :title-field-status)} (tr "labels.status")]]
- (if (empty? invitations)
+ [:div {:class (stl/css :title-field-role)} (tr "labels.role")
+ [:> icon-button* {:variant "action"
+ :class (stl/css-case :sort-active (= (:field @sort-state) :role)
+ :sort-inactive (not= (:field @sort-state) :role))
+ :aria-label (tr "dashboard.order-invitations-by-role")
+ :icon (if (= (:field @sort-state) :role)
+ (if (= (:direction @sort-state) :asc) "arrow-down" "arrow-up")
+ "arrow-down")
+ :on-click on-order-by-role}]]
+ [:div {:class (stl/css :title-field-status)} (tr "labels.status")
+ [:> icon-button* {:variant "action"
+ :class (stl/css-case :sort-active (= (:field @sort-state) :status)
+ :sort-inactive (not= (:field @sort-state) :status))
+ :aria-label (tr "dashboard.order-invitations-by-status")
+ :icon (if (= (:field @sort-state) :status)
+ (if (= (:direction @sort-state) :asc) "arrow-down" "arrow-up")
+ "arrow-down")
+ :on-click on-order-by-status}]]]
+ (if (empty? @invitations)
[:> empty-invitation-table* {:can-invite can-invite? :team team}]
[:div {:class (stl/css :table-rows)}
- (for [invitation invitations]
+ (for [invitation @invitations]
[:> invitation-row*
{:key (:email invitation)
:invitation invitation
:can-invite can-invite?
- :team-id team-id}])])]))
+ :team-id team-id
+ :selected selected
+ :on-select-change on-select-change}])])]))
(mf/defc team-invitations-page*
{::mf/props :obj}
diff --git a/frontend/src/app/main/ui/dashboard/team.scss b/frontend/src/app/main/ui/dashboard/team.scss
index f47f603b76..90e33f5cca 100644
--- a/frontend/src/app/main/ui/dashboard/team.scss
+++ b/frontend/src/app/main/ui/dashboard/team.scss
@@ -4,8 +4,13 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
@use "common/refactor/common-dashboard";
+@use "ds/_utils.scss" as *;
+@use "ds/typography.scss" as t;
+@use "ds/_sizes.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/mixins.scss" as *;
// Dashboard team settings
.dashboard-team-settings {
@@ -13,68 +18,75 @@
flex-direction: column;
align-items: center;
width: 100%;
- border-top: $s-1 solid var(--panel-border-color);
+ border-top: $b-1 solid var(--color-background-quaternary);
overflow-y: auto;
- padding-inline-start: $s-20;
- padding-block-start: $s-20;
+ padding-inline-start: var(--sp-xl);
+ padding-block-start: var(--sp-xl);
}
.settings-container {
display: flex;
flex-direction: column;
align-items: center;
- gap: $s-24;
+ gap: var(--sp-xxl);
}
.block {
display: grid;
grid-auto-rows: min-content;
- gap: $s-8;
- max-width: $s-1000;
+ gap: var(--sp-s);
+ max-width: $sz-1000;
width: 100%;
}
.info-block {
- margin-block-start: $s-16;
+ margin-block-start: var(--sp-l);
}
.block-label {
- @include headlineSmallTypography;
- color: var(--title-foreground-color);
+ @include t.use-typography("headline-small");
+ color: var(--color-foreground-secondary);
}
.block-text {
- color: var(--title-foreground-color-hover);
+ color: var(--color-foreground-primary);
}
.block-content {
display: grid;
- grid-template-columns: $s-32 1fr;
+ grid-template-columns: var(--sp-xxxl) 1fr;
align-items: center;
- gap: $s-12;
+ gap: var(--sp-m);
}
.owner-icon {
- width: $s-32;
- height: $s-32;
+ width: $sz-32;
+ height: $sz-32;
border-radius: 50%;
}
.user-icon,
.document-icon,
.group-icon {
- @extend .button-icon;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: $sz-16;
+ width: $sz-16;
+ color: transparent;
+ fill: none;
+ stroke-width: $b-1;
margin: 0 auto;
- stroke: var(--icon-foreground);
+ stroke: var(--color-foreground-secondary);
}
.team-icon {
--update-button-opacity: 0;
position: relative;
- height: $s-120;
- width: $s-120;
- padding: $s-16;
- margin-block-end: $s-32;
+ height: $sz-120;
+ width: $sz-120;
+ padding: var(--sp-l);
+ margin-block-end: var(--sp-xxxl);
&:hover {
--update-button-opacity: 1;
@@ -86,29 +98,40 @@
top: 0;
left: 0;
border-radius: 50%;
- width: $s-120;
- height: $s-120;
+ width: $sz-120;
+ height: $sz-120;
}
.update-overlay {
opacity: var(--update-button-opacity);
- @include buttonStyle;
- @include flexCenter;
+ border: none;
+ background: none;
+ cursor: pointer;
+ display: flex;
+ justify-content: center;
+ align-items: center;
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
- z-index: $z-index-modal;
+ z-index: var(--z-index-set);
border-radius: $br-circle;
background-color: var(--color-accent-primary);
}
.image-icon {
- @extend .button-icon;
- min-width: $s-24;
- min-height: $s-24;
- stroke: var(--icon-foreground-hover);
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: $sz-16;
+ width: $sz-16;
+ color: transparent;
+ fill: none;
+ stroke-width: $b-1;
+ min-width: $sz-24;
+ min-height: $sz-24;
+ stroke: var(--color-foreground-primary);
}
// TEAM MEMBERS PAGE
@@ -117,9 +140,9 @@
justify-content: center;
width: 100%;
height: 100%;
- padding-inline-start: $s-20;
- padding-block-start: $s-20;
- border-top: $s-1 solid var(--panel-border-color);
+ padding-inline-start: var(--sp-xl);
+ padding-block-start: var(--sp-xl);
+ border-top: $b-1 solid var(--color-background-quaternary);
overflow-y: auto;
scrollbar-gutter: stable;
}
@@ -133,62 +156,69 @@
display: grid;
grid-template-rows: auto 1fr;
height: fit-content;
- max-width: $s-1000;
+ max-width: $sz-1000;
width: 100%;
}
.table-header {
- @include headlineSmallTypography;
+ @include t.use-typography("headline-small");
display: grid;
align-items: center;
- grid-template-columns: 43% 1fr $s-108 $s-12;
- height: $s-40;
+ grid-template-columns: 43% 1fr px2rem(108) var(--sp-m);
+ height: $sz-40;
width: 100%;
- max-width: $s-1000;
- padding: 0 $s-16;
+ max-width: $sz-1000;
+ padding: 0 var(--sp-l);
user-select: none;
- color: var(--title-foreground-color);
+ color: var(--color-foreground-secondary);
}
.table-rows {
display: grid;
- grid-auto-rows: $s-64;
- gap: $s-16;
+ grid-auto-rows: px2rem(64);
+ gap: var(--sp-l);
width: 100%;
height: 100%;
- max-width: $s-1000;
- margin-top: $s-16;
- color: var(--title-foreground-color);
+ max-width: $sz-1000;
+ margin-top: var(--sp-l);
+ color: var(--color-foreground-secondary);
}
.table-row {
display: grid;
grid-template-columns: 43% 1fr auto;
align-items: center;
- height: $s-64;
+ height: px2rem(64);
width: 100%;
- padding: 0 $s-16;
+ padding: 0 var(--sp-l);
border-radius: $br-8;
- background-color: var(--dashboard-list-background-color);
- color: var(--dashboard-list-foreground-color);
+ background-color: var(--color-background-tertiary);
+ color: var(--color-foreground-primary);
}
.title-field-name {
width: 43%;
- min-width: $s-300;
+ min-width: px2rem(300);
}
-.title-field-roles {
+.title-field-role {
position: relative;
cursor: default;
}
+.title-field-role,
+.title-field-status {
+ display: flex;
+ align-items: center;
+ gap: var(--sp-s);
+}
+
.field-name {
display: grid;
grid-template-columns: auto 1fr;
- gap: $s-16;
+ gap: var(--sp-l);
width: 43%;
- min-width: $s-300;
+ min-width: px2rem(300);
}
.field-roles {
@@ -202,8 +232,8 @@
// MEMBER INFO
.member-image {
- height: $s-32;
- width: $s-32;
+ height: $sz-32;
+ width: $sz-32;
border-radius: $br-circle;
}
@@ -216,33 +246,33 @@
.member-name,
.member-email {
@include textEllipsis;
- @include bodyLargeTypography;
+ @include t.use-typography("body-large");
}
.member-email {
- @include bodySmallTypography;
- color: var(--dashboard-list-text-foreground-color);
+ @include t.use-typography("body-small");
+ color: var(--color-foreground-secondary);
}
.you {
- color: var(--dashboard-list-text-foreground-color);
- margin-left: $s-6;
+ color: var(--color-foreground-secondary);
+ margin-left: px2rem(6);
}
// ROL INFO
.rol-selector {
+ @include t.use-typography("body-medium");
position: relative;
display: grid;
grid-template-columns: 1fr auto;
align-items: center;
- height: $s-32;
- min-width: $s-160;
+ height: $sz-32;
+ min-width: $sz-160;
width: fit-content;
- padding: $s-4 $s-8;
+ padding: var(--sp-xs) var(--sp-s);
border-radius: $br-8;
- border-color: var(--menu-background-color-hover);
- background-color: var(--menu-background-color-hover);
- font-size: $fs-14;
+ border-color: var(--color-background-quaternary);
+ background-color: var(--color-background-quaternary);
}
.has-priv {
@@ -254,37 +284,96 @@
}
.roles-dropdown {
- @extend .menu-dropdown;
- bottom: calc(-1 * $s-76);
+ box-shadow: var(--el-shadow-dark);
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-xs);
+ position: absolute;
+ padding: var(--sp-xs);
+ border-radius: $br-8;
+ z-index: var(--z-index-dropdown);
+ color: var(--color-foreground-primary);
+ background-color: var(--color-background-tertiary);
+ border: $b-2 solid var(--color-background-quaternary);
+ margin: 0;
+ bottom: calc(-1 * px2rem(76));
width: fit-content;
- min-width: $s-160;
+ min-width: $sz-160;
}
.rol-dropdown-item {
- @extend .menu-item-base;
+ @include t.use-typography("body-small");
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ height: $sz-28;
+ width: 100%;
+ padding: px2rem(6);
+ border-radius: $br-8;
+ cursor: pointer;
+ &:hover {
+ background-color: var(--color-background-quaternary);
+ }
}
// MEMBER ACTIONS
.menu-icon {
- @extend .button-icon;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: $sz-16;
+ width: $sz-16;
+ color: transparent;
+ fill: none;
+ stroke-width: $b-1;
stroke: var(--color-foreground-primary);
}
.menu-btn {
- @include buttonStyle;
+ border: none;
+ background: none;
+ cursor: pointer;
+}
+
+.input-checkbox {
+ // TODO: remove this extended class.
+ @extend .input-checkbox;
+ cursor: pointer;
}
.actions-dropdown {
- @extend .menu-dropdown;
- bottom: calc(-1 * $s-32);
+ box-shadow: var(--el-shadow-dark);
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-xs);
+ position: absolute;
+ padding: var(--sp-xs);
+ border-radius: $br-8;
+ z-index: var(--z-index-dropdown);
+ color: var(--color-foreground-primary);
+ background-color: var(--color-background-tertiary);
+ border: $b-2 solid var(--color-background-quaternary);
+ margin: 0;
+ bottom: calc(-1 * var(--sp-xxxl));
right: 0;
left: unset;
width: fit-content;
- min-width: $s-160;
+ min-width: $sz-160;
}
.action-dropdown-item {
- @extend .menu-item-base;
+ @include t.use-typography("body-small");
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ height: $sz-28;
+ width: 100%;
+ padding: px2rem(6);
+ border-radius: $br-8;
+ cursor: pointer;
+ &:hover {
+ background-color: var(--color-background-quaternary);
+ }
}
// TEAM INVITATION PAGE
@@ -293,9 +382,9 @@
justify-content: center;
width: 100%;
height: 100%;
- padding-inline-start: $s-20;
- padding-block-start: $s-20;
- border-top: $s-1 solid var(--panel-border-color);
+ padding-inline-start: var(--sp-xl);
+ padding-block-start: var(--sp-xl);
+ border-top: $b-1 solid var(--color-background-quaternary);
overflow-y: auto;
scrollbar-gutter: stable;
}
@@ -304,12 +393,27 @@
display: grid;
grid-template-rows: auto 1fr;
height: fit-content;
- max-width: $s-1000;
+ max-width: $sz-1000;
width: 100%;
}
+.invitations-actions {
+ @include t.use-typography("body-medium");
+ display: flex;
+ justify-content: end;
+ align-items: center;
+ gap: var(--sp-l);
+ color: var(--title-foreground-color);
+ height: $sz-40;
+ margin-block-end: px2rem(36);
+}
+
+.error-notification {
+ margin-block-end: var(--sp-xxl);
+}
+
.table-row-invitations {
- grid-template-columns: 43% 1fr $s-108 $s-12;
+ grid-template-columns: 43% 1fr $sz-88 var(--sp-xxl);
align-items: center;
}
@@ -317,19 +421,20 @@
display: grid;
place-items: center;
align-content: center;
- height: $s-156;
- max-width: $s-1000;
+ height: px2rem(156);
+ max-width: $sz-1000;
width: 100%;
- margin-top: $s-16;
- border: $s-1 solid var(--panel-border-color);
+ margin-top: var(--sp-l);
+ border: $b-1 solid var(--color-background-quaternary);
border-radius: $br-8;
- color: var(--dashboard-list-text-foreground-color);
+ color: var(--color-foreground-secondary);
}
.btn-empty-invitations {
+ // TODO: Remove this extend add DS component
@extend .button-primary;
- margin-block-start: $s-16;
- padding-inline: $s-12;
+ margin-block-start: var(--sp-l);
+ padding-inline: var(--sp-m);
}
.title-field-status {
@@ -337,16 +442,25 @@
cursor: default;
}
+.sort-inactive {
+ opacity: 0.5;
+}
+
+.sort-active {
+ opacity: 1;
+}
+
.field-email {
@include textEllipsis;
- @include bodyLargeTypography;
- display: grid;
+ @include t.use-typography("body-large");
+ display: flex;
+ gap: var(--sp-l);
align-items: center;
}
.invitations-dropdown {
- bottom: calc(-1 * $s-112);
- right: calc(-1 * $s-20);
+ bottom: calc(-1 * px2rem(112));
+ right: calc(-1 * var(--sp-xl));
}
// WEBHOOKS SECTION
@@ -354,63 +468,64 @@
display: grid;
grid-template-rows: auto 1fr;
justify-items: center;
- gap: $s-24;
+ gap: var(--sp-xxl);
width: 100%;
height: 100%;
- padding-inline-start: $s-20;
- padding-block-start: $s-20;
- border-top: $s-1 solid var(--panel-border-color);
+ padding-inline-start: var(--sp-xl);
+ padding-block-start: var(--sp-xl);
+ border-top: $b-1 solid var(--color-background-quaternary);
overflow-y: auto;
}
.webhooks-hero-container {
display: grid;
grid-template-rows: auto 1fr;
- margin: $s-80 auto $s-20 auto;
- gap: $s-24;
+ margin: px2rem(80) auto var(--sp-xl) auto;
+ gap: var(--sp-xxl);
}
.webhooks-empty {
display: grid;
place-items: center;
align-content: center;
- height: $s-156;
- max-width: $s-1000;
+ height: px2rem(156);
+ max-width: $sz-1000;
width: 100%;
- padding: $s-32;
- border: $s-1 solid var(--panel-border-color);
+ padding: var(--sp-xxxl);
+ border: $b-1 solid var(--color-background-quaternary);
border-radius: $br-8;
- color: var(--dashboard-list-text-foreground-color);
+ color: var(--color-foreground-secondary);
}
.webhooks-hero {
- font-size: $fs-14;
+ @include t.use-typography("body-medium");
display: grid;
grid-template-rows: auto 1fr auto;
- gap: $s-32;
- margin-top: $s-32;
+ gap: var(--sp-xxxl);
+ margin-top: var(--sp-xxxl);
margin: 0;
- padding: $s-32;
+ padding: var(--sp-xxxl);
padding: 0;
- width: $s-468;
+ width: px2rem(468);
}
.hero-title {
- @include bigTitleTipography;
- color: var(--dashboard-list-foreground-color);
+ @include t.use-typography("title-large");
+ color: var(--color-foreground-primary);
}
.hero-desc {
+ @include t.use-typography("body-large");
color: var(--color-foreground-secondary);
margin-bottom: 0;
- font-size: $fs-16;
- max-width: $s-512;
+ max-width: $sz-512;
}
.hero-btn {
+ //TODO: Remove this extended class using a DS component
@extend .button-primary;
- height: $s-32;
- max-width: $s-512;
+ height: $sz-32;
+ max-width: $sz-512;
}
.webhook-table {
@@ -421,7 +536,7 @@
display: grid;
align-items: center;
grid-template-columns: auto 1fr auto auto;
- gap: $s-16;
+ gap: var(--sp-l);
}
.actions {
@@ -429,90 +544,143 @@
}
.menu-disabled {
- color: var(--icon-foreground);
- width: $s-28;
+ color: var(--color-foreground-secondary);
+ width: $sz-28;
display: flex;
justify-content: center;
align-items: center;
}
.webhook-actions-dropdown {
- @extend .menu-dropdown;
- right: calc(-1 * $s-16);
- bottom: calc(-1 * $s-40);
+ box-shadow: var(--el-shadow-dark);
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-xs);
+ position: absolute;
+ padding: var(--sp-xs);
+ border-radius: $br-8;
+ z-index: var(--z-index-dropdown);
+ color: var(--color-foreground-primary);
+ background-color: var(--color-background-tertiary);
+ border: $b-2 solid var(--color-background-quaternary);
+ margin: 0;
+ right: calc(-1 * var(--sp-l));
+ bottom: calc(-1 * $sz-40);
width: fit-content;
- min-width: $s-160;
+ min-width: $sz-160;
}
.webhook-dropdown-item {
- @extend .menu-item-base;
+ @include t.use-typography("body-small");
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ height: $sz-28;
+ width: 100%;
+ padding: px2rem(6);
+ border-radius: $br-8;
+ cursor: pointer;
+ &:hover {
+ background-color: var(--color-background-quaternary);
+ }
}
.success-icon {
- @extend .button-icon;
- stroke: var(--alert-icon-foreground-color-success);
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: $sz-16;
+ width: $sz-16;
+ color: transparent;
+ fill: none;
+ stroke-width: $b-1;
+ stroke: var(--color-accent-success);
}
.warning-icon {
- @extend .button-icon;
- stroke: var(--alert-icon-foreground-color-warning);
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: $sz-16;
+ width: $sz-16;
+ color: transparent;
+ fill: none;
+ stroke-width: $b-1;
+ stroke: var(--color-accent-warning);
}
// INVITE MEMBERS MODAL
.modal-team-container {
- @extend .modal-container-base;
- @include menuShadow;
+ position: relative;
+ padding: var(--sp-xxxl);
+ border-radius: $br-8;
+ background-color: var(--color-background-primary);
+ border: $b-2 solid var(--color-background-quaternary);
+ min-width: $sz-364;
+ min-height: $sz-192;
+ max-width: $sz-512;
+ max-height: $sz-512;
+ box-shadow: var(--el-shadow-dark);
position: fixed;
- top: $s-72;
- right: $s-12;
+ top: px2rem(72);
+ right: var(--sp-m);
left: unset;
- width: $s-400;
- padding: $s-32;
- background-color: var(--modal-background-color);
+ width: $sz-400;
+ padding: var(--sp-xxxl);
+ background-color: var(--color-background-primary);
&.hero {
- top: $s-216;
- right: $s-32;
+ top: px2rem(216);
+ right: var(--sp-xxxl);
}
}
.modal-team-container-workspace {
- top: $s-40;
- z-index: $z-index-modal;
+ top: $sz-40;
+ z-index: var(--z-index-set);
}
.modal-title {
- @include headlineMediumTypography;
- height: $s-32;
- color: var(--modal-title-foreground-color);
+ @include t.use-typography("headline-medium");
+ height: $sz-32;
+ color: var(--color-foreground-primary);
}
.role-select {
- @include flexColumn;
- row-gap: $s-8;
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-xs);
+ row-gap: var(--sp-s);
}
.arrow-icon {
- @extend .button-icon;
- stroke: var(--icon-foreground);
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: $sz-16;
+ width: $sz-16;
+ color: transparent;
+ fill: none;
+ stroke-width: $b-1;
+ stroke: var(--color-foreground-secondary);
transform: rotate(90deg);
}
.invite-team-member-text {
- @include bodyLargeTypography;
- margin: 0 0 $s-16 0;
- color: var(--modal-title-foreground-color);
+ @include t.use-typography("body-large");
+ margin: 0 0 var(--sp-l) 0;
+ color: var(--color-foreground-primary);
}
.role-title {
- @include bodyLargeTypography;
+ @include t.use-typography("body-large");
margin: 0;
- color: var(--modal-title-foreground-color);
+ color: var(--color-foreground-primary);
}
.invitation-row {
- margin-top: $s-8;
- margin-bottom: $s-24;
+ margin-top: var(--sp-s);
+ margin-bottom: var(--sp-xxl);
}
.action-buttons {
@@ -521,46 +689,68 @@
}
.accept-btn {
+ // TODO: remove this extend class creating a modal component
@extend .modal-accept-btn;
}
// WEBHOOKS MODAL
.modal-overlay {
- @extend .modal-overlay-base;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ position: fixed;
+ left: 0;
+ top: 0;
+ height: 100%;
+ width: 100%;
+ z-index: var(--z-index-set);
+ background-color: var(--overlay-color);
}
.modal-container {
- @extend .modal-container-base;
+ position: relative;
+ padding: var(--sp-xxxl);
+ border-radius: $br-8;
+ background-color: var(--color-background-primary);
+ border: $b-2 solid var(--color-background-quaternary);
+ min-width: $sz-364;
+ min-height: $sz-192;
+ max-width: $sz-512;
+ max-height: $sz-512;
}
.modal-header {
- margin-bottom: $s-24;
+ margin-bottom: var(--sp-xxl);
}
.modal-title {
- @include uppercaseTitleTipography;
- color: var(--modal-title-foreground-color);
+ @include t.use-typography("title-small");
+ color: var(--color-foreground-primary);
}
.modal-close-btn {
+ // TODO remove extended class creating a modal component
@extend .modal-close-btn-base;
}
.modal-content {
- @include flexColumn;
- gap: $s-24;
- @include bodySmallTypography;
- margin-bottom: $s-24;
+ @include t.use-typography("body-small");
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-xxl);
+ margin-bottom: var(--sp-xxl);
}
.fields-row {
- @include flexColumn;
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-xs);
}
.select-title {
- @include bodySmallTypography;
- color: var(--modal-title-foreground-color);
+ @include t.use-typography("body-small");
+ color: var(--color-foreground-primary);
}
.custom-input-checkbox {
@@ -568,9 +758,10 @@
}
.hint {
- color: var(--modal-text-foreground-color);
+ color: var(--color-foreground-secondary);
}
+// TODO: Remove this extended classes creating a modal component
.action-buttons {
@extend .modal-action-btns;
@@ -583,8 +774,68 @@
}
}
+// TODO: Remove this extended class using input component
.email-input {
+ @include t.use-typography("body-small");
@extend .input-base;
- @include bodySmallTypography;
height: auto;
}
+// FIXME: This does not conform to our CSS Guidelines. Need to unnest and to use
+// custom properties to handle state changes.
+.input-wrapper {
+ display: flex;
+ align-items: center;
+ @include t.use-typography("body-large");
+
+ label {
+ display: flex;
+ align-items: center;
+ gap: px2rem(6);
+ cursor: pointer;
+ color: var(--color-foreground-primary);
+
+ &:focus,
+ &:focus-within {
+ span {
+ border-color: var(--color-accent-primary);
+ }
+ }
+ &:hover {
+ span {
+ border-color: var(--color-accent-primary-muted);
+ }
+ }
+ }
+
+ span {
+ @extend .checkbox-icon;
+ @include t.use-typography("body-small");
+ color: var(--color-foreground-secondary);
+ }
+ input {
+ margin: 0;
+ @include t.use-typography("body-small");
+ color: var(--color-foreground-secondary);
+ }
+}
+
+// INVITATION MODAL
+
+.modal-invitation-container {
+ overflow: hidden;
+ display: flex;
+ flex-direction: column;
+}
+
+.modal-invitation-content {
+ overflow: auto;
+}
+
+.invitation-list p {
+ margin: 0;
+}
+
+.modal-invitation-action-buttons {
+ margin-block-start: var(--sp-xxxl);
+ gap: var(--sp-s);
+}
diff --git a/frontend/src/app/main/ui/dashboard/team_form.scss b/frontend/src/app/main/ui/dashboard/team_form.scss
index d57cffb82e..eba9c361d0 100644
--- a/frontend/src/app/main/ui/dashboard/team_form.scss
+++ b/frontend/src/app/main/ui/dashboard/team_form.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -15,11 +15,11 @@
}
.modal-header {
- margin-bottom: $s-24;
+ margin-bottom: deprecated.$s-24;
}
.modal-title {
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
color: var(--modal-title-foreground-color);
}
@@ -28,20 +28,20 @@
}
.modal-content {
- margin-bottom: $s-24;
+ margin-bottom: deprecated.$s-24;
}
.team-form {
- min-width: $s-400;
+ min-width: deprecated.$s-400;
}
.group-name-input {
@extend .input-element-label;
- @include bodySmallTypography;
- margin-bottom: $s-8;
+ @include deprecated.bodySmallTypography;
+ margin-bottom: deprecated.$s-8;
label {
- @include flexColumn;
- @include bodySmallTypography;
+ @include deprecated.flexColumn;
+ @include deprecated.bodySmallTypography;
align-items: flex-start;
width: 100%;
border: none;
@@ -49,7 +49,7 @@
height: 100%;
input {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
}
}
}
diff --git a/frontend/src/app/main/ui/dashboard/templates.scss b/frontend/src/app/main/ui/dashboard/templates.scss
index 8d5a6ffb52..8a5ab660c0 100644
--- a/frontend/src/app/main/ui/dashboard/templates.scss
+++ b/frontend/src/app/main/ui/dashboard/templates.scss
@@ -4,32 +4,35 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/_utils.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/typography.scss" as t;
.dashboard-templates-section {
background-color: var(--color-background-tertiary);
- bottom: 0;
- border-bottom-left-radius: $br-8;
- border-bottom-right-radius: $br-8;
- border-top-right-radius: $br-8;
+ inset-block-end: 0;
+ border-end-start-radius: $br-8;
+ border-end-end-radius: $br-8;
+ border-start-end-radius: $br-8;
display: flex;
flex-direction: column;
- height: $s-244;
+ height: px2rem(244);
justify-content: flex-end;
- margin-left: $s-6;
- margin-right: $s-6;
- margin-bottom: $s-6;
+ margin-inline-start: px2rem(6);
+ margin-inline-end: px2rem(6);
+ margin-block-end: px2rem(6);
position: absolute;
transition: bottom 300ms;
- width: calc(100% - $s-12);
+ width: calc(100% - $sz-12);
pointer-events: none;
&.collapsed {
- bottom: calc(-1 * $s-228);
+ inset-block-end: calc(-1 * px2rem(228));
background-color: transparent;
transition: bottom 300ms;
.title-btn {
- border-bottom-right-radius: $br-8;
- border-bottom-left-radius: $br-8;
+ border-end-end-radius: $br-8;
+ border-end-start-radius: $br-8;
}
.content,
.content-description {
@@ -40,56 +43,54 @@
.title {
pointer-events: all;
- width: $s-420;
- top: calc(-1 * $s-40);
+ width: px2rem(420);
+ inset-block-start: calc(-1 * $sz-40);
text-align: right;
- height: $s-56;
+ height: px2rem(56);
position: absolute;
}
.title-btn {
border: none;
cursor: pointer;
- height: $s-56;
+ height: px2rem(56);
display: inline-flex;
align-items: center;
- border-top-left-radius: $br-8;
- border-top-right-radius: $br-8;
+ border-start-start-radius: $br-8;
+ border-start-end-radius: $br-8;
position: relative;
- z-index: $z-index-1;
+ z-index: var(--z-index-auto);
background-color: var(--color-background-tertiary);
width: 100%;
}
.title-text {
+ @include t.use-typography("body-large");
display: inline-block;
vertical-align: middle;
- line-height: 1.2;
- font-size: $fs-16;
- margin-left: $s-12;
- margin-right: $s-8;
+ margin-inline-start: var(--sp-m);
+ margin-inline-end: var(--sp-s);
color: var(--color-foreground-primary);
- font-weight: $fw400;
}
.title-icon-container {
display: inline-block;
vertical-align: middle;
- margin-left: auto;
- margin-right: $s-8;
+ margin-inline-start: auto;
+ margin-inline-end: var(--sp-s);
color: var(--color-foreground-primary);
}
.title-icon {
display: inline-block;
vertical-align: middle;
- margin-left: auto;
- margin-right: $s-8;
+ margin-inline-start: auto;
+ margin-inline-end: var(--sp-s);
transform: rotate(90deg);
}
.title-icon-text {
- margin-right: $s-8;
+ margin-inline-end: var(--sp-s);
}
.title-icon-collapsed {
@@ -97,27 +98,34 @@
}
.arrow-icon {
- @extend .button-icon;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: $sz-16;
+ width: $sz-16;
+ color: transparent;
+ fill: none;
+ stroke-width: $b-1;
stroke: var(--color-foreground-secondary);
}
.move-button {
position: absolute;
- top: $s-96;
- border: $s-2 solid var(--color-foreground-secondary);
+ inset-block-start: px2rem(96);
+ border: $b-2 solid var(--color-foreground-secondary);
border-radius: 50%;
text-align: center;
- width: $s-36;
- height: $s-36;
+ width: $sz-36;
+ height: $sz-36;
cursor: pointer;
- background-color: var(--button-secondary-background-color-rest);
+ background-color: var(--color-background-tertiary);
display: flex;
align-items: center;
justify-content: center;
pointer-events: all;
&:hover {
- border: $s-2 solid var(--color-background-tertiary);
+ border: $b-2 solid var(--color-background-tertiary);
background-color: var(--color-accent-primary);
.arrow-icon {
stroke: var(--color-background-tertiary);
@@ -126,31 +134,31 @@
}
.move-left {
- left: 0;
- margin-left: $s-44;
+ inset-inline-start: 0;
+ margin-inline-start: px2rem(44);
transform: rotate(180deg);
}
.move-right {
- right: 0;
- margin-right: $s-44;
+ inset-inline-end: 0;
+ margin-inline-end: px2rem(44);
}
.content-description {
- font-size: $fs-14;
+ @include t.use-typography("body-medium");
color: var(--color-foreground-primary);
- margin-bottom: -8px;
- margin-top: $s-16;
- margin-left: $s-16;
+ margin-block-end: calc(-1 * var(--sp-s));
+ margin-block-start: var(--sp-l);
+ margin-inline-start: var(--sp-l);
visibility: visible;
}
.content {
display: grid;
- grid-template-columns: repeat(auto-fill, minmax($s-276, $s-276));
+ grid-template-columns: repeat(auto-fill, minmax(px2rem(276), px2rem(276)));
grid-auto-flow: column;
pointer-events: all;
- height: $s-228;
+ height: px2rem(228);
overflow: scroll hidden;
scroll-behavior: smooth;
scroll-snap-type: x mandatory;
@@ -159,8 +167,8 @@
}
.card-container {
- width: $s-276;
- margin-top: $s-20;
+ width: px2rem(276);
+ margin-block-start: var(--sp-xl);
text-align: center;
vertical-align: top;
background-color: transparent;
@@ -170,15 +178,16 @@
}
.template-card {
+ @include t.use-typography("body-large");
display: inline-block;
- width: $s-256;
- font-size: $fs-16;
+ width: px2rem(256);
cursor: pointer;
color: var(--color-foreground-primary);
- padding: 0 $s-4 $s-8 $s-4;
+ padding: 0 var(--sp-xs) var(--sp-s) var(--sp-xs);
border-radius: $br-8;
- border: $s-2 solid transparent;
+ border: $b-2 solid transparent;
&:hover {
+ text-decoration: none;
border-color: var(--color-accent-primary);
.download-icon {
stroke: var(--color-accent-primary);
@@ -191,9 +200,9 @@
.img-container {
width: 100%;
- height: $s-136;
- margin-bottom: $s-8;
- border-radius: $br-5;
+ height: px2rem(136);
+ margin-block-end: var(--sp-s);
+ border-radius: px2rem(5);
display: flex;
justify-content: center;
flex-direction: column;
@@ -204,16 +213,15 @@
}
.card-name {
- padding: 0 $s-6;
+ padding: 0 px2rem(6);
display: flex;
justify-content: space-between;
- height: $s-24;
+ height: $sz-24;
align-items: center;
}
.card-text {
- font-weight: $fw400;
- font-size: $fs-16;
+ @include t.use-typography("body-large");
white-space: nowrap;
overflow: hidden;
width: 90%;
@@ -222,24 +230,30 @@
}
.download-icon {
- @extend .button-icon;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: $sz-16;
+ width: $sz-16;
+ color: transparent;
+ fill: none;
+ stroke-width: $b-1;
stroke: var(--icon-foreground);
}
.template-link {
- border: $s-2 solid transparent;
- margin: $s-32;
- padding: $s-32 0;
+ border: $b-2 solid transparent;
+ margin: var(--sp-xxxl);
+ padding: var(--sp-xxxl) 0;
}
.template-link-title {
- font-size: $fs-14;
+ @include t.use-typography("body-medium");
color: var(--color-foreground-primary);
- font-weight: $fw400;
}
.template-link-text {
- font-size: $fs-12;
- margin-top: $s-8;
+ @include t.use-typography("body-small");
+ margin-block-start: var(--sp-s);
color: var(--color-foreground-secondary);
}
diff --git a/frontend/src/app/main/ui/debug/icons_preview.scss b/frontend/src/app/main/ui/debug/icons_preview.scss
index 673c1b0658..a8493ed42b 100644
--- a/frontend/src/app/main/ui/debug/icons_preview.scss
+++ b/frontend/src/app/main/ui/debug/icons_preview.scss
@@ -1,4 +1,4 @@
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
.container {
display: grid;
@@ -9,7 +9,7 @@
}
.title {
- @include bigTitleTipography;
+ @include deprecated.bigTitleTipography;
color: var(--color-foreground-primary);
}
@@ -31,7 +31,7 @@
color: var(--color-foreground-primary);
word-break: break-word;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
svg {
width: var(--cell-size);
diff --git a/frontend/src/app/main/ui/delete_shared.scss b/frontend/src/app/main/ui/delete_shared.scss
index c0ee957e6a..ff842933da 100644
--- a/frontend/src/app/main/ui/delete_shared.scss
+++ b/frontend/src/app/main/ui/delete_shared.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -18,11 +18,11 @@
}
.modal-header {
- margin-bottom: $s-24;
+ margin-bottom: deprecated.$s-24;
}
.modal-title {
- @include headlineMediumTypography;
+ @include deprecated.headlineMediumTypography;
color: var(--modal-title-foreground-color);
}
@@ -31,12 +31,12 @@
}
.modal-content {
- @include bodySmallTypography;
- margin-bottom: $s-24;
+ @include deprecated.bodySmallTypography;
+ margin-bottom: deprecated.$s-24;
}
.element-list {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-text-foreground-color);
}
@@ -58,7 +58,7 @@
.modal-scd-msg,
.modal-subtitle,
.modal-msg {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-text-foreground-color);
line-height: 1.5;
}
diff --git a/frontend/src/app/main/ui/ds/_borders.scss b/frontend/src/app/main/ui/ds/_borders.scss
index cccca570ff..2c3ee5cb84 100644
--- a/frontend/src/app/main/ui/ds/_borders.scss
+++ b/frontend/src/app/main/ui/ds/_borders.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@use "./utils.scss" as *;
+@use "ds/_utils.scss" as *;
// TODO: create actual tokens once we have them from design
$br-8: px2rem(8);
diff --git a/frontend/src/app/main/ui/ds/_sizes.scss b/frontend/src/app/main/ui/ds/_sizes.scss
index dd737f6a5a..e92d399007 100644
--- a/frontend/src/app/main/ui/ds/_sizes.scss
+++ b/frontend/src/app/main/ui/ds/_sizes.scss
@@ -4,26 +4,40 @@
//
// Copyright (c) KALEIDOS INC
-@use "./utils.scss" as *;
+@use "ds/_utils.scss" as *;
// TODO: create actual tokens once we have them from design
+$sz-1: px2rem(1);
$sz-6: px2rem(6);
+$sz-12: px2rem(12);
+$sz-14: px2rem(14);
$sz-16: px2rem(16);
$sz-24: px2rem(24);
+$sz-28: px2rem(28);
$sz-32: px2rem(32);
$sz-36: px2rem(36);
$sz-40: px2rem(40);
$sz-48: px2rem(48);
-$sz-80: px2rem(80);
$sz-88: px2rem(88);
+$sz-96: px2rem(96);
+$sz-120: px2rem(120);
+$sz-154: px2rem(154);
$sz-160: px2rem(160);
+$sz-192: px2rem(192);
$sz-200: px2rem(200);
$sz-224: px2rem(224);
$sz-252: px2rem(252);
$sz-284: px2rem(284);
$sz-318: px2rem(318);
$sz-352: px2rem(352);
+$sz-364: px2rem(364);
+$sz-384: px2rem(384);
$sz-400: px2rem(400);
+$sz-430: px2rem(430);
$sz-480: px2rem(480);
$sz-500: px2rem(500);
+$sz-512: px2rem(512);
+$sz-520: px2rem(520);
+$sz-712: px2rem(712);
$sz-964: px2rem(964);
+$sz-1000: px2rem(1000);
diff --git a/frontend/src/app/main/ui/ds/buttons/_buttons.scss b/frontend/src/app/main/ui/ds/buttons/_buttons.scss
index 08aa9fb81c..64f34c5b1a 100644
--- a/frontend/src/app/main/ui/ds/buttons/_buttons.scss
+++ b/frontend/src/app/main/ui/ds/buttons/_buttons.scss
@@ -4,9 +4,9 @@
//
// Copyright (c) KALEIDOS INC
-@use "../_borders.scss" as *;
-@use "../_sizes.scss" as *;
-@use "../utils.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/_utils.scss" as *;
%base-button {
--button-bg-color: initial;
diff --git a/frontend/src/app/main/ui/ds/buttons/button.cljs b/frontend/src/app/main/ui/ds/buttons/button.cljs
index 376d063fc7..237b4c5e23 100644
--- a/frontend/src/app/main/ui/ds/buttons/button.cljs
+++ b/frontend/src/app/main/ui/ds/buttons/button.cljs
@@ -6,9 +6,9 @@
(ns app.main.ui.ds.buttons.button
(:require-macros
- [app.common.data.macros :as dm]
[app.main.style :as stl])
(:require
+ [app.common.data :as d]
[app.main.ui.ds.foundations.assets.icon :refer [icon* icon-list]]
[rumext.v2 :as mf]))
@@ -18,22 +18,26 @@
[:icon {:optional true}
[:and :string [:fn #(contains? icon-list %)]]]
[:on-ref {:optional true} fn?]
+ [:to {:optional true} :string] ;; renders as an anchor element
[:variant {:optional true}
[:maybe [:enum "primary" "secondary" "ghost" "destructive"]]]])
(mf/defc button*
{::mf/schema schema:button}
- [{:keys [variant icon children class on-ref] :rest props}]
- (let [variant (or variant "primary")
- class (dm/str class " " (stl/css-case :button true
- :button-primary (= variant "primary")
- :button-secondary (= variant "secondary")
- :button-ghost (= variant "ghost")
- :button-destructive (= variant "destructive")))
- props (mf/spread-props props {:class class
+ [{:keys [variant icon children class on-ref to] :rest props}]
+ (let [variant (d/nilv variant "primary")
+ element (if to "a" "button")
+ internal-class (stl/css-case :button true
+ :button-link (some? to)
+ :button-primary (= variant "primary")
+ :button-secondary (= variant "secondary")
+ :button-ghost (= variant "ghost")
+ :button-destructive (= variant "destructive"))
+ props (mf/spread-props props {:class [class internal-class]
+ :href to
:ref (fn [node]
(when on-ref
(on-ref node)))})]
- [:> "button" props
+ [:> element props
(when icon [:> icon* {:icon-id icon :size "m"}])
[:span {:class (stl/css :label-wrapper)} children]]))
diff --git a/frontend/src/app/main/ui/ds/buttons/button.scss b/frontend/src/app/main/ui/ds/buttons/button.scss
index 5e7b2cfe63..dd8c720559 100644
--- a/frontend/src/app/main/ui/ds/buttons/button.scss
+++ b/frontend/src/app/main/ui/ds/buttons/button.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@use "../typography.scss" as *;
+@use "ds/typography.scss" as *;
@use "./buttons" as *;
.button {
@@ -33,3 +33,9 @@
.button-destructive {
@extend %base-button-destructive;
}
+
+.button-link {
+ &:hover {
+ text-decoration: none;
+ }
+}
diff --git a/frontend/src/app/main/ui/ds/buttons/buttons.mdx b/frontend/src/app/main/ui/ds/buttons/buttons.mdx
index 229798cb31..586a04cb3c 100644
--- a/frontend/src/app/main/ui/ds/buttons/buttons.mdx
+++ b/frontend/src/app/main/ui/ds/buttons/buttons.mdx
@@ -69,6 +69,11 @@ Action buttons are a variant of `icon-button*` (`"action"`) but smaller.
+### Semantics
+
+In some cases, a button needs to be semantically an 'a' tag, but visually maintain the button style.
+In that case, the button accepts a 'to' property with the expected 'href'. It will then be rendered as an anchor element.
+
### Accessibility
Icon buttons require an `aria-label`. This is also shown in a tooltip on hovering the button.
diff --git a/frontend/src/app/main/ui/ds/buttons/icon_button.cljs b/frontend/src/app/main/ui/ds/buttons/icon_button.cljs
index 1d2995ea8e..551142e757 100644
--- a/frontend/src/app/main/ui/ds/buttons/icon_button.cljs
+++ b/frontend/src/app/main/ui/ds/buttons/icon_button.cljs
@@ -20,13 +20,15 @@
[:icon
[:and :string [:fn #(contains? icon-list %)]]]
[:aria-label :string]
+ [:tooltip-placement {:optional true}
+ [:maybe [:enum "top" "bottom" "left" "right" "top-right" "bottom-right" "bottom-left" "top-left"]]]
[:variant {:optional true}
[:maybe [:enum "primary" "secondary" "ghost" "destructive" "action"]]]])
(mf/defc icon-button*
{::mf/schema schema:icon-button
::mf/memo true}
- [{:keys [class icon icon-class variant aria-label children] :rest props}]
+ [{:keys [class icon icon-class variant aria-label children tooltip-placement] :rest props}]
(let [variant
(d/nilv variant "primary")
@@ -47,6 +49,7 @@
:aria-labelledby tooltip-id})]
[:> tooltip* {:content aria-label
+ :placement tooltip-placement
:id tooltip-id}
[:> :button props
[:> icon* {:icon-id icon :aria-hidden true :class icon-class}]
diff --git a/frontend/src/app/main/ui/ds/buttons/icon_button.scss b/frontend/src/app/main/ui/ds/buttons/icon_button.scss
index 3a75812646..26c8692558 100644
--- a/frontend/src/app/main/ui/ds/buttons/icon_button.scss
+++ b/frontend/src/app/main/ui/ds/buttons/icon_button.scss
@@ -4,8 +4,8 @@
//
// Copyright (c) KALEIDOS INC
-@use "../typography.scss" as *;
-@use "../_sizes.scss" as *;
+@use "ds/typography.scss" as *;
+@use "ds/_sizes.scss" as *;
@use "./buttons" as *;
.icon-button {
diff --git a/frontend/src/app/main/ui/ds/colors.scss b/frontend/src/app/main/ui/ds/colors.scss
index d3f01a8a16..aa3d93bce6 100644
--- a/frontend/src/app/main/ui/ds/colors.scss
+++ b/frontend/src/app/main/ui/ds/colors.scss
@@ -29,6 +29,7 @@ $pink-400: #ff6fe0;
$purple-200: #e1d2f5;
$purple-400: #bb97d8;
+$purple-500: #a977d1;
$purple-600: #8c33eb;
$purple-700: #6911d4;
$purple-600-10: #8c33eb1a;
@@ -76,6 +77,8 @@ $grayish-red: #bfbfbf;
--color-accent-quaternary: #{$pink-400};
--color-accent-overlay: #{$purple-700-60};
--color-accent-select: #{$purple-600-10};
+ --color-accent-action: #{$purple-400};
+ --color-accent-action-hover: #{$purple-500};
--color-accent-success: #{$green-500};
--color-background-success: #{$green-200};
@@ -98,6 +101,9 @@ $grayish-red: #bfbfbf;
--color-foreground-primary: #{$black};
--color-foreground-secondary: #{$blue-teal-700};
+ --color-static-white: #{$white};
+ --color-static-black: #{$black};
+
--color-shadow-dark: #{color.change($gray-200, $alpha: 0.6)};
--color-overlay-default: #{$white-60};
--color-overlay-onboarding: #{$white-90};
@@ -119,6 +125,8 @@ $grayish-red: #bfbfbf;
--color-accent-quaternary: #{$pink-400};
--color-accent-overlay: #{$mint-150-60};
--color-accent-select: #{$mint-250-10};
+ --color-accent-action: #{$purple-400};
+ --color-accent-action-hover: #{$purple-500};
--color-accent-success: #{$green-500};
--color-background-success: #{$green-950};
@@ -141,6 +149,9 @@ $grayish-red: #bfbfbf;
--color-foreground-primary: #{$white};
--color-foreground-secondary: #{$grayish-blue-500};
+ --color-static-white: #{$white};
+ --color-static-black: #{$black};
+
--color-shadow-dark: #{color.change($black, $alpha: 0.6)};
--color-overlay-default: #{$gray-950-60};
--color-overlay-onboarding: #{$gray-950-90};
diff --git a/frontend/src/app/main/ui/ds/controls/combobox.scss b/frontend/src/app/main/ui/ds/controls/combobox.scss
index 18eb9051ad..3df8586715 100644
--- a/frontend/src/app/main/ui/ds/controls/combobox.scss
+++ b/frontend/src/app/main/ui/ds/controls/combobox.scss
@@ -4,9 +4,9 @@
//
// Copyright (c) KALEIDOS INC
-@use "../_borders.scss" as *;
-@use "../_sizes.scss" as *;
-@use "../typography.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/typography.scss" as *;
.wrapper {
--combobox-icon-color: var(--color-icon-default);
diff --git a/frontend/src/app/main/ui/ds/controls/input.scss b/frontend/src/app/main/ui/ds/controls/input.scss
index a78df29a1b..3de9b95466 100644
--- a/frontend/src/app/main/ui/ds/controls/input.scss
+++ b/frontend/src/app/main/ui/ds/controls/input.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@use "../spacing.scss" as *;
+@use "ds/spacing.scss" as *;
.input-wrapper {
display: flex;
diff --git a/frontend/src/app/main/ui/ds/controls/numeric_input.stories.jsx b/frontend/src/app/main/ui/ds/controls/numeric-input.stories.jsx
similarity index 95%
rename from frontend/src/app/main/ui/ds/controls/numeric_input.stories.jsx
rename to frontend/src/app/main/ui/ds/controls/numeric-input.stories.jsx
index f3d2d20c8c..43d2971c42 100644
--- a/frontend/src/app/main/ui/ds/controls/numeric_input.stories.jsx
+++ b/frontend/src/app/main/ui/ds/controls/numeric-input.stories.jsx
@@ -44,8 +44,9 @@ export default {
property: "search",
},
parameters: {
- controls: { exclude: ["tokens"] },
+ controls: { exclude: ["tokens"] }
},
+
render: ({ ...args }) => ,
};
@@ -116,6 +117,14 @@ export const WithTokens = {
},
],
},
+ },
+ parameters: {
+ controls: { exclude: ["tokens"] },
+ docs: {
+ story: {
+ height: "320px",
+ },
+ },
},
render: ({ ...args }) => ,
};
diff --git a/frontend/src/app/main/ui/ds/controls/numeric_input.cljs b/frontend/src/app/main/ui/ds/controls/numeric_input.cljs
index 4c26835576..e09200febe 100644
--- a/frontend/src/app/main/ui/ds/controls/numeric_input.cljs
+++ b/frontend/src/app/main/ui/ds/controls/numeric_input.cljs
@@ -149,6 +149,32 @@
j)))
indices)))
+(defn- sort-groups-and-tokens
+ "Sorts both the groups and the tokens inside them alphabetically.
+
+ Input:
+ A map where:
+ - keys are groups (keywords or strings, e.g. :dimensions, :colors)
+ - values are vectors of token maps, each containing at least a :name key
+
+ Example input:
+ {:dimensions [{:name \"tres\"} {:name \"quini\"}]
+ :colors [{:name \"azul\"} {:name \"rojo\"}]}
+
+ Output:
+ A sorted map where:
+ - groups are ordered alphabetically by key
+ - tokens inside each group are sorted alphabetically by :name
+
+ Example output:
+ {:colors [{:name \"azul\"} {:name \"rojo\"}]
+ :dimensions [{:name \"quini\"} {:name \"tres\"}]}"
+
+ [groups->tokens]
+ (into (sorted-map) ;; ensure groups are ordered alphabetically by their key
+ (for [[group tokens] groups->tokens]
+ [group (sort-by :name tokens)])))
+
(def ^:private schema:icon
[:and :string [:fn #(contains? icon-list %)]])
@@ -158,16 +184,17 @@
[:class {:optional true} :string]
[:value {:optional true} [:maybe [:or
:int
+ :float
:string
[:= :multiple]]]]
[:default {:optional true} [:maybe :string]]
[:placeholder {:optional true} :string]
[:icon {:optional true} [:maybe schema:icon]]
[:disabled {:optional true} [:maybe :boolean]]
- [:min {:optional true} [:maybe :int]]
- [:max {:optional true} [:maybe :int]]
+ [:min {:optional true} [:maybe [:or :int :float]]]
+ [:max {:optional true} [:maybe [:or :int :float]]]
[:max-length {:optional true} :int]
- [:step {:optional true} [:maybe :int]]
+ [:step {:optional true} [:maybe [:or :int :float]]]
[:is-selected-on-focus {:optional true} :boolean]
[:nillable {:optional true} :boolean]
[:applied-token {:optional true} [:maybe [:or :string [:= :multiple]]]]
@@ -177,7 +204,7 @@
[:on-focus {:optional true} fn?]
[:on-detach {:optional true} fn?]
[:property {:optional true} :string]
- [:align {:optional true} [:enum :left :right]]])
+ [:align {:optional true} [:maybe [:enum :left :right]]]])
(mf/defc numeric-input*
{::mf/schema schema:numeric-input}
@@ -195,7 +222,6 @@
tokens (if (object? tokens)
(mfu/bean tokens)
tokens)
-
value (if (= :multiple applied-token)
:multiple
value)
@@ -260,11 +286,13 @@
(mf/with-memo [tokens filter-id]
(delay
(let [tokens (if (delay? tokens) @tokens tokens)
+
+ sorted-tokens (sort-groups-and-tokens tokens)
partial (extract-partial-brace-text filter-id)
options (if (seq partial)
- (filter-token-groups-by-name tokens partial)
- tokens)
- no-sets? (nil? tokens)]
+ (filter-token-groups-by-name sorted-tokens partial)
+ sorted-tokens)
+ no-sets? (nil? sorted-tokens)]
(generate-dropdown-options options no-sets?))))
selected-id*
@@ -595,12 +623,14 @@
:on-key-down on-key-down
:on-focus on-focus
:on-change store-raw-value
+ :variant "comfortable"
:disabled disabled
:slot-start (when icon
(mf/html [:> tooltip*
{:content property
:id property}
[:> icon* {:icon-id icon
+ :size "s"
:aria-labelledby property
:class (stl/css :icon)}]]))
:slot-end (when-not disabled
@@ -634,6 +664,7 @@
{:content property
:id property}
[:> icon* {:icon-id icon
+ :size "s"
:aria-labelledby property
:class (stl/css :icon)}]]))
:token-wrapper-ref token-wrapper-ref
diff --git a/frontend/src/app/main/ui/ds/controls/numeric_input.mdx b/frontend/src/app/main/ui/ds/controls/numeric_input.mdx
index 9eaac5dd46..def6d701d4 100644
--- a/frontend/src/app/main/ui/ds/controls/numeric_input.mdx
+++ b/frontend/src/app/main/ui/ds/controls/numeric_input.mdx
@@ -4,8 +4,79 @@
Copyright (c) KALEIDOS INC */ }
import { Canvas, Meta } from '@storybook/blocks';
-import * as InputStories from "./numeric_input.stories";
+import * as InputStories from "./numeric-input.stories";
-# Numeric Input
\ No newline at end of file
+# Numeric Input
+
+The `numeric-input*` component allows users to enter numerical values, apply tokens, or perform simple mathematical expressions.
+It combines a numeric input field with token integration, making it flexible for design systems where values can come from either fixed numbers or token references.
+
+## Variants
+
+### Default
+The standard numeric input that accepts direct numeric input.
+
+
+### With Tokens
+When tokens are available, the user can open a dropdown and apply a token instead of entering a fixed number.
+The token will be displayed inside the input field and can be detached if needed.
+
+
+## Technical notes
+
+### Tokens
+
+- Numeric input supports applying tokens via a dropdown that opens when typing `{` or clicking the token button.
+- Tokens are grouped and searchable.
+- Once a token is applied, the input field is replaced with a **token field**, showing the token name and its resolved value.
+
+### Validation & Math Expressions
+
+- The input accepts simple math expressions (e.g. `2+2`, `100/4`) and resolves them on blur.
+- Values are automatically clamped to the provided `min` and `max` range.
+- If the input is left empty and `nillable` is enabled, the value can be `nil`.
+
+### Icons
+
+`numeric-input*` supports optional icons at the start of the field for additional context.
+Icons come from the `app.main.ui.ds.foundations.assets.icon` namespace.
+
+```clj
+(ns app.main.ui.foo
+ (:require
+ [app.main.ui.ds.foundations.assets.icon :as i]))
+
+[:> numeric-input*
+ {:icon i/hash
+ :placeholder "Enter number"
+ :min 0
+ :max 100
+ :step 1}]
+```
+
+## Usage guidelines (design)
+### Where to Use
+
+Use numeric input in forms and properties panels where users need to adjust numerical values, such as sizes, spacings, or opacities.
+
+### When to Use
+
+When users must provide a numeric value within a defined range.
+
+When design tokens can be applied instead of raw numbers.
+
+When supporting advanced workflows where math expressions improve speed.
+
+### Interaction / Behavior
+
+Typing Numbers: The user can type numbers directly in the field.
+
+Using Tokens: Typing `{` opens a token dropdown; selecting one replaces the raw value with the token.
+
+Increment / Decrement: Users can adjust values with arrow keys ↑/↓ or mouse wheel.
+
+Validation: Invalid or out-of-range inputs fall back to the last valid value or the default.
+
+Detaching Tokens: Applied tokens can be removed via the detach button or with Backspace/Delete.
diff --git a/frontend/src/app/main/ui/ds/controls/numeric_input.scss b/frontend/src/app/main/ui/ds/controls/numeric_input.scss
index a44717f826..ec9b2aec69 100644
--- a/frontend/src/app/main/ui/ds/controls/numeric_input.scss
+++ b/frontend/src/app/main/ui/ds/controls/numeric_input.scss
@@ -4,13 +4,15 @@
//
// Copyright (c) KALEIDOS INC
-@use "../spacing.scss" as *;
-@use "../borders.scss" as *;
-@use "../sizes.scss" as *;
-@use "../typography.scss" as t;
+@use "ds/_borders.scss" as *;
+@use "ds/spacing.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/typography.scss" as t;
.input-wrapper {
+ --input-padding-size: var(--sp-xs);
--opacity-button: 0;
+ @include t.use-typography("code-font");
display: flex;
flex-direction: column;
gap: var(--sp-xs);
diff --git a/frontend/src/app/main/ui/ds/controls/select.cljs b/frontend/src/app/main/ui/ds/controls/select.cljs
index cb1e9ec135..a8572dd8b9 100644
--- a/frontend/src/app/main/ui/ds/controls/select.cljs
+++ b/frontend/src/app/main/ui/ds/controls/select.cljs
@@ -52,11 +52,12 @@
[:disabled {:optional true} :boolean]
[:default-selected {:optional true} :string]
[:empty-to-end {:optional true} [:maybe :boolean]]
- [:on-change {:optional true} fn?]])
+ [:on-change {:optional true} fn?]
+ [:variant {:optional true} [:maybe [:enum "default" "ghost"]]]])
(mf/defc select*
{::mf/schema schema:select}
- [{:keys [options class disabled default-selected empty-to-end on-change] :rest props}]
+ [{:keys [options class disabled default-selected empty-to-end on-change variant] :rest props}]
(let [;; NOTE: we use mfu/bean here for transparently handle
;; options provide as clojure data structures or javascript
;; plain objects and lists.
@@ -64,6 +65,8 @@
(mfu/bean options)
options)
+ variant (d/nilv variant "default")
+
empty-to-end (d/nilv empty-to-end false)
is-open* (mf/use-state false)
is-open (deref is-open*)
@@ -162,7 +165,7 @@
(reset! focused-id* nil)))))))
props
- (mf/spread-props props {:class [class (stl/css :select)]
+ (mf/spread-props props {:class [class (stl/css :select) (stl/css-case :variant-ghost (= variant "ghost"))]
:role "combobox"
:aria-controls listbox-id
:aria-haspopup "listbox"
@@ -183,7 +186,10 @@
(get selected-option :icon)
has-icon?
- (some? icon)]
+ (some? icon)
+
+ dimmed?
+ (:dimmed selected-option)]
(mf/with-effect [options]
(mf/set-ref-val! options-ref options))
@@ -201,7 +207,7 @@
:size "s"
:aria-hidden true}])
[:span {:class (stl/css-case :header-label true
- :header-label-dimmed empty-selected-id?)}
+ :header-label-dimmed (or empty-selected-id? dimmed?))}
(if ^boolean empty-selected-id? "--" label)]]
[:> icon* {:icon-id i/arrow-down
diff --git a/frontend/src/app/main/ui/ds/controls/select.mdx b/frontend/src/app/main/ui/ds/controls/select.mdx
index 0ecdf1e7af..d51bc592a2 100644
--- a/frontend/src/app/main/ui/ds/controls/select.mdx
+++ b/frontend/src/app/main/ui/ds/controls/select.mdx
@@ -34,6 +34,9 @@ If we consider that empty options have a special meaning, we can move them to th
Each option of `select*` may accept an `icon`, which must contain an [icon ID](../foundations/assets/icon.mdx).
These are available in the `app.main.ds.foundations.assets.icon` namespace.
+### Dimmed
+Each option can have an optional parameter `dimmed` with value `true` to show the option dimmed
+
```clj
(ns app.main.ui.foo
@@ -42,7 +45,7 @@ These are available in the `app.main.ds.foundations.assets.icon` namespace.
```
```clj
-[:> select*
+[:> select*
{:options [{ :label "Code"
:id "option-code"
:icon i/fill-content }
@@ -50,7 +53,8 @@ These are available in the `app.main.ds.foundations.assets.icon` namespace.
:id "option-design"
:icon i/pentool }
{ :label "Menu"
- :id "option-menu" }
+ :id "option-menu"
+ :dimmed true }
]}]
```
@@ -58,8 +62,8 @@ These are available in the `app.main.ds.foundations.assets.icon` namespace.
### Where to use
-Used in a wide range of applications in the app,
-to select among available text-based options,
+Used in a wide range of applications in the app,
+to select among available text-based options,
sometimes with icons that offers additional context.
### When to use
@@ -68,5 +72,5 @@ Consider using select when you have 5 or more options to choose from.
### Interaction / Behavior
-When the user clicks on the clickable area, a list of
+When the user clicks on the clickable area, a list of
options appears. When an option is chosen, the list is closed.
\ No newline at end of file
diff --git a/frontend/src/app/main/ui/ds/controls/select.scss b/frontend/src/app/main/ui/ds/controls/select.scss
index 6f5856f1ad..ce9fc573c7 100644
--- a/frontend/src/app/main/ui/ds/controls/select.scss
+++ b/frontend/src/app/main/ui/ds/controls/select.scss
@@ -4,9 +4,9 @@
//
// Copyright (c) KALEIDOS INC
-@use "../_borders.scss" as *;
-@use "../_sizes.scss" as *;
-@use "../typography.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/typography.scss" as *;
.select-wrapper {
--select-icon-color: var(--color-icon-default);
@@ -18,6 +18,7 @@
&:hover {
--select-background-color: var(--color-background-quaternary);
+ --select-icon-color: var(--color-foreground-primary);
}
@include use-typography("body-small");
@@ -43,8 +44,8 @@
display: grid;
grid-template-columns: 1fr auto;
gap: var(--sp-xs);
- height: $sz-32;
- width: 100%;
+ block-size: $sz-32;
+ inline-size: 100%;
padding: var(--sp-s);
border: none;
border-radius: $br-8;
@@ -55,6 +56,19 @@
appearance: none;
}
+.variant-ghost {
+ --select-background-color: transparent;
+ inline-size: fit-content;
+
+ & .arrow {
+ margin-inline-start: var(--sp-xs);
+ }
+
+ &:is(:focus-visible, :disabled) {
+ --select-background-color: transparent;
+ }
+}
+
.arrow {
color: var(--select-icon-color);
}
diff --git a/frontend/src/app/main/ui/ds/controls/select.stories.jsx b/frontend/src/app/main/ui/ds/controls/select.stories.jsx
index 2529b851dc..5bbf204654 100644
--- a/frontend/src/app/main/ui/ds/controls/select.stories.jsx
+++ b/frontend/src/app/main/ui/ds/controls/select.stories.jsx
@@ -9,6 +9,11 @@ import Components from "@target/components";
const { Select } = Components;
+const variants = [
+ "default",
+ "ghost",
+];
+
const options = [
{ id: "option-code", label: "Code" },
{ id: "option-design", label: "Design" },
@@ -29,12 +34,17 @@ export default {
argTypes: {
disabled: { control: "boolean" },
emptyToEnd: { control: "boolean" },
+ variant: {
+ control: { type: "select" },
+ options: variants,
+ },
},
args: {
disabled: false,
options: options,
emptyToEnd: false,
defaultSelected: "option-code",
+ variant: variants[0],
},
parameters: {
controls: {
@@ -51,6 +61,12 @@ export default {
export const Default = {};
+export const Ghost = {
+ args: {
+ variant: "ghost",
+ },
+};
+
export const WithIcons = {
args: {
options: optionsWithIcons,
diff --git a/frontend/src/app/main/ui/ds/controls/shared/option.scss b/frontend/src/app/main/ui/ds/controls/shared/option.scss
index 9720ad3960..0c2462206b 100644
--- a/frontend/src/app/main/ui/ds/controls/shared/option.scss
+++ b/frontend/src/app/main/ui/ds/controls/shared/option.scss
@@ -4,9 +4,9 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../_borders.scss" as *;
-@use "../../_sizes.scss" as *;
-@use "../../typography.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/typography.scss" as *;
.option {
--options-fg-color: var(--color-foreground-primary);
diff --git a/frontend/src/app/main/ui/ds/controls/shared/options_dropdown.cljs b/frontend/src/app/main/ui/ds/controls/shared/options_dropdown.cljs
index 3a7bef9cac..d604b60319 100644
--- a/frontend/src/app/main/ui/ds/controls/shared/options_dropdown.cljs
+++ b/frontend/src/app/main/ui/ds/controls/shared/options_dropdown.cljs
@@ -95,7 +95,7 @@
:icon (get option :icon)
:ref ref
:focused (= id focused)
- :dimmed false
+ :dimmed (true? (:dimmed option))
:on-click on-click}]))))
diff --git a/frontend/src/app/main/ui/ds/controls/shared/options_dropdown.scss b/frontend/src/app/main/ui/ds/controls/shared/options_dropdown.scss
index 7b98d05ccc..59f72657b4 100644
--- a/frontend/src/app/main/ui/ds/controls/shared/options_dropdown.scss
+++ b/frontend/src/app/main/ui/ds/controls/shared/options_dropdown.scss
@@ -4,9 +4,9 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../_borders.scss" as *;
-@use "../../_sizes.scss" as *;
-@use "../../typography.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/typography.scss" as *;
.option-list {
--options-dropdown-icon-fg-color: var(--color-foreground-secondary);
@@ -17,6 +17,7 @@
position: absolute;
top: $sz-36;
width: var(--dropdown-width, 100%);
+ transform: translateX(var(--dropdown-translate-distance, 0));
background-color: var(--options-dropdown-bg-color);
border-radius: $br-8;
border: $b-1 solid var(--options-dropdown-border-color);
diff --git a/frontend/src/app/main/ui/ds/controls/shared/token_option.scss b/frontend/src/app/main/ui/ds/controls/shared/token_option.scss
index e168da53a5..884ddfea54 100644
--- a/frontend/src/app/main/ui/ds/controls/shared/token_option.scss
+++ b/frontend/src/app/main/ui/ds/controls/shared/token_option.scss
@@ -4,9 +4,9 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../_borders.scss" as *;
-@use "../../_sizes.scss" as *;
-@use "../../typography.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/typography.scss" as *;
.token-option {
--token-options-fg-color: var(--color-foreground-primary);
diff --git a/frontend/src/app/main/ui/ds/controls/utilities/hint_message.cljs b/frontend/src/app/main/ui/ds/controls/utilities/hint_message.cljs
index 04b3aaaaf3..78925688e1 100644
--- a/frontend/src/app/main/ui/ds/controls/utilities/hint_message.cljs
+++ b/frontend/src/app/main/ui/ds/controls/utilities/hint_message.cljs
@@ -13,7 +13,7 @@
(def ^:private schema::hint-message
[:map
- [:message :string]
+ [:message [:or fn? :string]]
[:id :string]
[:type {:optional true} [:enum "hint" "error" "warning"]]
[:class {:optional true} :string]])
diff --git a/frontend/src/app/main/ui/ds/controls/utilities/hint_message.scss b/frontend/src/app/main/ui/ds/controls/utilities/hint_message.scss
index c80cf0e1a5..1112a3f816 100644
--- a/frontend/src/app/main/ui/ds/controls/utilities/hint_message.scss
+++ b/frontend/src/app/main/ui/ds/controls/utilities/hint_message.scss
@@ -4,8 +4,8 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../typography.scss" as *;
-@use "../../colors.scss" as *;
+@use "ds/typography.scss" as *;
+@use "ds/colors.scss" as *;
.hint-message {
--hint-color: var(--color-foreground-secondary);
diff --git a/frontend/src/app/main/ui/ds/controls/utilities/input_field.cljs b/frontend/src/app/main/ui/ds/controls/utilities/input_field.cljs
index 4f546ade66..4a8bcb1554 100644
--- a/frontend/src/app/main/ui/ds/controls/utilities/input_field.cljs
+++ b/frontend/src/app/main/ui/ds/controls/utilities/input_field.cljs
@@ -6,18 +6,19 @@
(ns app.main.ui.ds.controls.utilities.input-field
(:require-macros
- [app.common.data.macros :as dm]
[app.main.style :as stl])
(:require
[app.common.data :as d]
[app.main.constants :refer [max-input-length]]
[app.main.ui.ds.foundations.assets.icon :refer [icon* icon-list]]
+ [app.main.ui.ds.tooltip :refer [tooltip*]]
[app.util.dom :as dom]
[rumext.v2 :as mf]))
(def ^:private schema:input-field
[:map
[:class {:optional true} :string]
+ [:aria-label {:optional true} [:maybe :string]]
[:id :string]
[:icon {:optional true}
[:maybe [:and :string [:fn #(contains? icon-list %)]]]]
@@ -35,10 +36,13 @@
[{:keys [id icon class type
has-hint hint-type
max-length variant
- slot-start slot-end] :rest props} ref]
+ slot-start slot-end
+ aria-label] :rest props} ref]
(let [input-ref (mf/use-ref)
type (d/nilv type "text")
variant (d/nilv variant "dense")
+ tooltip-id (mf/use-id)
+
props (mf/spread-props props
{:class (stl/css-case
:input true
@@ -49,10 +53,18 @@
"true")
:aria-describedby (when has-hint
(str id "-hint"))
+ :aria-labelledby tooltip-id
:type (d/nilv type "text")
:id id
:max-length (d/nilv max-length max-input-length)})
-
+ inside-class (stl/css-case :input-wrapper true
+ :has-hint has-hint
+ :hint-type-hint (= hint-type "hint")
+ :hint-type-warning (= hint-type "warning")
+ :hint-type-error (= hint-type "error")
+ :variant-seamless (= variant "seamless")
+ :variant-dense (= variant "dense")
+ :variant-comfortable (= variant "comfortable"))
on-icon-click
(mf/use-fn
(mf/deps ref)
@@ -61,18 +73,15 @@
(dom/select-node input-node)
(dom/focus! input-node))))]
- [:div {:class (dm/str class " " (stl/css-case :input-wrapper true
- :has-hint has-hint
- :hint-type-hint (= hint-type "hint")
- :hint-type-warning (= hint-type "warning")
- :hint-type-error (= hint-type "error")
- :variant-seamless (= variant "seamless")
- :variant-dense (= variant "dense")
- :variant-comfortable (= variant "comfortable")))}
+ [:div {:class [inside-class class]}
(when (some? slot-start)
slot-start)
(when (some? icon)
- [:> icon* {:icon-id icon :class (stl/css :icon) :on-click on-icon-click}])
+ (if aria-label
+ [:> tooltip* {:content aria-label
+ :id tooltip-id}
+ [:> icon* {:icon-id icon :class (stl/css :icon) :on-click on-icon-click}]]
+ [:> icon* {:icon-id icon :class (stl/css :icon) :on-click on-icon-click}]))
[:> "input" props]
(when (some? slot-end)
slot-end)]))
diff --git a/frontend/src/app/main/ui/ds/controls/utilities/input_field.scss b/frontend/src/app/main/ui/ds/controls/utilities/input_field.scss
index ca2eb27785..3e95b194d9 100644
--- a/frontend/src/app/main/ui/ds/controls/utilities/input_field.scss
+++ b/frontend/src/app/main/ui/ds/controls/utilities/input_field.scss
@@ -4,10 +4,10 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../_borders.scss" as *;
-@use "../../_sizes.scss" as *;
-@use "../../typography.scss" as *;
-@use "../../colors.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/typography.scss" as *;
+@use "ds/colors.scss" as *;
.input-wrapper {
--input-bg-color: var(--color-background-tertiary);
@@ -25,7 +25,7 @@
background: var(--input-bg-color);
border-radius: $br-8;
- padding: 0 var(--sp-s);
+ padding: 0 var(--input-padding-size, var(--sp-s));
outline: $b-1 solid var(--input-outline-color);
&:hover {
diff --git a/frontend/src/app/main/ui/ds/controls/utilities/label.scss b/frontend/src/app/main/ui/ds/controls/utilities/label.scss
index 740204fcae..405beb6c6f 100644
--- a/frontend/src/app/main/ui/ds/controls/utilities/label.scss
+++ b/frontend/src/app/main/ui/ds/controls/utilities/label.scss
@@ -4,9 +4,9 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../typography.scss" as *;
-@use "../../colors.scss" as *;
-@use "../../spacing.scss" as *;
+@use "ds/typography.scss" as *;
+@use "ds/colors.scss" as *;
+@use "ds/spacing.scss" as *;
.label {
--label-color: var(--color-foreground-primary);
diff --git a/frontend/src/app/main/ui/ds/controls/utilities/token_field.scss b/frontend/src/app/main/ui/ds/controls/utilities/token_field.scss
index 8bafa9a1fc..37498bdf7e 100644
--- a/frontend/src/app/main/ui/ds/controls/utilities/token_field.scss
+++ b/frontend/src/app/main/ui/ds/controls/utilities/token_field.scss
@@ -4,10 +4,10 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../_borders.scss" as *;
-@use "../../_sizes.scss" as *;
-@use "../../typography.scss" as t;
-@use "../../colors.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/typography.scss" as t;
+@use "ds/colors.scss" as *;
.token-field {
--token-field-bg-color: var(--color-background-tertiary);
@@ -25,7 +25,7 @@
inline-size: 100%;
background: var(--token-field-bg-color);
border-radius: $br-8;
- padding: var(--sp-s);
+ padding: var(--sp-xs);
outline: $b-1 solid var(--token-field-outline-color);
&:hover {
diff --git a/frontend/src/app/main/ui/ds/foundations/assets/icon.cljs b/frontend/src/app/main/ui/ds/foundations/assets/icon.cljs
index 0ca9fbeb59..de4acf3c82 100644
--- a/frontend/src/app/main/ui/ds/foundations/assets/icon.cljs
+++ b/frontend/src/app/main/ui/ds/foundations/assets/icon.cljs
@@ -125,6 +125,7 @@
(def ^:icon-id document "document")
(def ^:icon-id download "download")
(def ^:icon-id drop "drop")
+(def ^:icon-id drop-shadow "drop-shadow")
(def ^:icon-id easing-ease "easing-ease")
(def ^:icon-id easing-ease-in "easing-ease-in")
(def ^:icon-id easing-ease-in-out "easing-ease-in-out")
@@ -169,6 +170,7 @@
(def ^:icon-id hug-content "hug-content")
(def ^:icon-id icon "icon")
(def ^:icon-id img "img")
+(def ^:icon-id inner-shadow "inner-shadow")
(def ^:icon-id info "info")
(def ^:icon-id import-export "import-export")
(def ^:icon-id interaction "interaction")
diff --git a/frontend/src/app/main/ui/ds/foundations/typography/heading.scss b/frontend/src/app/main/ui/ds/foundations/typography/heading.scss
index 67c16bd367..37256f5fec 100644
--- a/frontend/src/app/main/ui/ds/foundations/typography/heading.scss
+++ b/frontend/src/app/main/ui/ds/foundations/typography/heading.scss
@@ -3,7 +3,7 @@
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
//
// Copyright (c) KALEIDOS INC
-@use "../../typography.scss" as t;
+@use "ds/typography.scss" as t;
.display-typography {
@include t.use-typography("display");
diff --git a/frontend/src/app/main/ui/ds/foundations/typography/text.scss b/frontend/src/app/main/ui/ds/foundations/typography/text.scss
index 67c16bd367..37256f5fec 100644
--- a/frontend/src/app/main/ui/ds/foundations/typography/text.scss
+++ b/frontend/src/app/main/ui/ds/foundations/typography/text.scss
@@ -3,7 +3,7 @@
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
//
// Copyright (c) KALEIDOS INC
-@use "../../typography.scss" as t;
+@use "ds/typography.scss" as t;
.display-typography {
@include t.use-typography("display");
diff --git a/frontend/src/app/main/ui/ds/layout/tab_switcher.scss b/frontend/src/app/main/ui/ds/layout/tab_switcher.scss
index 0a85096956..f25fc4ccd9 100644
--- a/frontend/src/app/main/ui/ds/layout/tab_switcher.scss
+++ b/frontend/src/app/main/ui/ds/layout/tab_switcher.scss
@@ -4,9 +4,9 @@
//
// Copyright (c) KALEIDOS INC
-@use "../_sizes.scss" as *;
-@use "../_borders.scss" as *;
-@use "../typography.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/typography.scss" as *;
.tabs {
--tabs-bg-color: var(--color-background-secondary);
diff --git a/frontend/src/app/main/ui/ds/mixins.scss b/frontend/src/app/main/ui/ds/mixins.scss
new file mode 100644
index 0000000000..c8de5deced
--- /dev/null
+++ b/frontend/src/app/main/ui/ds/mixins.scss
@@ -0,0 +1,22 @@
+// 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
+
+@mixin textEllipsis {
+ display: block;
+ max-width: 99%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+@mixin twoLineTextEllipsis {
+ max-width: 99%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+}
diff --git a/frontend/src/app/main/ui/ds/notifications/actionable.scss b/frontend/src/app/main/ui/ds/notifications/actionable.scss
index d69dffcf4e..23ca9c6eae 100644
--- a/frontend/src/app/main/ui/ds/notifications/actionable.scss
+++ b/frontend/src/app/main/ui/ds/notifications/actionable.scss
@@ -4,8 +4,8 @@
//
// Copyright (c) KALEIDOS INC
-@use "../_borders.scss" as *;
-@use "../typography.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/typography.scss" as *;
.notification {
@include use-typography("body-medium");
diff --git a/frontend/src/app/main/ui/ds/notifications/shared/notification_pill.scss b/frontend/src/app/main/ui/ds/notifications/shared/notification_pill.scss
index 9216f12858..3cf7b1bd2c 100644
--- a/frontend/src/app/main/ui/ds/notifications/shared/notification_pill.scss
+++ b/frontend/src/app/main/ui/ds/notifications/shared/notification_pill.scss
@@ -4,9 +4,9 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../_sizes.scss" as *;
-@use "../../_borders.scss" as *;
-@use "../../typography.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/typography.scss" as *;
.notification-pill {
@include use-typography("body-medium");
diff --git a/frontend/src/app/main/ui/ds/notifications/toast.scss b/frontend/src/app/main/ui/ds/notifications/toast.scss
index aabed6bd09..c09629bfdd 100644
--- a/frontend/src/app/main/ui/ds/notifications/toast.scss
+++ b/frontend/src/app/main/ui/ds/notifications/toast.scss
@@ -4,11 +4,11 @@
//
// Copyright (c) KALEIDOS INC
-@use "../_sizes.scss" as *;
-@use "../_borders.scss" as *;
-@use "../typography.scss" as *;
-@use "../spacing.scss" as *;
-@use "../z-index.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/typography.scss" as *;
+@use "ds/spacing.scss" as *;
+@use "ds/z-index.scss" as *;
.toast {
--toast-icon-color: var(--color-foreground-secondary);
diff --git a/frontend/src/app/main/ui/ds/product/avatar.scss b/frontend/src/app/main/ui/ds/product/avatar.scss
index eac040a8eb..36952c13d7 100644
--- a/frontend/src/app/main/ui/ds/product/avatar.scss
+++ b/frontend/src/app/main/ui/ds/product/avatar.scss
@@ -4,8 +4,8 @@
//
// Copyright (c) KALEIDOS INC
-@use "../_sizes.scss" as *;
-@use "../_borders.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/_borders.scss" as *;
.avatar {
border-radius: $br-circle;
diff --git a/frontend/src/app/main/ui/ds/product/cta.scss b/frontend/src/app/main/ui/ds/product/cta.scss
index a08238958c..20d82a77c6 100644
--- a/frontend/src/app/main/ui/ds/product/cta.scss
+++ b/frontend/src/app/main/ui/ds/product/cta.scss
@@ -4,10 +4,10 @@
//
// Copyright (c) KALEIDOS INC
-@use "../colors.scss" as *;
-@use "../_sizes.scss" as *;
-@use "../_borders.scss" as *;
-@use "../typography.scss" as t;
+@use "ds/colors.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/typography.scss" as t;
.cta {
border-radius: $br-8;
diff --git a/frontend/src/app/main/ui/ds/product/empty_placeholder.scss b/frontend/src/app/main/ui/ds/product/empty_placeholder.scss
index cc4654b9e7..2850b67eb5 100644
--- a/frontend/src/app/main/ui/ds/product/empty_placeholder.scss
+++ b/frontend/src/app/main/ui/ds/product/empty_placeholder.scss
@@ -4,8 +4,8 @@
//
// Copyright (c) KALEIDOS INC
-@use "../_sizes.scss" as *;
-@use "../_borders.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/_borders.scss" as *;
.empty-placeholder {
display: grid;
diff --git a/frontend/src/app/main/ui/ds/product/input_with_meta.scss b/frontend/src/app/main/ui/ds/product/input_with_meta.scss
index e2f63f1bf4..a01190d120 100644
--- a/frontend/src/app/main/ui/ds/product/input_with_meta.scss
+++ b/frontend/src/app/main/ui/ds/product/input_with_meta.scss
@@ -4,10 +4,10 @@
//
// Copyright (c) KALEIDOS INC
-@use "../_borders.scss" as *;
-@use "../spacing.scss" as *;
-@use "../_sizes.scss" as *;
-@use "../typography.scss" as t;
+@use "ds/_borders.scss" as *;
+@use "ds/spacing.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/typography.scss" as t;
.input-with-meta-container {
--input-meta-value: var(--color-foreground-primary);
diff --git a/frontend/src/app/main/ui/ds/product/loader.scss b/frontend/src/app/main/ui/ds/product/loader.scss
index 4eb1f3abde..772049d573 100644
--- a/frontend/src/app/main/ui/ds/product/loader.scss
+++ b/frontend/src/app/main/ui/ds/product/loader.scss
@@ -4,6 +4,8 @@
//
// Copyright (c) KALEIDOS INC
+@use "ds/_utils.scss" as *;
+
@keyframes line-pencil {
0% {
transform: translateY(0);
@@ -44,8 +46,8 @@
// Tips container
.tips-container {
text-align: center;
- min-width: var(--sp-600);
- max-width: var(--sp-800);
+ min-width: px2rem(600);
+ max-width: px2rem(800);
display: flex;
flex-direction: column;
gap: var(--sp-s);
diff --git a/frontend/src/app/main/ui/ds/product/milestone.scss b/frontend/src/app/main/ui/ds/product/milestone.scss
index b4ec7ab7ab..5e276d23a0 100644
--- a/frontend/src/app/main/ui/ds/product/milestone.scss
+++ b/frontend/src/app/main/ui/ds/product/milestone.scss
@@ -4,9 +4,9 @@
//
// Copyright (c) KALEIDOS INC
-@use "../_sizes.scss" as *;
-@use "../_borders.scss" as *;
-@use "../typography.scss" as t;
+@use "ds/_sizes.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/typography.scss" as t;
.milestone {
border: $b-1 solid var(--border-color, transparent);
diff --git a/frontend/src/app/main/ui/ds/product/milestone_group.scss b/frontend/src/app/main/ui/ds/product/milestone_group.scss
index 0ed02e1f16..43c71ce334 100644
--- a/frontend/src/app/main/ui/ds/product/milestone_group.scss
+++ b/frontend/src/app/main/ui/ds/product/milestone_group.scss
@@ -4,9 +4,9 @@
//
// Copyright (c) KALEIDOS INC
-@use "../_sizes.scss" as *;
-@use "../_borders.scss" as *;
-@use "../typography.scss" as t;
+@use "ds/_sizes.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/typography.scss" as t;
.milestone {
border: $b-1 solid var(--border-color, transparent);
diff --git a/frontend/src/app/main/ui/ds/spacing.scss b/frontend/src/app/main/ui/ds/spacing.scss
index 577a182358..796699dd27 100644
--- a/frontend/src/app/main/ui/ds/spacing.scss
+++ b/frontend/src/app/main/ui/ds/spacing.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@use "./utils.scss" as *;
+@use "ds/_utils.scss" as *;
$_sp-2: px2rem(2);
$_sp-4: px2rem(4);
@@ -14,8 +14,6 @@ $_sp-16: px2rem(16);
$_sp-20: px2rem(20);
$_sp-24: px2rem(24);
$_sp-32: px2rem(32);
-$_sp-600: px2rem(600);
-$_sp-800: px2rem(800);
:global(:root) {
--sp-xxs: #{$_sp-2};
@@ -26,6 +24,4 @@ $_sp-800: px2rem(800);
--sp-xl: #{$_sp-20};
--sp-xxl: #{$_sp-24};
--sp-xxxl: #{$_sp-32};
- --sp-600: #{$_sp-600};
- --sp-800: #{$_sp-800};
}
diff --git a/frontend/src/app/main/ui/ds/tooltip/tooltip.cljs b/frontend/src/app/main/ui/ds/tooltip/tooltip.cljs
index ac89d1fe24..440bd7ee23 100644
--- a/frontend/src/app/main/ui/ds/tooltip/tooltip.cljs
+++ b/frontend/src/app/main/ui/ds/tooltip/tooltip.cljs
@@ -172,7 +172,7 @@
[:id {:optional true} :string]
[:offset {:optional true} :int]
[:delay {:optional true} :int]
- [:content [:or fn? :string [:fn mf/element?]]]
+ [:content [:or fn? :string]]
[:placement {:optional true}
[:maybe [:enum "top" "bottom" "left" "right" "top-right" "bottom-right" "bottom-left" "top-left"]]]])
diff --git a/frontend/src/app/main/ui/ds/tooltip/tooltip.scss b/frontend/src/app/main/ui/ds/tooltip/tooltip.scss
index fcce788d33..df9047d2dd 100644
--- a/frontend/src/app/main/ui/ds/tooltip/tooltip.scss
+++ b/frontend/src/app/main/ui/ds/tooltip/tooltip.scss
@@ -4,9 +4,9 @@
//
// Copyright (c) KALEIDOS INC
-@use "../_sizes.scss" as *;
-@use "../_borders.scss" as *;
-@use "../typography.scss" as t;
+@use "ds/_sizes.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/typography.scss" as t;
$arrow-side: 12px;
diff --git a/frontend/src/app/main/ui/ds/typography.scss b/frontend/src/app/main/ui/ds/typography.scss
index 6cb7014877..6ca2fd6670 100644
--- a/frontend/src/app/main/ui/ds/typography.scss
+++ b/frontend/src/app/main/ui/ds/typography.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@use "./utils.scss" as *;
+@use "ds/_utils.scss" as *;
$_font-weight-regular: 400;
$_font-weight-medium: 500;
diff --git a/frontend/src/app/main/ui/ds/utilities/swatch.cljs b/frontend/src/app/main/ui/ds/utilities/swatch.cljs
index bd8d086fd2..8eda95fd3a 100644
--- a/frontend/src/app/main/ui/ds/utilities/swatch.cljs
+++ b/frontend/src/app/main/ui/ds/utilities/swatch.cljs
@@ -14,6 +14,7 @@
[app.common.schema :as sm]
[app.common.types.color :as ct]
[app.config :as cfg]
+ [app.main.ui.ds.tooltip :refer [tooltip*]]
[app.util.color :as uc]
[app.util.i18n :refer [tr]]
[cuerdas.core :as str]
@@ -62,11 +63,12 @@
[:class {:optional true} :string]
[:size {:optional true} [:enum "small" "medium" "large"]]
[:active {:optional true} ::sm/boolean]
+ [:has-errors {:optional true} [:maybe ::sm/boolean]]
[:on-click {:optional true} ::sm/fn]])
(mf/defc swatch*
{::mf/schema (sm/schema schema:swatch)}
- [{:keys [background on-click size active class]
+ [{:keys [background on-click size active class tooltip-content has-errors]
:rest props}]
(let [;; NOTE: this code is only relevant for storybook, because
;; storybook is unable to pass in a comfortable way a complex
@@ -90,6 +92,13 @@
:stops gradient-stops}
image (:image background)
format (if id? "rounded" "square")
+ element-id (mf/use-id)
+ on-click
+ (mf/use-fn
+ (mf/deps background on-click)
+ (fn [event]
+ (when (fn? on-click)
+ (^function on-click background event))))
class
(dm/str class " " (stl/css-case
@@ -106,23 +115,28 @@
(mf/spread-props props {:class class
:on-click on-click
:type button-type
- :title (color-title background)})]
+ :aria-labelledby element-id})]
- [:> element-type props
- (cond
+ [:> tooltip* {:content (if tooltip-content
+ tooltip-content
+ (color-title background))
+ :id element-id}
+ [:> element-type props
+ (cond
+ (some? gradient-type)
+ [:span {:class (stl/css :swatch-gradient)
+ :style {:background-image (str (uc/gradient->css gradient-data) ", repeating-conic-gradient(lightgray 0% 25%, white 0% 50%)")}}]
- (some? gradient-type)
- [:span {:class (stl/css :swatch-gradient)
- :style {:background-image (str (uc/gradient->css gradient-data) ", repeating-conic-gradient(lightgray 0% 25%, white 0% 50%)")}}]
+ (some? image)
+ (let [uri (cfg/resolve-file-media image)]
+ [:span {:class (stl/css :swatch-image)
+ :style {:background-image (str/ffmt "url(%)" uri)}}])
+ has-errors
+ [:span {:class (stl/css :swatch-error)}]
- (some? image)
- (let [uri (cfg/resolve-file-media image)]
- [:span {:class (stl/css :swatch-image)
- :style {:background-image (str/ffmt "url(%)" uri)}}])
-
- :else
- [:span {:class (stl/css :swatch-opacity)}
- [:span {:class (stl/css :swatch-solid-side)
- :style {:background (uc/color->background (assoc background :opacity 1))}}]
- [:span {:class (stl/css :swatch-opacity-side)
- :style {:background (uc/color->background background)}}]])]))
+ :else
+ [:span {:class (stl/css :swatch-opacity)}
+ [:span {:class (stl/css :swatch-solid-side)
+ :style {:background (uc/color->background (assoc background :opacity 1))}}]
+ [:span {:class (stl/css :swatch-opacity-side)
+ :style {:background (uc/color->background background)}}]])]]))
diff --git a/frontend/src/app/main/ui/ds/utilities/swatch.scss b/frontend/src/app/main/ui/ds/utilities/swatch.scss
index edf3d3fb6b..37ffe33e4e 100644
--- a/frontend/src/app/main/ui/ds/utilities/swatch.scss
+++ b/frontend/src/app/main/ui/ds/utilities/swatch.scss
@@ -4,9 +4,9 @@
//
// Copyright (c) KALEIDOS INC
-@use "../_borders.scss" as *;
-@use "../_sizes.scss" as *;
-@use "../colors.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/colors.scss" as *;
.swatch {
--border-color: var(--color-accent-primary-muted);
@@ -17,10 +17,9 @@
--checkerboard-background: repeating-conic-gradient(lightgray 0% 25%, white 0% 50%);
--checkerboard-size: 0.5rem 0.5rem;
- border: 1px solid var(--border-color);
+ border: $b-1 solid var(--border-color);
border-radius: var(--border-radius);
overflow: hidden;
-
&:focus {
--border-color: var(--color-accent-primary);
}
@@ -109,3 +108,7 @@
flex: 1;
display: block;
}
+
+.swatch-error {
+ background: var(--color-background-primary);
+}
diff --git a/frontend/src/app/main/ui/exports/assets.scss b/frontend/src/app/main/ui/exports/assets.scss
index 0af4851951..8bc4737a20 100644
--- a/frontend/src/app/main/ui/exports/assets.scss
+++ b/frontend/src/app/main/ui/exports/assets.scss
@@ -4,13 +4,13 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
// PROGRESS WIDGET
.export-progress-widget {
- @include flexCenter;
- width: $s-28;
- height: $s-28;
+ @include deprecated.flexCenter;
+ width: deprecated.$s-28;
+ height: deprecated.$s-28;
}
// PROGRESS MODAL
@@ -20,19 +20,19 @@
--export-modal-icon-color: var(--alert-icon-foreground-color-default);
--export-modal-border-color: var(--alert-border-color-default);
position: absolute;
- right: $s-16;
- top: $s-48;
+ right: deprecated.$s-16;
+ top: deprecated.$s-48;
display: grid;
- grid-template-columns: $s-24 1fr $s-24;
+ grid-template-columns: deprecated.$s-24 1fr deprecated.$s-24;
grid-template-areas:
"icon text close"
"bar bar bar";
- gap: $s-4 $s-8;
- padding-block-start: $s-8;
+ gap: deprecated.$s-4 deprecated.$s-8;
+ padding-block-start: deprecated.$s-8;
background-color: var(--export-modal-bg-color);
- border: $s-1 solid var(--export-modal-border-color);
- border-radius: $br-8;
- z-index: $z-index-modal;
+ border: deprecated.$s-1 solid var(--export-modal-border-color);
+ border-radius: deprecated.$br-8;
+ z-index: deprecated.$z-index-modal;
overflow: hidden;
}
@@ -42,23 +42,23 @@
--export-modal-icon-color: var(--alert-icon-foreground-color-error);
--export-modal-border-color: var(--alert-border-color-error);
grid-template-areas: "icon text close";
- gap: $s-8;
- padding-block: $s-8;
+ gap: deprecated.$s-8;
+ padding-block: deprecated.$s-8;
}
.icon {
@extend .button-icon;
grid-area: icon;
align-self: center;
- margin-inline-start: $s-8;
+ margin-inline-start: deprecated.$s-8;
stroke: var(--export-modal-icon-color);
}
.export-progress-title {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
display: grid;
grid-template-columns: auto 1fr;
- gap: $s-8;
+ gap: deprecated.$s-8;
grid-area: text;
align-self: center;
padding: 0;
@@ -67,16 +67,16 @@
}
.progress {
- @include bodyMediumTypography;
- padding-left: $s-8;
+ @include deprecated.bodyMediumTypography;
+ padding-left: deprecated.$s-8;
margin: 0;
align-self: center;
color: var(--modal-text-foreground-color);
}
.retry-btn {
- @include buttonStyle;
- @include bodySmallTypography;
+ @include deprecated.buttonStyle;
+ @include deprecated.bodySmallTypography;
display: inline;
text-align: left;
color: var(--modal-link-foreground-color);
@@ -85,9 +85,9 @@
}
.progress-close-button {
- @include buttonStyle;
+ @include deprecated.buttonStyle;
padding: 0;
- margin-inline-end: $s-8;
+ margin-inline-end: deprecated.$s-8;
}
.close-icon {
@@ -110,15 +110,15 @@
.modal-container {
@extend .modal-container-base;
- max-height: calc(10 * $s-80);
+ max-height: calc(10 * deprecated.$s-80);
}
.modal-header {
- margin-bottom: $s-24;
+ margin-bottom: deprecated.$s-24;
}
.modal-title {
- @include headlineMediumTypography;
+ @include deprecated.headlineMediumTypography;
color: var(--modal-title-foreground-color);
}
@@ -128,32 +128,32 @@
.modal-content,
.no-selection {
- @include bodySmallTypography;
- margin-bottom: $s-24;
+ @include deprecated.bodySmallTypography;
+ margin-bottom: deprecated.$s-24;
.modal-link {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
text-decoration: none;
cursor: pointer;
color: var(--modal-link-foreground-color);
}
.selection-header {
- @include flexRow;
- height: $s-32;
- margin-bottom: $s-4;
+ @include deprecated.flexRow;
+ height: deprecated.$s-32;
+ margin-bottom: deprecated.$s-4;
.selection-btn {
- @include buttonStyle;
+ @include deprecated.buttonStyle;
@extend .input-checkbox;
- @include flexCenter;
- height: $s-24;
- width: $s-24;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-24;
+ width: deprecated.$s-24;
padding: 0;
- margin-left: $s-16;
+ margin-left: deprecated.$s-16;
span {
@extend .checkbox-icon;
}
}
.selection-title {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-text-foreground-color);
}
}
@@ -177,67 +177,67 @@
}
}
.selection-list {
- @include flexColumn;
- max-height: $s-400;
+ @include deprecated.flexColumn;
+ max-height: deprecated.$s-400;
overflow-y: auto;
- padding-bottom: $s-12;
+ padding-bottom: deprecated.$s-12;
.selection-row {
- @include flexRow;
+ @include deprecated.flexRow;
background-color: var(--entry-background-color);
- min-height: $s-40;
- border-radius: $br-8;
+ min-height: deprecated.$s-40;
+ border-radius: deprecated.$br-8;
.selection-btn {
- @include buttonStyle;
+ @include deprecated.buttonStyle;
display: grid;
grid-template-columns: min-content auto 1fr auto auto;
align-items: center;
width: 100%;
height: 10%;
- gap: $s-8;
- padding: 0 $s-16;
+ gap: deprecated.$s-8;
+ padding: 0 deprecated.$s-16;
.checkbox-wrapper {
@extend .input-checkbox;
- @include flexCenter;
- height: $s-24;
- width: $s-24;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-24;
+ width: deprecated.$s-24;
padding: 0;
.checkobox-tick {
@extend .checkbox-icon;
}
}
.selection-name {
- @include bodyLargeTypography;
- @include textEllipsis;
+ @include deprecated.bodyLargeTypography;
+ @include deprecated.textEllipsis;
flex-grow: 1;
color: var(--modal-text-foreground-color);
text-align: start;
}
.selection-scale {
- @include bodyLargeTypography;
- @include textEllipsis;
- min-width: $s-108;
- padding: $s-12;
+ @include deprecated.bodyLargeTypography;
+ @include deprecated.textEllipsis;
+ min-width: deprecated.$s-108;
+ padding: deprecated.$s-12;
color: var(--modal-text-foreground-color);
}
.selection-extension {
- @include bodyLargeTypography;
- @include textEllipsis;
- min-width: $s-72;
- padding: $s-12;
+ @include deprecated.bodyLargeTypography;
+ @include deprecated.textEllipsis;
+ min-width: deprecated.$s-72;
+ padding: deprecated.$s-12;
color: var(--modal-text-foreground-color);
}
}
.image-wrapper {
- @include flexCenter;
- min-height: $s-32;
- min-width: $s-32;
+ @include deprecated.flexCenter;
+ min-height: deprecated.$s-32;
+ min-width: deprecated.$s-32;
background-color: var(--app-white);
- border-radius: $br-6;
+ border-radius: deprecated.$br-6;
margin: auto 0;
img,
svg {
object-fit: contain;
- max-height: $s-40;
+ max-height: deprecated.$s-40;
}
}
}
@@ -260,7 +260,7 @@
.modal-scd-msg,
.modal-subtitle,
.modal-msg {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-text-foreground-color);
}
@@ -271,27 +271,27 @@
label {
align-items: flex-start;
.modal-subtitle {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-title-foreground-color);
}
}
span {
- margin-top: $s-8;
+ margin-top: deprecated.$s-8;
}
}
.option-content {
- @include flexColumn;
- @include bodyLargeTypography;
+ @include deprecated.flexColumn;
+ @include deprecated.bodyLargeTypography;
}
.file-entry {
.file-name {
- @include flexRow;
+ @include deprecated.flexRow;
.file-icon {
- @include flexCenter;
- height: $s-16;
- width: $s-16;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-16;
+ width: deprecated.$s-16;
svg {
@extend .button-icon-small;
@@ -299,8 +299,8 @@
}
}
.file-name-label {
- @include bodyLargeTypography;
- @include textEllipsis;
+ @include deprecated.bodyLargeTypography;
+ @include deprecated.textEllipsis;
}
}
&.loading {
diff --git a/frontend/src/app/main/ui/exports/files.scss b/frontend/src/app/main/ui/exports/files.scss
index 8857bd9c0c..d6055ed184 100644
--- a/frontend/src/app/main/ui/exports/files.scss
+++ b/frontend/src/app/main/ui/exports/files.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
// EXPORT MODAL
.modal-overlay {
@@ -16,15 +16,15 @@
.modal-container {
@extend .modal-container-base;
- max-height: calc(10 * $s-80);
+ max-height: calc(10 * deprecated.$s-80);
}
.modal-header {
- margin-bottom: $s-24;
+ margin-bottom: deprecated.$s-24;
}
.modal-title {
- @include headlineMediumTypography;
+ @include deprecated.headlineMediumTypography;
color: var(--modal-title-foreground-color);
}
@@ -33,32 +33,32 @@
}
.modal-content {
- @include bodySmallTypography;
- margin-bottom: $s-24;
+ @include deprecated.bodySmallTypography;
+ margin-bottom: deprecated.$s-24;
.modal-link {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
text-decoration: none;
cursor: pointer;
color: var(--modal-link-foreground-color);
}
.selection-header {
- @include flexRow;
- height: $s-32;
- margin-bottom: $s-4;
+ @include deprecated.flexRow;
+ height: deprecated.$s-32;
+ margin-bottom: deprecated.$s-4;
.selection-btn {
- @include buttonStyle;
+ @include deprecated.buttonStyle;
@extend .input-checkbox;
- @include flexCenter;
- height: $s-24;
- width: $s-24;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-24;
+ width: deprecated.$s-24;
padding: 0;
- margin-left: $s-16;
+ margin-left: deprecated.$s-16;
span {
@extend .checkbox-icon;
}
}
.selection-title {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-text-foreground-color);
}
}
@@ -82,67 +82,67 @@
}
}
.selection-list {
- @include flexColumn;
- max-height: $s-400;
+ @include deprecated.flexColumn;
+ max-height: deprecated.$s-400;
overflow-y: auto;
- padding-bottom: $s-12;
+ padding-bottom: deprecated.$s-12;
.selection-row {
- @include flexRow;
+ @include deprecated.flexRow;
background-color: var(--entry-background-color);
- min-height: $s-40;
- border-radius: $br-8;
+ min-height: deprecated.$s-40;
+ border-radius: deprecated.$br-8;
.selection-btn {
- @include buttonStyle;
+ @include deprecated.buttonStyle;
display: grid;
grid-template-columns: min-content auto 1fr auto auto;
align-items: center;
width: 100%;
height: 10%;
- gap: $s-8;
- padding: 0 $s-16;
+ gap: deprecated.$s-8;
+ padding: 0 deprecated.$s-16;
.checkbox-wrapper {
@extend .input-checkbox;
- @include flexCenter;
- height: $s-24;
- width: $s-24;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-24;
+ width: deprecated.$s-24;
padding: 0;
.checkobox-tick {
@extend .checkbox-icon;
}
}
.selection-name {
- @include bodyLargeTypography;
- @include textEllipsis;
+ @include deprecated.bodyLargeTypography;
+ @include deprecated.textEllipsis;
flex-grow: 1;
color: var(--modal-text-foreground-color);
text-align: start;
}
.selection-scale {
- @include bodyLargeTypography;
- @include textEllipsis;
- min-width: $s-108;
- padding: $s-12;
+ @include deprecated.bodyLargeTypography;
+ @include deprecated.textEllipsis;
+ min-width: deprecated.$s-108;
+ padding: deprecated.$s-12;
color: var(--modal-text-foreground-color);
}
.selection-extension {
- @include bodyLargeTypography;
- @include textEllipsis;
- min-width: $s-72;
- padding: $s-12;
+ @include deprecated.bodyLargeTypography;
+ @include deprecated.textEllipsis;
+ min-width: deprecated.$s-72;
+ padding: deprecated.$s-12;
color: var(--modal-text-foreground-color);
}
}
.image-wrapper {
- @include flexCenter;
- min-height: $s-32;
- min-width: $s-32;
+ @include deprecated.flexCenter;
+ min-height: deprecated.$s-32;
+ min-width: deprecated.$s-32;
background-color: var(--app-white);
- border-radius: $br-6;
+ border-radius: deprecated.$br-6;
margin: auto 0;
img,
svg {
object-fit: contain;
- max-height: $s-40;
+ max-height: deprecated.$s-40;
}
}
}
@@ -165,7 +165,7 @@
.modal-scd-msg,
.modal-subtitle,
.modal-msg {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-text-foreground-color);
}
@@ -176,29 +176,29 @@
label {
align-items: flex-start;
.modal-subtitle {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-title-foreground-color);
padding: 0.25rem 0;
}
}
span {
- margin-top: $s-8;
+ margin-top: deprecated.$s-8;
}
}
.option-content {
- @include flexColumn;
- @include bodyLargeTypography;
+ @include deprecated.flexColumn;
+ @include deprecated.bodyLargeTypography;
}
.file-entry {
.file-name {
- @include flexRow;
+ @include deprecated.flexRow;
.file-icon {
- @include flexCenter;
- height: $s-16;
- width: $s-16;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-16;
+ width: deprecated.$s-16;
svg {
@extend .button-icon-small;
@@ -206,8 +206,8 @@
}
}
.file-name-label {
- @include bodyLargeTypography;
- @include textEllipsis;
+ @include deprecated.bodyLargeTypography;
+ @include deprecated.textEllipsis;
}
}
&.loading {
diff --git a/frontend/src/app/main/ui/hooks.cljs b/frontend/src/app/main/ui/hooks.cljs
index bfc2399d2a..a7ba644c8c 100644
--- a/frontend/src/app/main/ui/hooks.cljs
+++ b/frontend/src/app/main/ui/hooks.cljs
@@ -65,10 +65,10 @@
(def sortable-ctx (mf/create-context nil))
-(mf/defc sortable-container
- [{:keys [children] :as props}]
+(mf/defc sortable-container*
+ [{:keys [children]}]
(let [global-drag-end (mf/use-memo #(rx/subject))]
- [:& (mf/provider sortable-ctx) {:value global-drag-end}
+ [:> (mf/provider sortable-ctx) {:value global-drag-end}
children]))
diff --git a/frontend/src/app/main/ui/icons.cljs b/frontend/src/app/main/ui/icons.cljs
index 665f5b6eb1..3acb7238cb 100644
--- a/frontend/src/app/main/ui/icons.cljs
+++ b/frontend/src/app/main/ui/icons.cljs
@@ -107,6 +107,7 @@
(def ^:icon document (icon-xref :document))
(def ^:icon download (icon-xref :download))
(def ^:icon drop-icon (icon-xref :drop))
+(def ^:icon drop-shadow (icon-xref :drop-shadow))
(def ^:icon easing-ease-in-out (icon-xref :easing-ease-in-out))
(def ^:icon easing-ease-in (icon-xref :easing-ease-in))
(def ^:icon easing-ease-out (icon-xref :easing-ease-out))
@@ -149,6 +150,7 @@
(def ^:icon hug-content (icon-xref :hug-content))
(def ^:icon icon (icon-xref :icon))
(def ^:icon img (icon-xref :img))
+(def ^:icon inner-shadow (icon-xref :inner-shadow))
(def ^:icon interaction (icon-xref :interaction))
(def ^:icon join-nodes (icon-xref :join-nodes))
(def ^:icon justify-content-column-around (icon-xref :justify-content-column-around))
@@ -260,6 +262,7 @@
(def ^:icon text-uppercase (icon-xref :text-uppercase))
(def ^:icon thumbnail (icon-xref :thumbnail))
(def ^:icon tick (icon-xref :tick))
+(def ^:icon tokens (icon-xref :tokens))
(def ^:icon to-corner (icon-xref :to-corner))
(def ^:icon to-curve (icon-xref :to-curve))
(def ^:icon tree (icon-xref :tree))
diff --git a/frontend/src/app/main/ui/inspect/annotation.scss b/frontend/src/app/main/ui/inspect/annotation.scss
index 27d27c61c2..431754d330 100644
--- a/frontend/src/app/main/ui/inspect/annotation.scss
+++ b/frontend/src/app/main/ui/inspect/annotation.scss
@@ -4,10 +4,10 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.attributes-block {
- @include flexColumn;
+ @include deprecated.flexColumn;
}
.title-spacing-annotation {
@@ -15,10 +15,10 @@
}
.annotation-content {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--entry-foreground-color);
}
.copy-btn-title {
- max-width: $s-28;
+ max-width: deprecated.$s-28;
}
diff --git a/frontend/src/app/main/ui/inspect/attributes.scss b/frontend/src/app/main/ui/inspect/attributes.scss
index ddd279ff2b..b20d543d20 100644
--- a/frontend/src/app/main/ui/inspect/attributes.scss
+++ b/frontend/src/app/main/ui/inspect/attributes.scss
@@ -4,21 +4,21 @@
//
// Copyright (c) KALEIDOS INC
-@use "../ds/_sizes.scss" as *;
-@import "refactor/common-refactor.scss";
+@use "ds/_sizes.scss" as *;
+@use "ds/_utils.scss" as *;
.element-options {
display: flex;
flex-direction: column;
- gap: $s-16;
+ gap: var(--sp-l);
width: 100%;
- height: calc(100vh - #{$s-128}); // TODO: Fix this hardcoded value
- padding-top: $s-8;
+ height: calc(100vh - px2rem(128)); // TODO: Fix this hardcoded value
+ padding-top: var(--sp-s);
overflow-y: auto;
overflow-x: hidden;
scrollbar-gutter: stable;
}
.workspace-element-options {
- height: calc(100vh - #{$sz-200}); // TODO: Fix this hardcoded value
+ height: calc(100vh - px2rem(200)); // TODO: Fix this hardcoded value
}
diff --git a/frontend/src/app/main/ui/inspect/attributes/blur.scss b/frontend/src/app/main/ui/inspect/attributes/blur.scss
index a3f2dc334e..736ab135c9 100644
--- a/frontend/src/app/main/ui/inspect/attributes/blur.scss
+++ b/frontend/src/app/main/ui/inspect/attributes/blur.scss
@@ -4,10 +4,10 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.attributes-block {
- @include flexColumn;
+ @include deprecated.flexColumn;
}
.title-spacing-blur {
@@ -23,5 +23,5 @@
}
.copy-btn-title {
- max-width: $s-28;
+ max-width: deprecated.$s-28;
}
diff --git a/frontend/src/app/main/ui/inspect/attributes/common.cljs b/frontend/src/app/main/ui/inspect/attributes/common.cljs
index f1311884f2..a943818a52 100644
--- a/frontend/src/app/main/ui/inspect/attributes/common.cljs
+++ b/frontend/src/app/main/ui/inspect/attributes/common.cljs
@@ -13,36 +13,15 @@
[app.common.types.color :as cc]
[app.config :as cf]
[app.main.refs :as refs]
- [app.main.store :as st]
[app.main.ui.components.color-bullet :as cb]
[app.main.ui.components.copy-button :refer [copy-button*]]
[app.main.ui.components.select :refer [select]]
[app.main.ui.formats :as fmt]
+ [app.main.ui.inspect.common.colors :as isc]
[app.util.i18n :refer [tr]]
[cuerdas.core :as str]
- [okulary.core :as l]
[rumext.v2 :as mf]))
-(def file-colors-ref
- (l/derived (l/in [:viewer :file :data :colors]) st/state))
-
-(defn make-colors-library-ref
- [libraries-place file-id]
- (let [get-library
- (fn [state]
- (get-in state [libraries-place file-id :data :colors]))]
- (l/derived get-library st/state)))
-
-(defn- use-colors-library
- [{:keys [ref-file] :as color}]
- (let [library (mf/with-memo [ref-file]
- (make-colors-library-ref :files ref-file))]
- (mf/deref library)))
-
-;; FIXME: this breaks react hooks rule (broken code)
-(defn- get-file-colors []
- (or (mf/deref file-colors-ref) (mf/deref refs/workspace-file-colors)))
-
(defn get-css-rule-humanized [property]
(as-> property $
(d/name $)
@@ -51,8 +30,10 @@
(str/capital $)))
(mf/defc color-row [{:keys [color format copy-data on-change-format]}]
- (let [colors-library (use-colors-library color)
- file-colors (get-file-colors)
+ (let [colors-library (isc/use-colors-library color)
+ file-colors-ref (mf/deref isc/file-colors-ref)
+ file-colors-wokspace (mf/deref refs/workspace-file-colors)
+ file-colors (or file-colors-ref file-colors-wokspace)
color-library-name (get-in (or colors-library file-colors) [(:ref-id color) :name])
color (assoc color :name color-library-name)
image (:image color)]
diff --git a/frontend/src/app/main/ui/inspect/attributes/common.scss b/frontend/src/app/main/ui/inspect/attributes/common.scss
index 5ea1fdf411..305c396489 100644
--- a/frontend/src/app/main/ui/inspect/attributes/common.scss
+++ b/frontend/src/app/main/ui/inspect/attributes/common.scss
@@ -4,67 +4,67 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.attributes-image-as-color-row {
- max-width: $s-240;
+ max-width: deprecated.$s-240;
}
.attributes-color-row {
display: grid;
- grid-template-columns: $s-16 $s-72 $s-144;
- gap: $s-4;
+ grid-template-columns: deprecated.$s-16 deprecated.$s-72 deprecated.$s-144;
+ gap: deprecated.$s-4;
}
.bullet-wrapper {
- @include flexCenter;
- height: $s-32;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-32;
}
.format-wrapper {
- width: $s-72;
- height: $s-32;
+ width: deprecated.$s-72;
+ height: deprecated.$s-32;
}
.image-format {
- @include uppercaseTitleTipography;
- height: $s-32;
- padding: $s-8 0;
+ @include deprecated.uppercaseTitleTipography;
+ height: deprecated.$s-32;
+ padding: deprecated.$s-8 0;
color: var(--menu-foreground-color-rest);
}
.select-format-wrapper {
width: 100%;
- padding: $s-8 $s-2;
+ padding: deprecated.$s-8 deprecated.$s-2;
background-color: transparent;
border-color: transparent;
color: var(--menu-foreground-color-rest);
}
.format-info {
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
display: flex;
align-items: center;
width: 100%;
height: 100%;
- padding-left: $s-2;
- font-size: $fs-12;
+ padding-left: deprecated.$s-2;
+ font-size: deprecated.$fs-12;
color: var(--menu-foreground-color-rest);
}
.color-row-copy-btn {
- max-width: $s-144;
+ max-width: deprecated.$s-144;
}
.color-info {
display: flex;
align-items: flex-start;
- gap: $s-4;
+ gap: deprecated.$s-4;
flex-grow: 1;
- max-width: $s-144;
+ max-width: deprecated.$s-144;
button {
visibility: hidden;
- min-width: $s-28;
+ min-width: deprecated.$s-28;
}
&:hover button {
visibility: visible;
@@ -72,32 +72,32 @@
}
.one-line {
- max-height: $s-32;
+ max-height: deprecated.$s-32;
}
.two-line {
display: grid;
grid-template-rows: auto 1fr;
- gap: $s-4;
+ gap: deprecated.$s-4;
}
.color-name-wrapper {
- @include bodySmallTypography;
- @include flexColumn;
- padding: $s-8 $s-4 $s-8 $s-8;
- height: $s-32;
- max-width: $s-80;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.flexColumn;
+ padding: deprecated.$s-8 deprecated.$s-4 deprecated.$s-8 deprecated.$s-8;
+ height: deprecated.$s-32;
+ max-width: deprecated.$s-80;
}
.opacity-info {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--menu-foreground-color);
- padding: $s-8 0;
+ padding: deprecated.$s-8 0;
}
.first-row {
display: grid;
- grid-template-columns: 1fr $s-28;
+ grid-template-columns: 1fr deprecated.$s-28;
height: fit-content;
width: 100%;
padding: 0;
@@ -107,14 +107,14 @@
.name-opacity {
height: fit-content;
width: 100%;
- line-height: $s-16;
+ line-height: deprecated.$s-16;
display: grid;
grid-template-columns: 1fr auto;
}
.color-value-wrapper {
- @include textEllipsis;
- @include inspectValue;
+ @include deprecated.textEllipsis;
+ @include deprecated.inspectValue;
text-transform: uppercase;
&.gradient-name {
text-transform: none;
@@ -122,14 +122,14 @@
}
.opacity-info {
- @include inspectValue;
+ @include deprecated.inspectValue;
text-transform: uppercase;
width: 100%;
}
.second-row {
- min-height: $s-16;
- padding-right: $s-8;
+ min-height: deprecated.$s-16;
+ padding-right: deprecated.$s-8;
width: 100%;
text-align: left;
margin: 0;
@@ -137,7 +137,7 @@
}
.color-name-library {
- @include inspectValue;
+ @include deprecated.inspectValue;
color: var(--menu-foreground-color-rest);
word-break: break-word;
}
@@ -148,22 +148,22 @@
.download-button {
@extend .button-secondary;
- @include uppercaseTitleTipography;
- height: $s-32;
+ @include deprecated.uppercaseTitleTipography;
+ height: deprecated.$s-32;
width: 100%;
- margin-top: $s-4;
+ margin-top: deprecated.$s-4;
}
.image-wrapper {
background-color: var(--menu-background-color);
position: relative;
- @include flexCenter;
- width: $s-240;
- height: $s-160;
- max-height: $s-160;
- max-width: $s-248;
- margin: $s-8 0;
- border-radius: $br-8;
+ @include deprecated.flexCenter;
+ width: deprecated.$s-240;
+ height: deprecated.$s-160;
+ max-height: deprecated.$s-160;
+ max-width: deprecated.$s-248;
+ margin: deprecated.$s-8 0;
+ border-radius: deprecated.$br-8;
img {
height: 100%;
diff --git a/frontend/src/app/main/ui/inspect/attributes/fill.scss b/frontend/src/app/main/ui/inspect/attributes/fill.scss
index 9515dad3ee..c55c401b98 100644
--- a/frontend/src/app/main/ui/inspect/attributes/fill.scss
+++ b/frontend/src/app/main/ui/inspect/attributes/fill.scss
@@ -4,10 +4,10 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.attributes-block {
- @include flexColumn;
+ @include deprecated.flexColumn;
}
.title-spacing-fill {
@@ -16,5 +16,5 @@
.attributes-content {
display: grid;
- gap: $s-4;
+ gap: deprecated.$s-4;
}
diff --git a/frontend/src/app/main/ui/inspect/attributes/geometry.scss b/frontend/src/app/main/ui/inspect/attributes/geometry.scss
index b32c0c1031..dd002ce5e6 100644
--- a/frontend/src/app/main/ui/inspect/attributes/geometry.scss
+++ b/frontend/src/app/main/ui/inspect/attributes/geometry.scss
@@ -4,10 +4,10 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.attributes-block {
- @include flexColumn;
+ @include deprecated.flexColumn;
}
.title-spacing-geometry {
@@ -23,5 +23,5 @@
}
.copy-btn-title {
- max-width: $s-28;
+ max-width: deprecated.$s-28;
}
diff --git a/frontend/src/app/main/ui/inspect/attributes/layout.cljs b/frontend/src/app/main/ui/inspect/attributes/layout.cljs
index 6a697f2425..545efdc9fa 100644
--- a/frontend/src/app/main/ui/inspect/attributes/layout.cljs
+++ b/frontend/src/app/main/ui/inspect/attributes/layout.cljs
@@ -29,7 +29,10 @@
:row-gap
:column-gap
:gap
- :padding])
+ :padding-inline-start
+ :padding-inline-end
+ :padding-block-start
+ :padding-block-end])
(mf/defc layout-block
[{:keys [objects shape]}]
diff --git a/frontend/src/app/main/ui/inspect/attributes/layout.scss b/frontend/src/app/main/ui/inspect/attributes/layout.scss
index 8a84e1d988..0eb1b64168 100644
--- a/frontend/src/app/main/ui/inspect/attributes/layout.scss
+++ b/frontend/src/app/main/ui/inspect/attributes/layout.scss
@@ -4,10 +4,10 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.attributes-block {
- @include flexColumn;
+ @include deprecated.flexColumn;
}
.title-spacing-layout {
@@ -23,5 +23,5 @@
}
.copy-btn-title {
- max-width: $s-28;
+ max-width: deprecated.$s-28;
}
diff --git a/frontend/src/app/main/ui/inspect/attributes/layout_element.scss b/frontend/src/app/main/ui/inspect/attributes/layout_element.scss
index 56b174dd58..7f32cca1a1 100644
--- a/frontend/src/app/main/ui/inspect/attributes/layout_element.scss
+++ b/frontend/src/app/main/ui/inspect/attributes/layout_element.scss
@@ -4,10 +4,10 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.attributes-block {
- @include flexColumn;
+ @include deprecated.flexColumn;
}
.title-spacing-layout-element {
@@ -23,5 +23,5 @@
}
.copy-btn-title {
- max-width: $s-28;
+ max-width: deprecated.$s-28;
}
diff --git a/frontend/src/app/main/ui/inspect/attributes/shadow.cljs b/frontend/src/app/main/ui/inspect/attributes/shadow.cljs
index ebda4bcd3b..9a1ee8fd4f 100644
--- a/frontend/src/app/main/ui/inspect/attributes/shadow.cljs
+++ b/frontend/src/app/main/ui/inspect/attributes/shadow.cljs
@@ -13,7 +13,7 @@
[app.main.ui.components.title-bar :refer [inspect-title-bar*]]
[app.main.ui.inspect.attributes.common :refer [color-row]]
[app.util.code-gen.style-css :as css]
- [app.util.code-gen.style-css-formats :refer [format-color]]
+ [app.util.code-gen.style-css-formats :refer [format-color-value]]
[app.util.i18n :refer [tr]]
[rumext.v2 :as mf]))
@@ -26,7 +26,7 @@
(defn- copy-color-data
"Converts a fill object to CSS color string in the specified format."
[color format]
- (format-color color {:format format}))
+ (format-color-value color {:format format}))
(mf/defc shadow-block [{:keys [shadow]}]
(let [color-format (mf/use-state :hex)
diff --git a/frontend/src/app/main/ui/inspect/attributes/shadow.scss b/frontend/src/app/main/ui/inspect/attributes/shadow.scss
index 1d741ab26e..106cb03bca 100644
--- a/frontend/src/app/main/ui/inspect/attributes/shadow.scss
+++ b/frontend/src/app/main/ui/inspect/attributes/shadow.scss
@@ -4,10 +4,10 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.attributes-block {
- @include flexColumn;
+ @include deprecated.flexColumn;
}
.title-spacing-shadow {
diff --git a/frontend/src/app/main/ui/inspect/attributes/stroke.scss b/frontend/src/app/main/ui/inspect/attributes/stroke.scss
index fe0f59df43..a83ad6cfea 100644
--- a/frontend/src/app/main/ui/inspect/attributes/stroke.scss
+++ b/frontend/src/app/main/ui/inspect/attributes/stroke.scss
@@ -4,10 +4,10 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.attributes-block {
- @include flexColumn;
+ @include deprecated.flexColumn;
}
.title-spacing-stroke {
@@ -15,7 +15,7 @@
}
.attributes-stroke-block {
- @include flexColumn;
+ @include deprecated.flexColumn;
}
.stroke-row {
@@ -28,5 +28,5 @@
.attributes-content {
display: grid;
- gap: $s-4;
+ gap: deprecated.$s-4;
}
diff --git a/frontend/src/app/main/ui/inspect/attributes/svg.scss b/frontend/src/app/main/ui/inspect/attributes/svg.scss
index 1ad6d6a8fc..41846547dc 100644
--- a/frontend/src/app/main/ui/inspect/attributes/svg.scss
+++ b/frontend/src/app/main/ui/inspect/attributes/svg.scss
@@ -4,10 +4,10 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.attributes-block {
- @include flexColumn;
+ @include deprecated.flexColumn;
}
.title-spacing-svg {
@@ -23,12 +23,12 @@
}
.attributes-subtitle {
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
display: flex;
justify-content: space-between;
- height: $s-32;
+ height: deprecated.$s-32;
span {
- height: $s-32;
+ height: deprecated.$s-32;
display: flex;
align-items: center;
}
diff --git a/frontend/src/app/main/ui/inspect/attributes/text.cljs b/frontend/src/app/main/ui/inspect/attributes/text.cljs
index b843f1bd08..0736babeba 100644
--- a/frontend/src/app/main/ui/inspect/attributes/text.cljs
+++ b/frontend/src/app/main/ui/inspect/attributes/text.cljs
@@ -83,7 +83,7 @@
(when (:font-id style)
[:div {:class (stl/css :text-row)}
- [:div {:class (stl/css :global/attr-label)} (tr "inspect.attributes.typography.font-family")]
+ [:div {:class (stl/css :global/attr-label)} "Font Family"]
[:div {:class (stl/css :global/attr-value)}
[:> copy-button* {:data (copy-style-data style :font-family)}
[:div {:class (stl/css :button-children)}
@@ -91,8 +91,7 @@
(when (:font-style style)
[:div {:class (stl/css :text-row)}
- [:div {:class (stl/css :global/attr-label)}
- (tr "inspect.attributes.typography.font-style")]
+ [:div {:class (stl/css :global/attr-label)} "Font Style"]
[:div {:class (stl/css :global/attr-value)}
[:> copy-button* {:data (copy-style-data style :font-style)}
[:div {:class (stl/css :button-children)}
@@ -100,8 +99,7 @@
(when (:font-size style)
[:div {:class (stl/css :text-row)}
- [:div {:class (stl/css :global/attr-label)}
- (tr "inspect.attributes.typography.font-size")]
+ [:div {:class (stl/css :global/attr-label)} "Font Size"]
[:div {:class (stl/css :global/attr-value)}
[:> copy-button* {:data (copy-style-data (assoc style :font-size (fmt/format-pixels (:font-size style))) :font-size)}
[:div {:class (stl/css :button-children)}
@@ -109,8 +107,7 @@
(when (:font-weight style)
[:div {:class (stl/css :text-row)}
- [:div {:class (stl/css :global/attr-label)}
- (tr "inspect.attributes.typography.font-weight")]
+ [:div {:class (stl/css :global/attr-label)} "Font Weight"]
[:div {:class (stl/css :global/attr-value)}
[:> copy-button* {:data (copy-style-data style :font-weight)}
[:div {:class (stl/css :button-children)}
@@ -118,8 +115,7 @@
(when (:line-height style)
[:div {:class (stl/css :text-row)}
- [:div {:class (stl/css :global/attr-label)}
- (tr "inspect.attributes.typography.line-height")]
+ [:div {:class (stl/css :global/attr-label)} "Line Height"]
[:div {:class (stl/css :global/attr-value)}
[:> copy-button* {:data (copy-style-data style :line-height)}
[:div {:class (stl/css :button-children)}
@@ -127,8 +123,7 @@
(when (:letter-spacing style)
[:div {:class (stl/css :text-row)}
- [:div {:class (stl/css :global/attr-label)}
- (tr "inspect.attributes.typography.letter-spacing")]
+ [:div {:class (stl/css :global/attr-label)} "Letter Spacing"]
[:div {:class (stl/css :global/attr-value)}
[:> copy-button* {:data (copy-style-data style :letter-spacing)}
[:div {:class (stl/css :button-children)}
@@ -136,8 +131,7 @@
(when (:text-decoration style)
[:div {:class (stl/css :text-row)}
- [:div {:class (stl/css :global/attr-label)}
- (tr "inspect.attributes.typography.text-decoration")]
+ [:div {:class (stl/css :global/attr-label)} "Text Decoration"]
;; Execution time translation strings:
;; (tr "inspect.attributes.typography.text-decoration.none")
;; (tr "inspect.attributes.typography.text-decoration.strikethrough")
@@ -149,8 +143,7 @@
(when (:text-transform style)
[:div {:class (stl/css :text-row)}
- [:div {:class (stl/css :global/attr-label)}
- (tr "inspect.attributes.typography.text-transform")]
+ [:div {:class (stl/css :global/attr-label)} "Text Transform"]
;; Execution time translation strings:
;; (tr "inspect.attributes.typography.text-transform.lowercase")
;; (tr "inspect.attributes.typography.text-transform.none")
diff --git a/frontend/src/app/main/ui/inspect/attributes/text.scss b/frontend/src/app/main/ui/inspect/attributes/text.scss
index 5c5a74a534..54bc1e8095 100644
--- a/frontend/src/app/main/ui/inspect/attributes/text.scss
+++ b/frontend/src/app/main/ui/inspect/attributes/text.scss
@@ -4,10 +4,10 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.attributes-block {
- @include flexColumn;
+ @include deprecated.flexColumn;
}
.title-spacing-text {
@@ -15,13 +15,13 @@
}
.attributes-content {
- @include flexColumn;
+ @include deprecated.flexColumn;
}
.text-row {
@extend .attr-row;
height: unset;
- min-height: $s-32;
+ min-height: deprecated.$s-32;
:global(.attr-value) {
align-items: center;
}
@@ -32,20 +32,20 @@
}
.attributes-content-row {
- max-width: $s-240;
- min-height: calc($s-2 + $s-32);
- border-radius: $br-8;
- border: $s-1 solid var(--menu-border-color-disabled);
- margin-top: $s-4;
+ max-width: deprecated.$s-240;
+ min-height: calc(deprecated.$s-2 + deprecated.$s-32);
+ border-radius: deprecated.$br-8;
+ border: deprecated.$s-1 solid var(--menu-border-color-disabled);
+ margin-top: deprecated.$s-4;
.content {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
width: 100%;
- padding: $s-4 0;
+ padding: deprecated.$s-4 0;
color: var(--color-foreground-secondary);
}
&:hover {
- border: $s-1 solid var(--color-background-tertiary);
+ border: deprecated.$s-1 solid var(--color-background-tertiary);
background-color: var(--menu-background-color);
.content {
color: var(--menu-foreground-color-hover);
diff --git a/frontend/src/app/main/ui/inspect/attributes/variant.scss b/frontend/src/app/main/ui/inspect/attributes/variant.scss
index ef8af2983d..7478fae373 100644
--- a/frontend/src/app/main/ui/inspect/attributes/variant.scss
+++ b/frontend/src/app/main/ui/inspect/attributes/variant.scss
@@ -4,10 +4,10 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.attributes-block {
- @include flexColumn;
+ @include deprecated.flexColumn;
}
.title-spacing-variant {
diff --git a/frontend/src/app/main/ui/inspect/attributes/visibility.scss b/frontend/src/app/main/ui/inspect/attributes/visibility.scss
index df8d00a876..d76c906b18 100644
--- a/frontend/src/app/main/ui/inspect/attributes/visibility.scss
+++ b/frontend/src/app/main/ui/inspect/attributes/visibility.scss
@@ -4,10 +4,10 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.attributes-block {
- @include flexColumn;
+ @include deprecated.flexColumn;
}
.title-spacing-visibility {
@@ -23,5 +23,5 @@
}
.copy-btn-title {
- max-width: $s-28;
+ max-width: deprecated.$s-28;
}
diff --git a/frontend/src/app/main/ui/inspect/code.scss b/frontend/src/app/main/ui/inspect/code.scss
index 341f269991..c0fa8bab75 100644
--- a/frontend/src/app/main/ui/inspect/code.scss
+++ b/frontend/src/app/main/ui/inspect/code.scss
@@ -4,42 +4,42 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.element-options {
display: flex;
flex-direction: column;
- height: calc(100vh - #{$s-160}); // TODO: Fix this hardcoded value
+ height: calc(100vh - #{deprecated.$s-160}); // TODO: Fix this hardcoded value
overflow: hidden;
- padding-bottom: $s-16;
+ padding-bottom: deprecated.$s-16;
overflow-y: auto;
overflow-x: hidden;
scrollbar-gutter: stable;
}
.viewer-code-block {
- height: calc(100vh - #{$s-108}); // TODO: Fix this hardcoded value
+ height: calc(100vh - #{deprecated.$s-108}); // TODO: Fix this hardcoded value
}
.download-button {
@extend .button-secondary;
- @include uppercaseTitleTipography;
- height: $s-32;
+ @include deprecated.uppercaseTitleTipography;
+ height: deprecated.$s-32;
width: 100%;
- margin: $s-8 0;
+ margin: deprecated.$s-8 0;
}
.code-block {
- @include codeTypography;
+ @include deprecated.codeTypography;
display: flex;
flex-direction: column;
height: 100%;
min-height: 0;
- padding: 0 $s-4 $s-8 0;
+ padding: 0 deprecated.$s-4 deprecated.$s-8 0;
pre {
- border-radius: $br-8;
- padding: $s-16;
+ border-radius: deprecated.$br-8;
+ padding: deprecated.$s-16;
overflow: auto;
height: 100%;
}
@@ -56,13 +56,13 @@
.code-row-lang {
display: grid;
- grid-template-columns: $s-12 1fr $s-60;
- gap: $s-4;
+ grid-template-columns: deprecated.$s-12 1fr deprecated.$s-60;
+ gap: deprecated.$s-4;
width: 100%;
}
.code-lang {
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
display: flex;
align-items: center;
}
@@ -70,15 +70,15 @@
.action-btns {
display: grid;
grid-template-columns: 1fr 1fr;
- gap: $s-4;
+ gap: deprecated.$s-4;
}
.expand-button,
.css-copy-btn,
.html-copy-btn {
@extend .button-tertiary;
- height: $s-32;
- width: $s-28;
+ height: deprecated.$s-32;
+ width: deprecated.$s-28;
svg {
@extend .button-icon;
stroke: var(--icon-foreground);
@@ -86,20 +86,20 @@
}
.code-lang-options {
- max-width: $s-108;
+ max-width: deprecated.$s-108;
}
.code-lang-select {
- @include uppercaseTitleTipography;
- width: $s-72;
- border: $s-1 solid transparent;
+ @include deprecated.uppercaseTitleTipography;
+ width: deprecated.$s-72;
+ border: deprecated.$s-1 solid transparent;
background-color: transparent;
color: var(--menu-foreground-color-disabled);
}
.code-lang-option {
- @include uppercaseTitleTipography;
- width: $s-72;
- height: $s-32;
- padding: $s-8;
+ @include deprecated.uppercaseTitleTipography;
+ width: deprecated.$s-72;
+ height: deprecated.$s-32;
+ padding: deprecated.$s-8;
color: var(--menu-foreground-color-disabled);
}
@@ -107,20 +107,20 @@
flex: 1;
min-height: 0;
overflow: hidden;
- padding-bottom: $s-8;
+ padding-bottom: deprecated.$s-8;
}
.toggle-btn {
- @include buttonStyle;
+ @include deprecated.buttonStyle;
display: flex;
align-items: center;
padding: 0;
color: var(--title-foreground-color);
stroke: var(--title-foreground-color);
.collapsabled-icon {
- @include flexCenter;
- height: $s-24;
- border-radius: $br-8;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-24;
+ border-radius: deprecated.$br-8;
svg {
@extend .button-icon-small;
transform: rotate(90deg);
diff --git a/frontend/src/app/main/ui/inspect/common/colors.cljs b/frontend/src/app/main/ui/inspect/common/colors.cljs
new file mode 100644
index 0000000000..43b834ebfd
--- /dev/null
+++ b/frontend/src/app/main/ui/inspect/common/colors.cljs
@@ -0,0 +1,27 @@
+;; 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.inspect.common.colors
+ (:require
+ [app.main.store :as st]
+ [okulary.core :as l]
+ [rumext.v2 :as mf]))
+
+(def file-colors-ref
+ (l/derived (l/in [:viewer :file :data :colors]) st/state))
+
+(defn make-colors-library-ref
+ [libraries-place file-id]
+ (let [get-library
+ (fn [state]
+ (get-in state [libraries-place file-id :data :colors]))]
+ (l/derived get-library st/state)))
+
+(defn use-colors-library
+ [{:keys [ref-file] :as color}]
+ (let [library (mf/with-memo [ref-file]
+ (make-colors-library-ref :files ref-file))]
+ (mf/deref library)))
diff --git a/frontend/src/app/main/ui/inspect/exports.scss b/frontend/src/app/main/ui/inspect/exports.scss
index 1b3b7aa4f6..4ca98720a8 100644
--- a/frontend/src/app/main/ui/inspect/exports.scss
+++ b/frontend/src/app/main/ui/inspect/exports.scss
@@ -4,10 +4,10 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.element-set {
- padding-bottom: $s-16;
+ padding-bottom: deprecated.$s-16;
margin: 0;
}
@@ -18,14 +18,14 @@
.title-spacing-export-viewer {
margin: 0;
color: var(--entry-foreground-color-hover);
- margin-inline-start: calc(-1 * $s-8);
- width: calc(100% + $s-8);
+ margin-inline-start: calc(-1 * deprecated.$s-8);
+ width: calc(100% + deprecated.$s-8);
}
.add-export {
@extend .button-tertiary;
- height: $s-32;
- width: $s-28;
+ height: deprecated.$s-32;
+ width: deprecated.$s-28;
svg {
@extend .button-icon;
stroke: var(--icon-foreground);
@@ -33,12 +33,12 @@
}
.element-set-content {
- @include flexColumn;
- margin-bottom: $s-4;
+ @include deprecated.flexColumn;
+ margin-bottom: deprecated.$s-4;
}
.multiple-exports {
- @include flexRow;
+ @include deprecated.flexRow;
grid-column: 1 / span 9;
}
@@ -47,17 +47,17 @@
}
.actions {
- @include flexRow;
+ @include deprecated.flexRow;
}
.element-group {
display: grid;
grid-template-columns: repeat(9, 1fr);
- column-gap: $s-4;
+ column-gap: deprecated.$s-4;
.action-btn {
@extend .button-tertiary;
- height: $s-32;
- width: $s-28;
+ height: deprecated.$s-32;
+ width: deprecated.$s-28;
svg {
@extend .button-icon;
}
@@ -75,8 +75,8 @@
padding: 0;
.dropdown-upwards {
- bottom: $s-36;
- width: $s-80;
+ bottom: deprecated.$s-36;
+ width: deprecated.$s-80;
top: unset;
}
}
@@ -85,21 +85,21 @@
grid-column: span 2;
padding: 0;
.dropdown-upwards {
- bottom: $s-36;
+ bottom: deprecated.$s-36;
top: unset;
- width: $s-80;
+ width: deprecated.$s-80;
}
}
.suffix-input {
@extend .input-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
grid-column: span 3;
}
.export-btn {
@extend .button-secondary;
- @include uppercaseTitleTipography;
- height: $s-32;
+ @include deprecated.uppercaseTitleTipography;
+ height: deprecated.$s-32;
width: 100%;
}
diff --git a/frontend/src/app/main/ui/inspect/left_sidebar.scss b/frontend/src/app/main/ui/inspect/left_sidebar.scss
index 503b80907e..a5b9247b1e 100644
--- a/frontend/src/app/main/ui/inspect/left_sidebar.scss
+++ b/frontend/src/app/main/ui/inspect/left_sidebar.scss
@@ -4,19 +4,19 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
.settings-bar-left {
background-color: var(--panel-background-color);
height: 100%;
- width: $s-256;
+ width: deprecated.$s-256;
}
.settings-bar-inside {
display: grid;
grid-template-columns: 100%;
grid-template-rows: 100%;
- height: calc(100% - $s-2);
+ height: calc(100% - deprecated.$s-2);
overflow-y: auto;
- padding-top: $s-8;
+ padding-top: deprecated.$s-8;
}
diff --git a/frontend/src/app/main/ui/inspect/right_sidebar.cljs b/frontend/src/app/main/ui/inspect/right_sidebar.cljs
index 9964ac6015..56f3f20999 100644
--- a/frontend/src/app/main/ui/inspect/right_sidebar.cljs
+++ b/frontend/src/app/main/ui/inspect/right_sidebar.cljs
@@ -104,7 +104,7 @@
tabs
(mf/with-memo []
(if (contains? cf/flags :inspect-styles)
- [{:label (tr "inspect.tabs.styles")
+ [{:label (tr "labels.styles")
:id "styles"}
{:label (tr "inspect.tabs.computed")
:id "computed"}
@@ -167,6 +167,7 @@
[:div {:class (stl/css :inspect-tab-switcher-controls-color-space)}
[:> select* {:options color-spaces
:default-selected "hex"
+ :variant "ghost"
:on-change handle-change-color-space}]]
[:div {:class (stl/css :inspect-tab-switcher-controls-tab)}
[:> select* {:options tabs
@@ -179,6 +180,7 @@
(case @section
:styles
[:> styles-tab* {:color-space color-space
+ :objects objects
:shapes shapes
:libraries libraries
:file-id file-id}]
diff --git a/frontend/src/app/main/ui/inspect/right_sidebar.scss b/frontend/src/app/main/ui/inspect/right_sidebar.scss
index fac452cc97..a4c3e6cf45 100644
--- a/frontend/src/app/main/ui/inspect/right_sidebar.scss
+++ b/frontend/src/app/main/ui/inspect/right_sidebar.scss
@@ -4,11 +4,12 @@
//
// Copyright (c) KALEIDOS INC
-@use "../ds/typography.scss" as *;
-@import "refactor/common-refactor.scss";
+@use "ds/typography.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
.settings-bar-right {
- min-width: $s-252;
+ min-width: deprecated.$s-252;
width: 100%;
height: 100vh;
position: relative;
@@ -18,28 +19,28 @@
overflow: hidden;
&.viewer-code {
- height: calc(100vh - $s-48);
+ height: calc(100vh - deprecated.$s-48);
}
}
.viewer-code {
- padding-inline-start: $s-8;
+ padding-inline-start: deprecated.$s-8;
}
.tool-windows {
height: 100%;
display: flex;
flex-direction: column;
- gap: $s-8;
+ gap: deprecated.$s-8;
padding-left: var(--sp-m);
}
.shape-info {
display: grid;
grid-template-columns: auto minmax(0, 1fr);
- gap: $s-8;
+ gap: deprecated.$s-8;
align-items: center;
- height: $s-32;
+ height: deprecated.$s-32;
}
.shape-info-subtitle {
@@ -49,16 +50,16 @@
.layers-icon,
.shape-icon {
- @include flexCenter;
- height: $s-32;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-32;
--icon-stroke-color: var(--color-foreground-primary);
}
.layer-title {
- @include bodySmallTypography;
- @include textEllipsis;
- height: $s-32;
- padding: $s-8 0;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.textEllipsis;
+ height: deprecated.$s-32;
+ padding: deprecated.$s-8 0;
color: var(--color-foreground-primary);
}
@@ -68,8 +69,8 @@
}
.layer-subtitle {
- @include bodySmallTypography;
- @include textEllipsis;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.textEllipsis;
color: var(--assets-item-name-foreground-color-rest);
}
@@ -77,17 +78,17 @@
display: flex;
flex-direction: column;
align-items: center;
- gap: $s-40;
- padding-top: $s-24;
+ gap: deprecated.$s-40;
+ padding-top: deprecated.$s-24;
}
.code-info,
.help-info {
- @include flexColumn;
+ @include deprecated.flexColumn;
align-items: center;
justify-content: flex-start;
- gap: $s-12;
- margin-right: $s-8;
+ gap: deprecated.$s-12;
+ margin-right: deprecated.$s-8;
}
.placeholder-icon {
@@ -95,17 +96,17 @@
}
.placeholder-label {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
text-align: center;
- width: $s-200;
+ width: deprecated.$s-200;
color: var(--empty-message-foreground-color);
}
.more-info-btn {
@extend .button-secondary;
- @include uppercaseTitleTipography;
- height: $s-32;
- padding: $s-8 $s-24;
+ @include deprecated.uppercaseTitleTipography;
+ height: deprecated.$s-32;
+ padding: deprecated.$s-8 deprecated.$s-24;
}
.inspect-tab-switcher {
@@ -130,7 +131,7 @@
}
.inspect-tab-switcher-controls-color-space {
- flex: 1;
+ flex: 1 0 $sz-24;
}
.inspect-tab-switcher-controls-tab {
@@ -145,6 +146,13 @@
.viewer-tab-switcher {
--tabs-nav-padding-inline-start: 0;
--tabs-nav-padding-inline-end: var(--sp-m);
+
+ /* same height as .element-options in workspace/sidebar/options.scss */
+ /* which is one of the parents of this component */
+ --max-inspect-tab-height: var(--sidebar-element-options-height);
+ max-block-size: var(--max-inspect-tab-height);
+
+ overflow: auto;
}
.viewer-tab-switcher-layout {
diff --git a/frontend/src/app/main/ui/inspect/styles.cljs b/frontend/src/app/main/ui/inspect/styles.cljs
index d5e68f53e7..f25d766feb 100644
--- a/frontend/src/app/main/ui/inspect/styles.cljs
+++ b/frontend/src/app/main/ui/inspect/styles.cljs
@@ -1,3 +1,9 @@
+;; 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.inspect.styles
(:require-macros [app.main.style :as stl])
(:require
@@ -5,12 +11,45 @@
[app.common.data.macros :as dm]
[app.common.types.component :as ctc]
[app.common.types.components-list :as ctkl]
+ [app.common.types.shape.layout :as ctl]
+ [app.common.types.tokens-lib :as ctob]
+ [app.main.data.style-dictionary :as sd]
+ [app.main.refs :as refs]
+ [app.main.ui.inspect.styles.panels.blur :refer [blur-panel*]]
+ [app.main.ui.inspect.styles.panels.fill :refer [fill-panel*]]
+ [app.main.ui.inspect.styles.panels.geometry :refer [geometry-panel*]]
+ [app.main.ui.inspect.styles.panels.layout :refer [layout-panel*]]
+ [app.main.ui.inspect.styles.panels.layout-element :refer [layout-element-panel*]]
+ [app.main.ui.inspect.styles.panels.stroke :refer [stroke-panel*]]
+ [app.main.ui.inspect.styles.panels.svg :refer [svg-panel*]]
+ [app.main.ui.inspect.styles.panels.tokens-panel :refer [tokens-panel*]]
+ [app.main.ui.inspect.styles.panels.variants-panel :refer [variants-panel*]]
+ [app.main.ui.inspect.styles.panels.visibility :refer [visibility-panel*]]
[app.main.ui.inspect.styles.style-box :refer [style-box*]]
+ [app.util.code-gen.style-css :as css]
[app.util.i18n :refer [tr]]
[rumext.v2 :as mf]))
+(def layout-element-properties
+ [:margin-block-start
+ :margin-block-end
+ :margin-inline-start
+ :margin-inline-end
+ :max-block-size
+ :min-block-size
+ :max-inline-size
+ :min-inline-size
+ :align-self
+ :justify-self
+ :flex-shrink
+ :flex
-(def type->options
+ ;; Grid cell properties
+ :grid-column
+ :grid-row])
+
+
+(def type->panel-group
{:multiple [:fill :stroke :text :shadow :blur :layout-element]
:frame [:visibility :geometry :fill :stroke :shadow :blur :layout :layout-element]
:group [:visibility :geometry :svg :layout-element]
@@ -20,6 +59,18 @@
:text [:visibility :geometry :text :shadow :blur :stroke :layout-element]
:variant [:variant :geometry :fill :stroke :shadow :blur :layout :layout-element]})
+(defn- has-fill?
+ [shape]
+ (and
+ (not (contains? #{:text :group} (:type shape)))
+ (seq (:fills shape))))
+
+(defn- has-stroke? [shape]
+ (seq (:strokes shape)))
+
+(defn- has-blur? [shape]
+ (:blur shape))
+
(defn- get-shape-type
[shapes first-shape first-component]
(if (= (count shapes) 1)
@@ -31,21 +82,122 @@
:multiple))
(mf/defc styles-tab*
- [{:keys [color-space shapes libraries file-id]}]
+ [{:keys [color-space shapes libraries objects file-id]}]
(let [data (dm/get-in libraries [file-id :data])
first-shape (first shapes)
- first-component (mf/with-memo (ctkl/get-component data (:component-id first-shape)))
- type (mf/with-memo (get-shape-type shapes first-shape first-component))
- has-tokens? (:applied-tokens first-shape)
- options (type->options type)]
- [:ol {:class (stl/css :styles-tab) :aria-label (tr "inspect.tabs.styles")}
- (when has-tokens?
- [:li {:key "token"}
- [:> style-box* {:attribute :token}
- [:p "Tokens Panel (WIP)"]]])
- (for [option options]
- [:li {:key (d/name option)}
- [:> style-box* {:attribute option} color-space]])]))
+ first-component (ctkl/get-component data (:component-id first-shape))
+ shape-type (get-shape-type shapes first-shape first-component)
+ panels (type->panel-group shape-type)
+
+ tokens-lib (mf/deref refs/tokens-lib)
+ active-themes (mf/deref refs/workspace-active-theme-paths-no-hidden)
+ active-sets (mf/with-memo [tokens-lib]
+ (some-> tokens-lib (ctob/get-active-themes-set-names)))
+ active-tokens (mf/with-memo [tokens-lib]
+ (some-> tokens-lib (ctob/get-tokens-in-active-sets)))
+ resolved-active-tokens (sd/use-resolved-tokens* active-tokens)
+ has-visibility-props? (mf/use-fn
+ (fn [shape]
+ (let [shape-type (:type shape)]
+ (and
+ (not (or (= shape-type :text) (= shape-type :group)))
+ (or (:opacity shape)
+ (:blend-mode shape)
+ (:visibility shape))))))]
+ [:ol {:class (stl/css :styles-tab) :aria-label (tr "labels.styles")}
+ ;; TOKENS PANEL
+ (when (or active-themes active-sets)
+ [:li
+ [:> style-box* {:panel :token}
+ [:> tokens-panel* {:theme-paths active-themes :set-names active-sets}]]])
+ (for [panel panels]
+ [:li {:key (d/name panel)}
+ (case panel
+ ;; VARIANTS PANEL
+ :variant
+ [:> style-box* {:panel :variant}
+ [:> variants-panel* {:component first-component
+ :objects objects
+ :shape first-shape
+ :data data}]]
+ ;; GEOMETRY PANEL
+ :geometry
+ [:> style-box* {:panel :geometry}
+ [:> geometry-panel* {:shapes shapes
+ :objects objects
+ :resolved-tokens resolved-active-tokens}]]
+ ;; LAYOUT PANEL
+ :layout
+ (let [layout-shapes (->> shapes (filter ctl/any-layout?))]
+ (when (seq layout-shapes)
+ [:> style-box* {:panel :layout}
+ [:> layout-panel* {:shapes layout-shapes
+ :objects objects
+ :resolved-tokens resolved-active-tokens}]]))
+ ;; LAYOUT ELEMENT PANEL
+ :layout-element
+ (let [shapes (->> shapes (filter #(ctl/any-layout-immediate-child? objects %)))
+ some-layout-prop? (->> shapes
+ (mapcat (fn [shape]
+ (keep #(css/get-css-value objects shape %) layout-element-properties)))
+ (seq))]
+ (when some-layout-prop?
+ (let [only-flex? (every? #(ctl/flex-layout-immediate-child? objects %) shapes)
+ only-grid? (every? #(ctl/grid-layout-immediate-child? objects %) shapes)
+ panel (if only-flex?
+ :flex-element
+ (if only-grid?
+ :grid-element
+ :layout-element))]
+ [:> style-box* {:panel panel}
+ [:> layout-element-panel* {:shapes shapes
+ :objects objects
+ :resolved-tokens resolved-active-tokens
+ :layout-element-properties layout-element-properties}]])))
+ ;; FILL PANEL
+ :fill
+ (let [shapes (filter has-fill? shapes)]
+ (when (seq shapes)
+ [:> style-box* {:panel :fill}
+ [:> fill-panel* {:color-space color-space
+ :shapes shapes
+ :resolved-tokens resolved-active-tokens}]]))
+
+ ;; STROKE PANEL
+ :stroke
+ (let [shapes (filter has-stroke? shapes)]
+ (when (seq shapes)
+ [:> style-box* {:panel :stroke}
+ [:> stroke-panel* {:color-space color-space
+ :shapes shapes
+ :objects objects
+ :resolved-tokens resolved-active-tokens}]]))
+
+ ;; VISIBILITY PANEL
+ :visibility
+ (let [shapes (filter has-visibility-props? shapes)]
+ (when (seq shapes)
+ [:> style-box* {:panel :visibility}
+ [:> visibility-panel* {:shapes shapes
+ :objects objects
+ :resolved-tokens resolved-active-tokens}]]))
+ ;; SVG PANEL
+ :svg
+ (let [shape (first shapes)]
+ (when (seq (:svg-attrs shape))
+ [:> style-box* {:panel :svg}
+ [:> svg-panel* {:shape shape
+ :objects objects}]]))
+ ;; BLUR PANEL
+ :blur
+ (let [shapes (->> shapes (filter has-blur?))]
+ (when (seq shapes)
+ [:> style-box* {:panel :blur}
+ [:> blur-panel* {:shapes shapes
+ :objects objects}]]))
+ ;; DEFAULT WIP
+ [:> style-box* {:panel panel}
+ [:div color-space]])])]))
;; WIP
diff --git a/frontend/src/app/main/ui/inspect/styles/panels/blur.cljs b/frontend/src/app/main/ui/inspect/styles/panels/blur.cljs
new file mode 100644
index 0000000000..61e97e0ec2
--- /dev/null
+++ b/frontend/src/app/main/ui/inspect/styles/panels/blur.cljs
@@ -0,0 +1,29 @@
+;; 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.inspect.styles.panels.blur
+ (:require-macros [app.main.style :as stl])
+ (:require
+ [app.common.data.macros :as dm]
+ [app.main.ui.inspect.attributes.common :as cmm]
+ [app.main.ui.inspect.styles.rows.properties-row :refer [properties-row*]]
+ [app.util.code-gen.style-css :as css]
+ [rumext.v2 :as mf]))
+
+(mf/defc blur-panel*
+ [{:keys [shapes objects]}]
+ [:div {:class (stl/css :blur-panel)}
+ (for [shape shapes]
+ [:div {:key (:id shape) :class "blur-shape"}
+ (let [property :filter
+ value (css/get-css-value objects shape property)
+ property-name (cmm/get-css-rule-humanized property)
+ property-value (css/get-css-property objects shape property)]
+ [:> properties-row* {:key (dm/str "blur-property-" property)
+ :term property-name
+ :detail (dm/str value)
+ :property property-value
+ :copiable true}])])])
diff --git a/frontend/src/app/main/ui/inspect/styles/panels/fill.cljs b/frontend/src/app/main/ui/inspect/styles/panels/fill.cljs
new file mode 100644
index 0000000000..76111195c9
--- /dev/null
+++ b/frontend/src/app/main/ui/inspect/styles/panels/fill.cljs
@@ -0,0 +1,59 @@
+;; 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.inspect.styles.panels.fill
+ (:require-macros [app.main.style :as stl])
+ (:require
+ [app.common.types.fills :as types.fills]
+ [app.main.ui.inspect.attributes.common :as cmm]
+ [app.main.ui.inspect.styles.rows.color-properties-row :refer [color-properties-row*]]
+ [rumext.v2 :as mf]))
+
+(defn- get-applied-tokens-in-shape
+ [shape-tokens property]
+ (get shape-tokens property))
+
+(defn- get-resolved-token
+ "Get the resolved token for a specific property in a shape."
+ [shape resolved-tokens]
+ (let [shape-tokens (:applied-tokens shape)
+ applied-tokens-in-shape (get-applied-tokens-in-shape shape-tokens :fill)
+ token (get resolved-tokens applied-tokens-in-shape)]
+ token))
+
+;; Current token implementation on fills only supports one token per shape and has to be the first fill
+;; This must be improved in the future
+(defn- has-token?
+ "Returns true if the resolved token matches the color and is the first fill (idx = 0)."
+ [resolved-token color-type idx]
+ (and (= (:resolved-value resolved-token) (:color color-type))
+ (= 0 idx)))
+
+(mf/defc fill-panel*
+ [{:keys [shapes resolved-tokens color-space]}]
+ [:div {:class (stl/css :fill-panel)}
+ (for [shape shapes]
+ [:div {:key (:id shape) :class "fill-shape"}
+ (for [[idx fill] (map-indexed vector (:fills shape))]
+ (let [property :background
+ color-type (types.fills/fill->color fill) ;; can be :color, :gradient or :image
+ property-name (cmm/get-css-rule-humanized property)
+ resolved-token (get-resolved-token shape resolved-tokens)
+ has-token (has-token? resolved-token color-type idx)]
+
+ (if (:color color-type)
+ [:> color-properties-row* {:key idx
+ :term property-name
+ :color color-type
+ :token (when has-token resolved-token)
+ :format color-space
+ :copiable true}]
+ (if (or (:gradient color-type) (:image color-type))
+ [:> color-properties-row* {:key idx
+ :term property-name
+ :color color-type
+ :copiable true}]
+ [:span "background-image"]))))])])
diff --git a/frontend/src/app/main/ui/inspect/styles/panels/geometry.cljs b/frontend/src/app/main/ui/inspect/styles/panels/geometry.cljs
new file mode 100644
index 0000000000..d49d3bdc9b
--- /dev/null
+++ b/frontend/src/app/main/ui/inspect/styles/panels/geometry.cljs
@@ -0,0 +1,62 @@
+;; 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.inspect.styles.panels.geometry
+ (:require-macros [app.main.style :as stl])
+ (:require
+ [app.common.data.macros :as dm]
+ [app.main.ui.inspect.attributes.common :as cmm]
+ [app.main.ui.inspect.styles.rows.properties-row :refer [properties-row*]]
+ [app.util.code-gen.style-css :as css]
+ [rumext.v2 :as mf]))
+
+(def ^:private properties
+ [:width
+ :height
+ :left
+ :top
+ :border-start-start-radius
+ :border-start-end-radius
+ :border-end-start-radius
+ :border-end-end-radius
+ :transform])
+
+(def ^:private shape-prop->border-radius-prop
+ {:border-start-start-radius :r1
+ :border-start-end-radius :r2
+ :border-end-start-radius :r3
+ :border-end-end-radius :r4})
+
+(defn- get-applied-tokens-in-shape
+ [shape-tokens property]
+ (let [border-prop (get shape-prop->border-radius-prop property)]
+ (if border-prop
+ (get shape-tokens border-prop)
+ (get shape-tokens property))))
+
+(defn- get-resolved-token
+ [property shape resolved-tokens]
+ (let [shape-tokens (:applied-tokens shape)
+ applied-tokens-in-shape (get-applied-tokens-in-shape shape-tokens property)
+ token (get resolved-tokens applied-tokens-in-shape)]
+ token))
+
+(mf/defc geometry-panel*
+ [{:keys [shapes objects resolved-tokens]}]
+ [:div {:class (stl/css :geometry-panel)}
+ (for [shape shapes]
+ [:div {:key (:id shape) :class "geometry-shape"}
+ (for [property properties]
+ (when-let [value (css/get-css-value objects shape property)]
+ (let [property-name (cmm/get-css-rule-humanized property)
+ resolved-token (get-resolved-token property shape resolved-tokens)
+ property-value (if (not resolved-token) (css/get-css-property objects shape property) "")]
+ [:> properties-row* {:key (dm/str "geometry-property-" property)
+ :term property-name
+ :detail value
+ :token resolved-token
+ :property property-value
+ :copiable true}])))])])
diff --git a/frontend/src/app/main/ui/inspect/styles/panels/layout.cljs b/frontend/src/app/main/ui/inspect/styles/panels/layout.cljs
new file mode 100644
index 0000000000..bac0c70a1c
--- /dev/null
+++ b/frontend/src/app/main/ui/inspect/styles/panels/layout.cljs
@@ -0,0 +1,69 @@
+;; 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.inspect.styles.panels.layout
+ (:require-macros [app.main.style :as stl])
+ (:require
+ [app.common.data.macros :as dm]
+ [app.main.ui.inspect.attributes.common :as cmm]
+ [app.main.ui.inspect.styles.rows.properties-row :refer [properties-row*]]
+ [app.util.code-gen.style-css :as css]
+ [rumext.v2 :as mf]))
+
+(def ^:private properties
+ [:display
+ :flex-direction
+ :flex-wrap
+ :grid-template-rows
+ :grid-template-columns
+ :align-items
+ :align-content
+ :justify-items
+ :justify-content
+ :row-gap
+ :column-gap
+ :gap
+ :padding-inline-start
+ :padding-inline-end
+ :padding-block-start
+ :padding-block-end])
+
+(def ^:private shape-prop->padding-prop
+ {:padding-block-start :p1
+ :padding-inline-end :p2
+ :padding-block-end :p3
+ :padding-inline-start :p4})
+
+(defn- get-applied-tokens-in-shape
+ [shape-tokens property]
+ (let [padding-prop (get shape-prop->padding-prop property)]
+ (if padding-prop
+ (get shape-tokens padding-prop)
+ (get shape-tokens property))))
+
+(defn- get-resolved-token
+ [property shape resolved-tokens]
+ (let [shape-tokens (:applied-tokens shape)
+ applied-tokens-in-shape (get-applied-tokens-in-shape shape-tokens property)
+ token (get resolved-tokens applied-tokens-in-shape)]
+ token))
+
+(mf/defc layout-panel*
+ [{:keys [shapes objects resolved-tokens]}]
+ [:div {:class (stl/css :variants-panel)}
+ (for [shape shapes]
+ [:div {:key (:id shape) :class "layout-shape"}
+ (for [property properties]
+ (when-let [value (css/get-css-value objects shape property)]
+ (let [property-name (cmm/get-css-rule-humanized property)
+ resolved-token (get-resolved-token property shape resolved-tokens)
+ property-value (if (not resolved-token) (css/get-css-property objects shape property) "")]
+ [:> properties-row* {:key (dm/str "layout-property-" property)
+ :term property-name
+ :detail value
+ :token resolved-token
+ :property property-value
+ :copiable true}])))])])
diff --git a/frontend/src/app/main/ui/inspect/styles/panels/layout_element.cljs b/frontend/src/app/main/ui/inspect/styles/panels/layout_element.cljs
new file mode 100644
index 0000000000..4ebf9b393a
--- /dev/null
+++ b/frontend/src/app/main/ui/inspect/styles/panels/layout_element.cljs
@@ -0,0 +1,57 @@
+;; 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.inspect.styles.panels.layout-element
+ (:require-macros [app.main.style :as stl])
+ (:require
+ [app.common.data.macros :as dm]
+ [app.common.types.shape.layout :as ctl]
+ [app.main.ui.inspect.attributes.common :as cmm]
+ [app.main.ui.inspect.styles.rows.properties-row :refer [properties-row*]]
+ [app.util.code-gen.style-css :as css]
+ [rumext.v2 :as mf]))
+
+(def ^:private shape-prop->margin-prop
+ {:margin-block-start :m1
+ :margin-inline-end :m2
+ :margin-block-end :m3
+ :margin-inline-start :m4
+ :max-block-size :layout-item-max-h ;; :max-height
+ :min-block-size :layout-item-min-h ;; :min-height
+ :max-inline-size :layout-item-max-w ;; :max-width
+ :min-inline-size :layout-item-min-w ;; :min-width
+ })
+
+(defn- get-applied-margins-in-shape
+ [shape-tokens property]
+ (if-let [margin-prop (get shape-prop->margin-prop property)]
+ (get shape-tokens margin-prop)
+ (get shape-tokens property)))
+
+(defn- get-resolved-tokens
+ [property shape resolved-tokens]
+ (when-let [shape-tokens (:applied-tokens shape)]
+ (let [applied-tokens-in-shape (get-applied-margins-in-shape shape-tokens property)
+ token (get resolved-tokens applied-tokens-in-shape)]
+ token)))
+
+(mf/defc layout-element-panel*
+ [{:keys [shapes objects resolved-tokens layout-element-properties]}]
+ (let [shapes (->> shapes (filter #(ctl/any-layout-immediate-child? objects %)))]
+ [:div {:class (stl/css :layout-element-panel)}
+ (for [shape shapes]
+ [:div {:key (:id shape) :class "layout-element-shape"}
+ (for [property layout-element-properties]
+ (when-let [value (css/get-css-value objects shape property)]
+ (let [property-name (cmm/get-css-rule-humanized property)
+ resolved-token (get-resolved-tokens property shape resolved-tokens)
+ property-value (if (not resolved-token) (css/get-css-property objects shape property) "")]
+ [:> properties-row* {:key (dm/str "layout-element-property-" property)
+ :term property-name
+ :detail (str value)
+ :token resolved-token
+ :property property-value
+ :copiable true}])))])]))
diff --git a/frontend/src/app/main/ui/inspect/styles/panels/stroke.cljs b/frontend/src/app/main/ui/inspect/styles/panels/stroke.cljs
new file mode 100644
index 0000000000..461dc51649
--- /dev/null
+++ b/frontend/src/app/main/ui/inspect/styles/panels/stroke.cljs
@@ -0,0 +1,82 @@
+;; 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.inspect.styles.panels.stroke
+ (:require-macros [app.main.style :as stl])
+ (:require
+ [app.common.data :as d]
+ [app.common.data.macros :as dm]
+ [app.main.ui.inspect.attributes.common :as cmm]
+ [app.main.ui.inspect.styles.rows.color-properties-row :refer [color-properties-row*]]
+ [app.main.ui.inspect.styles.rows.properties-row :refer [properties-row*]]
+ [app.util.code-gen.style-css :as css]
+ [rumext.v2 :as mf]))
+
+(def ^:private properties [:border-color :border-style :border-width])
+
+(defn- stroke->color [shape]
+ {:color (:stroke-color shape)
+ :opacity (:stroke-opacity shape)
+ :gradient (:stroke-color-gradient shape)
+ :id (:stroke-color-ref-id shape)
+ :file-id (:stroke-color-ref-file shape)
+ :image (:stroke-image shape)})
+
+(def ^:private shape-prop->stroke-prop
+ {:border-style :stroke-style
+ :border-width :stroke-width
+ :border-color :stroke-color})
+
+(defn- get-applied-tokens-in-shape
+ [shape-tokens property]
+ (let [border-prop (get shape-prop->stroke-prop property)]
+ (if border-prop
+ (get shape-tokens border-prop)
+ (get shape-tokens property))))
+
+(defn- get-resolved-token
+ "Get the resolved token for a specific property in a shape."
+ [property shape resolved-tokens]
+ (let [shape-tokens (:applied-tokens shape)
+ applied-tokens-in-shape (get-applied-tokens-in-shape shape-tokens property)
+ token (get resolved-tokens applied-tokens-in-shape)]
+ token))
+
+;; Current token implementation on fills only supports one token per shape and has to be the first fill
+;; This must be improved in the future
+(defn- has-token?
+ "Returns true if the resolved token matches the color and is the first fill (idx = 0)."
+ [resolved-token stroke-type idx]
+ (and (= (:resolved-value resolved-token) (:color stroke-type))
+ (= 0 idx)))
+
+(mf/defc stroke-panel*
+ [{:keys [shapes objects resolved-tokens color-space]}]
+ [:div {:class (stl/css :stroke-panel)}
+ (for [shape shapes]
+ [:div {:key (:id shape) :class "stroke-shape"}
+ (for [[idx stroke] (map-indexed vector (:strokes shape))]
+ (for [property properties]
+ (let [property property
+ value (css/get-css-value objects stroke property)
+ stroke-type (stroke->color stroke)
+ property-name (cmm/get-css-rule-humanized property)
+ property-value (css/get-css-property objects stroke property)
+ resolved-token (get-resolved-token property shape resolved-tokens)
+ has-token (has-token? resolved-token stroke-type idx)]
+ (if (= property :border-color)
+ [:> color-properties-row* {:key (str idx property)
+ :term property-name
+ :color stroke-type
+ :token (when has-token resolved-token)
+ :format color-space
+ :copiable true}]
+ [:> properties-row* {:key (str idx property)
+ :term (d/name property-name)
+ :detail (dm/str value)
+ :token (when has-token resolved-token)
+ :property property-value
+ :copiable true}]))))])])
diff --git a/frontend/src/app/main/ui/inspect/styles/panels/svg.cljs b/frontend/src/app/main/ui/inspect/styles/panels/svg.cljs
new file mode 100644
index 0000000000..79ab7d4a71
--- /dev/null
+++ b/frontend/src/app/main/ui/inspect/styles/panels/svg.cljs
@@ -0,0 +1,38 @@
+;; 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.inspect.styles.panels.svg
+ (:require-macros [app.main.style :as stl])
+ (:require
+ [app.common.data :as d]
+ [app.common.data.macros :as dm]
+ [app.main.ui.inspect.styles.rows.properties-row :refer [properties-row*]]
+ [cuerdas.core :as str]
+ [rumext.v2 :as mf]))
+
+(defn- map->css [attr]
+ (->> attr
+ (map (fn [[attr-key attr-value]] (str (d/name attr-key) ":" attr-value)))
+ (str/join "; ")))
+
+(mf/defc svg-panel*
+ [{:keys [shape _objects]}]
+ [:div {:class (stl/css :svg-panel)}
+ [:div {:key (:id shape) :class (stl/css :svg-shape)}
+ (for [[attr-key attr-value] (:svg-attrs shape)]
+ (if (map? attr-value)
+ (for [[sub-attr-key sub-attr-value] attr-value]
+ (let [property-value (map->css sub-attr-value)]
+ [:> properties-row* {:key (dm/str "svg-property-" (d/name sub-attr-key))
+ :term (d/name sub-attr-key)
+ :detail (dm/str sub-attr-value)
+ :property property-value
+ :copiable false}]))
+ [:> properties-row* {:key (dm/str "svg-property-" (d/name attr-key))
+ :term (d/name attr-key)
+ :detail (dm/str attr-value)
+ :property (dm/str attr-key ": " attr-value ";")
+ :copiable false}]))]])
diff --git a/frontend/src/app/main/ui/inspect/styles/panels/tokens_panel.cljs b/frontend/src/app/main/ui/inspect/styles/panels/tokens_panel.cljs
new file mode 100644
index 0000000000..0da0a56d5f
--- /dev/null
+++ b/frontend/src/app/main/ui/inspect/styles/panels/tokens_panel.cljs
@@ -0,0 +1,27 @@
+;; 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.inspect.styles.panels.tokens-panel
+ (:require-macros [app.main.style :as stl])
+ (:require
+ [app.main.ui.inspect.styles.rows.properties-row :refer [properties-row*]]
+ [app.util.i18n :refer [tr]]
+ [cuerdas.core :as str]
+ [rumext.v2 :as mf]))
+
+(mf/defc tokens-panel*
+ [{:keys [theme-paths set-names]}]
+ [:div {:class (stl/css :tokens-panel)}
+ (when (seq theme-paths)
+ (let [theme-list (str/join ", " theme-paths)]
+ [:> properties-row* {:class (stl/css :token-theme)
+ :term (tr "inspect.tabs.styles.panel.tokens.active-themes")
+ :detail theme-list}]))
+ (when (seq set-names)
+ (let [sets-list (str/join ", " set-names)]
+ [:> properties-row* {:class (stl/css :token-sets)
+ :term (tr "inspect.tabs.styles.panel.tokens.active-sets")
+ :detail sets-list}]))])
diff --git a/frontend/src/app/main/ui/inspect/styles/panels/tokens_panel.scss b/frontend/src/app/main/ui/inspect/styles/panels/tokens_panel.scss
new file mode 100644
index 0000000000..6478b564b4
--- /dev/null
+++ b/frontend/src/app/main/ui/inspect/styles/panels/tokens_panel.scss
@@ -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-theme,
+.token-sets {
+ align-items: flex-start;
+ padding-block: var(--sp-s);
+}
diff --git a/frontend/src/app/main/ui/inspect/styles/panels/variants_panel.cljs b/frontend/src/app/main/ui/inspect/styles/panels/variants_panel.cljs
new file mode 100644
index 0000000000..9e797f05d0
--- /dev/null
+++ b/frontend/src/app/main/ui/inspect/styles/panels/variants_panel.cljs
@@ -0,0 +1,30 @@
+;; 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.inspect.styles.panels.variants-panel
+ (:require-macros [app.main.style :as stl])
+ (:require
+ [app.common.data.macros :as dm]
+ [app.common.files.variant :as cfv]
+ [app.common.types.component :as ctc]
+ [app.main.ui.inspect.styles.rows.properties-row :refer [properties-row*]]
+ [cuerdas.core :as str]
+ [rumext.v2 :as mf]))
+
+(mf/defc variants-panel*
+ [{:keys [component objects shape data]}]
+ (let [is-container? (ctc/is-variant-container? shape)
+ properties (mf/with-memo [objects shape]
+ (if is-container?
+ (->> (cfv/extract-properties-values data objects (:id shape))
+ (map #(update % :value (partial str/join ", "))))
+ (->> (:variant-properties component)
+ (map #(update % :value (fn [v] (if (str/blank? v) "--" v)))))))]
+ [:div {:class (stl/css :variants-panel)}
+ (for [property properties]
+ [:> properties-row* {:key (dm/str "variant-property-" property)
+ :term (:name property)
+ :detail (:value property)}])]))
diff --git a/frontend/src/app/main/ui/inspect/styles/panels/visibility.cljs b/frontend/src/app/main/ui/inspect/styles/panels/visibility.cljs
new file mode 100644
index 0000000000..4325329026
--- /dev/null
+++ b/frontend/src/app/main/ui/inspect/styles/panels/visibility.cljs
@@ -0,0 +1,46 @@
+;; 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.inspect.styles.panels.visibility
+ (:require-macros [app.main.style :as stl])
+ (:require
+ [app.common.data.macros :as dm]
+ [app.main.ui.inspect.attributes.common :as cmm]
+ [app.main.ui.inspect.styles.rows.properties-row :refer [properties-row*]]
+ [app.util.code-gen.style-css :as css]
+ [rumext.v2 :as mf]))
+
+(def ^:private properties
+ [:opacity
+ :blend-mode])
+
+(defn- get-applied-tokens-in-shape
+ [shape-tokens property]
+ (get shape-tokens property))
+
+(defn- get-resolved-token
+ [property shape resolved-tokens]
+ (let [shape-tokens (:applied-tokens shape)
+ applied-tokens-in-shape (get-applied-tokens-in-shape shape-tokens property)
+ token (get resolved-tokens applied-tokens-in-shape)]
+ token))
+
+(mf/defc visibility-panel*
+ [{:keys [shapes objects resolved-tokens]}]
+ [:div {:class (stl/css :visibility-panel)}
+ (for [shape shapes]
+ [:div {:key (:id shape) :class "visibility-shape"}
+ (for [property properties]
+ (when-let [value (css/get-css-value objects shape property)]
+ (let [property-name (cmm/get-css-rule-humanized property)
+ resolved-token (get-resolved-token property shape resolved-tokens)
+ property-value (if (not resolved-token) (css/get-css-property objects shape property) "")]
+ [:> properties-row* {:key (dm/str "visibility-property-" property)
+ :term property-name
+ :detail (dm/str value)
+ :token resolved-token
+ :property property-value
+ :copiable true}])))])])
diff --git a/frontend/src/app/main/ui/inspect/styles/property_detail_copiable.cljs b/frontend/src/app/main/ui/inspect/styles/property_detail_copiable.cljs
new file mode 100644
index 0000000000..337ac35e9a
--- /dev/null
+++ b/frontend/src/app/main/ui/inspect/styles/property_detail_copiable.cljs
@@ -0,0 +1,54 @@
+;; 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.inspect.styles.property-detail-copiable
+ (:require-macros [app.main.style :as stl])
+ (:require
+ [app.main.refs :as refs]
+ [app.main.ui.components.color-bullet :as bc]
+ [app.main.ui.ds.foundations.assets.icon :refer [icon*] :as i]
+ [app.main.ui.inspect.common.colors :as isc]
+ [app.util.i18n :refer [tr]]
+ [rumext.v2 :as mf]))
+
+(def ^:private schema:property-detail-copiable
+ [:map
+ [:detail :string]
+ [:color {:optional true} :any] ;; color object with :color, :gradient or :image
+ [:token {:optional true} :any] ;; resolved token object
+ [:copied :boolean]
+ [:on-click fn?]])
+
+(mf/defc property-detail-copiable*
+ {::mf/schema schema:property-detail-copiable}
+ [{:keys [detail color token copied on-click]}]
+ [:button {:class (stl/css-case :property-detail-copiable true
+ :property-detail-copied copied
+ :property-detail-copiable-color (some? color))
+ :on-click on-click}
+ (when color
+ [:> bc/color-bullet {:color color
+ :mini true}])
+ (if token
+ [:span {:class (stl/css :property-detail-text :property-detail-text-token)}
+ (:name token)]
+ (if (:ref-id color)
+ (let [colors-library (isc/use-colors-library color)
+
+ file-colors-ref (mf/deref isc/file-colors-ref)
+ file-colors-wokspace (mf/deref refs/workspace-file-colors)
+ file-colors (or file-colors-ref file-colors-wokspace)
+
+ color-library-name (get-in (or colors-library file-colors) [(:ref-id color) :name])
+ color (assoc color :name color-library-name)]
+ [:span {:class (stl/css :property-detail-text)} (:name color)])
+ [:span {:class (stl/css :property-detail-text)} detail]))
+ [:> icon* {:class (stl/css :property-detail-icon)
+ :icon-id (if copied i/tick i/clipboard)
+ :size "s"
+ :aria-label (tr "inspect.tabs.styles.panel.copy-to-clipboard")}]])
+
+
diff --git a/frontend/src/app/main/ui/inspect/styles/property_detail_copiable.scss b/frontend/src/app/main/ui/inspect/styles/property_detail_copiable.scss
new file mode 100644
index 0000000000..83f1bc1f0f
--- /dev/null
+++ b/frontend/src/app/main/ui/inspect/styles/property_detail_copiable.scss
@@ -0,0 +1,71 @@
+// 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/typography.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/_borders.scss" as *;
+
+.property-detail-copiable {
+ --detail-color: var(--color-foreground-primary);
+ --button-min-inline-size: #{$sz-154};
+ --button-min-block-size: #{$sz-36};
+}
+
+.property-detail-text {
+ color: var(--detail-color);
+}
+
+.property-detail-text-token {
+ @include use-typography("code-font");
+ --detail-color: var(--color-token-foreground);
+
+ line-height: 1.4;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+
+.property-detail-copiable {
+ --button-border-radius: #{$br-4};
+ --button-background: none;
+
+ appearance: none;
+ background: var(--button-background);
+ cursor: pointer;
+ display: grid;
+ grid-template-columns: 1fr auto;
+ gap: var(--sp-s);
+ align-items: center;
+ width: 100%;
+ color: var(--detail-color);
+ min-block-size: var(--button-min-block-size);
+ min-inline-size: var(--button-min-inline-size);
+ padding: var(--sp-s);
+ border-radius: var(--button-border-radius);
+ border: $b-1 solid transparent;
+ text-align: left;
+
+ &:hover {
+ --button-background: var(--color-background-tertiary);
+
+ & .property-detail-icon {
+ display: block;
+ }
+ }
+}
+
+.property-detail-copiable-color {
+ grid-template-columns: auto 1fr auto;
+}
+
+.property-detail-copied {
+ --button-border-active: var(--color-accent-tertiary);
+ border: $b-1 solid var(--button-border-active);
+}
+
+.property-detail-icon {
+ display: none;
+}
diff --git a/frontend/src/app/main/ui/inspect/styles/rows/color_properties_row.cljs b/frontend/src/app/main/ui/inspect/styles/rows/color_properties_row.cljs
new file mode 100644
index 0000000000..dc99c16703
--- /dev/null
+++ b/frontend/src/app/main/ui/inspect/styles/rows/color_properties_row.cljs
@@ -0,0 +1,128 @@
+;; 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.inspect.styles.rows.color-properties-row
+ (:require-macros [app.main.style :as stl])
+ (:require
+ [app.common.data :as d]
+ [app.common.data.macros :as dm]
+ [app.common.types.color :as cc]
+ [app.config :as cfg]
+ [app.main.ui.ds.buttons.button :refer [button*]]
+ [app.main.ui.ds.tooltip :refer [tooltip*]]
+ [app.main.ui.formats :as fmt]
+ [app.main.ui.inspect.styles.property-detail-copiable :refer [property-detail-copiable*]]
+ [app.util.color :as uc]
+ [app.util.i18n :refer [tr]]
+ [app.util.timers :as tm]
+ [app.util.webapi :as wapi]
+ [cuerdas.core :as str]
+ [rumext.v2 :as mf]))
+
+(def ^:private schema:color-properties-row
+ [:map
+ [:term :string]
+ [:color :any] ;; color object with :color, :gradient or :image
+ [:format {:optional true} :string] ;; color format, e.g., "hex", "rgba", etc.
+ [:token {:optional true} :any] ;; resolved token object
+ [:copiable {:optional true} :boolean]])
+
+(mf/defc color-properties-row*
+ {::mf/schema schema:color-properties-row}
+ [{:keys [class term color format token]}]
+ (let [copied* (mf/use-state false)
+ copied (deref copied*)
+
+ color-value (:color color)
+ color-gradient (:gradient color)
+ color-image (:image color)
+ color-image-name (:name color-image)
+ color-image-url (when (some? color-image)
+ (cfg/resolve-file-media color-image))
+ color-opacity (mf/use-memo
+ (mf/deps color)
+ #(dm/str (-> color
+ (:opacity)
+ (d/coalesce 1)
+ (* 100)
+ (fmt/format-number)) "%"))
+
+ formatted-color-value (mf/use-memo
+ (mf/deps color)
+ #(cond
+ (some? (:color color)) (case format
+ "hex" (dm/str color-value " " color-opacity)
+ "rgba" (let [[r g b a] (cc/hex->rgba color-value color-opacity)
+ result (cc/format-rgba [r g b a])]
+ result)
+ "hsla" (let [[h s l a] (cc/hex->hsla color-value color-opacity)
+ result (cc/format-hsla [h s l a])]
+ result)
+ color-value)
+ (some? (:gradient color)) (uc/gradient-type->string (:type color-gradient))
+ (some? (:image color)) (tr "media.image")
+ :else "none"))
+
+ css-term (-> term
+ (str/replace #" " "-")
+ (str/replace #"([A-Z])" "-$1")
+ (str/lower)
+ (str/replace #"^-" ""))
+
+ copiable-value (mf/use-memo
+ (mf/deps color formatted-color-value color-opacity color-image-url token)
+ #(if (some? token)
+ (:name token)
+ (cond
+ (:color color) (if (= format "hex")
+ (dm/str css-term ": " color-value "; opacity: " color-opacity ";")
+ (dm/str css-term ": " formatted-color-value ";"))
+ (:gradient color) (dm/str css-term ": " (uc/color->background color) ";")
+ (:image color) (dm/str css-term ": url(" color-image-url ") no-repeat center center / cover;")
+ :else "none")))
+ copy-attr
+ (mf/use-fn
+ (mf/deps copied formatted-color-value)
+ (fn []
+ (reset! copied* true)
+ (wapi/write-to-clipboard copiable-value)
+ (tm/schedule 1000 #(reset! copied* false))))]
+ [:*
+ [:dl {:class [(stl/css :property-row) class]}
+ [:dt {:class (stl/css :property-term)} term]
+ [:dd {:class (stl/css :property-detail)}
+ (if token
+ [:> tooltip* {:id (:name token)
+ :class (stl/css :tooltip-token-wrapper)
+ :content #(mf/html
+ [:div {:class (stl/css :tooltip-token)}
+ [:div {:class (stl/css :tooltip-token-title)}
+ (tr "inspect.tabs.styles.token.resolved-value")]
+ [:div {:class (stl/css :tooltip-token-value)}
+ (:value token)]])}
+ [:> property-detail-copiable* {:detail formatted-color-value
+ :color color
+ :token token
+ :copied copied
+ :on-click copy-attr}]]
+
+
+ [:> property-detail-copiable* {:detail formatted-color-value
+ :color color
+ :copied copied
+ :on-click copy-attr}])]]
+ (when (:image color)
+ [:div {:class (stl/css :color-image-preview)}
+ [:div {:class (stl/css :color-image-preview-wrapper)}
+ [:img {:class (stl/css :color-image)
+ :src color-image-url
+ :title color-image-name
+ :alt ""}]]
+ [:> button* {:variant "secondary"
+ :to color-image-url
+ :target "_blank"
+ :download color-image-name}
+ (tr "inspect.attributes.image.download")]])]))
+
diff --git a/frontend/src/app/main/ui/inspect/styles/rows/color_properties_row.scss b/frontend/src/app/main/ui/inspect/styles/rows/color_properties_row.scss
new file mode 100644
index 0000000000..d5b8497c5c
--- /dev/null
+++ b/frontend/src/app/main/ui/inspect/styles/rows/color_properties_row.scss
@@ -0,0 +1,82 @@
+// 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/typography.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/_borders.scss" as *;
+
+// TOKENS ROW
+
+.property-row {
+ --term-color: var(--color-foreground-secondary);
+ --detail-color: var(--color-foreground-primary);
+ --button-min-inline-size: #{$sz-154};
+ --button-min-block-size: #{$sz-36};
+
+ display: grid;
+ grid-template-columns: 30% 1fr;
+ align-items: center;
+ min-inline-size: var(--button-min-inline-size);
+ min-block-size: var(--button-min-block-size);
+}
+
+.property-term,
+.property-detail {
+ @include use-typography("body-small");
+}
+
+.property-term {
+ color: var(--term-color);
+}
+
+.property-detail {
+ color: var(--detail-color);
+}
+
+// IMAGE PREVIEW
+
+.color-image-preview {
+ --image-margin: var(--sp-m);
+
+ display: grid;
+ justify-content: center;
+ align-items: center;
+ margin: var(--image-margin);
+ gap: var(--sp-m);
+}
+
+.color-image-preview-wrapper {
+ --image-background: var(--color-background-secondary);
+ background: var(--image-background);
+}
+
+.color-image {
+ max-block-size: 10rem;
+ block-size: 100%;
+ inline-size: 100%;
+ object-fit: contain;
+}
+
+// TOOLTIP CONTENT
+
+.tooltip-token {
+ --title-color: var(--color-foreground-secondary);
+ --title-value: var(--color-foreground-primary);
+}
+
+.tooltip-token-title {
+ @include use-typography("body-small");
+ color: var(--title-color);
+}
+
+.tooltip-token-value {
+ @include use-typography("body-small");
+ color: var(--title-value);
+}
+
+.tooltip-token-wrapper {
+ inline-size: 100%;
+}
diff --git a/frontend/src/app/main/ui/inspect/styles/rows/properties_row.cljs b/frontend/src/app/main/ui/inspect/styles/rows/properties_row.cljs
new file mode 100644
index 0000000000..91c50d04bd
--- /dev/null
+++ b/frontend/src/app/main/ui/inspect/styles/rows/properties_row.cljs
@@ -0,0 +1,62 @@
+;; 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.inspect.styles.rows.properties-row
+ (:require-macros [app.main.style :as stl])
+ (:require
+ [app.main.ui.ds.tooltip :refer [tooltip*]]
+ [app.main.ui.inspect.styles.property-detail-copiable :refer [property-detail-copiable*]]
+ [app.util.i18n :refer [tr]]
+ [app.util.timers :as tm]
+ [app.util.webapi :as wapi]
+ [cuerdas.core :as str]
+ [rumext.v2 :as mf]))
+
+(def ^:private schema:properties-row
+ [:map
+ [:term :string]
+ [:detail :string]
+ [:property {:optional true} :string] ;; CSS valid property
+ [:token {:optional true} :any] ;; resolved token object
+ [:copiable {:optional true} :boolean]])
+
+(mf/defc properties-row*
+ {::mf/schema schema:properties-row}
+ [{:keys [class term detail token property copiable]}]
+ (let [copiable? (or copiable false)
+ detail? (not (or (nil? detail) (str/blank? detail)))
+ detail (if detail? detail "-")
+ copied* (mf/use-state false)
+ copied (deref copied*)
+ copiable-value (if (some? token)
+ (:name token)
+ property)
+ copy-attr
+ (mf/use-fn
+ (mf/deps copied)
+ (fn []
+ (reset! copied* true)
+ (wapi/write-to-clipboard copiable-value)
+ (tm/schedule 1000 #(reset! copied* false))))]
+ [:dl {:class [(stl/css :property-row) class]}
+ [:dt {:class (stl/css :property-term)} term]
+ [:dd {:class (stl/css :property-detail)}
+ (if copiable?
+ (if token
+ [:> tooltip* {:id (:name token)
+ :class (stl/css :tooltip-token-wrapper)
+ :content #(mf/html
+ [:div {:class (stl/css :tooltip-token)}
+ [:div {:class (stl/css :tooltip-token-title)} (tr "inspect.tabs.styles.token.resolved-value")]
+ [:div {:class (stl/css :tooltip-token-value)} (:value token)]])}
+ [:> property-detail-copiable* {:detail detail
+ :token token
+ :copied copied
+ :on-click copy-attr}]]
+ [:> property-detail-copiable* {:detail detail
+ :copied copied
+ :on-click copy-attr}])
+ detail)]]))
diff --git a/frontend/src/app/main/ui/inspect/styles/rows/properties_row.scss b/frontend/src/app/main/ui/inspect/styles/rows/properties_row.scss
new file mode 100644
index 0000000000..9a77c82a32
--- /dev/null
+++ b/frontend/src/app/main/ui/inspect/styles/rows/properties_row.scss
@@ -0,0 +1,58 @@
+// 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/typography.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/_borders.scss" as *;
+
+// TOKENS ROW
+
+.property-row {
+ --term-color: var(--color-foreground-secondary);
+ --detail-color: var(--color-foreground-primary);
+ --button-min-inline-size: #{$sz-154};
+ --button-min-block-size: #{$sz-36};
+
+ display: grid;
+ grid-template-columns: 30% 1fr;
+ align-items: center;
+ min-inline-size: var(--button-min-inline-size);
+ min-block-size: var(--button-min-block-size);
+}
+
+.property-term,
+.property-detail {
+ @include use-typography("body-small");
+}
+
+.property-term {
+ color: var(--term-color);
+}
+
+.property-detail {
+ color: var(--detail-color);
+}
+
+// TOOLTIP CONTENT
+
+.tooltip-token {
+ --title-color: var(--color-foreground-secondary);
+ --title-value: var(--color-foreground-primary);
+}
+
+.tooltip-token-title {
+ @include use-typography("body-small");
+ color: var(--title-color);
+}
+
+.tooltip-token-value {
+ @include use-typography("body-small");
+ color: var(--title-value);
+}
+
+.tooltip-token-wrapper {
+ inline-size: 100%;
+}
diff --git a/frontend/src/app/main/ui/inspect/styles/style_box.cljs b/frontend/src/app/main/ui/inspect/styles/style_box.cljs
index 6e8d7c0448..404404c9c6 100644
--- a/frontend/src/app/main/ui/inspect/styles/style_box.cljs
+++ b/frontend/src/app/main/ui/inspect/styles/style_box.cljs
@@ -1,34 +1,44 @@
+;; 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.inspect.styles.style-box
(:require-macros [app.main.style :as stl])
(:require
+ [app.common.data :as d]
[app.main.ui.ds.buttons.icon-button :refer [icon-button*]]
[app.main.ui.ds.foundations.assets.icon :refer [icon*] :as i]
[app.util.i18n :refer [tr]]
+ [app.util.webapi :as wapi]
[rumext.v2 :as mf]))
-(defn- attribute->title
+(defn- panel->title
[type]
(case type
:variant (tr "inspect.tabs.styles.panel.variant")
:token (tr "inspect.tabs.styles.panel.token")
:geometry (tr "inspect.tabs.styles.panel.geometry")
- :fill (tr "inspect.tabs.styles.panel.fill")
- :stroke (tr "inspect.tabs.styles.panel.stroke")
- :text (tr "inspect.tabs.styles.panel.text")
- :blur (tr "inspect.tabs.styles.panel.blur")
- :shadow (tr "inspect.tabs.styles.panel.shadow")
- :layout (tr "inspect.tabs.styles.panel.layout")
- :layout-element (tr "inspect.tabs.styles.panel.layout-element")
- :visibility (tr "inspect.tabs.styles.panel.visibility")
- :svg (tr "inspect.tabs.styles.panel.svg")
+ :fill (tr "labels.fill")
+ :stroke (tr "labels.stroke")
+ :text (tr "labels.text")
+ :blur (tr "labels.blur")
+ :shadow (tr "labels.shadow")
+ :layout (tr "labels.layout")
+ :flex-element "Flex element"
+ :grid-element "Grid element"
+ :layout-element "Layout Element"
+ :visibility (tr "labels.visibility")
+ :svg (tr "labels.svg")
nil))
(mf/defc style-box*
- [{:keys [attribute shorthand children]}]
+ [{:keys [panel shorthand children]}]
(let [expanded* (mf/use-state true)
expanded (deref expanded*)
- title (attribute->title attribute)
+ title (panel->title panel)
toggle-panel
(mf/use-fn
@@ -39,12 +49,13 @@
copy-shorthand
(mf/use-fn
(fn []
- (js/navigator.clipboard.writeText (str "Style: " title))))]
+ (wapi/write-to-clipboard (str "Style: " title))))]
[:article {:class (stl/css :style-box)}
[:header {:class (stl/css :disclosure-header)}
[:button {:class (stl/css :disclosure-button)
+ :aria-expanded expanded
+ :aria-controls (str "style-box-" (d/name panel))
:on-click toggle-panel
- :title (tr "inspect.tabs.styles.panel.toggle-style" title)
:aria-label (tr "inspect.tabs.styles.panel.toggle-style" title)}
[:> icon* {:icon-id (if expanded "arrow-down" "arrow")
:class (stl/css :disclosure-icon)
@@ -56,5 +67,5 @@
:on-click copy-shorthand
:icon i/clipboard}])]
(when expanded
- [:div {:class (stl/css :style-box-content) :inert true}
- [:div {:class (stl/css :style-box-description)} children]])]))
+ [:div {:class (stl/css :style-box-content) :id (str "style-box-" (d/name panel))}
+ [:div {:class (stl/css :style-box-panel-wrapper)} children]])]))
diff --git a/frontend/src/app/main/ui/inspect/styles/style_box.scss b/frontend/src/app/main/ui/inspect/styles/style_box.scss
index 9cb2281d96..25370d973c 100644
--- a/frontend/src/app/main/ui/inspect/styles/style_box.scss
+++ b/frontend/src/app/main/ui/inspect/styles/style_box.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../ds/typography.scss" as *;
+@use "ds/typography.scss" as *;
.style-box {
--title-gap: var(--sp-xs);
diff --git a/frontend/src/app/main/ui/modal.scss b/frontend/src/app/main/ui/modal.scss
index 6dd5b4eda0..b78ff64bf4 100644
--- a/frontend/src/app/main/ui/modal.scss
+++ b/frontend/src/app/main/ui/modal.scss
@@ -1,4 +1,10 @@
-@import "refactor/common-refactor.scss";
+// 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 "refactor/common-refactor.scss" as deprecated;
:global(:root) {
--s-4: 0.25rem;
diff --git a/frontend/src/app/main/ui/notifications/badge.scss b/frontend/src/app/main/ui/notifications/badge.scss
index b98a5ee88b..bc88b69b59 100644
--- a/frontend/src/app/main/ui/notifications/badge.scss
+++ b/frontend/src/app/main/ui/notifications/badge.scss
@@ -4,10 +4,10 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.badge-notification {
- @include smallTitleTipography;
+ @include deprecated.smallTitleTipography;
--badge-notification-bg-color: var(--alert-background-color-default);
--badge-notification-fg-color: var(--alert-text-foreground-color-default);
--badge-notification-border-color: var(--alert-border-color-default);
@@ -15,22 +15,22 @@
display: grid;
place-items: center;
grid-template-columns: 1fr;
- min-height: $s-32;
+ min-height: deprecated.$s-32;
height: fit-content;
- min-width: $s-80;
+ min-width: deprecated.$s-80;
width: fit-content;
padding: 0;
margin: 0;
- border: $s-1 solid var(--badge-notification-border-color);
- border-radius: $br-8;
+ border: deprecated.$s-1 solid var(--badge-notification-border-color);
+ border-radius: deprecated.$br-8;
background-color: var(--badge-notification-bg-color);
color: var(--badge-notification-fg-color);
}
.small {
- @include bodySmallTypography;
- min-height: $s-20;
- border-radius: $br-6;
+ @include deprecated.bodySmallTypography;
+ min-height: deprecated.$s-20;
+ border-radius: deprecated.$br-6;
}
.warning {
diff --git a/frontend/src/app/main/ui/notifications/context_notification.scss b/frontend/src/app/main/ui/notifications/context_notification.scss
index 69374ac8c7..1b14e33cea 100644
--- a/frontend/src/app/main/ui/notifications/context_notification.scss
+++ b/frontend/src/app/main/ui/notifications/context_notification.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.context-notification {
--context-notification-bg-color: var(--alert-background-color-default);
@@ -13,14 +13,14 @@
--context-notification-border-color: var(--alert-border-color-default);
box-sizing: border-box;
display: grid;
- grid-template-columns: $s-16 1fr;
- gap: $s-8;
- min-height: $s-32;
+ grid-template-columns: deprecated.$s-16 1fr;
+ gap: deprecated.$s-8;
+ min-height: deprecated.$s-32;
height: fit-content;
width: 100%;
- padding: $s-8;
- border: $s-1 solid var(--context-notification-border-color);
- border-radius: $br-8;
+ padding: deprecated.$s-8;
+ border: deprecated.$s-1 solid var(--context-notification-border-color);
+ border-radius: deprecated.$br-8;
background-color: var(--context-notification-bg-color);
}
@@ -66,7 +66,7 @@
}
.context-text {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
align-self: center;
color: var(--context-notification-fg-color);
margin: auto 0;
@@ -78,11 +78,11 @@
.link,
.contain-html .context-text a {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
align-self: center;
display: inline;
text-align: left;
- height: $s-16;
+ height: deprecated.$s-16;
margin: 0;
color: var(--modal-link-foreground-color);
}
diff --git a/frontend/src/app/main/ui/notifications/inline_notification.scss b/frontend/src/app/main/ui/notifications/inline_notification.scss
index 61381be5bf..ee71bc5c3d 100644
--- a/frontend/src/app/main/ui/notifications/inline_notification.scss
+++ b/frontend/src/app/main/ui/notifications/inline_notification.scss
@@ -4,19 +4,19 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.new-inline {
position: absolute;
- top: $s-72;
+ top: deprecated.$s-72;
margin: auto;
left: 0;
right: 0;
- min-height: $s-48;
- min-width: $s-640;
+ min-height: deprecated.$s-48;
+ min-width: deprecated.$s-640;
width: fit-content;
- max-width: $s-960;
- z-index: $z-index-modal;
+ max-width: deprecated.$s-960;
+ z-index: deprecated.$z-index-modal;
}
.link {
diff --git a/frontend/src/app/main/ui/onboarding/newsletter.scss b/frontend/src/app/main/ui/onboarding/newsletter.scss
index 20b4230df3..34abf708bd 100644
--- a/frontend/src/app/main/ui/onboarding/newsletter.scss
+++ b/frontend/src/app/main/ui/onboarding/newsletter.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -15,49 +15,49 @@
position: relative;
display: grid;
grid-template-columns: auto auto;
- gap: $s-32;
- padding-inline: $s-100;
- padding-block-start: $s-100;
- padding-block-end: $s-72;
+ gap: deprecated.$s-32;
+ padding-inline: deprecated.$s-100;
+ padding-block-start: deprecated.$s-100;
+ padding-block-end: deprecated.$s-72;
margin: 0;
- width: $s-960;
- height: $s-632;
- max-width: $s-960;
- max-height: $s-632;
+ width: deprecated.$s-960;
+ height: deprecated.$s-632;
+ max-width: deprecated.$s-960;
+ max-height: deprecated.$s-632;
}
.modal-left {
- width: $s-172;
- margin-block-end: $s-64;
+ width: deprecated.$s-172;
+ margin-block-end: deprecated.$s-64;
img {
- width: $s-172;
- border-radius: $br-8 0 0 $br-8;
+ width: deprecated.$s-172;
+ border-radius: deprecated.$br-8 0 0 deprecated.$br-8;
}
}
.modal-right {
display: grid;
grid-template-columns: 1fr;
- grid-template-rows: $s-40 auto auto auto auto $s-32;
- gap: $s-24;
+ grid-template-rows: deprecated.$s-40 auto auto auto auto deprecated.$s-32;
+ gap: deprecated.$s-24;
position: relative;
}
.modal-title {
- @include bigTitleTipography;
+ @include deprecated.bigTitleTipography;
color: var(--modal-title-foreground-color);
}
.modal-text {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-text-foreground-color);
margin: 0;
}
.newsletter-options {
display: grid;
- gap: $s-16;
- margin-inline-start: $s-16;
+ gap: deprecated.$s-16;
+ margin-inline-start: deprecated.$s-16;
}
.input-wrapper {
@@ -65,7 +65,7 @@
}
.modal-link {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-link-foreground-color);
margin: 0;
}
diff --git a/frontend/src/app/main/ui/onboarding/questions.scss b/frontend/src/app/main/ui/onboarding/questions.scss
index fb4c97f497..94444a493b 100644
--- a/frontend/src/app/main/ui/onboarding/questions.scss
+++ b/frontend/src/app/main/ui/onboarding/questions.scss
@@ -4,34 +4,34 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
}
.modal-container {
- max-width: $s-960;
+ max-width: deprecated.$s-960;
max-height: fit-content;
width: fit-content;
- padding-inline: $s-100;
- padding-block-start: $s-40;
- padding-block-end: $s-72;
- border-radius: $br-8;
- border: $s-2 solid var(--modal-border-color);
+ padding-inline: deprecated.$s-100;
+ padding-block-start: deprecated.$s-40;
+ padding-block-end: deprecated.$s-72;
+ border-radius: deprecated.$br-8;
+ border: deprecated.$s-2 solid var(--modal-border-color);
background-color: var(--modal-background-color);
}
.form-wrapper {
display: grid;
grid-template-columns: 1fr;
- gap: $s-24;
+ gap: deprecated.$s-24;
}
// STEP CONTAINER
.paginator {
- @include smallTitleTipography;
- height: $s-20;
+ @include deprecated.smallTitleTipography;
+ height: deprecated.$s-20;
text-align: right;
color: var(--modal-text-foreground-color);
}
@@ -49,33 +49,33 @@
.radio-btns label,
.select-class span {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
}
// STEP 1
.header-image {
- height: $s-60;
+ height: deprecated.$s-60;
width: auto;
margin-inline-start: auto;
}
.modal-title {
- @include bigTitleTipography;
+ @include deprecated.bigTitleTipography;
color: var(--modal-title-foreground-color);
- min-height: $s-32;
+ min-height: deprecated.$s-32;
margin-block: auto;
}
.modal-subtitle {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-title-foreground-color);
margin: 0;
padding: 0;
}
.modal-text {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-text-foreground-color);
margin: 0;
}
@@ -85,60 +85,60 @@
.step-2,
.step-3,
.step-5 {
- max-width: $s-540;
- width: $s-540;
+ max-width: deprecated.$s-540;
+ width: deprecated.$s-540;
}
.step-2 {
- grid-template-rows: $s-20 auto auto $s-32;
+ grid-template-rows: deprecated.$s-20 auto auto deprecated.$s-32;
}
.modal-question {
display: grid;
grid-template-columns: 1fr;
- grid-template-rows: $s-16 $s-32;
- gap: $s-16;
+ grid-template-rows: deprecated.$s-16 deprecated.$s-32;
+ gap: deprecated.$s-16;
height: fit-content;
}
.question-centered {
- width: $s-424;
- grid-template-rows: auto $s-32;
+ width: deprecated.$s-424;
+ grid-template-rows: auto deprecated.$s-32;
margin: 0 auto;
}
.radio-wrapper {
display: grid;
grid-template-columns: 1fr;
- gap: $s-16;
+ gap: deprecated.$s-16;
}
// STEP-3
.step-3 {
- grid-template-rows: $s-20 auto auto auto auto $s-32;
+ grid-template-rows: deprecated.$s-20 auto auto auto auto deprecated.$s-32;
}
.image-radio {
display: grid;
grid-template-rows: 1fr 1fr;
- grid-template-columns: $s-92 $s-92 $s-92;
- row-gap: $s-16;
- column-gap: $s-24;
+ grid-template-columns: deprecated.$s-92 deprecated.$s-92 deprecated.$s-92;
+ row-gap: deprecated.$s-16;
+ column-gap: deprecated.$s-24;
justify-content: center;
}
.input-spacing {
- height: $s-32;
+ height: deprecated.$s-32;
width: 100%;
- margin-block-end: $s-8;
+ margin-block-end: deprecated.$s-8;
}
.input-spacing input {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
}
// STEP-4
.step-4 {
- grid-template-rows: $s-20 auto auto $s-32;
- row-gap: $s-16;
+ grid-template-rows: deprecated.$s-20 auto auto deprecated.$s-32;
+ row-gap: deprecated.$s-16;
}
diff --git a/frontend/src/app/main/ui/onboarding/team_choice.scss b/frontend/src/app/main/ui/onboarding/team_choice.scss
index 95d275e86c..465ed6152a 100644
--- a/frontend/src/app/main/ui/onboarding/team_choice.scss
+++ b/frontend/src/app/main/ui/onboarding/team_choice.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -12,35 +12,35 @@
.modal-container {
position: relative;
- width: $s-908;
- max-height: $s-800;
+ width: deprecated.$s-908;
+ max-height: deprecated.$s-800;
height: 100%;
- padding-inline: $s-100;
- padding-block-start: $s-40;
- padding-block-end: $s-40;
- border-radius: $br-8;
+ padding-inline: deprecated.$s-100;
+ padding-block-start: deprecated.$s-40;
+ padding-block-end: deprecated.$s-40;
+ border-radius: deprecated.$br-8;
background-color: var(--modal-background-color);
- border: $s-2 solid var(--modal-border-color);
+ border: deprecated.$s-2 solid var(--modal-border-color);
display: flex;
flex-direction: column;
- gap: $s-24;
+ gap: deprecated.$s-24;
}
.modal-sections {
display: grid;
- grid-template-columns: 1fr $s-32 1fr;
- gap: $s-24;
+ grid-template-columns: 1fr deprecated.$s-32 1fr;
+ gap: deprecated.$s-24;
height: 100%;
overflow: hidden;
}
.paginator {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
position: absolute;
- top: $s-40;
- right: $s-100;
- padding: $s-4;
- border-radius: $br-6;
+ top: deprecated.$s-40;
+ right: deprecated.$s-100;
+ padding: deprecated.$s-4;
+ border-radius: deprecated.$br-6;
color: var(--color-foreground-secondary);
}
@@ -48,54 +48,54 @@
.modal-left {
display: grid;
grid-template-columns: 1fr;
- grid-template-rows: $s-32 auto auto 1fr;
- gap: $s-16;
+ grid-template-rows: deprecated.$s-32 auto auto 1fr;
+ gap: deprecated.$s-16;
overflow: auto;
}
.modal-title {
- @include bigTitleTipography;
+ @include deprecated.bigTitleTipography;
color: var(--modal-title-foreground-color);
}
.modal-subtitle {
- @include medTitleTipography;
+ @include deprecated.medTitleTipography;
color: var(--modal-title-foreground-color);
}
.invite-subtitle {
- padding-top: $s-16;
+ padding-top: deprecated.$s-16;
}
.modal-text {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-text-foreground-color);
margin: 0;
}
.modal-desc {
- @include smallTitleTipography;
+ @include deprecated.smallTitleTipography;
margin: 0;
color: var(--modal-title-foreground-color);
}
.team-features {
- @include flexColumn;
- gap: $s-16;
+ @include deprecated.flexColumn;
+ gap: deprecated.$s-16;
margin: 0;
}
.feature {
- @include flexRow;
- gap: $s-16;
+ @include deprecated.flexRow;
+ gap: deprecated.$s-16;
}
.icon {
- @include flexCenter;
- height: $s-32;
- width: $s-32;
- border-radius: $br-circle;
- border: $s-1 solid var(--color-accent-primary);
+ @include deprecated.flexCenter;
+ height: deprecated.$s-32;
+ width: deprecated.$s-32;
+ border-radius: deprecated.$br-circle;
+ border: deprecated.$s-1 solid var(--color-accent-primary);
svg {
@extend .button-icon;
stroke: var(--color-accent-primary);
@@ -117,9 +117,9 @@
// SEPARATOR
.separator {
- width: $s-8;
+ width: deprecated.$s-8;
height: 100%;
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
opacity: 42%;
background-color: var(--modal-separator-backogrund-color);
}
@@ -129,7 +129,7 @@
display: grid;
grid-template-columns: 1fr;
grid-template-rows: 1fr auto;
- gap: $s-24;
+ gap: deprecated.$s-24;
overflow: hidden;
}
@@ -140,21 +140,21 @@
.first-block,
.second-block {
- @include flexColumn;
- gap: $s-16;
+ @include deprecated.flexColumn;
+ gap: deprecated.$s-16;
}
.modal-form {
display: grid;
grid-template-columns: 1fr;
- gap: $s-16;
+ gap: deprecated.$s-16;
}
.team-name-input {
@extend .input-element-label;
label {
- @include flexColumn;
- @include bodySmallTypography;
+ @include deprecated.flexColumn;
+ @include deprecated.bodySmallTypography;
align-items: flex-start;
width: 100%;
border: none;
@@ -162,8 +162,8 @@
height: 100%;
input {
- @include bodySmallTypography;
- margin-top: $s-8;
+ @include deprecated.bodySmallTypography;
+ margin-top: deprecated.$s-8;
}
}
}
@@ -174,21 +174,21 @@
display: grid;
grid-template-columns: 1fr;
grid-template-rows: auto auto 1fr;
- gap: $s-16;
- max-height: $s-512;
+ gap: deprecated.$s-16;
+ max-height: deprecated.$s-512;
}
.modal-form-invitations {
display: grid;
grid-template-columns: 1fr;
grid-template-rows: auto 1fr auto auto;
- margin-block-end: $s-72;
- gap: $s-8;
+ margin-block-end: deprecated.$s-72;
+ gap: deprecated.$s-8;
}
.role-title {
- @include uppercaseTitleTipography;
- margin-block-end: $s-8;
+ @include deprecated.uppercaseTitleTipography;
+ margin-block-end: deprecated.$s-8;
color: var(--modal-title-foreground-color);
}
@@ -198,7 +198,7 @@
}
.modal-hint {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--modal-text-foreground-color);
text-align: right;
}
diff --git a/frontend/src/app/main/ui/releases.cljs b/frontend/src/app/main/ui/releases.cljs
index ea7268dd04..572cb5312d 100644
--- a/frontend/src/app/main/ui/releases.cljs
+++ b/frontend/src/app/main/ui/releases.cljs
@@ -29,6 +29,7 @@
[app.main.ui.releases.v2-0]
[app.main.ui.releases.v2-1]
[app.main.ui.releases.v2-10]
+ [app.main.ui.releases.v2-11]
[app.main.ui.releases.v2-2]
[app.main.ui.releases.v2-3]
[app.main.ui.releases.v2-4]
@@ -101,4 +102,4 @@
(defmethod rc/render-release-notes "0.0"
[params]
- (rc/render-release-notes (assoc params :version "2.10")))
+ (rc/render-release-notes (assoc params :version "2.11")))
diff --git a/frontend/src/app/main/ui/releases/common.scss b/frontend/src/app/main/ui/releases/common.scss
index d2f7a7f117..977411aec5 100644
--- a/frontend/src/app/main/ui/releases/common.scss
+++ b/frontend/src/app/main/ui/releases/common.scss
@@ -4,13 +4,13 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.step-dots {
display: grid;
grid-template-columns: none;
grid-auto-flow: column;
- gap: $s-8;
+ gap: deprecated.$s-8;
height: fit-content;
width: fit-content;
margin: 0;
@@ -20,9 +20,9 @@
}
.dot {
- height: $s-12;
- width: $s-12;
- border-radius: $br-circle;
+ height: deprecated.$s-12;
+ width: deprecated.$s-12;
+ border-radius: deprecated.$br-circle;
background-color: var(--modal-navigator-foreground-color-rest);
cursor: pointer;
}
diff --git a/frontend/src/app/main/ui/releases/v2_0.scss b/frontend/src/app/main/ui/releases/v2_0.scss
index 0108877b0e..0d5bc38d2e 100644
--- a/frontend/src/app/main/ui/releases/v2_0.scss
+++ b/frontend/src/app/main/ui/releases/v2_0.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -12,76 +12,76 @@
.modal-container {
display: grid;
- grid-template-columns: $s-324 1fr;
- height: $s-500;
- width: $s-888;
- border-radius: $br-8;
+ grid-template-columns: deprecated.$s-324 1fr;
+ height: deprecated.$s-500;
+ width: deprecated.$s-888;
+ border-radius: deprecated.$br-8;
background-color: var(--modal-background-color);
- border: $s-2 solid var(--modal-border-color);
+ border: deprecated.$s-2 solid var(--modal-border-color);
}
.start-image {
- width: $s-324;
- border-radius: $br-8 0 0 $br-8;
+ width: deprecated.$s-324;
+ border-radius: deprecated.$br-8 0 0 deprecated.$br-8;
}
.modal-content {
- padding: $s-40;
+ padding: deprecated.$s-40;
display: grid;
- grid-template-rows: auto 1fr $s-32;
- gap: $s-24;
+ grid-template-rows: auto 1fr deprecated.$s-32;
+ gap: deprecated.$s-24;
}
.modal-header {
display: grid;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.version-tag {
- @include flexCenter;
- @include headlineSmallTypography;
- height: $s-32;
- width: $s-96;
+ @include deprecated.flexCenter;
+ @include deprecated.headlineSmallTypography;
+ height: deprecated.$s-32;
+ width: deprecated.$s-96;
background-color: var(--communication-tag-background-color);
color: var(--communication-tag-foreground-color);
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
}
.modal-title {
- @include headlineLargeTypography;
+ @include deprecated.headlineLargeTypography;
color: var(--modal-title-foreground-color);
}
.features-block {
display: flex;
flex-direction: column;
- gap: $s-16;
- width: $s-440;
+ gap: deprecated.$s-16;
+ width: deprecated.$s-440;
}
.feature {
display: flex;
flex-direction: column;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.feature-title {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-title-foreground-color);
}
.feature-content {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
margin: 0;
color: var(--modal-text-foreground-color);
}
.feature-list {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
color: var(--modal-text-foreground-color);
list-style: disc;
display: grid;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.navigation {
@@ -92,7 +92,7 @@
.next-btn {
@extend .button-primary;
- width: $s-100;
+ width: deprecated.$s-100;
justify-self: flex-end;
grid-area: button;
}
diff --git a/frontend/src/app/main/ui/releases/v2_1.scss b/frontend/src/app/main/ui/releases/v2_1.scss
index e305c5d52f..7b2559bc96 100644
--- a/frontend/src/app/main/ui/releases/v2_1.scss
+++ b/frontend/src/app/main/ui/releases/v2_1.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -12,55 +12,55 @@
.modal-container {
display: grid;
- grid-template-columns: $s-324 1fr;
- height: $s-500;
- width: $s-888;
- border-radius: $br-8;
+ grid-template-columns: deprecated.$s-324 1fr;
+ height: deprecated.$s-500;
+ width: deprecated.$s-888;
+ border-radius: deprecated.$br-8;
background-color: var(--modal-background-color);
- border: $s-2 solid var(--modal-border-color);
+ border: deprecated.$s-2 solid var(--modal-border-color);
}
.start-image {
- width: $s-324;
- border-radius: $br-8 0 0 $br-8;
+ width: deprecated.$s-324;
+ border-radius: deprecated.$br-8 0 0 deprecated.$br-8;
}
.modal-content {
- padding: $s-40;
+ padding: deprecated.$s-40;
display: grid;
- grid-template-rows: auto 1fr $s-32;
- gap: $s-24;
+ grid-template-rows: auto 1fr deprecated.$s-32;
+ gap: deprecated.$s-24;
}
.modal-header {
display: grid;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.version-tag {
- @include flexCenter;
- @include headlineSmallTypography;
- height: $s-32;
- width: $s-96;
+ @include deprecated.flexCenter;
+ @include deprecated.headlineSmallTypography;
+ height: deprecated.$s-32;
+ width: deprecated.$s-96;
background-color: var(--communication-tag-background-color);
color: var(--communication-tag-foreground-color);
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
}
.modal-title {
- @include headlineLargeTypography;
+ @include deprecated.headlineLargeTypography;
color: var(--modal-title-foreground-color);
}
.features-block {
display: flex;
flex-direction: column;
- gap: $s-16;
- width: $s-440;
+ gap: deprecated.$s-16;
+ width: deprecated.$s-440;
}
.feature-content {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
margin: 0;
color: var(--modal-text-foreground-color);
}
@@ -73,7 +73,7 @@
.next-btn {
@extend .button-primary;
- width: $s-100;
+ width: deprecated.$s-100;
justify-self: flex-end;
grid-area: button;
}
diff --git a/frontend/src/app/main/ui/releases/v2_10.scss b/frontend/src/app/main/ui/releases/v2_10.scss
index dd1b81c82b..e5d13841eb 100644
--- a/frontend/src/app/main/ui/releases/v2_10.scss
+++ b/frontend/src/app/main/ui/releases/v2_10.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -12,24 +12,24 @@
.modal-container {
display: grid;
- grid-template-columns: $s-324 1fr;
- height: $s-500;
- width: $s-888;
- border-radius: $br-8;
+ grid-template-columns: deprecated.$s-324 1fr;
+ height: deprecated.$s-500;
+ width: deprecated.$s-888;
+ border-radius: deprecated.$br-8;
background-color: var(--modal-background-color);
- border: $s-2 solid var(--modal-border-color);
+ border: deprecated.$s-2 solid var(--modal-border-color);
}
.start-image {
- width: $s-324;
- border-radius: $br-8 0 0 $br-8;
+ width: deprecated.$s-324;
+ border-radius: deprecated.$br-8 0 0 deprecated.$br-8;
}
.modal-content {
- padding: $s-40;
+ padding: deprecated.$s-40;
display: grid;
- grid-template-rows: auto 1fr $s-32;
- gap: $s-24;
+ grid-template-rows: auto 1fr deprecated.$s-32;
+ gap: deprecated.$s-24;
a {
color: var(--button-primary-background-color-rest);
@@ -38,54 +38,54 @@
.modal-header {
display: grid;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.version-tag {
- @include flexCenter;
- @include headlineSmallTypography;
- height: $s-32;
- width: $s-96;
+ @include deprecated.flexCenter;
+ @include deprecated.headlineSmallTypography;
+ height: deprecated.$s-32;
+ width: deprecated.$s-96;
background-color: var(--communication-tag-background-color);
color: var(--communication-tag-foreground-color);
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
}
.modal-title {
- @include headlineLargeTypography;
+ @include deprecated.headlineLargeTypography;
color: var(--modal-title-foreground-color);
}
.features-block {
display: flex;
flex-direction: column;
- gap: $s-16;
- width: $s-440;
+ gap: deprecated.$s-16;
+ width: deprecated.$s-440;
}
.feature {
display: flex;
flex-direction: column;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.feature-title {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-title-foreground-color);
}
.feature-content {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
margin: 0;
color: var(--modal-text-foreground-color);
}
.feature-list {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
color: var(--modal-text-foreground-color);
list-style: disc;
display: grid;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.navigation {
@@ -96,7 +96,7 @@
.next-btn {
@extend .button-primary;
- width: $s-100;
+ width: deprecated.$s-100;
justify-self: flex-end;
grid-area: button;
}
diff --git a/frontend/src/app/main/ui/releases/v2_11.cljs b/frontend/src/app/main/ui/releases/v2_11.cljs
new file mode 100644
index 0000000000..a4b330f8bc
--- /dev/null
+++ b/frontend/src/app/main/ui/releases/v2_11.cljs
@@ -0,0 +1,189 @@
+;; 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.releases.v2-11
+ (:require-macros [app.main.style :as stl])
+ (:require
+ [app.common.data.macros :as dm]
+ [app.main.ui.releases.common :as c]
+ [rumext.v2 :as mf]))
+
+(defmethod c/render-release-notes "2.11"
+ [{:keys [slide klass next finish navigate version]}]
+ (mf/html
+ (case slide
+ :start
+ [:div {:class (stl/css-case :modal-overlay true)}
+ [:div.animated {:class klass}
+ [:div {:class (stl/css :modal-container)}
+ [:img {:src "images/features/2.11-slide-0.jpg"
+ :class (stl/css :start-image)
+ :border "0"
+ :alt "Penpot 2.11 is here!"}]
+
+ [:div {:class (stl/css :modal-content)}
+ [:div {:class (stl/css :modal-header)}
+ [:h1 {:class (stl/css :modal-title)}
+ "What’s new in Penpot?"]
+
+ [:div {:class (stl/css :version-tag)}
+ (dm/str "Version " version)]]
+
+ [:div {:class (stl/css :features-block)}
+ [:span {:class (stl/css :feature-title)}
+ "Typography tokens take the stage!"]
+
+ [:p {:class (stl/css :feature-content)}
+ "This release brings one of our most anticipated design system upgrades yet: Typography tokens."]
+
+ [:p {:class (stl/css :feature-content)}
+ "But that’s not all. Variants get a nice boost with multi-switching, new creation shortcuts, and draggable property reordering. Invitations are now easier to manage and the user menu has been reorganized. Now showing your current Penpot version and direct access to release info."]
+
+ [:p {:class (stl/css :feature-content)}
+ "And as always, you’ll notice performance improvements throughout. Faster, smoother, and just a bit more magical every time."]
+
+ [:p {:class (stl/css :feature-content)}
+ "Let’s dive in!"]]
+
+ [:div {:class (stl/css :navigation)}
+ [:button {:class (stl/css :next-btn)
+ :on-click next} "Continue"]]]]]]
+
+ 0
+ [:div {:class (stl/css-case :modal-overlay true)}
+ [:div.animated {:class klass}
+ [:div {:class (stl/css :modal-container)}
+ [:img {:src "images/features/2.11-typography-token.gif"
+ :class (stl/css :start-image)
+ :border "0"
+ :alt "Typography token: one token to rule your text"}]
+
+ [:div {:class (stl/css :modal-content)}
+ [:div {:class (stl/css :modal-header)}
+ [:h1 {:class (stl/css :modal-title)}
+ "Typography token: one token to rule your text"]]
+
+ [:div {:class (stl/css :feature)}
+ [:p {:class (stl/css :feature-content)}
+ "Imagine having just one token to manage all your typography. With the new Typography token, you can create presets that bundle all your text styles (font, weight, size, line height, spacing, and more) into a single reusable definition. Just one clean, flexible token to keep your type consistent across your designs."]
+
+ [:p {:class (stl/css :feature-content)}
+ "The Typography token also marks a big step forward for Penpot: it’s our first composite token! Composite tokens are special because they can hold multiple properties within one token. Shadow token will be the next composite token coming your way."]]
+
+ [:div {:class (stl/css :navigation)}
+ [:& c/navigation-bullets
+ {:slide slide
+ :navigate navigate
+ :total 4}]
+
+ [:button {:on-click next
+ :class (stl/css :next-btn)} "Continue"]]]]]]
+
+ 1
+ [:div {:class (stl/css-case :modal-overlay true)}
+ [:div.animated {:class klass}
+ [:div {:class (stl/css :modal-container)}
+ [:img {:src "images/features/2.11-variants.gif"
+ :class (stl/css :start-image)
+ :border "0"
+ :alt "Variants get a power-up"}]
+
+ [:div {:class (stl/css :modal-content)}
+ [:div {:class (stl/css :modal-header)}
+ [:h1 {:class (stl/css :modal-title)}
+ "Variants get a power-up"]]
+ [:div {:class (stl/css :feature)}
+
+ [:p {:class (stl/css :feature-content)}
+ "Variants just got published and they already got a serious quality-of-life boost!"]
+
+ [:p {:class (stl/css :feature-content)}
+ "- Switch several variant copies at once: No more clicking through each one individually when you want to update a property. Just select multiple copies and change their values in one go — fast, smooth, and efficient."]
+
+ [:p {:class (stl/css :feature-content)}
+ "- New ways to create variants, right from the design viewport: No need to dig through menus. The new buttons make it super quick to spin up variant sets directly where you’re working."]
+
+ [:p {:class (stl/css :feature-content)}
+ "- Reorder your component properties by drag & drop: Because organization matters, now you can arrange your properties however makes the most sense to you, so you can keep the ones you use most often right where you want them."]]
+
+ [:div {:class (stl/css :navigation)}
+ [:& c/navigation-bullets
+ {:slide slide
+ :navigate navigate
+ :total 4}]
+
+ [:button {:on-click next
+ :class (stl/css :next-btn)} "Continue"]]]]]]
+
+ 2
+ [:div {:class (stl/css-case :modal-overlay true)}
+ [:div.animated {:class klass}
+ [:div {:class (stl/css :modal-container)}
+ [:img {:src "images/features/2.11-invitations.gif"
+ :class (stl/css :start-image)
+ :border "0"
+ :alt "A smoother way to manage invitations"}]
+
+ [:div {:class (stl/css :modal-content)}
+ [:div {:class (stl/css :modal-header)}
+ [:h1 {:class (stl/css :modal-title)}
+ "A smoother way to manage invitations"]]
+ [:div {:class (stl/css :feature)}
+
+ [:p {:class (stl/css :feature-content)}
+ "The Invitations section just got a big usability upgrade for admins. Here’s what’s new:"]
+
+
+ [:p {:class (stl/css :feature-content)}
+ "Sorting - Organize invitations by role type or status to keep track of who’s in and who’s pending."]
+ [:p {:class (stl/css :feature-content)}
+ "Quicker actions - Main actions (resend and delete) are now visible upfront for quicker access."]
+ [:p {:class (stl/css :feature-content)}
+ "Bulk management - Select multiple invitations to resend or delete them all at once."]
+
+ [:p {:class (stl/css :feature-content)}
+ "Invited users will also get clearer emails, including a reminder sent one day before the invite expires (after seven days). Simple, clean, and much more efficient."]]
+
+ [:div {:class (stl/css :navigation)}
+ [:& c/navigation-bullets
+ {:slide slide
+ :navigate navigate
+ :total 4}]
+
+ [:button {:on-click next
+ :class (stl/css :next-btn)} "Continue"]]]]]]
+
+ 3
+ [:div {:class (stl/css-case :modal-overlay true)}
+ [:div.animated {:class klass}
+ [:div {:class (stl/css :modal-container)}
+ [:img {:src "images/features/2.11-menu.gif"
+ :class (stl/css :start-image)
+ :border "0"
+ :alt "User menu makeover"}]
+
+ [:div {:class (stl/css :modal-content)}
+ [:div {:class (stl/css :modal-header)}
+ [:h1 {:class (stl/css :modal-title)}
+ "User menu makeover"]]
+ [:div {:class (stl/css :feature)}
+
+ [:p {:class (stl/css :feature-content)}
+ "The user menu got a well-deserved cleanup. Options are now grouped into clear sections like Help & Learning and Community & Contributions, making navigation faster and easier."]
+
+ [:p {:class (stl/css :feature-content)}
+ "You’ll also notice a handy new detail: the menu now shows your current Penpot version and gives you quick access to changelog information. This is especially useful for self-hosted setups that want to stay in sync with the latest updates. Simple, organized, and more informative."]]
+
+ [:div {:class (stl/css :navigation)}
+
+ [:& c/navigation-bullets
+ {:slide slide
+ :navigate navigate
+ :total 4}]
+
+ [:button {:on-click finish
+ :class (stl/css :next-btn)} "Let's go"]]]]]])))
+
diff --git a/frontend/src/app/main/ui/releases/v2_11.scss b/frontend/src/app/main/ui/releases/v2_11.scss
new file mode 100644
index 0000000000..e5d13841eb
--- /dev/null
+++ b/frontend/src/app/main/ui/releases/v2_11.scss
@@ -0,0 +1,102 @@
+// 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 "refactor/common-refactor.scss" as deprecated;
+
+.modal-overlay {
+ @extend .modal-overlay-base;
+}
+
+.modal-container {
+ display: grid;
+ grid-template-columns: deprecated.$s-324 1fr;
+ height: deprecated.$s-500;
+ width: deprecated.$s-888;
+ border-radius: deprecated.$br-8;
+ background-color: var(--modal-background-color);
+ border: deprecated.$s-2 solid var(--modal-border-color);
+}
+
+.start-image {
+ width: deprecated.$s-324;
+ border-radius: deprecated.$br-8 0 0 deprecated.$br-8;
+}
+
+.modal-content {
+ padding: deprecated.$s-40;
+ display: grid;
+ grid-template-rows: auto 1fr deprecated.$s-32;
+ gap: deprecated.$s-24;
+
+ a {
+ color: var(--button-primary-background-color-rest);
+ }
+}
+
+.modal-header {
+ display: grid;
+ gap: deprecated.$s-8;
+}
+
+.version-tag {
+ @include deprecated.flexCenter;
+ @include deprecated.headlineSmallTypography;
+ height: deprecated.$s-32;
+ width: deprecated.$s-96;
+ background-color: var(--communication-tag-background-color);
+ color: var(--communication-tag-foreground-color);
+ border-radius: deprecated.$br-8;
+}
+
+.modal-title {
+ @include deprecated.headlineLargeTypography;
+ color: var(--modal-title-foreground-color);
+}
+
+.features-block {
+ display: flex;
+ flex-direction: column;
+ gap: deprecated.$s-16;
+ width: deprecated.$s-440;
+}
+
+.feature {
+ display: flex;
+ flex-direction: column;
+ gap: deprecated.$s-8;
+}
+
+.feature-title {
+ @include deprecated.bodyLargeTypography;
+ color: var(--modal-title-foreground-color);
+}
+
+.feature-content {
+ @include deprecated.bodyMediumTypography;
+ margin: 0;
+ color: var(--modal-text-foreground-color);
+}
+
+.feature-list {
+ @include deprecated.bodyMediumTypography;
+ color: var(--modal-text-foreground-color);
+ list-style: disc;
+ display: grid;
+ gap: deprecated.$s-8;
+}
+
+.navigation {
+ width: 100%;
+ display: grid;
+ grid-template-areas: "bullets button";
+}
+
+.next-btn {
+ @extend .button-primary;
+ width: deprecated.$s-100;
+ justify-self: flex-end;
+ grid-area: button;
+}
diff --git a/frontend/src/app/main/ui/releases/v2_2.scss b/frontend/src/app/main/ui/releases/v2_2.scss
index dd6adbd8a0..34d030466f 100644
--- a/frontend/src/app/main/ui/releases/v2_2.scss
+++ b/frontend/src/app/main/ui/releases/v2_2.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -12,55 +12,55 @@
.modal-container {
display: grid;
- grid-template-columns: $s-324 1fr;
- height: $s-480;
- width: $s-888;
- border-radius: $br-8;
+ grid-template-columns: deprecated.$s-324 1fr;
+ height: deprecated.$s-480;
+ width: deprecated.$s-888;
+ border-radius: deprecated.$br-8;
background-color: var(--modal-background-color);
- border: $s-2 solid var(--modal-border-color);
+ border: deprecated.$s-2 solid var(--modal-border-color);
}
.start-image {
- width: $s-324;
- border-radius: $br-8 0 0 $br-8;
+ width: deprecated.$s-324;
+ border-radius: deprecated.$br-8 0 0 deprecated.$br-8;
}
.modal-content {
- padding: $s-40;
+ padding: deprecated.$s-40;
display: grid;
- grid-template-rows: auto 1fr $s-32;
- gap: $s-24;
+ grid-template-rows: auto 1fr deprecated.$s-32;
+ gap: deprecated.$s-24;
}
.modal-header {
display: grid;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.version-tag {
- @include flexCenter;
- @include headlineSmallTypography;
- height: $s-32;
- width: $s-96;
+ @include deprecated.flexCenter;
+ @include deprecated.headlineSmallTypography;
+ height: deprecated.$s-32;
+ width: deprecated.$s-96;
background-color: var(--communication-tag-background-color);
color: var(--communication-tag-foreground-color);
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
}
.modal-title {
- @include headlineLargeTypography;
+ @include deprecated.headlineLargeTypography;
color: var(--modal-title-foreground-color);
}
.features-block {
display: flex;
flex-direction: column;
- gap: $s-16;
- width: $s-440;
+ gap: deprecated.$s-16;
+ width: deprecated.$s-440;
}
.feature-content {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
margin: 0;
color: var(--modal-text-foreground-color);
}
@@ -73,7 +73,7 @@
.next-btn {
@extend .button-primary;
- width: $s-100;
+ width: deprecated.$s-100;
justify-self: flex-end;
grid-area: button;
}
diff --git a/frontend/src/app/main/ui/releases/v2_3.scss b/frontend/src/app/main/ui/releases/v2_3.scss
index dd1b81c82b..e5d13841eb 100644
--- a/frontend/src/app/main/ui/releases/v2_3.scss
+++ b/frontend/src/app/main/ui/releases/v2_3.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -12,24 +12,24 @@
.modal-container {
display: grid;
- grid-template-columns: $s-324 1fr;
- height: $s-500;
- width: $s-888;
- border-radius: $br-8;
+ grid-template-columns: deprecated.$s-324 1fr;
+ height: deprecated.$s-500;
+ width: deprecated.$s-888;
+ border-radius: deprecated.$br-8;
background-color: var(--modal-background-color);
- border: $s-2 solid var(--modal-border-color);
+ border: deprecated.$s-2 solid var(--modal-border-color);
}
.start-image {
- width: $s-324;
- border-radius: $br-8 0 0 $br-8;
+ width: deprecated.$s-324;
+ border-radius: deprecated.$br-8 0 0 deprecated.$br-8;
}
.modal-content {
- padding: $s-40;
+ padding: deprecated.$s-40;
display: grid;
- grid-template-rows: auto 1fr $s-32;
- gap: $s-24;
+ grid-template-rows: auto 1fr deprecated.$s-32;
+ gap: deprecated.$s-24;
a {
color: var(--button-primary-background-color-rest);
@@ -38,54 +38,54 @@
.modal-header {
display: grid;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.version-tag {
- @include flexCenter;
- @include headlineSmallTypography;
- height: $s-32;
- width: $s-96;
+ @include deprecated.flexCenter;
+ @include deprecated.headlineSmallTypography;
+ height: deprecated.$s-32;
+ width: deprecated.$s-96;
background-color: var(--communication-tag-background-color);
color: var(--communication-tag-foreground-color);
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
}
.modal-title {
- @include headlineLargeTypography;
+ @include deprecated.headlineLargeTypography;
color: var(--modal-title-foreground-color);
}
.features-block {
display: flex;
flex-direction: column;
- gap: $s-16;
- width: $s-440;
+ gap: deprecated.$s-16;
+ width: deprecated.$s-440;
}
.feature {
display: flex;
flex-direction: column;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.feature-title {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-title-foreground-color);
}
.feature-content {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
margin: 0;
color: var(--modal-text-foreground-color);
}
.feature-list {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
color: var(--modal-text-foreground-color);
list-style: disc;
display: grid;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.navigation {
@@ -96,7 +96,7 @@
.next-btn {
@extend .button-primary;
- width: $s-100;
+ width: deprecated.$s-100;
justify-self: flex-end;
grid-area: button;
}
diff --git a/frontend/src/app/main/ui/releases/v2_4.scss b/frontend/src/app/main/ui/releases/v2_4.scss
index dd1b81c82b..e5d13841eb 100644
--- a/frontend/src/app/main/ui/releases/v2_4.scss
+++ b/frontend/src/app/main/ui/releases/v2_4.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -12,24 +12,24 @@
.modal-container {
display: grid;
- grid-template-columns: $s-324 1fr;
- height: $s-500;
- width: $s-888;
- border-radius: $br-8;
+ grid-template-columns: deprecated.$s-324 1fr;
+ height: deprecated.$s-500;
+ width: deprecated.$s-888;
+ border-radius: deprecated.$br-8;
background-color: var(--modal-background-color);
- border: $s-2 solid var(--modal-border-color);
+ border: deprecated.$s-2 solid var(--modal-border-color);
}
.start-image {
- width: $s-324;
- border-radius: $br-8 0 0 $br-8;
+ width: deprecated.$s-324;
+ border-radius: deprecated.$br-8 0 0 deprecated.$br-8;
}
.modal-content {
- padding: $s-40;
+ padding: deprecated.$s-40;
display: grid;
- grid-template-rows: auto 1fr $s-32;
- gap: $s-24;
+ grid-template-rows: auto 1fr deprecated.$s-32;
+ gap: deprecated.$s-24;
a {
color: var(--button-primary-background-color-rest);
@@ -38,54 +38,54 @@
.modal-header {
display: grid;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.version-tag {
- @include flexCenter;
- @include headlineSmallTypography;
- height: $s-32;
- width: $s-96;
+ @include deprecated.flexCenter;
+ @include deprecated.headlineSmallTypography;
+ height: deprecated.$s-32;
+ width: deprecated.$s-96;
background-color: var(--communication-tag-background-color);
color: var(--communication-tag-foreground-color);
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
}
.modal-title {
- @include headlineLargeTypography;
+ @include deprecated.headlineLargeTypography;
color: var(--modal-title-foreground-color);
}
.features-block {
display: flex;
flex-direction: column;
- gap: $s-16;
- width: $s-440;
+ gap: deprecated.$s-16;
+ width: deprecated.$s-440;
}
.feature {
display: flex;
flex-direction: column;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.feature-title {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-title-foreground-color);
}
.feature-content {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
margin: 0;
color: var(--modal-text-foreground-color);
}
.feature-list {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
color: var(--modal-text-foreground-color);
list-style: disc;
display: grid;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.navigation {
@@ -96,7 +96,7 @@
.next-btn {
@extend .button-primary;
- width: $s-100;
+ width: deprecated.$s-100;
justify-self: flex-end;
grid-area: button;
}
diff --git a/frontend/src/app/main/ui/releases/v2_5.scss b/frontend/src/app/main/ui/releases/v2_5.scss
index dd1b81c82b..e5d13841eb 100644
--- a/frontend/src/app/main/ui/releases/v2_5.scss
+++ b/frontend/src/app/main/ui/releases/v2_5.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -12,24 +12,24 @@
.modal-container {
display: grid;
- grid-template-columns: $s-324 1fr;
- height: $s-500;
- width: $s-888;
- border-radius: $br-8;
+ grid-template-columns: deprecated.$s-324 1fr;
+ height: deprecated.$s-500;
+ width: deprecated.$s-888;
+ border-radius: deprecated.$br-8;
background-color: var(--modal-background-color);
- border: $s-2 solid var(--modal-border-color);
+ border: deprecated.$s-2 solid var(--modal-border-color);
}
.start-image {
- width: $s-324;
- border-radius: $br-8 0 0 $br-8;
+ width: deprecated.$s-324;
+ border-radius: deprecated.$br-8 0 0 deprecated.$br-8;
}
.modal-content {
- padding: $s-40;
+ padding: deprecated.$s-40;
display: grid;
- grid-template-rows: auto 1fr $s-32;
- gap: $s-24;
+ grid-template-rows: auto 1fr deprecated.$s-32;
+ gap: deprecated.$s-24;
a {
color: var(--button-primary-background-color-rest);
@@ -38,54 +38,54 @@
.modal-header {
display: grid;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.version-tag {
- @include flexCenter;
- @include headlineSmallTypography;
- height: $s-32;
- width: $s-96;
+ @include deprecated.flexCenter;
+ @include deprecated.headlineSmallTypography;
+ height: deprecated.$s-32;
+ width: deprecated.$s-96;
background-color: var(--communication-tag-background-color);
color: var(--communication-tag-foreground-color);
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
}
.modal-title {
- @include headlineLargeTypography;
+ @include deprecated.headlineLargeTypography;
color: var(--modal-title-foreground-color);
}
.features-block {
display: flex;
flex-direction: column;
- gap: $s-16;
- width: $s-440;
+ gap: deprecated.$s-16;
+ width: deprecated.$s-440;
}
.feature {
display: flex;
flex-direction: column;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.feature-title {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-title-foreground-color);
}
.feature-content {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
margin: 0;
color: var(--modal-text-foreground-color);
}
.feature-list {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
color: var(--modal-text-foreground-color);
list-style: disc;
display: grid;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.navigation {
@@ -96,7 +96,7 @@
.next-btn {
@extend .button-primary;
- width: $s-100;
+ width: deprecated.$s-100;
justify-self: flex-end;
grid-area: button;
}
diff --git a/frontend/src/app/main/ui/releases/v2_6.scss b/frontend/src/app/main/ui/releases/v2_6.scss
index dd1b81c82b..e5d13841eb 100644
--- a/frontend/src/app/main/ui/releases/v2_6.scss
+++ b/frontend/src/app/main/ui/releases/v2_6.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -12,24 +12,24 @@
.modal-container {
display: grid;
- grid-template-columns: $s-324 1fr;
- height: $s-500;
- width: $s-888;
- border-radius: $br-8;
+ grid-template-columns: deprecated.$s-324 1fr;
+ height: deprecated.$s-500;
+ width: deprecated.$s-888;
+ border-radius: deprecated.$br-8;
background-color: var(--modal-background-color);
- border: $s-2 solid var(--modal-border-color);
+ border: deprecated.$s-2 solid var(--modal-border-color);
}
.start-image {
- width: $s-324;
- border-radius: $br-8 0 0 $br-8;
+ width: deprecated.$s-324;
+ border-radius: deprecated.$br-8 0 0 deprecated.$br-8;
}
.modal-content {
- padding: $s-40;
+ padding: deprecated.$s-40;
display: grid;
- grid-template-rows: auto 1fr $s-32;
- gap: $s-24;
+ grid-template-rows: auto 1fr deprecated.$s-32;
+ gap: deprecated.$s-24;
a {
color: var(--button-primary-background-color-rest);
@@ -38,54 +38,54 @@
.modal-header {
display: grid;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.version-tag {
- @include flexCenter;
- @include headlineSmallTypography;
- height: $s-32;
- width: $s-96;
+ @include deprecated.flexCenter;
+ @include deprecated.headlineSmallTypography;
+ height: deprecated.$s-32;
+ width: deprecated.$s-96;
background-color: var(--communication-tag-background-color);
color: var(--communication-tag-foreground-color);
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
}
.modal-title {
- @include headlineLargeTypography;
+ @include deprecated.headlineLargeTypography;
color: var(--modal-title-foreground-color);
}
.features-block {
display: flex;
flex-direction: column;
- gap: $s-16;
- width: $s-440;
+ gap: deprecated.$s-16;
+ width: deprecated.$s-440;
}
.feature {
display: flex;
flex-direction: column;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.feature-title {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-title-foreground-color);
}
.feature-content {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
margin: 0;
color: var(--modal-text-foreground-color);
}
.feature-list {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
color: var(--modal-text-foreground-color);
list-style: disc;
display: grid;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.navigation {
@@ -96,7 +96,7 @@
.next-btn {
@extend .button-primary;
- width: $s-100;
+ width: deprecated.$s-100;
justify-self: flex-end;
grid-area: button;
}
diff --git a/frontend/src/app/main/ui/releases/v2_7.scss b/frontend/src/app/main/ui/releases/v2_7.scss
index dd1b81c82b..e5d13841eb 100644
--- a/frontend/src/app/main/ui/releases/v2_7.scss
+++ b/frontend/src/app/main/ui/releases/v2_7.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -12,24 +12,24 @@
.modal-container {
display: grid;
- grid-template-columns: $s-324 1fr;
- height: $s-500;
- width: $s-888;
- border-radius: $br-8;
+ grid-template-columns: deprecated.$s-324 1fr;
+ height: deprecated.$s-500;
+ width: deprecated.$s-888;
+ border-radius: deprecated.$br-8;
background-color: var(--modal-background-color);
- border: $s-2 solid var(--modal-border-color);
+ border: deprecated.$s-2 solid var(--modal-border-color);
}
.start-image {
- width: $s-324;
- border-radius: $br-8 0 0 $br-8;
+ width: deprecated.$s-324;
+ border-radius: deprecated.$br-8 0 0 deprecated.$br-8;
}
.modal-content {
- padding: $s-40;
+ padding: deprecated.$s-40;
display: grid;
- grid-template-rows: auto 1fr $s-32;
- gap: $s-24;
+ grid-template-rows: auto 1fr deprecated.$s-32;
+ gap: deprecated.$s-24;
a {
color: var(--button-primary-background-color-rest);
@@ -38,54 +38,54 @@
.modal-header {
display: grid;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.version-tag {
- @include flexCenter;
- @include headlineSmallTypography;
- height: $s-32;
- width: $s-96;
+ @include deprecated.flexCenter;
+ @include deprecated.headlineSmallTypography;
+ height: deprecated.$s-32;
+ width: deprecated.$s-96;
background-color: var(--communication-tag-background-color);
color: var(--communication-tag-foreground-color);
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
}
.modal-title {
- @include headlineLargeTypography;
+ @include deprecated.headlineLargeTypography;
color: var(--modal-title-foreground-color);
}
.features-block {
display: flex;
flex-direction: column;
- gap: $s-16;
- width: $s-440;
+ gap: deprecated.$s-16;
+ width: deprecated.$s-440;
}
.feature {
display: flex;
flex-direction: column;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.feature-title {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-title-foreground-color);
}
.feature-content {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
margin: 0;
color: var(--modal-text-foreground-color);
}
.feature-list {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
color: var(--modal-text-foreground-color);
list-style: disc;
display: grid;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.navigation {
@@ -96,7 +96,7 @@
.next-btn {
@extend .button-primary;
- width: $s-100;
+ width: deprecated.$s-100;
justify-self: flex-end;
grid-area: button;
}
diff --git a/frontend/src/app/main/ui/releases/v2_8.scss b/frontend/src/app/main/ui/releases/v2_8.scss
index dd1b81c82b..e5d13841eb 100644
--- a/frontend/src/app/main/ui/releases/v2_8.scss
+++ b/frontend/src/app/main/ui/releases/v2_8.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -12,24 +12,24 @@
.modal-container {
display: grid;
- grid-template-columns: $s-324 1fr;
- height: $s-500;
- width: $s-888;
- border-radius: $br-8;
+ grid-template-columns: deprecated.$s-324 1fr;
+ height: deprecated.$s-500;
+ width: deprecated.$s-888;
+ border-radius: deprecated.$br-8;
background-color: var(--modal-background-color);
- border: $s-2 solid var(--modal-border-color);
+ border: deprecated.$s-2 solid var(--modal-border-color);
}
.start-image {
- width: $s-324;
- border-radius: $br-8 0 0 $br-8;
+ width: deprecated.$s-324;
+ border-radius: deprecated.$br-8 0 0 deprecated.$br-8;
}
.modal-content {
- padding: $s-40;
+ padding: deprecated.$s-40;
display: grid;
- grid-template-rows: auto 1fr $s-32;
- gap: $s-24;
+ grid-template-rows: auto 1fr deprecated.$s-32;
+ gap: deprecated.$s-24;
a {
color: var(--button-primary-background-color-rest);
@@ -38,54 +38,54 @@
.modal-header {
display: grid;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.version-tag {
- @include flexCenter;
- @include headlineSmallTypography;
- height: $s-32;
- width: $s-96;
+ @include deprecated.flexCenter;
+ @include deprecated.headlineSmallTypography;
+ height: deprecated.$s-32;
+ width: deprecated.$s-96;
background-color: var(--communication-tag-background-color);
color: var(--communication-tag-foreground-color);
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
}
.modal-title {
- @include headlineLargeTypography;
+ @include deprecated.headlineLargeTypography;
color: var(--modal-title-foreground-color);
}
.features-block {
display: flex;
flex-direction: column;
- gap: $s-16;
- width: $s-440;
+ gap: deprecated.$s-16;
+ width: deprecated.$s-440;
}
.feature {
display: flex;
flex-direction: column;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.feature-title {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-title-foreground-color);
}
.feature-content {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
margin: 0;
color: var(--modal-text-foreground-color);
}
.feature-list {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
color: var(--modal-text-foreground-color);
list-style: disc;
display: grid;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.navigation {
@@ -96,7 +96,7 @@
.next-btn {
@extend .button-primary;
- width: $s-100;
+ width: deprecated.$s-100;
justify-self: flex-end;
grid-area: button;
}
diff --git a/frontend/src/app/main/ui/releases/v2_9.scss b/frontend/src/app/main/ui/releases/v2_9.scss
index dd1b81c82b..e5d13841eb 100644
--- a/frontend/src/app/main/ui/releases/v2_9.scss
+++ b/frontend/src/app/main/ui/releases/v2_9.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -12,24 +12,24 @@
.modal-container {
display: grid;
- grid-template-columns: $s-324 1fr;
- height: $s-500;
- width: $s-888;
- border-radius: $br-8;
+ grid-template-columns: deprecated.$s-324 1fr;
+ height: deprecated.$s-500;
+ width: deprecated.$s-888;
+ border-radius: deprecated.$br-8;
background-color: var(--modal-background-color);
- border: $s-2 solid var(--modal-border-color);
+ border: deprecated.$s-2 solid var(--modal-border-color);
}
.start-image {
- width: $s-324;
- border-radius: $br-8 0 0 $br-8;
+ width: deprecated.$s-324;
+ border-radius: deprecated.$br-8 0 0 deprecated.$br-8;
}
.modal-content {
- padding: $s-40;
+ padding: deprecated.$s-40;
display: grid;
- grid-template-rows: auto 1fr $s-32;
- gap: $s-24;
+ grid-template-rows: auto 1fr deprecated.$s-32;
+ gap: deprecated.$s-24;
a {
color: var(--button-primary-background-color-rest);
@@ -38,54 +38,54 @@
.modal-header {
display: grid;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.version-tag {
- @include flexCenter;
- @include headlineSmallTypography;
- height: $s-32;
- width: $s-96;
+ @include deprecated.flexCenter;
+ @include deprecated.headlineSmallTypography;
+ height: deprecated.$s-32;
+ width: deprecated.$s-96;
background-color: var(--communication-tag-background-color);
color: var(--communication-tag-foreground-color);
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
}
.modal-title {
- @include headlineLargeTypography;
+ @include deprecated.headlineLargeTypography;
color: var(--modal-title-foreground-color);
}
.features-block {
display: flex;
flex-direction: column;
- gap: $s-16;
- width: $s-440;
+ gap: deprecated.$s-16;
+ width: deprecated.$s-440;
}
.feature {
display: flex;
flex-direction: column;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.feature-title {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-title-foreground-color);
}
.feature-content {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
margin: 0;
color: var(--modal-text-foreground-color);
}
.feature-list {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
color: var(--modal-text-foreground-color);
list-style: disc;
display: grid;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.navigation {
@@ -96,7 +96,7 @@
.next-btn {
@extend .button-primary;
- width: $s-100;
+ width: deprecated.$s-100;
justify-self: flex-end;
grid-area: button;
}
diff --git a/frontend/src/app/main/ui/settings.scss b/frontend/src/app/main/ui/settings.scss
index 5c95a0058d..2963138812 100644
--- a/frontend/src/app/main/ui/settings.scss
+++ b/frontend/src/app/main/ui/settings.scss
@@ -4,14 +4,14 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
@use "common/refactor/common-dashboard";
.dashboard {
background-color: var(--app-background);
display: grid;
- grid-template-rows: $s-48 1fr;
- grid-template-columns: $s-40 $s-256 1fr;
+ grid-template-rows: deprecated.$s-48 1fr;
+ grid-template-columns: deprecated.$s-40 deprecated.$s-256 1fr;
height: 100vh;
}
@@ -20,26 +20,26 @@
flex-direction: column;
position: relative;
grid-row: 1 / span 2;
- padding: $s-16 $s-16 0 0;
+ padding: deprecated.$s-16 deprecated.$s-16 0 0;
}
.dashboard-container {
flex: 1 0 0;
- margin-right: $s-16;
+ margin-right: deprecated.$s-16;
overflow-y: auto;
width: 100%;
- border-top: $s-1 solid var(--color-background-quaternary);
+ border-top: deprecated.$s-1 solid var(--color-background-quaternary);
&.dashboard-projects {
user-select: none;
}
&.dashboard-shared {
- width: calc(100vw - $s-320);
- margin-right: $s-52;
+ width: calc(100vw - deprecated.$s-320);
+ margin-right: deprecated.$s-52;
}
&.search {
- margin-top: $s-12;
+ margin-top: deprecated.$s-12;
}
}
@@ -54,24 +54,24 @@
}
.form-container {
- width: $s-800;
- margin: $s-48 auto $s-32 $s-120;
+ width: deprecated.$s-800;
+ margin: deprecated.$s-48 auto deprecated.$s-32 deprecated.$s-120;
display: flex;
- max-width: $s-368;
+ max-width: deprecated.$s-368;
width: 100%;
&.two-columns {
- max-width: $s-520;
+ max-width: deprecated.$s-520;
justify-content: space-between;
flex-direction: row;
}
h2 {
- margin-bottom: $s-16;
+ margin-bottom: deprecated.$s-16;
}
form {
- width: $s-468;
+ width: deprecated.$s-468;
.custom-input,
.custom-select {
@@ -80,26 +80,26 @@
position: relative;
text-transform: uppercase;
color: var(--color-foreground-primary);
- font-size: $fs-11;
- margin-bottom: $s-12;
- margin-left: calc(-1 * $s-4);
+ font-size: deprecated.$fs-11;
+ margin-bottom: deprecated.$s-12;
+ margin-left: calc(-1 * deprecated.$s-4);
}
input,
select {
background-color: var(--color-background-tertiary);
- border-radius: $s-8;
+ border-radius: deprecated.$s-8;
border-color: transparent;
color: var(--color-foreground-primary);
- padding: 0 $s-16;
+ padding: 0 deprecated.$s-16;
&:focus {
- outline: $s-1 solid var(--color-accent-primary);
+ outline: deprecated.$s-1 solid var(--color-accent-primary);
}
::placeholder {
color: var(--color-foreground-secondary);
}
}
.help-icon {
- bottom: $s-12;
+ bottom: deprecated.$s-12;
top: auto;
svg {
fill: var(--color-foreground-secondary);
@@ -114,30 +114,30 @@
}
.input-container {
background-color: var(--color-background-tertiary);
- border-radius: $s-8;
+ border-radius: deprecated.$s-8;
border-color: transparent;
- margin-top: $s-24;
+ margin-top: deprecated.$s-24;
.main-content {
label {
position: absolute;
- top: calc(-1 * $s-24);
+ top: calc(-1 * deprecated.$s-24);
}
span {
color: var(--color-foreground-primary);
}
}
&:focus {
- border: $s-1 solid var(--color-accent-primary);
+ border: deprecated.$s-1 solid var(--color-accent-primary);
}
}
textarea {
- border-radius: $s-8;
- padding: $s-12 $s-16;
+ border-radius: deprecated.$s-8;
+ padding: deprecated.$s-12 deprecated.$s-16;
background-color: var(--color-background-tertiary);
color: var(--color-foreground-primary);
border: none;
&:focus {
- outline: $s-1 solid var(--color-accent-primary);
+ outline: deprecated.$s-1 solid var(--color-accent-primary);
}
}
}
@@ -146,7 +146,7 @@
color: var(--color-foreground-primary);
}
.field-title:not(:first-child) {
- margin-top: $s-64;
+ margin-top: deprecated.$s-64;
}
.field-text {
@@ -155,7 +155,7 @@
button,
.btn-secondary {
width: 100%;
- font-size: $fs-11;
+ font-size: deprecated.$fs-11;
text-transform: uppercase;
background-color: var(--color-background-tertiary);
color: var(--color-foreground-primary);
@@ -169,41 +169,41 @@
}
}
.links {
- margin-top: $s-12;
+ margin-top: deprecated.$s-12;
}
}
.profile-form {
display: flex;
flex-direction: column;
- max-width: $s-368;
+ max-width: deprecated.$s-368;
width: 100%;
.newsletter-subs {
- border-bottom: $s-1 solid var(--color-foreground-secondary);
- border-top: $s-1 solid var(--color-foreground-secondary);
- padding: $s-32 0;
- margin-bottom: $s-32;
+ border-bottom: deprecated.$s-1 solid var(--color-foreground-secondary);
+ border-top: deprecated.$s-1 solid var(--color-foreground-secondary);
+ padding: deprecated.$s-32 0;
+ margin-bottom: deprecated.$s-32;
.newsletter-title {
font-family: "worksans", "vazirmatn", sans-serif;
color: var(--color-foreground-secondary);
- font-size: $fs-14;
+ font-size: deprecated.$fs-14;
}
label {
font-family: "worksans", "vazirmatn", sans-serif;
color: var(--color-background-primary);
- font-size: $fs-12;
- margin-right: calc(-1 * $s-16);
- margin-bottom: $s-12;
+ font-size: deprecated.$fs-12;
+ margin-right: calc(-1 * deprecated.$s-16);
+ margin-bottom: deprecated.$s-12;
}
.info {
font-family: "worksans", "vazirmatn", sans-serif;
color: var(--color-foreground-secondary);
- font-size: $fs-12;
- margin-bottom: $s-8;
+ font-size: deprecated.$fs-12;
+ margin-bottom: deprecated.$s-8;
}
.input-checkbox label {
@@ -215,30 +215,30 @@
.avatar-form {
display: flex;
flex-direction: column;
- width: $s-120;
- min-width: $s-120;
+ width: deprecated.$s-120;
+ min-width: deprecated.$s-120;
img {
border-radius: 50%;
flex-shrink: 0;
- height: $s-120;
- margin-right: $s-16;
- width: $s-120;
+ height: deprecated.$s-120;
+ margin-right: deprecated.$s-16;
+ width: deprecated.$s-120;
}
.image-change-field {
position: relative;
- width: $s-120;
- height: $s-120;
+ width: deprecated.$s-120;
+ height: deprecated.$s-120;
.update-overlay {
opacity: 0;
cursor: pointer;
position: absolute;
- width: $s-120;
- height: $s-120;
+ width: deprecated.$s-120;
+ height: deprecated.$s-120;
border-radius: 50%;
- font-size: $fs-24;
+ font-size: deprecated.$fs-24;
color: var(--color-foreground-primary);
line-height: 5;
text-align: center;
@@ -247,8 +247,8 @@
}
input[type="file"] {
- width: $s-120;
- height: $s-120;
+ width: deprecated.$s-120;
+ height: deprecated.$s-120;
position: absolute;
opacity: 0;
cursor: pointer;
@@ -267,7 +267,7 @@
.options-form,
.password-form {
h2 {
- font-size: $fs-14;
- margin-bottom: $s-20;
+ font-size: deprecated.$fs-14;
+ margin-bottom: deprecated.$s-20;
}
}
diff --git a/frontend/src/app/main/ui/settings/access_tokens.scss b/frontend/src/app/main/ui/settings/access_tokens.scss
index afb7dc6bab..5e9f139765 100644
--- a/frontend/src/app/main/ui/settings/access_tokens.scss
+++ b/frontend/src/app/main/ui/settings/access_tokens.scss
@@ -4,36 +4,36 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
// ACCESS TOKENS PAGE
.dashboard-access-tokens {
display: grid;
grid-template-rows: auto 1fr;
- margin: $s-80 auto $s-120 auto;
- gap: $s-32;
- width: $s-800;
+ margin: deprecated.$s-80 auto deprecated.$s-120 auto;
+ gap: deprecated.$s-32;
+ width: deprecated.$s-800;
}
// hero
.access-tokens-hero {
display: grid;
grid-template-rows: auto auto 1fr;
- gap: $s-32;
- width: $s-500;
- font-size: $fs-14;
- margin: $s-16 auto 0 auto;
+ gap: deprecated.$s-32;
+ width: deprecated.$s-500;
+ font-size: deprecated.$fs-14;
+ margin: deprecated.$s-16 auto 0 auto;
}
.hero-title {
- @include bigTitleTipography;
+ @include deprecated.bigTitleTipography;
color: var(--title-foreground-color-hover);
}
.hero-desc {
color: var(--title-foreground-color);
margin-bottom: 0;
- font-size: $fs-14;
+ font-size: deprecated.$fs-14;
}
.hero-btn {
@@ -45,12 +45,12 @@
display: grid;
place-items: center;
align-content: center;
- height: $s-156;
- max-width: $s-1000;
+ height: deprecated.$s-156;
+ max-width: deprecated.$s-1000;
width: 100%;
- padding: $s-32;
- border: $s-1 solid var(--panel-border-color);
- border-radius: $br-8;
+ padding: deprecated.$s-32;
+ border: deprecated.$s-1 solid var(--panel-border-color);
+ border-radius: deprecated.$br-8;
color: var(--dashboard-list-text-foreground-color);
}
@@ -61,12 +61,12 @@
.table-rows {
display: grid;
- grid-auto-rows: $s-64;
- gap: $s-16;
+ grid-auto-rows: deprecated.$s-64;
+ gap: deprecated.$s-16;
width: 100%;
height: 100%;
- max-width: $s-1000;
- margin-top: $s-16;
+ max-width: deprecated.$s-1000;
+ margin-top: deprecated.$s-16;
color: var(--title-foreground-color);
}
@@ -74,33 +74,33 @@
display: grid;
grid-template-columns: 43% 1fr auto;
align-items: center;
- height: $s-64;
+ height: deprecated.$s-64;
width: 100%;
- padding: 0 $s-16;
- border-radius: $br-8;
+ padding: 0 deprecated.$s-16;
+ border-radius: deprecated.$br-8;
background-color: var(--dashboard-list-background-color);
color: var(--dashboard-list-foreground-color);
}
.field-name {
- @include textEllipsis;
+ @include deprecated.textEllipsis;
display: grid;
width: 43%;
- min-width: $s-300;
+ min-width: deprecated.$s-300;
}
.expiration-date {
- @include flexCenter;
- min-width: $s-76;
+ @include deprecated.flexCenter;
+ min-width: deprecated.$s-76;
width: fit-content;
- height: $s-24;
- border-radius: $br-8;
+ height: deprecated.$s-24;
+ border-radius: deprecated.$br-8;
color: var(--dashboard-list-text-foreground-color);
}
.expired {
- @include headlineSmallTypography;
- padding: 0 $s-6;
+ @include deprecated.headlineSmallTypography;
+ padding: 0 deprecated.$s-6;
color: var(--pill-foreground-color);
background-color: var(--status-widget-background-color-warning);
}
@@ -114,7 +114,7 @@
}
.menu-btn {
- @include buttonStyle;
+ @include deprecated.buttonStyle;
}
// Create access token modal
@@ -124,15 +124,15 @@
.modal-container {
@extend .modal-container-base;
- min-width: $s-408;
+ min-width: deprecated.$s-408;
}
.modal-header {
- margin-bottom: $s-24;
+ margin-bottom: deprecated.$s-24;
}
.modal-title {
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
color: var(--modal-title-foreground-color);
}
.modal-close-btn {
@@ -140,46 +140,46 @@
}
.modal-content {
- @include flexColumn;
- gap: $s-24;
- @include bodySmallTypography;
- margin-bottom: $s-24;
+ @include deprecated.flexColumn;
+ gap: deprecated.$s-24;
+ @include deprecated.bodySmallTypography;
+ margin-bottom: deprecated.$s-24;
}
.select-title {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--modal-title-foreground-color);
}
.custon-input-wrapper {
- @include flexRow;
- border-radius: $br-8;
- height: $s-32;
+ @include deprecated.flexRow;
+ border-radius: deprecated.$br-8;
+ height: deprecated.$s-32;
background-color: var(--input-background-color);
}
.custom-input-token {
@extend .input-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
margin: 0;
flex-grow: 1;
&:focus {
outline: none;
- border: $s-1 solid var(--input-border-color-active);
+ border: deprecated.$s-1 solid var(--input-border-color-active);
}
}
.token-value {
- @include textEllipsis;
- @include bodySmallTypography;
+ @include deprecated.textEllipsis;
+ @include deprecated.bodySmallTypography;
flex-grow: 1;
}
.copy-btn {
- @include flexCenter;
+ @include deprecated.flexCenter;
@extend .button-secondary;
- height: $s-28;
- width: $s-28;
+ height: deprecated.$s-28;
+ width: deprecated.$s-28;
}
.clipboard-icon {
diff --git a/frontend/src/app/main/ui/settings/change_email.scss b/frontend/src/app/main/ui/settings/change_email.scss
index fef165d493..71900cf9e4 100644
--- a/frontend/src/app/main/ui/settings/change_email.scss
+++ b/frontend/src/app/main/ui/settings/change_email.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -12,15 +12,15 @@
.modal-container {
@extend .modal-container-base;
- min-width: $s-408;
+ min-width: deprecated.$s-408;
}
.modal-header {
- margin-bottom: $s-24;
+ margin-bottom: deprecated.$s-24;
}
.modal-title {
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
color: var(--modal-title-foreground-color);
}
@@ -29,18 +29,18 @@
}
.modal-content {
- @include flexColumn;
- @include bodySmallTypography;
- gap: $s-24;
- margin-bottom: $s-24;
+ @include deprecated.flexColumn;
+ @include deprecated.bodySmallTypography;
+ gap: deprecated.$s-24;
+ margin-bottom: deprecated.$s-24;
}
.fields-row {
- @include flexColumn;
+ @include deprecated.flexColumn;
}
.select-title {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--modal-title-foreground-color);
}
diff --git a/frontend/src/app/main/ui/settings/delete_account.scss b/frontend/src/app/main/ui/settings/delete_account.scss
index fd8e01b55e..c69d17de53 100644
--- a/frontend/src/app/main/ui/settings/delete_account.scss
+++ b/frontend/src/app/main/ui/settings/delete_account.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -12,15 +12,15 @@
.modal-container {
@extend .modal-container-base;
- min-width: $s-408;
+ min-width: deprecated.$s-408;
}
.modal-header {
- margin-bottom: $s-24;
+ margin-bottom: deprecated.$s-24;
}
.modal-title {
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
color: var(--modal-title-foreground-color);
}
@@ -29,18 +29,18 @@
}
.modal-content {
- @include flexColumn;
- @include bodySmallTypography;
- gap: $s-24;
- margin-bottom: $s-24;
+ @include deprecated.flexColumn;
+ @include deprecated.bodySmallTypography;
+ gap: deprecated.$s-24;
+ margin-bottom: deprecated.$s-24;
}
.fields-row {
- @include flexColumn;
+ @include deprecated.flexColumn;
}
.select-title {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--modal-title-foreground-color);
}
diff --git a/frontend/src/app/main/ui/settings/notifications.scss b/frontend/src/app/main/ui/settings/notifications.scss
index 7e2cd4ae08..27a2273536 100644
--- a/frontend/src/app/main/ui/settings/notifications.scss
+++ b/frontend/src/app/main/ui/settings/notifications.scss
@@ -4,17 +4,17 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
@use "./profile" as *;
.update-btn {
- margin-top: $s-16;
+ margin-top: deprecated.$s-16;
@extend .button-primary;
- height: $s-36;
+ height: deprecated.$s-36;
}
.notifications-form {
- width: $s-400;
+ width: deprecated.$s-400;
}
.notifications-page {
@@ -34,9 +34,9 @@
}
h4 {
- font-size: $fs-11;
+ font-size: deprecated.$fs-11;
color: var(--color-foreground-primary);
text-transform: uppercase;
- margin: $s-12;
+ margin: deprecated.$s-12;
}
}
diff --git a/frontend/src/app/main/ui/settings/password.scss b/frontend/src/app/main/ui/settings/password.scss
index fe44ec71b3..5a0551333e 100644
--- a/frontend/src/app/main/ui/settings/password.scss
+++ b/frontend/src/app/main/ui/settings/password.scss
@@ -4,11 +4,11 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
@use "./profile" as *;
.update-btn {
- margin-top: $s-16;
+ margin-top: deprecated.$s-16;
@extend .button-primary;
- height: $s-36;
+ height: deprecated.$s-36;
}
diff --git a/frontend/src/app/main/ui/settings/sidebar.scss b/frontend/src/app/main/ui/settings/sidebar.scss
index 096d6342ec..a072c59b8f 100644
--- a/frontend/src/app/main/ui/settings/sidebar.scss
+++ b/frontend/src/app/main/ui/settings/sidebar.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
.dashboard-sidebar {
grid-column: 1 / span 2;
@@ -12,9 +12,9 @@
display: grid;
grid-template-rows: 1fr auto;
height: 100%;
- padding-block-start: $s-16;
- border-right: $s-1 solid var(--panel-border-color);
- z-index: $z-index-1;
+ padding-block-start: deprecated.$s-16;
+ border-right: deprecated.$s-1 solid var(--panel-border-color);
+ z-index: deprecated.$z-index-1;
background-color: var(--panel-background-color);
}
@@ -28,7 +28,7 @@
.sidebar-separator {
border-color: transparent;
- margin: $s-12 $s-16;
+ margin: deprecated.$s-12 deprecated.$s-16;
}
.sidebar-nav-settings {
@@ -44,7 +44,7 @@
--settings-background-color: transparent;
display: flex;
align-items: center;
- padding: $s-8 $s-8 $s-8 $s-24;
+ padding: deprecated.$s-8 deprecated.$s-8 deprecated.$s-8 deprecated.$s-24;
color: var(--settings-foreground-color);
background-color: var(--settings-background-color);
cursor: pointer;
@@ -63,20 +63,20 @@
.feedback-icon {
@extend .button-icon-small;
stroke: var(--settings-foreground-color);
- margin-right: $s-8;
+ margin-right: deprecated.$s-8;
}
.element-title {
- @include textEllipsis;
- @include bodyMediumTypography;
+ @include deprecated.textEllipsis;
+ @include deprecated.bodyMediumTypography;
}
.back-to-dashboard {
- @include buttonStyle;
+ @include deprecated.buttonStyle;
display: flex;
align-items: center;
- padding: $s-12 $s-16;
- font-size: $fs-14;
+ padding: deprecated.$s-12 deprecated.$s-16;
+ font-size: deprecated.$fs-14;
}
.back-text {
@@ -87,5 +87,5 @@
@extend .button-icon;
stroke: var(--icon-foreground);
transform: rotate(180deg);
- margin-right: $s-12;
+ margin-right: deprecated.$s-12;
}
diff --git a/frontend/src/app/main/ui/settings/subscription.scss b/frontend/src/app/main/ui/settings/subscription.scss
index b74acbef43..b3632069b7 100644
--- a/frontend/src/app/main/ui/settings/subscription.scss
+++ b/frontend/src/app/main/ui/settings/subscription.scss
@@ -4,10 +4,10 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
-@use "../ds/typography.scss" as t;
-@use "../ds/_borders.scss" as *;
-@use "../ds/spacing.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
+@use "ds/typography.scss" as t;
+@use "ds/_borders.scss" as *;
+@use "ds/spacing.scss" as *;
.dashboard-section {
display: flex;
@@ -20,10 +20,10 @@
display: flex;
justify-content: center;
flex-direction: column;
- max-width: $s-500;
+ max-width: deprecated.$s-500;
margin-block-end: var(--sp-xxxl);
- width: $s-580;
- margin: $s-92 auto $s-120 auto;
+ width: deprecated.$s-580;
+ margin: deprecated.$s-92 auto deprecated.$s-120 auto;
justify-content: center;
}
@@ -98,7 +98,7 @@
border-radius: 6px;
border: 1.75px solid var(--color-foreground-primary);
stroke-width: 2.25px;
- padding: $s-1;
+ padding: deprecated.$s-1;
svg {
block-size: var(--sp-m);
@@ -135,12 +135,12 @@
}
.other-subscriptions {
- margin-block-start: $s-52;
+ margin-block-start: deprecated.$s-52;
}
.cta-button {
@include t.use-typography("body-medium");
- @include buttonStyle;
+ @include deprecated.buttonStyle;
align-items: center;
color: var(--color-accent-tertiary);
display: flex;
@@ -173,11 +173,11 @@
display: grid;
grid-template-rows: auto 1fr auto;
max-height: initial;
- min-width: $s-548;
+ min-width: deprecated.$s-548;
}
.modal-dialog.subscription-success {
- min-width: $s-648;
+ min-width: deprecated.$s-648;
}
.close-btn {
@@ -211,7 +211,7 @@
.modal-text-medium strong,
.text-strikethrough strong,
.modal-text-cap strong {
- font-weight: $fw700;
+ font-weight: deprecated.$fw700;
}
.modal-content,
@@ -223,11 +223,11 @@
.modal-success-content {
display: flex;
- gap: $s-40;
+ gap: deprecated.$s-40;
}
.modal-footer {
- margin-block-start: $s-40;
+ margin-block-start: deprecated.$s-40;
}
.action-buttons {
@@ -249,7 +249,7 @@
.modal-start {
display: flex;
justify-content: center;
- max-width: $s-220;
+ max-width: deprecated.$s-220;
svg {
width: 100%;
@@ -276,19 +276,19 @@
list-style-position: inside;
list-style-type: none;
margin-inline-start: var(--sp-xl);
- max-height: $s-216;
+ max-height: deprecated.$s-216;
overflow-y: auto;
}
.input-field {
--input-icon-padding: var(--sp-s);
- width: $s-80;
+ width: deprecated.$s-80;
}
.error-message {
@include t.use-typography("body-small");
color: var(--color-foreground-error);
- margin-block-start: $s-8;
+ margin-block-start: deprecated.$s-8;
}
.editors-wrapper {
@@ -307,7 +307,7 @@
@include t.use-typography("body-small");
background-color: var(--color-background-tertiary);
border-radius: var(--sp-s);
- margin-block-start: $s-40;
+ margin-block-start: deprecated.$s-40;
padding-block: var(--sp-s);
padding-inline: var(--sp-m);
}
diff --git a/frontend/src/app/main/ui/static.scss b/frontend/src/app/main/ui/static.scss
index aff796cee3..77bbfbff5b 100644
--- a/frontend/src/app/main/ui/static.scss
+++ b/frontend/src/app/main/ui/static.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
.exception-layout {
width: 100%;
@@ -15,13 +15,13 @@
.deco-before,
.deco-after {
position: absolute;
- left: calc(50% - $s-40);
+ left: calc(50% - deprecated.$s-40);
svg {
position: absolute;
fill: var(--color-foreground-secondary);
height: 1537px;
- width: $s-80;
+ width: deprecated.$s-80;
}
}
@@ -46,7 +46,7 @@
.deco-after2 {
display: flex;
justify-content: center;
- gap: $s-8;
+ gap: deprecated.$s-8;
width: 100%;
height: 34vh;
position: absolute;
@@ -57,7 +57,7 @@
svg {
fill: var(--color-foreground-secondary);
height: 1537px;
- width: $s-80;
+ width: deprecated.$s-80;
}
span {
@@ -66,7 +66,7 @@
justify-content: flex-end;
height: 100%;
width: 25%;
- padding-bottom: $s-28;
+ padding-bottom: deprecated.$s-28;
&:first-child {
text-align: right;
@@ -76,7 +76,7 @@
.exception-header {
color: var(--color-foreground-secondary);
- padding: $s-24 $s-32;
+ padding: deprecated.$s-24 deprecated.$s-32;
position: fixed;
background: none;
border: none;
@@ -87,8 +87,8 @@
.penpot-logo {
fill: var(--color-foreground-primary);
- width: $s-48;
- height: $s-48;
+ width: deprecated.$s-48;
+ height: deprecated.$s-48;
}
.back-arrow {
@@ -99,18 +99,18 @@
display: flex;
justify-content: center;
align-items: center;
- gap: $s-8;
- margin-left: $s-12;
- font-size: $fs-14;
+ gap: deprecated.$s-8;
+ margin-left: deprecated.$s-12;
+ font-size: deprecated.$fs-14;
}
.login-header {
@extend .button-primary;
- padding: $s-8 $s-16;
- font-size: $fs-11;
+ padding: deprecated.$s-8 deprecated.$s-16;
+ font-size: deprecated.$fs-11;
position: fixed;
right: 0;
- margin: $s-40 $s-32;
+ margin: deprecated.$s-40 deprecated.$s-32;
}
.exception-content {
@@ -123,22 +123,22 @@
align-items: center;
display: flex;
flex-direction: column;
- gap: $s-16;
+ gap: deprecated.$s-16;
height: 34vh;
justify-content: center;
margin-top: 33vh;
text-align: center;
- width: $s-640;
+ width: deprecated.$s-640;
}
}
.main-message {
- @include bigTitleTipography;
+ @include deprecated.bigTitleTipography;
color: var(--color-foreground-primary);
}
.desc-message {
- @include bigTitleTipography;
+ @include deprecated.bigTitleTipography;
color: var(--color-foreground-secondary);
}
@@ -148,8 +148,8 @@
button {
@extend .button-primary;
text-transform: uppercase;
- padding: $s-8 $s-16;
- font-size: $fs-11;
+ padding: deprecated.$s-8 deprecated.$s-16;
+ font-size: deprecated.$fs-11;
}
}
@@ -169,12 +169,12 @@
.workspace-left,
.workspace-right {
- padding: $s-12;
- width: $s-276;
+ padding: deprecated.$s-12;
+ width: deprecated.$s-276;
height: 100%;
background-color: var(--color-background-primary);
display: flex;
- gap: $s-4;
+ gap: deprecated.$s-4;
svg {
width: 2rem;
@@ -183,12 +183,12 @@
}
.project-name {
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
color: var(--title-foreground-color);
}
.file-name {
- @include smallTitleTipography;
+ @include deprecated.smallTitleTipography;
text-transform: none;
color: var(--title-foreground-color-hover);
}
@@ -200,7 +200,7 @@
height: 100%;
.dashboard-sidebar {
- width: $s-300;
+ width: deprecated.$s-300;
height: 100%;
}
}
@@ -226,11 +226,11 @@
.dialog-login {
width: 556px;
background-color: var(--color-background-primary);
- border-radius: $s-8;
+ border-radius: deprecated.$s-8;
display: flex;
flex-direction: column;
align-content: stretch;
- padding: $s-36;
+ padding: deprecated.$s-36;
color: var(--modal-text-foreground-color);
.modal-close {
@@ -243,8 +243,8 @@
svg {
cursor: pointer;
- width: $s-24;
- height: $s-24;
+ width: deprecated.$s-24;
+ height: deprecated.$s-24;
fill: var(--modal-text-foreground-color);
stroke: var(--modal-text-foreground-color);
}
@@ -252,59 +252,59 @@
}
.dialog-title {
- font-size: $fs-20;
+ font-size: deprecated.$fs-20;
}
.sign-info {
display: flex;
justify-content: flex-end;
- margin-top: $s-32;
+ margin-top: deprecated.$s-32;
button {
@extend .button-primary;
text-transform: uppercase;
- padding: $s-8 $s-16;
- font-size: $fs-11;
+ padding: deprecated.$s-8 deprecated.$s-16;
+ font-size: deprecated.$fs-11;
}
.cancel-button {
@extend .button-secondary;
text-transform: uppercase;
- padding: $s-8 $s-16;
- font-size: $fs-11;
- margin-right: $s-16;
+ padding: deprecated.$s-8 deprecated.$s-16;
+ font-size: deprecated.$fs-11;
+ margin-right: deprecated.$s-16;
}
}
}
.dialog {
- gap: $s-12;
+ gap: deprecated.$s-12;
}
.login {
gap: 0;
- padding: 0 $s-36 $s-72 $s-36;
+ padding: 0 deprecated.$s-36 deprecated.$s-72 deprecated.$s-36;
.logo {
- margin-bottom: $s-40;
+ margin-bottom: deprecated.$s-40;
svg {
fill: var(--color-foreground-primary);
- width: $s-120;
- height: $s-40;
+ width: deprecated.$s-120;
+ height: deprecated.$s-40;
}
}
.logo-title {
- font-size: $fs-20;
+ font-size: deprecated.$fs-20;
color: var(--title-foreground-color-hover);
- margin-bottom: $s-4;
+ margin-bottom: deprecated.$s-4;
}
.logo-subtitle {
- font-size: $fs-14;
+ font-size: deprecated.$fs-14;
color: var(--title-foreground-color-hover);
- margin-bottom: $s-24;
+ margin-bottom: deprecated.$s-24;
}
.change-section {
@@ -317,16 +317,16 @@
}
hr {
- margin: $s-20 0;
- border-top: solid $s-1 var(--modal-separator-backogrund-color);
+ margin: deprecated.$s-20 0;
+ border-top: solid deprecated.$s-1 var(--modal-separator-backogrund-color);
}
.separator {
- margin: $s-20 0;
+ margin: deprecated.$s-20 0;
}
form div {
- margin-bottom: $s-8;
+ margin-bottom: deprecated.$s-8;
}
}
}
diff --git a/frontend/src/app/main/ui/viewer.scss b/frontend/src/app/main/ui/viewer.scss
index 2ece31cd85..6b46b2d5f4 100644
--- a/frontend/src/app/main/ui/viewer.scss
+++ b/frontend/src/app/main/ui/viewer.scss
@@ -4,12 +4,12 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
.viewer-layout {
height: 100vh;
display: grid;
- grid-template-rows: $s-48 auto;
+ grid-template-rows: deprecated.$s-48 auto;
grid-template-columns: 1fr;
user-select: none;
}
@@ -18,13 +18,13 @@
overflow: hidden;
grid-row: 2 / span 1;
display: grid;
- grid-template-rows: $s-252 auto;
+ grid-template-rows: deprecated.$s-252 auto;
grid-template-columns: 1fr;
background-color: var(--viewer-background-color);
}
.empty-state {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--empty-message-foreground-color);
display: grid;
place-items: center;
@@ -38,7 +38,7 @@
.inspect-layout {
display: grid;
- grid-template-rows: $s-48 auto;
+ grid-template-rows: deprecated.$s-48 auto;
grid-template-columns: 1fr;
height: 100vh;
margin-top: 0;
@@ -46,10 +46,10 @@
}
.thumbnails-close {
- @include buttonStyle;
+ @include deprecated.buttonStyle;
grid-row: 1 / span 2;
grid-column: 1 / span 1;
- z-index: $z-index-10;
+ z-index: deprecated.$z-index-10;
background-color: var(--overlay-color);
}
@@ -64,7 +64,7 @@
display: flex;
align-items: center;
flex-wrap: nowrap;
- height: calc(100vh - $s-48);
+ height: calc(100vh - deprecated.$s-48);
flex-flow: wrap;
overflow: auto;
}
@@ -79,13 +79,13 @@
.viewer-go-prev,
.viewer-go-next {
@extend .button-secondary;
- @include flexCenter;
+ @include deprecated.flexCenter;
position: absolute;
- right: $s-8;
- height: $s-64;
- width: $s-32;
- top: calc(50vh - $s-32);
- z-index: $z-index-2;
+ right: deprecated.$s-8;
+ height: deprecated.$s-64;
+ width: deprecated.$s-32;
+ top: calc(50vh - deprecated.$s-32);
+ z-index: deprecated.$z-index-2;
background-color: var(--viewer-controls-background-color);
transition: transform 400ms ease 300ms;
svg {
@@ -95,11 +95,11 @@
}
.viewer-go-next.comment-sidebar {
- right: $s-280;
+ right: deprecated.$s-280;
}
.viewer-go-prev {
- left: $s-8;
+ left: deprecated.$s-8;
right: unset;
svg {
transform: rotate(180deg);
@@ -113,19 +113,19 @@
align-items: flex-start;
justify-content: space-between;
width: 100%;
- height: $s-40;
- padding-right: 0 $s-8 $s-40 $s-8;
+ height: deprecated.$s-40;
+ padding-right: 0 deprecated.$s-8 deprecated.$s-40 deprecated.$s-8;
transition: transform 400ms ease 300ms;
- z-index: $z-index-2;
+ z-index: deprecated.$z-index-2;
pointer-events: none;
}
.reset-button {
@extend .button-secondary;
- @include flexCenter;
- height: $s-32;
- width: $s-28;
- margin-left: $s-8;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-32;
+ width: deprecated.$s-28;
+ margin-left: deprecated.$s-8;
background-color: var(--viewer-controls-background-color);
pointer-events: all;
svg {
@@ -135,11 +135,11 @@
}
.counter {
- @include flexCenter;
- @include bodySmallTypography;
- border-radius: $br-8;
- width: $s-64;
- height: $s-32;
+ @include deprecated.flexCenter;
+ @include deprecated.bodySmallTypography;
+ border-radius: deprecated.$br-8;
+ width: deprecated.$s-64;
+ height: deprecated.$s-32;
color: var(--viewer-thumbnails-control-foreground-color);
background-color: var(--viewer-controls-background-color);
}
@@ -193,7 +193,7 @@
/** FULLSCREEN */
[data-fullscreen="true"] .viewer-bottom {
- transform: translateY($s-40);
+ transform: translateY(deprecated.$s-40);
}
[data-force-visible="true"] .viewer-bottom {
@@ -201,15 +201,15 @@
}
[data-fullscreen="true"] .viewer-go-next {
- transform: translateX($s-40);
+ transform: translateX(deprecated.$s-40);
}
[data-fullscreen="true"] .viewer-go-prev {
- transform: translateX(-$s-40);
+ transform: translateX(-#{deprecated.$s-40});
}
[data-fullscreen="true"] .viewer-content {
- transform: translateY(-$s-48);
+ transform: translateY(-#{deprecated.$s-48});
height: 100vh;
}
diff --git a/frontend/src/app/main/ui/viewer/comments.scss b/frontend/src/app/main/ui/viewer/comments.scss
index 7472dc8d2e..f567027f33 100644
--- a/frontend/src/app/main/ui/viewer/comments.scss
+++ b/frontend/src/app/main/ui/viewer/comments.scss
@@ -4,32 +4,32 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
// COMMENT DROPDOWN ON HEADER
.view-options {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
display: flex;
align-items: center;
position: relative;
- gap: $s-4;
- height: $s-32;
- padding: $s-8;
- border-radius: $br-8;
+ gap: deprecated.$s-4;
+ height: deprecated.$s-32;
+ padding: deprecated.$s-8;
+ border-radius: deprecated.$br-8;
background-color: var(--input-background-color);
cursor: pointer;
}
.dropdown {
@extend .menu-dropdown;
- right: $s-2;
- top: calc($s-2 + $s-48);
- width: $s-272;
- padding: $s-6;
+ right: deprecated.$s-2;
+ top: calc(deprecated.$s-2 + deprecated.$s-48);
+ width: deprecated.$s-272;
+ padding: deprecated.$s-6;
}
.dropdown-title {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
flex-grow: 1;
color: var(--input-foreground-color-active);
}
@@ -41,9 +41,9 @@
.icon,
.icon-dropdown {
- @include flexCenter;
+ @include deprecated.flexCenter;
height: 100%;
- width: $s-16;
+ width: deprecated.$s-16;
svg {
@extend .button-icon-small;
stroke: var(--icon-foreground);
@@ -57,9 +57,9 @@
.dropdown-element {
@extend .dropdown-element-base;
.icon {
- @include flexCenter;
+ @include deprecated.flexCenter;
height: 100%;
- width: $s-16;
+ width: deprecated.$s-16;
svg {
@extend .button-icon-small;
stroke: var(--icon-foreground);
@@ -80,7 +80,7 @@
}
.separator {
- height: $s-8;
+ height: deprecated.$s-8;
}
// FLOATING COMMENT
@@ -90,7 +90,7 @@
left: 0px;
width: 100%;
height: 100%;
- z-index: $z-index-1;
+ z-index: deprecated.$z-index-1;
}
.threads {
@@ -103,10 +103,10 @@
.comments-sidebar {
position: absolute;
right: 0;
- top: $s-44;
- width: $s-276;
- height: calc(100vh - $s-48);
- z-index: $z-index-10;
+ top: deprecated.$s-44;
+ width: deprecated.$s-276;
+ height: calc(100vh - deprecated.$s-48);
+ z-index: deprecated.$z-index-10;
background-color: var(--panel-background-color);
}
diff --git a/frontend/src/app/main/ui/viewer/header.scss b/frontend/src/app/main/ui/viewer/header.scss
index 1a338aac0b..f9814d3a44 100644
--- a/frontend/src/app/main/ui/viewer/header.scss
+++ b/frontend/src/app/main/ui/viewer/header.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
.viewer-header {
position: absolute;
@@ -12,12 +12,12 @@
grid-column: 1 / span 1;
grid-row: 1 / span 1;
display: grid;
- grid-template-columns: 1fr $s-92 1fr;
+ grid-template-columns: 1fr deprecated.$s-92 1fr;
justify-content: space-between;
align-items: center;
- height: $s-48;
+ height: deprecated.$s-48;
width: 100vw;
- padding: $s-8 $s-12;
+ padding: deprecated.$s-8 deprecated.$s-12;
transition: transform 400ms ease 300ms;
background-color: var(--panel-background-color);
}
@@ -29,7 +29,7 @@
justify-content: flex-start;
flex-basis: min-content;
width: 100%;
- gap: $s-12;
+ gap: deprecated.$s-12;
}
.home-link {
@@ -39,43 +39,43 @@
}
.logo-icon {
- width: $s-28;
- height: $s-28;
+ width: deprecated.$s-28;
+ height: deprecated.$s-28;
fill: var(--icon-foreground-hover);
}
.sitemap-zone {
- @include flexColumn;
+ @include deprecated.flexColumn;
position: relative;
width: 100%;
}
.project-name {
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
color: var(--title-foreground-color);
}
.sitemap-text {
- @include flexRow;
+ @include deprecated.flexRow;
}
.breadcrumb {
- @include bodySmallTypography;
- @include flexRow;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.flexRow;
color: var(--title-foreground-color);
cursor: pointer;
}
.breadcrumb-text {
- @include textEllipsis;
+ @include deprecated.textEllipsis;
max-width: 12vw; // This is a fallback
max-width: 12cqw; // This is a unit refered to container
}
.icon {
- @include flexCenter;
- height: $s-16;
- width: $s-16;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-16;
+ width: deprecated.$s-16;
svg {
@extend .button-icon-small;
transform: rotate(90deg);
@@ -90,17 +90,17 @@
.dropdown-sitemap {
@extend .menu-dropdown;
left: 0;
- top: calc($s-2 + $s-48);
- width: $s-272;
- padding: $s-6;
+ top: calc(deprecated.$s-2 + deprecated.$s-48);
+ width: deprecated.$s-272;
+ padding: deprecated.$s-6;
}
.dropdown-element {
@extend .dropdown-element-base;
.icon-check {
- @include flexCenter;
+ @include deprecated.flexCenter;
height: 100%;
- width: $s-16;
+ width: deprecated.$s-16;
svg {
@extend .button-icon-small;
stroke: var(--icon-foreground);
@@ -112,8 +112,8 @@
}
.current-frame {
- @include bodySmallTypography;
- @include flexRow;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.flexRow;
flex-grow: 1;
color: var(--title-foreground-color-hover);
cursor: pointer;
@@ -123,22 +123,22 @@
}
.frame-name {
- @include textEllipsis;
+ @include deprecated.textEllipsis;
max-width: 17vw; // This is a fallback
max-width: 17cqw; // This is a unit refered to container
}
// SECTION BUTTONS
.mode-zone {
- @include flexRow;
+ @include deprecated.flexRow;
height: 100%;
}
.mode-zone-btn {
@extend .button-tertiary;
- @include flexCenter;
- height: $s-32;
- width: $s-28;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-32;
+ width: deprecated.$s-28;
padding: 0;
svg {
@extend .button-icon;
@@ -151,11 +151,11 @@
// OPTION AREA
.options-zone {
- @include flexRow;
+ @include deprecated.flexRow;
position: relative;
justify-content: flex-end;
- gap: $s-8;
- z-index: $z-index-10;
+ gap: deprecated.$s-8;
+ z-index: deprecated.$z-index-10;
}
.view-options {
@@ -167,9 +167,9 @@
.fullscreen-btn {
@extend .button-tertiary;
- @include flexCenter;
- height: $s-32;
- width: $s-28;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-32;
+ width: deprecated.$s-28;
svg {
@extend .button-icon;
stroke: var(--icon-foreground);
@@ -178,16 +178,16 @@
.share-btn {
@extend .button-primary;
- height: $s-32;
- min-width: $s-72;
- margin-left: $s-4;
+ height: deprecated.$s-32;
+ min-width: deprecated.$s-72;
+ margin-left: deprecated.$s-4;
}
.edit-btn {
@extend .button-tertiary;
- @include flexCenter;
- height: $s-32;
- width: $s-28;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-32;
+ width: deprecated.$s-28;
svg {
@extend .button-icon;
stroke: var(--icon-foreground);
@@ -196,22 +196,22 @@
.go-log-btn {
@extend .button-tertiary;
- @include bodySmallTypography;
- height: $s-32;
- padding: 0 $s-8;
- border-radius: $br-8;
+ @include deprecated.bodySmallTypography;
+ height: deprecated.$s-32;
+ padding: 0 deprecated.$s-8;
+ border-radius: deprecated.$br-8;
color: var(--button-tertiary-foreground-color-rest);
}
// ZOOM WIDGET
.zoom-widget {
- @include buttonStyle;
- @include flexCenter;
- height: $s-28;
- min-width: $s-64;
- border-radius: $br-8;
+ @include deprecated.buttonStyle;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-28;
+ min-width: deprecated.$s-64;
+ border-radius: deprecated.$br-8;
.label {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--button-tertiary-foreground-color-rest);
}
@@ -229,15 +229,15 @@
.dropdown {
@extend .menu-dropdown;
- right: $s-2;
- top: calc($s-2 + $s-48);
- width: $s-272;
+ right: deprecated.$s-2;
+ top: calc(deprecated.$s-2 + deprecated.$s-48);
+ width: deprecated.$s-272;
}
.basic-zoom-bar {
display: flex;
justify-content: space-between;
- padding: $s-6;
+ padding: deprecated.$s-6;
cursor: auto;
}
@@ -247,13 +247,13 @@
.zoom-btn {
@extend .button-tertiary;
- height: $s-28;
- width: $s-28;
- border-radius: $br-8;
+ height: deprecated.$s-28;
+ width: deprecated.$s-28;
+ border-radius: deprecated.$br-8;
.zoom-icon {
- @include flexCenter;
- width: $s-24;
- height: $s-32;
+ @include deprecated.flexCenter;
+ width: deprecated.$s-24;
+ height: deprecated.$s-32;
svg {
@extend .button-icon;
stroke: var(--icon-foreground);
@@ -267,19 +267,19 @@
}
.zoom-text {
- @include flexCenter;
+ @include deprecated.flexCenter;
height: 100%;
- min-width: $s-64;
+ min-width: deprecated.$s-64;
padding: 0;
- margin: 0 $s-2;
+ margin: 0 deprecated.$s-2;
color: var(--modal-title-foreground-color);
}
.reset-btn {
@extend .button-tertiary;
color: var(--button-tertiary-foreground-color-hover);
- height: $s-28;
- border-radius: $br-8;
+ height: deprecated.$s-28;
+ border-radius: deprecated.$br-8;
}
.zoom-option {
@@ -305,13 +305,13 @@
content: " ";
position: absolute;
width: 100%;
- height: $s-48;
+ height: deprecated.$s-48;
left: 0;
- top: $s-48;
+ top: deprecated.$s-48;
}
[data-fullscreen="true"] .viewer-header {
- transform: translateY(-$s-48);
+ transform: translateY(-#{deprecated.$s-48});
}
[data-force-visible="true"] .viewer-header,
diff --git a/frontend/src/app/main/ui/viewer/inspect.scss b/frontend/src/app/main/ui/viewer/inspect.scss
index 340003ce92..2752ffe4b3 100644
--- a/frontend/src/app/main/ui/viewer/inspect.scss
+++ b/frontend/src/app/main/ui/viewer/inspect.scss
@@ -4,13 +4,13 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
-$width-settings-bar: $s-276;
-$width-settings-bar-max: $s-500;
+$width-settings-bar: deprecated.$s-276;
+$width-settings-bar-max: deprecated.$s-500;
.inspect-svg-wrapper {
- @include flexCenter;
+ @include deprecated.flexCenter;
position: relative;
flex-direction: column;
flex: 1;
@@ -35,7 +35,7 @@ $width-settings-bar-max: $s-500;
width: $width-settings-bar;
background-color: var(--panel-background-color);
- border-top: $s-1 solid var(--search-bar-input-border-color);
+ border-top: deprecated.$s-1 solid var(--search-bar-input-border-color);
}
.not-expand {
@@ -49,8 +49,8 @@ $width-settings-bar-max: $s-500;
.resize-area {
position: absolute;
left: 0;
- width: $s-8;
+ width: deprecated.$s-8;
height: 100%;
- z-index: $z-index-10;
+ z-index: deprecated.$z-index-10;
cursor: ew-resize;
}
diff --git a/frontend/src/app/main/ui/viewer/interactions.scss b/frontend/src/app/main/ui/viewer/interactions.scss
index 3cd9751b47..8e7d03cab1 100644
--- a/frontend/src/app/main/ui/viewer/interactions.scss
+++ b/frontend/src/app/main/ui/viewer/interactions.scss
@@ -4,22 +4,22 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
.view-options {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
display: flex;
align-items: center;
position: relative;
- gap: $s-4;
- height: $s-32;
- border-radius: $br-8;
+ gap: deprecated.$s-4;
+ height: deprecated.$s-32;
+ border-radius: deprecated.$br-8;
background-color: var(--input-background-color);
- padding: $s-8;
+ padding: deprecated.$s-8;
cursor: pointer;
}
.dropdown-title {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
flex-grow: 1;
color: var(--input-foreground-color-active);
}
@@ -31,21 +31,21 @@
.dropdown {
@extend .menu-dropdown;
- right: $s-2;
- top: calc($s-2 + $s-48);
- width: $s-272;
- padding: $s-6;
- max-height: calc(100vh - 3 * ($s-2 + $s-48));
+ right: deprecated.$s-2;
+ top: calc(deprecated.$s-2 + deprecated.$s-48);
+ width: deprecated.$s-272;
+ padding: deprecated.$s-6;
+ max-height: calc(100vh - 3 * (deprecated.$s-2 + deprecated.$s-48));
overflow: auto;
}
.dropdown-element {
@extend .dropdown-element-base;
- min-height: $s-32;
+ min-height: deprecated.$s-32;
.icon {
- @include flexCenter;
+ @include deprecated.flexCenter;
height: 100%;
- width: $s-16;
+ width: deprecated.$s-16;
svg {
@extend .button-icon-small;
stroke: var(--icon-foreground);
@@ -67,9 +67,9 @@
.icon,
.icon-dropdown {
- @include flexCenter;
+ @include deprecated.flexCenter;
height: 100%;
- width: $s-16;
+ width: deprecated.$s-16;
svg {
@extend .button-icon-small;
stroke: var(--icon-foreground);
diff --git a/frontend/src/app/main/ui/viewer/login.scss b/frontend/src/app/main/ui/viewer/login.scss
index 614bfa701d..f107742588 100644
--- a/frontend/src/app/main/ui/viewer/login.scss
+++ b/frontend/src/app/main/ui/viewer/login.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -12,15 +12,15 @@
.modal-container {
@extend .modal-container-base;
- width: $s-368;
+ width: deprecated.$s-368;
}
.modal-header {
- margin-bottom: $s-24;
+ margin-bottom: deprecated.$s-24;
}
.modal-title {
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
color: var(--modal-title-foreground-color);
}
@@ -29,10 +29,10 @@
}
.modal-content {
- @include flexColumn;
- @include bodySmallTypography;
- gap: $s-24;
- max-height: $s-400;
+ @include deprecated.flexColumn;
+ @include deprecated.bodySmallTypography;
+ gap: deprecated.$s-24;
+ max-height: deprecated.$s-400;
overflow: hidden auto;
form {
@@ -56,19 +56,19 @@
.link-entry {
display: flex;
flex-direction: column;
- gap: $s-12;
+ gap: deprecated.$s-12;
span {
text-align: center;
- font-size: $fs-14;
+ font-size: deprecated.$fs-14;
color: var(--modal-text-foreground-color);
- margin-top: $s-12;
+ margin-top: deprecated.$s-12;
}
a {
@extend .button-secondary;
- height: $s-40;
+ height: deprecated.$s-40;
text-transform: uppercase;
- font-size: $fs-11;
+ font-size: deprecated.$fs-11;
}
}
diff --git a/frontend/src/app/main/ui/viewer/share_link.scss b/frontend/src/app/main/ui/viewer/share_link.scss
index a883d1355e..2c8bcc60b1 100644
--- a/frontend/src/app/main/ui/viewer/share_link.scss
+++ b/frontend/src/app/main/ui/viewer/share_link.scss
@@ -4,15 +4,15 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.share-modal {
display: block;
position: absolute;
- top: $s-52;
- right: $s-12;
- left: calc(100vw - $s-512);
- z-index: $z-index-modal;
+ top: deprecated.$s-52;
+ right: deprecated.$s-12;
+ left: calc(100vw - deprecated.$s-512);
+ z-index: deprecated.$z-index-modal;
}
.share-link-dialog {
@@ -21,11 +21,11 @@
}
.share-link-header {
- margin-bottom: $s-24;
+ margin-bottom: deprecated.$s-24;
}
.share-link-title {
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
color: var(--modal-title-foreground-color);
}
@@ -34,18 +34,18 @@
}
.modal-content {
- @include bodySmallTypography;
- @include flexColumn;
- gap: $s-24;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.flexColumn;
+ gap: deprecated.$s-24;
}
.share-link-section {
- @include flexColumn;
- gap: $s-8;
+ @include deprecated.flexColumn;
+ gap: deprecated.$s-8;
}
.hint-wrapper {
- @include flexRow;
+ @include deprecated.flexRow;
}
.hint {
@@ -54,32 +54,32 @@
}
.custon-input-wrapper {
- @include flexRow;
- border-radius: $br-8;
- height: $s-32;
+ @include deprecated.flexRow;
+ border-radius: deprecated.$br-8;
+ height: deprecated.$s-32;
width: 100%;
background-color: var(--input-background-color);
}
.input-text {
@extend .input-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--input-foreground-color-active);
- padding-left: $s-8;
+ padding-left: deprecated.$s-8;
margin: 0;
flex-grow: 1;
&:focus {
outline: none;
- border: $s-1 solid var(--input-border-color-active);
+ border: deprecated.$s-1 solid var(--input-border-color-active);
}
}
.copy-button {
@extend .button-secondary;
- @include flexRow;
- gap: $s-8;
- height: $s-32;
- width: $s-28;
+ @include deprecated.flexRow;
+ gap: deprecated.$s-8;
+ height: deprecated.$s-32;
+ width: deprecated.$s-28;
svg {
@extend .button-icon;
stroke: var(--icon-foreground-hover);
@@ -87,13 +87,13 @@
}
.description {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--modal-text-foreground-color);
- margin-bottom: $s-24;
+ margin-bottom: deprecated.$s-24;
}
.actions {
- @include flexRow;
+ @include deprecated.flexRow;
justify-content: flex-end;
}
@@ -110,23 +110,23 @@
}
.permissions-section {
- @include flexColumn;
- gap: $s-8;
+ @include deprecated.flexColumn;
+ gap: deprecated.$s-8;
}
.manage-permissions {
- @include buttonStyle;
- @include uppercaseTitleTipography;
+ @include deprecated.buttonStyle;
+ @include deprecated.uppercaseTitleTipography;
color: var(--menu-foreground-color-rest);
- height: $s-32;
+ height: deprecated.$s-32;
display: flex;
align-items: center;
padding: 0;
}
.icon {
- @include flexCenter;
- margin-right: $s-6;
+ @include deprecated.flexCenter;
+ margin-right: deprecated.$s-6;
svg {
@extend .button-icon;
stroke: var(--icon-foreground);
@@ -144,7 +144,7 @@
}
.view-mode {
- max-height: $s-216;
+ max-height: deprecated.$s-216;
overflow: hidden auto;
scrollbar-gutter: stable;
}
@@ -154,8 +154,8 @@
display: flex;
align-items: center;
justify-content: flex-start;
- width: $s-136;
- height: $s-32;
+ width: deprecated.$s-136;
+ height: deprecated.$s-32;
}
.items {
@@ -163,10 +163,10 @@
color: var(--input-foreground-color-active);
}
.select-all-row {
- @include flexRow;
+ @include deprecated.flexRow;
justify-content: space-between;
- height: $s-32;
- border-bottom: $s-1 solid var(--input-border-color-disabled);
+ height: deprecated.$s-32;
+ border-bottom: deprecated.$s-1 solid var(--input-border-color-disabled);
}
.select-all-label {
color: var(--input-foreground-color-active);
@@ -174,7 +174,7 @@
.pages-selection {
margin: 0;
li {
- border-bottom: $s-1 solid var(--input-border-color-disabled);
+ border-bottom: deprecated.$s-1 solid var(--input-border-color-disabled);
}
li:last-child {
border-bottom: none;
@@ -182,17 +182,17 @@
}
.count-pages,
.current-tag {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--input-foreground-color);
}
.checkbox-wrapper {
@extend .input-checkbox;
- height: $s-32;
+ height: deprecated.$s-32;
padding: 0;
span.checked {
background-color: var(--input-checkbox-background-color-active);
- border: $s-1 solid var(--input-checkbox-background-color-active);
+ border: deprecated.$s-1 solid var(--input-checkbox-background-color-active);
svg {
@extend .button-icon-small;
stroke: var(--input-checkbox-foreground-color-active);
diff --git a/frontend/src/app/main/ui/viewer/thumbnails.scss b/frontend/src/app/main/ui/viewer/thumbnails.scss
index c4de6c4153..c0735ddce1 100644
--- a/frontend/src/app/main/ui/viewer/thumbnails.scss
+++ b/frontend/src/app/main/ui/viewer/thumbnails.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
.viewer-thumbnails {
background-color: var(--viewer-background-color);
@@ -13,7 +13,7 @@
overflow: hidden;
display: flex;
flex-direction: column;
- z-index: $z-index-10;
+ z-index: deprecated.$z-index-10;
}
.expanded {
@@ -28,25 +28,25 @@
display: flex;
justify-content: space-between;
align-items: center;
- height: $s-32;
- margin: $s-24 $s-24 0 $s-24;
+ height: deprecated.$s-32;
+ margin: deprecated.$s-24 deprecated.$s-24 0 deprecated.$s-24;
}
.counter {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--viewer-thumbnails-control-foreground-color);
}
.actions {
- @include flexRow;
- width: $s-60;
+ @include deprecated.flexRow;
+ width: deprecated.$s-60;
}
.expand-btn,
.close-btn {
@extend .button-tertiary;
- height: $s-32;
- width: $s-28;
+ height: deprecated.$s-32;
+ width: deprecated.$s-28;
svg {
@extend .button-icon;
}
@@ -58,7 +58,7 @@
.thumbnails-content {
display: grid;
- grid-template-columns: $s-40 auto $s-40;
+ grid-template-columns: deprecated.$s-40 auto deprecated.$s-40;
grid-template-rows: auto;
}
@@ -73,13 +73,13 @@
.right-scroll-handler,
.left-scroll-handler {
@extend .button-tertiary;
- @include flexCenter;
+ @include deprecated.flexCenter;
grid-column: 3 / span 1;
grid-row: 1 / span 1;
- width: $s-32;
- height: $s-60;
+ width: deprecated.$s-32;
+ height: deprecated.$s-60;
margin: auto 0;
- z-index: $z-index-10;
+ z-index: deprecated.$z-index-10;
opacity: 0;
&:hover {
opacity: 1;
@@ -112,18 +112,18 @@
}
.thumbnail-item {
- @include buttonStyle;
+ @include deprecated.buttonStyle;
display: flex;
flex-direction: column;
- padding: $s-16;
+ padding: deprecated.$s-16;
}
.thumbnail-preview {
- @include flexCenter;
- width: $s-132;
- min-height: $s-132;
- height: $s-132;
- padding: $s-4;
+ @include deprecated.flexCenter;
+ width: deprecated.$s-132;
+ min-height: deprecated.$s-132;
+ height: deprecated.$s-132;
+ padding: deprecated.$s-4;
svg {
width: 100%;
@@ -132,21 +132,21 @@
&.selected {
background-color: var(--viewer-thumbnail-background-color-selected);
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
}
&:hover {
- border: $s-1 solid var(--viewer-thumbnail-border-color);
- border-radius: $br-8;
+ border: deprecated.$s-1 solid var(--viewer-thumbnail-border-color);
+ border-radius: deprecated.$br-8;
}
}
.thumbnail-info {
- @include bodySmallTypography;
- @include textEllipsis;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.textEllipsis;
text-align: center;
color: var(--viewer-thumbnails-control-foreground-color);
- padding: $s-8 0;
+ padding: deprecated.$s-8 0;
width: 100%;
- max-width: $s-132;
+ max-width: deprecated.$s-132;
}
diff --git a/frontend/src/app/main/ui/workspace.scss b/frontend/src/app/main/ui/workspace.scss
index a1c7cec47b..d6c21429dd 100644
--- a/frontend/src/app/main/ui/workspace.scss
+++ b/frontend/src/app/main/ui/workspace.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.workspace {
@extend .new-scrollbar;
@@ -33,18 +33,18 @@
.history-debug-overlay {
bottom: 0;
- max-height: $s-500;
- width: $s-500;
+ max-height: deprecated.$s-500;
+ width: deprecated.$s-500;
overflow-y: auto;
position: absolute;
- z-index: $z-index-modal;
+ z-index: deprecated.$z-index-modal;
}
.workspace-viewport {
overflow: hidden;
transition: none;
display: grid;
- grid-template-rows: $s-20 1fr;
- grid-template-columns: $s-20 1fr;
+ grid-template-rows: deprecated.$s-20 1fr;
+ grid-template-columns: deprecated.$s-20 1fr;
flex: 1;
}
diff --git a/frontend/src/app/main/ui/workspace/color_palette.scss b/frontend/src/app/main/ui/workspace/color_palette.scss
index 39cd4d0fe2..7a4cb7c09b 100644
--- a/frontend/src/app/main/ui/workspace/color_palette.scss
+++ b/frontend/src/app/main/ui/workspace/color_palette.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.color-palette {
height: 100%;
@@ -13,13 +13,13 @@
.left-arrow,
.right-arrow {
- @include buttonStyle;
- @include flexCenter;
+ @include deprecated.buttonStyle;
+ @include deprecated.flexCenter;
position: relative;
height: 100%;
- width: $s-24;
+ width: deprecated.$s-24;
padding: 0;
- z-index: $z-index-5;
+ z-index: deprecated.$z-index-5;
svg {
@extend .button-icon;
stroke: var(--icon-foreground);
@@ -27,11 +27,11 @@
&::after {
content: "";
position: absolute;
- z-index: $z-index-1;
+ z-index: deprecated.$z-index-1;
bottom: 0;
- left: calc(-1 * $s-80);
+ left: calc(-1 * deprecated.$s-80);
height: 100%;
- width: $s-80;
+ width: deprecated.$s-80;
background-image: linear-gradient(
to left,
var(--palette-button-shadow-initial) 0%,
@@ -55,7 +55,7 @@
}
.left-arrow {
&::after {
- left: $s-24;
+ left: deprecated.$s-24;
background-image: linear-gradient(
to right,
var(--palette-button-shadow-initial) 0%,
@@ -82,7 +82,7 @@
display: grid;
grid-auto-flow: column;
grid-auto-columns: var(--color-cell-width);
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.color-cell {
@@ -98,12 +98,12 @@
height: 100%;
&.no-text {
- @include flexCenter;
- width: $s-32;
+ @include deprecated.flexCenter;
+ width: deprecated.$s-32;
}
}
.color-palette-empty {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--palette-text-color);
}
diff --git a/frontend/src/app/main/ui/workspace/color_palette_ctx_menu.scss b/frontend/src/app/main/ui/workspace/color_palette_ctx_menu.scss
index 920d6031ba..a3703f8588 100644
--- a/frontend/src/app/main/ui/workspace/color_palette_ctx_menu.scss
+++ b/frontend/src/app/main/ui/workspace/color_palette_ctx_menu.scss
@@ -4,17 +4,17 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.palette-menu {
position: absolute;
left: auto;
bottom: var(--height);
- max-width: $s-480;
- padding: $s-4;
- margin: 0 0 $s-4 0;
- z-index: $z-index-4;
- border-radius: $br-10;
+ max-width: deprecated.$s-480;
+ padding: deprecated.$s-4;
+ margin: 0 0 deprecated.$s-4 0;
+ z-index: deprecated.$z-index-4;
+ border-radius: deprecated.$br-10;
background-color: var(--context-menu-background-color);
.palette-library,
@@ -24,36 +24,36 @@
display: flex;
align-items: flex-start;
width: 100%;
- padding: $s-8;
- border-radius: $br-8;
- margin-bottom: $s-4;
+ padding: deprecated.$s-8;
+ border-radius: deprecated.$br-8;
+ margin-bottom: deprecated.$s-4;
&:last-child {
margin-bottom: 0;
}
.option-wrapper {
width: 100%;
.library-name {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--context-menu-foreground-color);
display: grid;
- grid-template-columns: 1fr $s-24;
+ grid-template-columns: 1fr deprecated.$s-24;
.lib-name-wrapper {
display: flex;
- max-width: $s-400;
+ max-width: deprecated.$s-400;
.lib-name {
- @include textEllipsis;
- max-width: $s-380;
+ @include deprecated.textEllipsis;
+ max-width: deprecated.$s-380;
}
.lib-num {
- margin-left: $s-4;
+ margin-left: deprecated.$s-4;
}
}
.icon-wrapper {
- margin-left: $s-4;
- @include flexCenter;
+ margin-left: deprecated.$s-4;
+ @include deprecated.flexCenter;
svg {
@extend .button-icon-small;
- @include flexCenter;
+ @include deprecated.flexCenter;
stroke: var(--icon-foreground);
}
}
@@ -61,8 +61,8 @@
.color-sample {
display: flex;
flex-direction: row;
- gap: $s-8;
- margin-top: $s-4;
+ gap: deprecated.$s-8;
+ margin-top: deprecated.$s-4;
}
}
@@ -71,9 +71,9 @@
.option-wrapper .library-name {
color: var(--context-menu-foreground-color-selected);
.icon-wrapper {
- @include flexCenter;
+ @include deprecated.flexCenter;
svg {
- @include flexCenter;
+ @include deprecated.flexCenter;
@extend .button-icon-small;
stroke: var(--context-menu-foreground-color-selected);
}
diff --git a/frontend/src/app/main/ui/workspace/colorpicker.cljs b/frontend/src/app/main/ui/workspace/colorpicker.cljs
index dec18b21de..c0842670ad 100644
--- a/frontend/src/app/main/ui/workspace/colorpicker.cljs
+++ b/frontend/src/app/main/ui/workspace/colorpicker.cljs
@@ -13,6 +13,7 @@
[app.common.geom.point :as gpt]
[app.common.types.color :as cc]
[app.common.types.fills :as types.fills]
+ [app.common.types.tokens-lib :as ctob]
[app.config :as cfg]
[app.main.data.event :as-alias ev]
[app.main.data.modal :as modal]
@@ -26,12 +27,14 @@
[app.main.store :as st]
[app.main.ui.components.file-uploader :refer [file-uploader]]
[app.main.ui.components.numeric-input :refer [numeric-input*]]
+ [app.main.ui.components.radio-buttons :refer [radio-buttons radio-button]]
[app.main.ui.components.select :refer [select]]
[app.main.ui.ds.foundations.assets.icon :as i]
[app.main.ui.ds.layout.tab-switcher :refer [tab-switcher*]]
[app.main.ui.hooks :as hooks]
[app.main.ui.icons :as deprecated-icon]
[app.main.ui.workspace.colorpicker.color-inputs :refer [color-inputs]]
+ [app.main.ui.workspace.colorpicker.color-tokens :refer [token-section*]]
[app.main.ui.workspace.colorpicker.gradients :refer [gradients*]]
[app.main.ui.workspace.colorpicker.harmony :refer [harmony-selector]]
[app.main.ui.workspace.colorpicker.hsva :refer [hsva-selector]]
@@ -44,7 +47,8 @@
[cuerdas.core :as str]
[okulary.core :as l]
[potok.v2.core :as ptk]
- [rumext.v2 :as mf]))
+ [rumext.v2 :as mf]
+ [rumext.v2.util :as mfu]))
;; --- Refs
@@ -90,12 +94,20 @@
(dom/set-css-property! node "--saturation-grad-to" (format-hsl hsl-to)))))
(mf/defc colorpicker
- {::mf/props :obj}
- [{:keys [data disable-gradient disable-opacity disable-image on-change on-accept]}]
+ [{:keys [data disable-gradient disable-opacity disable-image on-change on-accept origin combined-tokens color-origin on-token-change tab]}]
(let [state (mf/deref refs/colorpicker)
node-ref (mf/use-ref)
should-update? (mf/use-var true)
+ token-color (contains? cfg/flags :token-color)
+ color-style* (mf/use-state (d/nilv tab :direct-color))
+ color-style (deref color-style*)
+ toggle-token-color
+ (mf/use-fn
+ (mf/deps color-style)
+ (fn []
+ (let [new-style (if (= :direct-color color-style) :token-color :direct-color)]
+ (reset! color-style* new-style))))
;; TODO: I think we need to put all this picking state under
;; the same object for avoid creating adhoc refs for each
@@ -337,10 +349,6 @@
render-wasm?
(features/use-feature "render-wasm/v1")
- cap-stops?
- (or ^boolean render-wasm?
- ^boolean (contains? cfg/flags :frontend-binary-fills))
-
tabs
(mf/with-memo []
[{:aria-label (tr "workspace.libraries.colors.rgba")
@@ -351,7 +359,9 @@
:id "harmony"}
{:aria-label "HSVA"
:icon i/hsva
- :id "hsva"}])]
+ :id "hsva"}])
+
+ show-tokens? (contains? #{:fill :stroke-color :color-selection} color-origin)]
;; Initialize colorpicker state
(mf/with-effect []
@@ -382,8 +392,10 @@
:ref node-ref
:style {:touch-action "none"}}
[:div {:class (stl/css :top-actions)}
+
[:div {:class (stl/css :top-actions-right)}
- (when (= :gradient selected-mode)
+ (when (and (= color-style :direct-color)
+ (= :gradient selected-mode))
[:div {:class (stl/css :opacity-input-wrapper)}
[:span {:class (stl/css :icon-text)} "%"]
[:> numeric-input*
@@ -394,118 +406,143 @@
:min 0
:max 100}]])
- (when (or (not disable-gradient) (not disable-image))
+ (when (and (= color-style :direct-color)
+ (or (not disable-gradient) (not disable-image)))
[:div {:class (stl/css :select)}
[:& select
{:default-value selected-mode
:options options
- :on-change handle-change-mode}]])]
+ :on-change handle-change-mode}]])
- (when (not= selected-mode :image)
+ (when (and (= origin :sidebar) show-tokens? token-color)
+ [:& radio-buttons {:selected color-style
+ :on-change toggle-token-color
+ :name "color-style"}
+ [:& radio-button {:icon deprecated-icon/swatches
+ :value :direct-color
+ :title (tr "labels.color")
+ :id "opt-color"}]
+ [:& radio-button {:icon deprecated-icon/tokens
+ :value :token-color
+ :title (tr "workspace.colorpicker.color-tokens")
+ :id "opt-token-color"}]])]
+
+ (when (and (not= selected-mode :image)
+ (= color-style :direct-color))
[:button {:class (stl/css-case :picker-btn true
:selected picking-color?)
:on-click handle-click-picker}
- deprecated-icon/picker])]
+ deprecated-icon/picker])
- (when (= selected-mode :gradient)
- [:> gradients*
- {:type (:type state)
- :stops (if cap-stops? (vec (take types.fills/MAX-GRADIENT-STOPS (:stops state))) (:stops state))
- :editing-stop (:editing-stop state)
- :on-stop-edit-start handle-stop-edit-start
- :on-stop-edit-finish handle-stop-edit-finish
- :on-select-stop handle-change-gradient-selected-stop
- :on-change-type handle-change-gradient-type
- :on-change-stop handle-gradient-change-stop
- :on-add-stop-auto handle-gradient-add-stop-auto
- :on-add-stop-preview handle-gradient-add-stop-preview
- :on-remove-stop handle-gradient-remove-stop
- :on-rotate-stops handle-rotate-stops
- :on-reverse-stops handle-reverse-stops
- :on-reorder-stops handle-reorder-stops}])
-
- (if (= selected-mode :image)
- (let [uri (cfg/resolve-file-media (:image current-color))
- keep-aspect-ratio? (-> current-color :image :keep-aspect-ratio)]
- [:div {:class (stl/css :select-image)}
- [:div {:class (stl/css :content)}
- (when (:image current-color)
- [:img {:src uri}])]
-
- (when (some? (:image current-color))
- [:div {:class (stl/css :checkbox-option)}
- [:label {:for "keep-aspect-ratio"
- :class (stl/css-case :global/checked keep-aspect-ratio?)}
- [:span {:class (stl/css-case :global/checked keep-aspect-ratio?)}
- (when keep-aspect-ratio?
- deprecated-icon/status-tick)]
- (tr "media.keep-aspect-ratio")
- [:input {:type "checkbox"
- :id "keep-aspect-ratio"
- :checked keep-aspect-ratio?
- :on-change handle-change-keep-aspect-ratio}]]])
- [:button
- {:class (stl/css :choose-image)
- :title (tr "media.choose-image")
- :aria-label (tr "media.choose-image")
- :on-click on-fill-image-click}
- (tr "media.choose-image")
- [:& file-uploader
- {:input-id "fill-image-upload"
- :accept "image/jpeg,image/png"
- :multi false
- :ref fill-image-ref
- :on-selected on-fill-image-selected}]]])
+ (when (= color-style :token-color)
+ [:div {:class (stl/css :token-color-title)}
+ (tr "workspace.colorpicker.color-tokens")])]
+ (if (= color-style :direct-color)
[:*
- [:div {:class (stl/css :colorpicker-tabs)}
- [:> tab-switcher* {:tabs tabs
- :selected active-color-tab
- :on-change on-change-tab}
- (if picking-color?
- [:div {:class (stl/css :picker-detail-wrapper)}
- [:div {:class (stl/css :center-circle)}]
- [:canvas#picker-detail {:class (stl/css :picker-detail) :width 256 :height 140}]]
+ (when (= selected-mode :gradient)
+ [:> gradients*
+ {:type (:type state)
+ :stops (if render-wasm? (vec (take types.fills/MAX-GRADIENT-STOPS (:stops state))) (:stops state))
+ :editing-stop (:editing-stop state)
+ :on-stop-edit-start handle-stop-edit-start
+ :on-stop-edit-finish handle-stop-edit-finish
+ :on-select-stop handle-change-gradient-selected-stop
+ :on-change-type handle-change-gradient-type
+ :on-change-stop handle-gradient-change-stop
+ :on-add-stop-auto handle-gradient-add-stop-auto
+ :on-add-stop-preview handle-gradient-add-stop-preview
+ :on-remove-stop handle-gradient-remove-stop
+ :on-rotate-stops handle-rotate-stops
+ :on-reverse-stops handle-reverse-stops
+ :on-reorder-stops handle-reorder-stops}])
+
+ (if (= selected-mode :image)
+ (let [uri (cfg/resolve-file-media (:image current-color))
+ keep-aspect-ratio? (-> current-color :image :keep-aspect-ratio)]
+ [:div {:class (stl/css :select-image)}
+ [:div {:class (stl/css :content)}
+ (when (:image current-color)
+ [:img {:src uri}])]
+
+ (when (some? (:image current-color))
+ [:div {:class (stl/css :checkbox-option)}
+ [:label {:for "keep-aspect-ratio"
+ :class (stl/css-case :global/checked keep-aspect-ratio?)}
+ [:span {:class (stl/css-case :global/checked keep-aspect-ratio?)}
+ (when keep-aspect-ratio?
+ deprecated-icon/status-tick)]
+ (tr "media.keep-aspect-ratio")
+ [:input {:type "checkbox"
+ :id "keep-aspect-ratio"
+ :checked keep-aspect-ratio?
+ :on-change handle-change-keep-aspect-ratio}]]])
+ [:button
+ {:class (stl/css :choose-image)
+ :title (tr "media.choose-image")
+ :aria-label (tr "media.choose-image")
+ :on-click on-fill-image-click}
+ (tr "media.choose-image")
+ [:& file-uploader
+ {:input-id "fill-image-upload"
+ :accept "image/jpeg,image/png"
+ :multi false
+ :ref fill-image-ref
+ :on-selected on-fill-image-selected}]]])
+
+ [:*
+ [:div {:class (stl/css :colorpicker-tabs)}
+ [:> tab-switcher* {:tabs tabs
+ :selected active-color-tab
+ :on-change on-change-tab}
+ (if picking-color?
+ [:div {:class (stl/css :picker-detail-wrapper)}
+ [:div {:class (stl/css :center-circle)}]
+ [:canvas#picker-detail {:class (stl/css :picker-detail) :width 256 :height 140}]]
- (case active-color-tab
- "ramp"
- [:> ramp-selector*
- {:color current-color
- :disable-opacity disable-opacity
- :on-change handle-change-color
- :on-start-drag on-start-drag
- :on-finish-drag on-finish-drag}]
+ (case active-color-tab
+ "ramp"
+ [:> ramp-selector*
+ {:color current-color
+ :disable-opacity disable-opacity
+ :on-change handle-change-color
+ :on-start-drag on-start-drag
+ :on-finish-drag on-finish-drag}]
- "harmony"
- [:& harmony-selector
- {:color current-color
- :disable-opacity disable-opacity
- :on-change handle-change-color
- :on-start-drag on-start-drag}]
+ "harmony"
+ [:& harmony-selector
+ {:color current-color
+ :disable-opacity disable-opacity
+ :on-change handle-change-color
+ :on-start-drag on-start-drag}]
- "hsva"
- [:& hsva-selector
- {:color current-color
- :disable-opacity disable-opacity
- :on-change handle-change-color
- :on-start-drag on-start-drag
- :on-finish-drag on-finish-drag}]))]]
+ "hsva"
+ [:& hsva-selector
+ {:color current-color
+ :disable-opacity disable-opacity
+ :on-change handle-change-color
+ :on-start-drag on-start-drag
+ :on-finish-drag on-finish-drag}]))]]
- [:& color-inputs
- {:type type
- :disable-opacity disable-opacity
- :color current-color
- :on-change handle-change-color}]
+ [:& color-inputs
+ {:type type
+ :disable-opacity disable-opacity
+ :color current-color
+ :on-change handle-change-color}]
- [:& libraries
- {:state state
- :current-color current-color
- :disable-gradient disable-gradient
- :disable-opacity disable-opacity
- :disable-image disable-image
- :on-select-color on-select-library-color
- :on-add-library-color on-add-library-color}]])]
+ [:& libraries
+ {:state state
+ :current-color current-color
+ :disable-gradient disable-gradient
+ :disable-opacity disable-opacity
+ :disable-image disable-image
+ :on-select-color on-select-library-color
+ :on-add-library-color on-add-library-color}]])]
+
+ [:> token-section* {:combined-tokens combined-tokens
+ :on-token-change on-token-change
+ :color-origin color-origin}])]
(when (fn? on-accept)
[:div {:class (stl/css :actions)}
[:button {:class (stl/css-case
@@ -561,6 +598,121 @@
:top top-offset
:maxHeight max-height-top}))))
+(defn- group-sets
+ "Groups sets by their parent path (everything before the last '/') if present.
+ The set name is always the last part of the path.
+
+ Input:
+ [{:set \"brand/subgroup/one\" :tokens [{:name \"background\"}]}
+ {:set \"brand/subgroup/two\" :tokens [{:name \"foreground\"}]}
+ {:set \"primitives\" :tokens [{:name \"blue-100\"}]}]
+
+ Output:
+ [{:group \"brand/subgroup\"
+ :sets [\"one\" \"two\"]
+ :tokens [\"background\" \"foreground\"]}
+ {:group nil
+ :sets [\"primitives\"]
+ :tokens [\"blue-100\"]}]"
+
+ [sets]
+ (->> sets
+ (group-by (fn [{:keys [set]}]
+ (when (str/includes? set "/")
+ (str/join "/" (butlast (str/split set #"/"))))))
+ (map (fn [[group grouped-sets]]
+ (if group
+ {:group group
+ :sets (map (fn [{:keys [id set]}]
+ {:id id
+ :name (last (str/split set #"/"))})
+ grouped-sets)
+ :tokens (->> grouped-sets
+ (mapcat :tokens)
+ (map :name)
+ distinct)}
+ (map (fn [{:keys [id set tokens]}]
+ {:group nil
+ :sets [{:id id :name set}]
+ :tokens (map :name tokens)})
+ grouped-sets))))
+ flatten))
+
+(defn- combine-groups-with-resolved
+ "Replaces token names in grouped sets with their full resolved token objects.
+
+ Input:
+ - groups: [{:group \"brand\"
+ :sets [\"light\" \"dark\"]
+ :tokens [\"background\" \"foreground\"]} ...]
+ - resolved-tokens: [{:name \"background\" :type \"color\" :value \"{red-100}\" ...} ...]
+
+ Output:
+ [{:group \"brand\"
+ :sets [\"light\" \"dark\"]
+ :tokens [{:name \"background\" :type \"color\" :value \"{red-100}\" ...}
+ {:name \"foreground\" :type \"color\" :value \"{green-100}\" ...}]}]"
+
+ [groups resolved-tokens]
+ (let [token-map (into {} (map (juxt :name identity) resolved-tokens))]
+ (map (fn [{:keys [group sets tokens]}]
+ {:group group
+ :sets sets
+ :tokens (->> tokens
+ (map #(get token-map %))
+ (remove #(or (nil? %)
+ (:errors %)
+ (nil? (:resolved-value %))))
+ vec)})
+ groups)))
+
+(defn- filter-non-empty-sets
+ "Removes sets that have no tokens.
+
+ Input:
+ [{:set \"brand/light\" :tokens []}
+ {:set \"brand/dark\" :tokens [{:name \"background\"}]}]
+
+ Output:
+ [{:set \"brand/dark\" :tokens [{:name \"background\"}]}]"
+ [sets]
+ (filter (fn [{:keys [tokens]}]
+ (some #(= (:type %) :color) tokens))
+ sets))
+
+(defn- add-tokens-to-sets
+ "Extracts set name and its tokens from raw set objects.
+
+ Input:
+ A vector of set objects (raw domain type), each compatible with:
+ {:id ... :name \"brand/light\" :tokens {...}}
+
+ Output:
+ A vector of simplified maps:
+ [{:set \"brand/light\" :tokens [{:name \"background\" ...} ...]}]"
+ [sets]
+ (map (fn [s]
+ {:set (ctob/get-name s)
+ :id (ctob/get-id s)
+ :tokens (vals (ctob/get-tokens- s))}) ;; TODO: this function should be moved to common.logic and refactored
+ sets))
+
+(defn- filter-active-sets
+ "Filters sets to only include those whose :set value is in active-set-names.
+
+ Input:
+ - sets: [{:set \"brand/light\" :tokens [...]},
+ {:set \"brand/dark\" :tokens [...]},
+ {:set \"primitivos\" :tokens [...]},
+ ...]
+ - active-set-names: #{\"brand/light\" \"primitivos\"}
+
+ Output:
+ [{:set \"brand/light\" :tokens [...]}
+ {:set \"primitivos\" :tokens [...]}]"
+ [sets active-set-names]
+ (filter #(contains? active-set-names (:set %)) sets))
+
(mf/defc colorpicker-modal
{::mf/register modal/components
::mf/register-as :colorpicker
@@ -569,14 +721,22 @@
disable-gradient
disable-opacity
disable-image
+ active-tokens
on-change
+ origin
+ color-origin
+ on-token-change
on-close
+ tab
on-accept]}]
(let [vport (mf/deref viewport)
dirty? (mf/use-var false)
last-change (mf/use-var nil)
position (d/nilv position :left)
style (calculate-position vport position x y (some? (:gradient data)))
+ active-tokens (if (object? active-tokens)
+ (mfu/bean active-tokens)
+ active-tokens)
on-change'
(mf/use-fn
@@ -587,7 +747,31 @@
(reset! last-change new-data)
(if (fn? on-change)
(on-change new-data)
- (st/emit! (dc/update-colorpicker new-data))))))]
+ (st/emit! (dc/update-colorpicker new-data))))))
+
+ tokens-lib
+ (mf/deref refs/tokens-lib)
+
+ active-sets-names
+ (mf/with-memo [tokens-lib]
+ (some-> tokens-lib
+ (ctob/get-active-themes-set-names)))
+
+ active-tokens (if (delay? active-tokens)
+ @active-tokens
+ active-tokens)
+
+ color-tokens (:color active-tokens)
+
+ grouped-tokens-by-set
+ (mf/with-memo [tokens-lib active-sets-names color-tokens]
+ (some-> tokens-lib
+ (ctob/get-sets)
+ (add-tokens-to-sets)
+ (filter-active-sets active-sets-names)
+ (filter-non-empty-sets)
+ (group-sets)
+ (combine-groups-with-resolved color-tokens)))]
(mf/with-effect []
(st/emit! (st/emit! (dsc/push-shortcuts ::colorpicker sc/shortcuts)))
@@ -601,8 +785,13 @@
:style style}
[:& colorpicker {:data data
+ :combined-tokens grouped-tokens-by-set
:disable-gradient disable-gradient
:disable-opacity disable-opacity
:disable-image disable-image
+ :on-token-change on-token-change
:on-change on-change'
+ :origin origin
+ :tab tab
+ :color-origin color-origin
:on-accept on-accept}]]))
diff --git a/frontend/src/app/main/ui/workspace/colorpicker.scss b/frontend/src/app/main/ui/workspace/colorpicker.scss
index 033b06e4f5..1d7e303d41 100644
--- a/frontend/src/app/main/ui/workspace/colorpicker.scss
+++ b/frontend/src/app/main/ui/workspace/colorpicker.scss
@@ -4,12 +4,16 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
-@import "../ds/_sizes.scss";
+@use "ds/typography.scss" as t;
+@use "ds/spacing.scss";
+@use "ds/_borders.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/_utils.scss" as *;
+@use "refactor/basic-rules.scss" as *;
.colorpicker-tooltip {
@extend .modal-background;
- left: calc(10 * $s-140);
+ left: calc(10 * px2rem(140));
width: auto;
padding: var(--sp-m);
width: $sz-284;
@@ -23,41 +27,41 @@
overflow: hidden;
}
-.colorpicker-tabs {
- padding: 0 var(--sp-m);
-}
-
.top-actions {
display: flex;
align-items: flex-start;
flex-direction: row-reverse;
justify-content: space-between;
- height: $s-40;
- padding: 0 var(--sp-m);
+ height: $sz-40;
}
.top-actions-right {
display: flex;
- gap: $s-8;
+ gap: var(--sp-s);
}
.opacity-input-wrapper {
@extend .input-element;
- @include bodySmallTypography;
- width: $s-68;
+ @include t.use-typography("body-small");
+ width: px2rem(68);
}
+// TODO: change to DS button component
.picker-btn {
- @include buttonStyle;
- @include flexCenter;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ border: none;
+ background: none;
+ cursor: pointer;
border-radius: $br-8;
background-color: transparent;
- border: $s-1 solid transparent;
- height: $s-20;
- width: $s-20;
+ border: $b-1 solid transparent;
+ height: var(--sp-xl);
+ width: var(--sp-xl);
border-radius: $br-4;
padding: 0;
- margin-top: $s-4;
+ margin-top: var(--sp-xs);
svg {
@extend .button-icon;
stroke: var(--button-tertiary-foreground-color-rest);
@@ -76,7 +80,7 @@
}
&:active {
outline: none;
- border: $s-1 solid transparent;
+ border: $b-1 solid transparent;
svg {
stroke: var(--button-tertiary-foreground-color-active);
}
@@ -91,17 +95,17 @@
.gradient-buttons {
display: flex;
align-items: center;
- gap: $s-8;
+ gap: var(--sp-s);
}
.gradient-btn {
@extend .button-tertiary;
- height: $s-20;
- width: $s-20;
+ height: var(--sp-xl);
+ width: var(--sp-xl);
border-radius: $br-4;
- border: $s-2 solid transparent;
+ border: $b-2 solid transparent;
&:hover {
- border: $s-2 solid var(--colorpicker-details-color-selected);
+ border: $b-2 solid var(--colorpicker-details-color-selected);
}
}
@@ -109,7 +113,7 @@
background: linear-gradient(180deg, var(--color-foreground-secondary), transparent);
&.selected {
background: linear-gradient(to bottom, rgba(126, 255, 245, 1) 0%, rgba(126, 255, 245, 0.2) 100%);
- border: $s-2 solid var(--colorpicker-details-color-selected);
+ border: $b-2 solid var(--colorpicker-details-color-selected);
}
}
@@ -117,38 +121,40 @@
background: radial-gradient(transparent, var(--color-foreground-secondary));
&.selected {
background: radial-gradient(rgba(126, 255, 245, 1) 0%, rgba(126, 255, 245, 0.2) 100%);
- border: $s-2 solid var(--colorpicker-details-color-selected);
+ border: $b-2 solid var(--colorpicker-details-color-selected);
}
}
.actions {
display: flex;
- gap: $s-4;
+ gap: var(--sp-xs);
}
.accept-color {
- @include uppercaseTitleTipography;
+ @include t.use-typography("headline-small");
@extend .button-primary;
width: 100%;
- height: $s-32;
- margin-top: $s-8;
+ height: var(--sp-xxxl);
+ margin-top: var(--sp-s);
}
.picker-detail-wrapper {
- @include flexCenter;
+ display: flex;
+ justify-content: center;
+ align-items: center;
position: relative;
- margin: $s-12 0 $s-8 0;
+ margin: var(--sp-m) 0 var(--sp-s) 0;
}
.center-circle {
- width: $s-24;
- height: $s-24;
- border: $s-2 solid var(--colorpicker-details-color);
+ width: var(--sp-xxl);
+ height: var(--sp-xxl);
+ border: $b-2 solid var(--colorpicker-details-color);
border-radius: $br-circle;
position: absolute;
left: 50%;
top: 50%;
- transform: translate(calc(-1 * $s-12), calc(-1 * $s-12));
+ transform: translate(calc(-1 * var(--sp-m)), calc(-1 * var(--sp-m)));
}
.picker-detail {
@@ -157,11 +163,11 @@
}
.select {
- width: $s-116;
+ width: px2rem(116);
}
.select-image {
- margin-top: $s-4;
+ margin-top: var(--sp-xs);
}
.content {
@@ -170,10 +176,10 @@
justify-content: center;
background-image: url("/images/colorpicker-no-image.png");
background-position: center;
- background-size: auto $s-140;
- height: $s-140;
- margin-bottom: $s-6;
- margin-right: $s-1;
+ background-size: auto px2rem(140);
+ height: px2rem(140);
+ margin-bottom: $sz-6;
+ margin-right: $sz-1;
img {
height: fit-content;
width: fit-content;
@@ -185,13 +191,21 @@
.choose-image {
@extend .button-secondary;
- @include uppercaseTitleTipography;
+ @include t.use-typography("headline-small");
width: 100%;
- margin-top: $s-12;
- height: $s-32;
+ margin-top: var(--sp-m);
+ height: var(--sp-xxxl);
}
.checkbox-option {
@extend .input-checkbox;
- margin: $s-16 0 0 0;
+ margin: var(--sp-l) 0 0 0;
+}
+
+.token-color-title {
+ @include t.use-typography("title-small");
+ color: var(--color-foreground-secondary);
+ display: flex;
+ align-items: center;
+ height: var(--sp-xxxl);
}
diff --git a/frontend/src/app/main/ui/workspace/colorpicker/color_inputs.scss b/frontend/src/app/main/ui/workspace/colorpicker/color_inputs.scss
index 349da89a7d..6d653f34e3 100644
--- a/frontend/src/app/main/ui/workspace/colorpicker/color_inputs.scss
+++ b/frontend/src/app/main/ui/workspace/colorpicker/color_inputs.scss
@@ -4,37 +4,36 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.color-values {
- @include flexColumn;
- margin-top: $s-8;
- padding: 0 var(--sp-m);
+ @include deprecated.flexColumn;
+ margin-top: deprecated.$s-8;
&.disable-opacity {
grid-template-columns: 3.5rem repeat(3, 1fr);
}
.colors-row {
- @include flexRow;
+ @include deprecated.flexRow;
.input-wrapper {
@extend .input-element;
- @include bodySmallTypography;
- width: $s-84;
+ @include deprecated.bodySmallTypography;
+ width: deprecated.$s-84;
display: flex;
align-items: baseline;
}
}
.hex-alpha-wrapper {
- @include flexRow;
+ @include deprecated.flexRow;
.input-wrapper {
@extend .input-element;
- @include bodySmallTypography;
- width: $s-84;
+ @include deprecated.bodySmallTypography;
+ width: deprecated.$s-84;
&.hex {
- width: $s-172;
+ width: deprecated.$s-172;
display: flex;
align-items: baseline;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
}
}
diff --git a/frontend/src/app/main/ui/workspace/colorpicker/color_tokens.cljs b/frontend/src/app/main/ui/workspace/colorpicker/color_tokens.cljs
new file mode 100644
index 0000000000..e9ae216a31
--- /dev/null
+++ b/frontend/src/app/main/ui/workspace/colorpicker/color_tokens.cljs
@@ -0,0 +1,314 @@
+;; 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.colorpicker.color-tokens
+ (:require-macros [app.main.style :as stl])
+ (:require
+ [app.common.data :as d]
+ [app.common.data.macros :as dm]
+ [app.main.constants :refer [max-input-length]]
+ [app.main.data.common :as dcm]
+ [app.main.data.event :as-alias ev]
+ [app.main.data.modal :as modal]
+ [app.main.data.workspace.tokens.application :as dwta]
+ [app.main.data.workspace.tokens.library-edit :as dwtl]
+ [app.main.refs :as refs]
+ [app.main.store :as st]
+ [app.main.ui.ds.buttons.icon-button :refer [icon-button*]]
+ [app.main.ui.ds.controls.input :refer [input*]]
+ [app.main.ui.ds.foundations.assets.icon :as i]
+ [app.main.ui.ds.tooltip :refer [tooltip*]]
+ [app.main.ui.ds.utilities.swatch :refer [swatch*]]
+ [app.util.dom :as dom]
+ [app.util.i18n :as i18n :refer [tr]]
+ [cuerdas.core :as str]
+ [potok.v2.core :as ptk]
+ [rumext.v2 :as mf]))
+
+(mf/defc token-empty-state*
+ {::mf/private true}
+ []
+ [:div {:class (stl/css :color-token-empty-state)}
+ (tr "color-token.empty-state")])
+
+(mf/defc list-item*
+ {::mf/private true}
+ [{:keys [token on-token-pill-click selected] :rest props}]
+ (let [on-click
+ (mf/use-fn
+ (mf/deps token on-token-pill-click)
+ (fn [event]
+ (on-token-pill-click event token)))
+ id-tooltip (mf/use-id)
+ resolved (:resolved-value token)
+ color-value (dwta/value->color resolved)]
+ [:> tooltip* {:id id-tooltip
+ :style {:width "100%"}
+ :content (:name token)}
+ [:button {:class (stl/css-case :color-token-item true
+ :color-token-selected selected)
+ :aria-labelledby id-tooltip
+ :on-click on-click}
+ [:> swatch* {:background color-value
+ :tooltip-content (tr "workspace.tokens.resolved-value" resolved)
+ :size "small"}]
+ [:div {:class (stl/css :token-name)}
+ (:name token)]
+ (when selected
+ [:> i/icon* {:icon-id i/tick
+ :size "s"
+ :class (stl/css :token-selected-icon)}])]]))
+
+(mf/defc grid-item*
+ {::mf/private true}
+ [{:keys [token on-token-pill-click selected] :rest props}]
+ (let [on-click
+ (mf/use-fn
+ (mf/deps token on-token-pill-click)
+ (fn [event]
+ (on-token-pill-click event token)))
+ resolved (:resolved-value token)
+ token-name (:name token)
+ color-value (dwta/value->color resolved)]
+ [:div {:class (stl/css-case :color-token-item-grid true
+ :color-token-selected-grid selected)}
+ [:> swatch* {:background color-value
+ :tooltip-content
+ (mf/html
+ [:*
+ [:div
+ [:span (dm/str (tr "workspace.tokens.token-name") ": ")] [:span {:class (stl/css :token-name)} token-name]]
+ [:div (tr "workspace.tokens.resolved-value" resolved)]])
+ :on-click on-click
+ :size "medium"}]]))
+
+(defn group->paths
+ "Given a map with :group string (slash-separated), returns a set of vectors
+ representing the cumulative group hierarchy.
+
+ Example:
+ {:group \"test/gracia\"}
+ => #{[\"test\"] [\"test\" \"gracia\"]}"
+ [m]
+ (let [parts (when-let [g (:group m)]
+ (str/split g #"/"))]
+ (if (seq parts)
+ (->> (range 1 (inc (count parts)))
+ (map (fn [i] (vec (take i parts))))
+ set)
+ #{})))
+
+(mf/defc set-section*
+ {::mf/private true}
+ [{:keys [collapsed toggle-sets-open group-or-set name color-origin on-token-change] :rest props}]
+
+ (let [list-style* (mf/use-state :list)
+ list-style (deref list-style*)
+ toggle-list-style
+ (mf/use-fn
+ (mf/deps list-style)
+ (fn []
+ (let [new-style (if (= :list list-style) :grid :list)]
+ (reset! list-style* new-style))))
+
+ toggle-set
+ (mf/use-fn
+ (mf/deps name toggle-sets-open)
+ (fn []
+ (toggle-sets-open name)))
+
+ objects (mf/deref refs/workspace-page-objects)
+ selected (mf/deref refs/selected-shapes)
+
+ selected-shapes
+ (mf/with-memo [selected objects]
+ (into [] (keep (d/getf objects)) selected))
+
+ first-shape (first selected-shapes)
+ applied-tokens (:applied-tokens first-shape)
+ has-color-tokens? (get applied-tokens :fill)
+ has-stroke-tokens? (get applied-tokens :stroke-color)
+
+ on-token-pill-click
+ (mf/use-fn
+ (mf/deps selected-shapes)
+ (fn [event token]
+ (dom/stop-propagation event)
+ (when (seq selected-shapes)
+ (on-token-change event token))))
+
+ create-token-on-set
+ (mf/use-fn
+ (mf/deps group-or-set)
+ (fn [_]
+ (let [;; We want to create a token on the first set
+ ;; if there are many in this group
+ path-set (group->paths group-or-set)
+ id (:id (first (:sets group-or-set)))]
+ (st/emit! (dcm/go-to-workspace :layout :tokens)
+ (when path-set
+ (ptk/data-event :expand-token-sets {:paths path-set}))
+ (dwtl/set-selected-token-set-id id)
+ (dwtl/set-token-type-section-open :color true)
+ (let [{:keys [modal title]} (get dwta/token-properties :color)
+ window-size (dom/get-window-size)
+ left-sidebar (dom/get-element "left-sidebar-aside")
+ x-size (dom/get-data left-sidebar "size")
+ modal-height 392
+ x (- (int x-size) 30)
+ y (- (/ (:height window-size) 2) (/ modal-height 2))]
+ (modal/show (:key modal)
+ {:x x
+ :y y
+ :position :right
+ :fields (:fields modal)
+ :title title
+ :action "create"
+ :token-type :color}))))))
+
+ icon-id (if collapsed i/arrow-right i/arrow-down)]
+
+ [:article {:class (stl/css :color-token-set)}
+ [:header {:class (stl/css :set-title-bar)}
+ [:button {:class (stl/css :set-title-btn)
+ :aria-controls (str "set-panel-" (d/name name))
+ :aria-expanded (not collapsed)
+ :aria-label (tr "inspect.tabs.styles.panel.toggle-style" name)
+ :on-click toggle-set}
+ [:> i/icon* {:icon-id icon-id
+ :size "s"
+ :class (stl/css :set-title-icon)}]
+ [:span {:class (stl/css :set-title)} name]]
+ [:div {:class (stl/css-case :set-title-actions true
+ :set-title-action-hidden collapsed)}
+ [:> icon-button* {:on-click toggle-list-style
+ :variant "action"
+ :aria-label (if (= :list list-style)
+ (tr "workspace.assets.grid-view")
+ (tr "workspace.assets.list-view"))
+ :icon (if (= :list list-style)
+ i/flex-grid
+ i/view-as-list)}]
+ [:> icon-button* {:on-click create-token-on-set
+ :variant "action"
+ :aria-label (tr "workspace.tokens.add-token" "color")
+ :icon i/add}]]]
+
+ (when (not collapsed)
+ [:div {:id (str "set-panel-" (d/name name))
+ :class (stl/css-case :color-token-list true
+ :list-view (= list-style :list)
+ :grid-view (= list-style :grid))}
+
+ (for [token (:tokens group-or-set)]
+ (let [selected? (if (= color-origin :fill)
+ (= has-color-tokens? (:name token))
+ (= has-stroke-tokens? (:name token)))]
+ (if (= :grid list-style)
+ [:> grid-item* {:key (str "token-grid-" (:id token))
+ :on-token-pill-click on-token-pill-click
+ :selected selected?
+ :token token}]
+ [:> list-item* {:key (str "token-list-" (:id token))
+ :on-token-pill-click on-token-pill-click
+ :selected selected?
+ :token token}])))])]))
+
+(defn- label-group-or-set [{:keys [group sets]}]
+ (if group
+ (str group " (" (str/join ", " (map :name sets)) ")")
+ (:name (first sets))))
+
+(defn- filter-combined-tokens
+ "Filters the combined-tokens structure by token name.
+ Removes sets or groups if they end up with no tokens.
+
+ Input:
+ [{:group \"brand\", :sets [\"light\" \"dark\"], :tokens [{:name \"background\"} {:name \"foreground\"}]}
+ {:group nil, :sets [\"primitivos\"], :tokens [{:name \"blue-100\"} {:name \"red-100\"}]}]
+
+ (filter-combined-tokens ... \"blue\")
+ Output:
+ [{:group nil, :sets [\"primitivos\"], :tokens [{:name \"blue-100\"}]}]
+ => keeps only tokens matching \"blue\", and removes sets/groups if no tokens match."
+
+ [combined-tokens term]
+ (let [term (str/lower (str/trim term))]
+ (if (str/blank? term)
+ combined-tokens
+ (->> combined-tokens
+ (map (fn [{:keys [tokens] :as entry}]
+ (let [filtered (filter #(str/includes?
+ (str/lower (:name %))
+ term)
+ tokens)]
+ (when (seq filtered)
+ (assoc entry :tokens filtered)))))
+ (remove nil?)))))
+
+(defn- sort-combined-tokens
+ "Sorts tokens alphabetically by :name inside each group/set.
+ Input:
+ [{:group \"brand\", :sets [\"light\" \"dark\"], :tokens [{:name \"foreground\"} {:name \"background\"}]}]
+
+ Output:
+ [{:group \"brand\", :sets [\"light\" \"dark\"], :tokens [{:name \"background\"} {:name \"foreground\"}]}]"
+ [combined-tokens]
+ (map (fn [entry]
+ (update entry :tokens #(sort-by :name %)))
+ combined-tokens))
+
+(mf/defc token-section*
+ {}
+ [{:keys [combined-tokens color-origin on-token-change] :rest props}]
+ (let [sets (set (mapv label-group-or-set combined-tokens))
+ filter-term* (mf/use-state "")
+ filter-term (deref filter-term*)
+ open-sets* (mf/use-state sets)
+ open-sets (deref open-sets*)
+
+ toggle-sets-open
+ (mf/use-fn
+ (mf/deps open-sets)
+ (fn [name]
+ (if (contains? open-sets name)
+ (swap! open-sets* disj name)
+ (swap! open-sets* conj name))))
+
+ on-filter-tokens
+ (mf/use-fn
+ (mf/deps filter-term)
+ (fn [event]
+ (let [value (-> event (dom/get-target)
+ (dom/get-value))]
+ (reset! filter-term* value)
+ (reset! open-sets* sets))))
+ filtered-combined (filter-combined-tokens combined-tokens filter-term)
+ sorted-tokens (sort-combined-tokens filtered-combined)]
+ (if (seq combined-tokens)
+ [:div {:class (stl/css :color-tokens-section)}
+ [:> input* {:placeholder "Search by token name"
+ :icon i/search
+ :max-length max-input-length
+ :variant "comfortable"
+ :class (stl/css :search-input)
+ :default-value filter-term
+ :on-change on-filter-tokens}]
+ (if (seq sorted-tokens)
+ [:div {:class (stl/css :color-tokens-inputs)}
+ (for [combined-sets sorted-tokens]
+ (let [name (label-group-or-set combined-sets)]
+ [:> set-section*
+ {:collapsed (not (contains? open-sets name))
+ :key (str "set-" name)
+ :toggle-sets-open toggle-sets-open
+ :color-origin color-origin
+ :on-token-change on-token-change
+ :name name
+ :group-or-set combined-sets}]))]
+ [:> token-empty-state*])]
+ [:> token-empty-state*])))
+
diff --git a/frontend/src/app/main/ui/workspace/colorpicker/color_tokens.scss b/frontend/src/app/main/ui/workspace/colorpicker/color_tokens.scss
new file mode 100644
index 0000000000..97a0d4de36
--- /dev/null
+++ b/frontend/src/app/main/ui/workspace/colorpicker/color_tokens.scss
@@ -0,0 +1,143 @@
+// 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/typography.scss" as t;
+@use "ds/_borders.scss" as *;
+@use "ds/_sizes.scss" as *;
+
+.color-token-list {
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-xs);
+}
+
+.color-token-item {
+ --color-token-background: var(--color-background-primary);
+ background-color: var(--color-token-background);
+ color: var(--color-foreground-primary);
+ text-align: left;
+ display: grid;
+ grid-template-columns: auto 1fr auto;
+ align-items: center;
+ gap: var(--sp-xs);
+ inline-size: 100%;
+ border-radius: $br-8;
+ padding: var(--sp-xs);
+ block-size: $sz-28;
+ border: none;
+ cursor: pointer;
+ &:hover {
+ --color-token-background: var(--color-background-tertiary);
+ }
+}
+
+.color-token-empty-state {
+ @include t.use-typography("body-small");
+ padding: var(--sp-s) var(--sp-xxl);
+ text-align: center;
+ color: var(--color-foreground-secondary);
+}
+
+.color-token-selected {
+ background-color: var(--color-background-tertiary);
+}
+
+.color-token-selected-grid {
+ border: $b-1 solid var(--color-accent-primary);
+ border-radius: $br-4;
+ inline-size: fit-content;
+}
+
+.token-selected-icon {
+ color: var(--color-accent-primary);
+}
+
+.token-name {
+ @include t.use-typography("body-small");
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.color-tokens-section {
+ max-block-size: $sz-430;
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-s);
+}
+
+.grid-view {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(var(--sp-xxl), 1fr));
+ justify-items: start;
+ gap: var(--sp-s);
+}
+
+.list-view {
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-xs);
+}
+
+.search-input {
+ padding: $sz-1;
+}
+
+.color-tokens-inputs {
+ overflow: auto;
+}
+
+// Title bar
+.set-title-bar {
+ --title-color: var(--color-foreground-secondary);
+ --arrow-color: var(--color-foreground-secondary);
+ @include t.use-typography("title-small");
+ text-transform: none;
+ display: flex;
+ overflow: hidden;
+ min-block-size: var(--sp-xxxl);
+ padding-block-start: var(--sp-xs);
+}
+
+.set-title-btn {
+ border: none;
+ background: none;
+ display: grid;
+ grid-template-columns: auto 1fr;
+ gap: var(--sp-xs);
+ flex-grow: 1;
+ padding: 0;
+ overflow: hidden;
+
+ &:hover {
+ --arrow-color: var(--color-foreground-primary);
+ --title-color: var(--color-foreground-primary);
+ }
+}
+
+.set-title-icon {
+ color: var(--arrow-color);
+ block-size: $sz-28;
+ padding-block-start: var(--sp-xxs);
+}
+
+.set-title {
+ color: var(--title-color);
+ text-align: left;
+ padding-block-end: var(--sp-xs);
+}
+
+.set-title-actions {
+ display: flex;
+}
+
+.set-title-action-hidden {
+ display: none;
+}
+
+.token-name {
+ color: var(--color-foreground-primary);
+}
diff --git a/frontend/src/app/main/ui/workspace/colorpicker/gradients.cljs b/frontend/src/app/main/ui/workspace/colorpicker/gradients.cljs
index 1db83d6c01..ac2279de9f 100644
--- a/frontend/src/app/main/ui/workspace/colorpicker/gradients.cljs
+++ b/frontend/src/app/main/ui/workspace/colorpicker/gradients.cljs
@@ -12,7 +12,6 @@
[app.common.math :as mth]
[app.common.types.color :as cc]
[app.common.types.fills :as types.fills]
- [app.config :as cfg]
[app.main.features :as features]
[app.main.ui.components.numeric-input :refer [numeric-input*]]
[app.main.ui.components.reorder-handler :refer [reorder-handler*]]
@@ -52,6 +51,10 @@
(str/join ", ")
(str/ffmt "linear-gradient(90deg, %1)")))
+(defn- stop->hex-color
+ [stop]
+ (select-keys stop [:color :opacity]))
+
(mf/defc stop-input-row*
{::mf/private true}
[{:keys [stop
@@ -156,8 +159,9 @@
[:> color-row*
{:disable-gradient true
:disable-picker true
- :color stop
+ :color (stop->hex-color stop)
:index index
+ :origin :gradient
:on-change handle-change-stop-color
:on-remove handle-remove-stop
:on-focus handle-focus-stop-color
@@ -288,8 +292,12 @@
(fn []
(when on-reverse-stops
(on-reverse-stops))))
- cap-stops? (or (features/use-feature "render-wasm/v1") (contains? cfg/flags :frontend-binary-fills))
- add-stop-disabled? (when cap-stops? (>= (count stops) types.fills/MAX-GRADIENT-STOPS))]
+
+ cap-stops?
+ (features/use-feature "render-wasm/v1")
+
+ add-stop-disabled?
+ (when cap-stops? (>= (count stops) types.fills/MAX-GRADIENT-STOPS))]
[:div {:class (stl/css :gradient-panel)}
[:div {:class (stl/css :gradient-preview)}
@@ -351,7 +359,7 @@
:icon i/add}]]]
[:div {:class (stl/css :gradient-stops-list)}
- [:& h/sortable-container {}
+ [:> h/sortable-container* {}
(for [[index stop] (d/enumerate stops)]
[:> stop-input-row*
{:key index
diff --git a/frontend/src/app/main/ui/workspace/colorpicker/gradients.scss b/frontend/src/app/main/ui/workspace/colorpicker/gradients.scss
index 8bd5b81c45..d9e5b75633 100644
--- a/frontend/src/app/main/ui/workspace/colorpicker/gradients.scss
+++ b/frontend/src/app/main/ui/workspace/colorpicker/gradients.scss
@@ -4,13 +4,13 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.gradient-panel {
- margin-top: $s-12;
+ margin-top: deprecated.$s-12;
display: grid;
- gap: $s-4;
- grid-template-rows: $s-56 $s-32 1fr;
+ gap: deprecated.$s-4;
+ grid-template-rows: deprecated.$s-56 deprecated.$s-32 1fr;
}
.gradient-preview {
@@ -24,18 +24,18 @@
.gradient-background {
width: 100%;
- height: $s-20;
- border-radius: $br-4;
+ height: deprecated.$s-20;
+ border-radius: deprecated.$br-4;
position: relative;
cursor: pointer;
}
.gradient-preview-stop-wrapper {
position: absolute;
- width: calc(100% - $s-24 - $s-4);
+ width: calc(100% - deprecated.$s-24 - deprecated.$s-4);
height: 100%;
- left: $s-2;
- top: calc(-1 * $s-4);
+ left: deprecated.$s-2;
+ top: calc(-1 * deprecated.$s-4);
pointer-events: none;
}
@@ -43,31 +43,31 @@
background-color: var(--color-foreground-primary);
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAADFJREFUOE9jZGBgEAFifOANPknGUQMYhkkYEEgG+NMJKAwIAbwJbdQABnBCIgRoG4gAIF8IsXB/Rs4AAAAASUVORK5CYII=");
background-position: left center;
- background-size: $s-8;
- border-radius: $br-6;
- border: $s-2 solid var(--color-foreground-primary);
- box-shadow: 0px 0px $s-4 0px var(--menu-shadow-color);
- height: calc($s-24 - $s-2);
+ background-size: deprecated.$s-8;
+ border-radius: deprecated.$br-6;
+ border: deprecated.$s-2 solid var(--color-foreground-primary);
+ box-shadow: 0px 0px deprecated.$s-4 0px var(--menu-shadow-color);
+ height: calc(deprecated.$s-24 - deprecated.$s-2);
left: var(--position);
overflow: hidden;
pointer-events: initial;
position: absolute;
- width: calc($s-24 - $s-2);
+ width: calc(deprecated.$s-24 - deprecated.$s-2);
&.is-selected,
&:hover {
- outline: $s-2 solid var(--color-accent-primary);
+ outline: deprecated.$s-2 solid var(--color-accent-primary);
}
}
.gradient-preview-stop-decoration {
background: var(--color-foreground-primary);
border-radius: 100%;
- bottom: $s-32;
- box-shadow: 0px 0px $s-4 0px var(--menu-shadow-color);
- height: $s-4;
- left: calc(var(--position) + $s-8);
+ bottom: deprecated.$s-32;
+ box-shadow: 0px 0px deprecated.$s-4 0px var(--menu-shadow-color);
+ height: deprecated.$s-4;
+ left: calc(var(--position) + deprecated.$s-8);
position: absolute;
- width: $s-4;
+ width: deprecated.$s-4;
}
.gradient-preview-stop-color {
@@ -97,7 +97,7 @@
}
.gradient-options-select {
- width: $s-140;
+ width: deprecated.$s-140;
}
.rotate-icon {
@@ -107,8 +107,8 @@
.gradient-stops-list {
display: flex;
flex-direction: column;
- gap: $s-4;
- max-height: $s-180;
+ gap: deprecated.$s-4;
+ max-height: deprecated.$s-180;
overflow-y: auto;
overflow-x: hidden;
padding: 0 0 var(--sp-s) var(--sp-m);
@@ -116,10 +116,10 @@
.gradient-stops-entry {
display: flex;
- gap: $s-4;
- padding: $s-2;
- border-radius: $br-12;
- border: $s-1 solid transparent;
+ gap: deprecated.$s-4;
+ padding: deprecated.$s-2;
+ border-radius: deprecated.$br-12;
+ border: deprecated.$s-1 solid transparent;
position: relative;
@@ -142,13 +142,13 @@
.offset-input-wrapper {
@extend .input-element;
- @include bodySmallTypography;
- width: $s-92;
+ @include deprecated.bodySmallTypography;
+ width: deprecated.$s-92;
}
.gradient-separator {
border-color: var(--color-background-quaternary);
- border-width: $s-3;
+ border-width: deprecated.$s-3;
margin-left: calc(var(--sp-m) / 2);
position: relative;
width: calc(100% - var(--sp-m));
@@ -157,10 +157,10 @@
.gradient-preview-stop-preview {
background: var(--color-foreground-primary);
border-radius: 50%;
- height: $s-4;
- left: calc(var(--preview-position, 0%) - $s-2);
+ height: deprecated.$s-4;
+ left: calc(var(--preview-position, 0%) - deprecated.$s-2);
pointer-events: none;
position: absolute;
- top: calc(50% - $s-2);
- width: $s-4;
+ top: calc(50% - deprecated.$s-2);
+ width: deprecated.$s-4;
}
diff --git a/frontend/src/app/main/ui/workspace/colorpicker/harmony.scss b/frontend/src/app/main/ui/workspace/colorpicker/harmony.scss
index 04bc1d46ac..e2438dc416 100644
--- a/frontend/src/app/main/ui/workspace/colorpicker/harmony.scss
+++ b/frontend/src/app/main/ui/workspace/colorpicker/harmony.scss
@@ -4,41 +4,41 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.harmony-selector {
display: flex;
align-items: center;
- gap: $s-8;
- margin-top: $s-12;
- margin-bottom: $s-8;
+ gap: deprecated.$s-8;
+ margin-top: deprecated.$s-12;
+ margin-bottom: deprecated.$s-8;
}
.hue-wheel-wrapper {
- @include flexCenter;
+ @include deprecated.flexCenter;
position: relative;
}
.hue-wheel {
- width: $s-196;
- height: $s-196;
+ width: deprecated.$s-196;
+ height: deprecated.$s-196;
}
.handler {
@extend .colorpicker-handler;
- height: $s-16;
- width: $s-16;
- border: $s-2 solid var(--colorpicker-handlers-color);
+ height: deprecated.$s-16;
+ width: deprecated.$s-16;
+ border: deprecated.$s-2 solid var(--colorpicker-handlers-color);
}
.handler.complement {
background-color: var(--colorpicker-handlers-color);
- border: $s-2 solid var(--colorpicker-handlers-color);
+ border: deprecated.$s-2 solid var(--colorpicker-handlers-color);
}
.handlers-wrapper {
- @include flexRow;
- height: $s-200;
- width: $s-52;
+ @include deprecated.flexRow;
+ height: deprecated.$s-200;
+ width: deprecated.$s-52;
flex-grow: 1;
}
diff --git a/frontend/src/app/main/ui/workspace/colorpicker/hsva.scss b/frontend/src/app/main/ui/workspace/colorpicker/hsva.scss
index 4b02ceec61..08def7607f 100644
--- a/frontend/src/app/main/ui/workspace/colorpicker/hsva.scss
+++ b/frontend/src/app/main/ui/workspace/colorpicker/hsva.scss
@@ -4,13 +4,13 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.hsva-selector {
- @include flexColumn;
- padding: $s-4;
- grid-row-gap: $s-8;
- margin-bottom: $s-8;
+ @include deprecated.flexColumn;
+ padding: deprecated.$s-4;
+ grid-row-gap: deprecated.$s-8;
+ margin-bottom: deprecated.$s-8;
}
.hsva-row {
@@ -19,13 +19,13 @@
}
.hsva-selector-label {
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
display: flex;
align-items: center;
justify-content: flex-start;
- width: $s-32;
+ width: deprecated.$s-32;
}
.hsva-bar {
- width: $s-228;
+ width: deprecated.$s-228;
}
diff --git a/frontend/src/app/main/ui/workspace/colorpicker/libraries.scss b/frontend/src/app/main/ui/workspace/colorpicker/libraries.scss
index 9b510d97fe..0fc9028c86 100644
--- a/frontend/src/app/main/ui/workspace/colorpicker/libraries.scss
+++ b/frontend/src/app/main/ui/workspace/colorpicker/libraries.scss
@@ -4,30 +4,29 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.libraries {
- margin-top: $s-8;
+ margin-top: deprecated.$s-8;
width: 100%;
- padding: 0 var(--sp-m);
}
.selected-colors {
display: grid;
grid-template-columns: repeat(8, 1fr);
- gap: $s-4;
+ gap: deprecated.$s-4;
justify-content: space-between;
overflow: auto;
- margin-top: $s-8;
- max-height: $s-168;
+ margin-top: deprecated.$s-8;
+ max-height: deprecated.$s-168;
}
.add-color-btn,
.palette-btn {
@extend .button-secondary;
- height: $s-24;
- width: $s-24;
- border-radius: $br-circle;
+ height: deprecated.$s-24;
+ width: deprecated.$s-24;
+ border-radius: deprecated.$br-circle;
padding: 0;
svg {
@extend .button-icon;
diff --git a/frontend/src/app/main/ui/workspace/colorpicker/ramp.scss b/frontend/src/app/main/ui/workspace/colorpicker/ramp.scss
index 60c94207b9..00e5825af6 100644
--- a/frontend/src/app/main/ui/workspace/colorpicker/ramp.scss
+++ b/frontend/src/app/main/ui/workspace/colorpicker/ramp.scss
@@ -4,15 +4,15 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.value-saturation-selector {
background-color: rgba(var(--hue-rgb));
position: relative;
- height: $s-140;
+ height: deprecated.$s-140;
width: 100%;
- margin-top: $s-12;
- margin-bottom: $s-12;
+ margin-top: deprecated.$s-12;
+ margin-bottom: deprecated.$s-12;
cursor: pointer;
&::before {
@@ -34,15 +34,15 @@
.handler {
@extend .colorpicker-handler;
- height: $s-16;
- width: $s-16;
- border: $s-2 solid var(--colorpicker-handlers-color);
+ height: deprecated.$s-16;
+ width: deprecated.$s-16;
+ border: deprecated.$s-2 solid var(--colorpicker-handlers-color);
}
.shade-selector {
display: flex;
- gap: $s-4;
- height: $s-52;
+ gap: deprecated.$s-4;
+ height: deprecated.$s-52;
cursor: pointer;
}
diff --git a/frontend/src/app/main/ui/workspace/colorpicker/slider_selector.scss b/frontend/src/app/main/ui/workspace/colorpicker/slider_selector.scss
index e2eee80300..460939c0a8 100644
--- a/frontend/src/app/main/ui/workspace/colorpicker/slider_selector.scss
+++ b/frontend/src/app/main/ui/workspace/colorpicker/slider_selector.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.slider-selector {
--gradient-direction: 90deg;
@@ -16,10 +16,10 @@
}
position: relative;
align-self: center;
- height: $s-24;
+ height: deprecated.$s-24;
inline-size: 100%;
- border: $s-2 solid var(--colorpicker-details-color);
- border-radius: $br-6;
+ border: deprecated.$s-2 solid var(--colorpicker-details-color);
+ border-radius: deprecated.$br-6;
background: linear-gradient(
var(--gradient-direction),
rgba(var(--color), 0) 0%,
@@ -28,8 +28,8 @@
cursor: pointer;
&.vertical {
- width: $s-24;
- height: $s-200;
+ width: deprecated.$s-24;
+ height: deprecated.$s-200;
}
&.hue {
@@ -60,7 +60,7 @@
&::after {
content: "";
position: absolute;
- border-radius: $br-6;
+ border-radius: deprecated.$br-6;
width: 100%;
height: 100%;
background: linear-gradient(
@@ -78,24 +78,24 @@
.handler {
position: absolute;
left: 50%;
- width: calc($s-8 + $s-2);
- height: calc($s-24 + $s-1);
- border-radius: $br-4;
- z-index: $z-index-1;
+ width: calc(deprecated.$s-8 + deprecated.$s-2);
+ height: calc(deprecated.$s-24 + deprecated.$s-1);
+ border-radius: deprecated.$br-4;
+ z-index: deprecated.$z-index-1;
transform: translate(-4px, -3px);
background-color: var(--colorpicker-handlers-color);
}
&.vertical .handler {
- height: calc($s-8 + $s-2);
- width: calc($s-24 + $s-1);
+ height: calc(deprecated.$s-8 + deprecated.$s-2);
+ width: calc(deprecated.$s-24 + deprecated.$s-1);
transform: translate(-12px, 5px);
}
}
.opacity-wrapper {
background-color: var(--colorpicker-background-color);
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
}
.slider-selector.hue {
diff --git a/frontend/src/app/main/ui/workspace/comments.scss b/frontend/src/app/main/ui/workspace/comments.scss
index af3fa9d43c..cad6693505 100644
--- a/frontend/src/app/main/ui/workspace/comments.scss
+++ b/frontend/src/app/main/ui/workspace/comments.scss
@@ -4,30 +4,30 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.comments-section {
position: relative;
background-color: var(--panel-background-color);
display: grid;
- grid-template-rows: $s-40 $s-48 1fr;
+ grid-template-rows: deprecated.$s-40 deprecated.$s-48 1fr;
}
.from-viewer {
- padding: 0 $s-8;
+ padding: 0 deprecated.$s-8;
}
.comments-section-title {
- @include flexCenter;
- @include uppercaseTitleTipography;
+ @include deprecated.flexCenter;
+ @include deprecated.uppercaseTitleTipography;
position: relative;
- height: $s-32;
- min-height: $s-32;
- margin: $s-8 $s-8 0 $s-8;
- border-radius: $br-8;
+ height: deprecated.$s-32;
+ min-height: deprecated.$s-32;
+ margin: deprecated.$s-8 deprecated.$s-8 0 deprecated.$s-8;
+ border-radius: deprecated.$br-8;
background-color: var(--panel-title-background-color);
span {
- @include flexCenter;
+ @include deprecated.flexCenter;
flex-grow: 1;
color: var(--title-foreground-color-hover);
}
@@ -35,20 +35,20 @@
.viewer-title {
margin: 0;
- margin-block-start: $s-8;
+ margin-block-start: deprecated.$s-8;
}
.mode-dropdown-wrapper {
- @include buttonStyle;
+ @include deprecated.buttonStyle;
@extend .asset-element;
background-color: var(--color-background-tertiary);
display: flex;
width: 100%;
- max-width: $s-256;
- height: $s-32;
- padding: $s-8;
- border-radius: $br-8;
- margin: $s-16 auto 0 auto;
+ max-width: deprecated.$s-256;
+ height: deprecated.$s-32;
+ padding: deprecated.$s-8;
+ border-radius: deprecated.$br-8;
+ margin: deprecated.$s-16 auto 0 auto;
cursor: pointer;
position: relative;
}
@@ -61,9 +61,9 @@
}
.arrow-icon {
- @include flexCenter;
- height: $s-24;
- width: $s-24;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-24;
+ width: deprecated.$s-24;
svg {
@extend .button-icon-small;
transform: rotate(90deg);
@@ -73,30 +73,30 @@
.comment-mode-dropdown {
@extend .dropdown-wrapper;
- top: $s-92;
- left: $s-12;
- max-width: $s-256;
+ top: deprecated.$s-92;
+ left: deprecated.$s-12;
+ max-width: deprecated.$s-256;
width: 100%;
}
.viewer-dropdown {
- left: $s-8;
+ left: deprecated.$s-8;
}
.dropdown-item {
@extend .dropdown-element-base;
justify-content: space-between;
.icon {
- @include flexCenter;
- height: $s-24;
- width: $s-24;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-24;
+ width: deprecated.$s-24;
svg {
@extend .button-icon-small;
stroke: transparent;
}
}
.label {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
}
&:hover {
.icon svg {
@@ -114,7 +114,7 @@
}
.separator {
- height: $s-12;
+ height: deprecated.$s-12;
}
.comments-section-content {
@@ -128,29 +128,29 @@
}
.thread-group-placeholder {
- @include flexColumn;
+ @include deprecated.flexColumn;
align-items: center;
justify-content: flex-start;
- margin-top: $s-36;
+ margin-top: deprecated.$s-36;
}
.placeholder-icon {
- @include flexCenter;
- height: $s-48;
- width: $s-48;
- border-radius: $br-circle;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-48;
+ width: deprecated.$s-48;
+ border-radius: deprecated.$br-circle;
background-color: var(--empty-message-background-color);
svg {
@extend .button-icon;
- height: $s-28;
- width: $s-28;
+ height: deprecated.$s-28;
+ width: deprecated.$s-28;
stroke: var(--empty-message-foreground-color);
}
}
.placeholder-label {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
text-align: center;
- width: $s-184;
+ width: deprecated.$s-184;
color: var(--empty-message-foreground-color);
}
diff --git a/frontend/src/app/main/ui/workspace/context_menu.scss b/frontend/src/app/main/ui/workspace/context_menu.scss
index 66e58c8908..8d347c2190 100644
--- a/frontend/src/app/main/ui/workspace/context_menu.scss
+++ b/frontend/src/app/main/ui/workspace/context_menu.scss
@@ -4,23 +4,23 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.workspace-context-menu {
position: absolute;
- top: $s-40;
- left: $s-736;
- z-index: $z-index-4;
+ top: deprecated.$s-40;
+ left: deprecated.$s-736;
+ z-index: deprecated.$z-index-4;
}
.context-list,
.workspace-context-submenu {
- @include menuShadow;
+ @include deprecated.menuShadow;
display: grid;
- width: $s-240;
- padding: $s-4;
- border-radius: $br-8;
- border: $s-2 solid var(--panel-border-color);
+ width: deprecated.$s-240;
+ padding: deprecated.$s-4;
+ border-radius: deprecated.$br-8;
+ border: deprecated.$s-2 solid var(--panel-border-color);
background-color: var(--menu-background-color);
max-height: 100vh;
overflow-y: auto;
@@ -31,33 +31,33 @@
}
.separator {
- height: $s-12;
+ height: deprecated.$s-12;
}
.context-menu-item {
display: flex;
align-items: center;
justify-content: space-between;
- height: $s-28;
+ height: deprecated.$s-28;
width: 100%;
- padding: $s-6;
- border-radius: $br-8;
+ padding: deprecated.$s-6;
+ border-radius: deprecated.$br-8;
cursor: pointer;
.title {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--menu-foreground-color);
}
.shortcut {
- @include flexCenter;
- gap: $s-2;
+ @include deprecated.flexCenter;
+ gap: deprecated.$s-2;
color: var(--menu-shortcut-foreground-color);
.shortcut-key {
- @include bodySmallTypography;
- @include flexCenter;
- height: $s-20;
- padding: $s-2 $s-6;
- border-radius: $br-6;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-20;
+ padding: deprecated.$s-2 deprecated.$s-6;
+ border-radius: deprecated.$br-6;
background-color: var(--menu-shortcut-background-color);
}
}
@@ -86,15 +86,15 @@
display: flex;
justify-content: flex-start;
align-items: center;
- height: $s-28;
- padding: $s-6;
- border-radius: $br-8;
+ height: deprecated.$s-28;
+ padding: deprecated.$s-6;
+ border-radius: deprecated.$br-8;
&:hover {
background-color: var(--menu-background-color-hover);
}
span.title {
- margin-left: $s-6;
+ margin-left: deprecated.$s-6;
}
.selected-icon {
@@ -105,7 +105,7 @@
}
.shape-icon {
- margin-left: $s-2;
+ margin-left: deprecated.$s-2;
svg {
@extend .button-icon-small;
stroke: var(--menu-foreground-color);
diff --git a/frontend/src/app/main/ui/workspace/coordinates.scss b/frontend/src/app/main/ui/workspace/coordinates.scss
index 9b8b782bfe..b338144d06 100644
--- a/frontend/src/app/main/ui/workspace/coordinates.scss
+++ b/frontend/src/app/main/ui/workspace/coordinates.scss
@@ -4,17 +4,17 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
$width-settings-bar: 256px;
.container {
background-color: var(--color-background-primary);
- border-radius: $br-4;
+ border-radius: deprecated.$br-4;
bottom: 0px;
- padding: $s-2 $s-8;
+ padding: deprecated.$s-2 deprecated.$s-8;
position: fixed;
- right: calc(#{$width-settings-bar} + #{$s-24});
+ right: calc(#{$width-settings-bar} + #{deprecated.$s-24});
text-align: center;
white-space: nowrap;
transition: bottom 0.5s;
@@ -24,10 +24,10 @@ $width-settings-bar: 256px;
}
.container-color-palette-open {
- bottom: $s-64;
+ bottom: deprecated.$s-64;
}
.coordinate {
color: var(--color-foreground-primary);
- font-size: $fs-12;
+ font-size: deprecated.$fs-12;
}
diff --git a/frontend/src/app/main/ui/workspace/left_header.scss b/frontend/src/app/main/ui/workspace/left_header.scss
index c858941ab3..a096c8144a 100644
--- a/frontend/src/app/main/ui/workspace/left_header.scss
+++ b/frontend/src/app/main/ui/workspace/left_header.scss
@@ -4,24 +4,24 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.workspace-header-left {
display: flex;
align-items: center;
- padding: $s-12 $s-12 $s-8 $s-12;
- min-height: $s-52;
+ padding: deprecated.$s-12 deprecated.$s-12 deprecated.$s-8 deprecated.$s-12;
+ min-height: deprecated.$s-52;
}
.main-icon {
- @include flexCenter;
- width: $s-32;
- height: $s-32;
- min-height: $s-32;
- margin-right: $s-4;
+ @include deprecated.flexCenter;
+ width: deprecated.$s-32;
+ height: deprecated.$s-32;
+ min-height: deprecated.$s-32;
+ margin-right: deprecated.$s-4;
svg {
- min-height: $s-32;
- width: $s-32;
+ min-height: deprecated.$s-32;
+ width: deprecated.$s-32;
fill: var(--icon-foreground-hover);
}
}
@@ -29,24 +29,24 @@
.project-tree {
position: relative;
flex-grow: 1;
- height: $s-32;
- min-height: $s-32;
- max-width: calc(100% - $s-64);
+ height: deprecated.$s-32;
+ min-height: deprecated.$s-32;
+ max-width: calc(100% - deprecated.$s-64);
}
.project-name,
.file-name {
- @include uppercaseTitleTipography;
- @include textEllipsis;
- height: $s-16;
+ @include deprecated.uppercaseTitleTipography;
+ @include deprecated.textEllipsis;
+ height: deprecated.$s-16;
width: 100%;
- padding-bottom: $s-2;
+ padding-bottom: deprecated.$s-2;
color: var(--title-foreground-color);
cursor: pointer;
}
.file-name {
- @include smallTitleTipography;
+ @include deprecated.smallTitleTipography;
text-transform: none;
color: var(--title-foreground-color-hover);
align-items: center;
@@ -55,20 +55,20 @@
}
.file-name-label {
- @include textEllipsis;
+ @include deprecated.textEllipsis;
}
.file-name-input {
- @include flexCenter;
+ @include deprecated.flexCenter;
width: 100%;
margin: 0;
border: 0;
padding: 0;
- border-radius: $br-4;
+ border-radius: deprecated.$br-4;
background-color: var(--input-background-color);
- font-size: $fs-14;
+ font-size: deprecated.$fs-14;
color: var(--input-foreground-color);
- z-index: $z-index-20;
+ z-index: deprecated.$z-index-20;
white-space: break-spaces;
&:focus {
outline: none;
@@ -76,23 +76,23 @@
}
.shared-badge {
- @include flexCenter;
- width: $s-16;
- height: $s-32;
- margin-right: $s-4;
+ @include deprecated.flexCenter;
+ width: deprecated.$s-16;
+ height: deprecated.$s-32;
+ margin-right: deprecated.$s-4;
svg {
stroke: var(--button-secondary-foreground-color-rest);
fill: none;
- height: $s-16;
- width: $s-16;
+ height: deprecated.$s-16;
+ width: deprecated.$s-16;
}
}
.status-notification {
- width: $s-6;
- height: $s-6;
+ width: deprecated.$s-6;
+ height: deprecated.$s-6;
border-radius: 50%;
- margin-right: $s-4;
+ margin-right: deprecated.$s-4;
flex-shrink: 0;
background-color: var(--status-widget-background-color-pending);
diff --git a/frontend/src/app/main/ui/workspace/libraries.cljs b/frontend/src/app/main/ui/workspace/libraries.cljs
index eeea99f93f..5d4524822d 100644
--- a/frontend/src/app/main/ui/workspace/libraries.cljs
+++ b/frontend/src/app/main/ui/workspace/libraries.cljs
@@ -30,13 +30,14 @@
[app.main.ui.components.search-bar :refer [search-bar*]]
[app.main.ui.components.title-bar :refer [title-bar*]]
[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.layout.tab-switcher :refer [tab-switcher*]]
[app.main.ui.hooks :as h]
[app.main.ui.icons :as deprecated-icon]
[app.util.color :as uc]
[app.util.dom :as dom]
- [app.util.i18n :as i18n :refer [tr]]
+ [app.util.i18n :refer [c tr]]
[app.util.strings :refer [matches-search]]
[beicon.v2.core :as rx]
[cuerdas.core :as str]
@@ -48,9 +49,6 @@
(def ^:private add-icon
(deprecated-icon/icon-xref :add (stl/css :add-icon)))
-(def ^:private detach-icon
- (deprecated-icon/icon-xref :detach (stl/css :detach-icon)))
-
(def ^:private library-icon
(deprecated-icon/icon-xref :library (stl/css :library-icon)))
@@ -100,16 +98,16 @@
(str/join " · "
(cond-> []
(or all-zero? (pos? components-count))
- (conj (tr "workspace.libraries.components" components-count))
+ (conj (tr "workspace.libraries.components" (c components-count)))
(or all-zero? (pos? graphics-count))
- (conj (tr "workspace.libraries.graphics" graphics-count))
+ (conj (tr "workspace.libraries.graphics" (c graphics-count)))
(or all-zero? (pos? colors-count))
- (conj (tr "workspace.libraries.colors" colors-count))
+ (conj (tr "workspace.libraries.colors" (c colors-count)))
(or all-zero? (pos? typography-count))
- (conj (tr "workspace.libraries.typography" typography-count))))
+ (conj (tr "workspace.libraries.typography" (c typography-count)))))
"\u00A0")))
(mf/defc library-description*
@@ -124,19 +122,19 @@
[:*
(when (pos? components-count)
[:li {:class (stl/css :element-count)}
- (tr "workspace.libraries.components" components-count)])
+ (tr "workspace.libraries.components" (c components-count))])
(when (pos? graphics-count)
[:li {:class (stl/css :element-count)}
- (tr "workspace.libraries.graphics" graphics-count)])
+ (tr "workspace.libraries.graphics" (c graphics-count))])
(when (pos? colors-count)
[:li {:class (stl/css :element-count)}
- (tr "workspace.libraries.colors" colors-count)])
+ (tr "workspace.libraries.colors" (c colors-count))])
(when (pos? typography-count)
[:li {:class (stl/css :element-count)}
- (tr "workspace.libraries.typography" typography-count)])]))
+ (tr "workspace.libraries.typography" (c typography-count))])]))
(mf/defc sample-library-entry*
{::mf/props :obj
@@ -199,7 +197,20 @@
empty-library? (empty-library? summary)
selected (h/use-shared-state mdc/colorpalette-selected-broadcast-key :recent)
+ dependencies (mf/with-memo [shared-libraries]
+ (into {} (map (juxt :id :library-file-ids) (vals shared-libraries))))
+ library-names (mf/with-memo [shared-libraries]
+ (into {} (map (fn [{:keys [id name]}]
+ [id name])
+ (vals shared-libraries))))
+
+ find-connected-to
+ (mf/use-fn
+ (mf/deps dependencies)
+ (fn [library-id]
+ (->> dependencies
+ (keep (fn [[k v]] (when (contains? v library-id) k))))))
shared-libraries
(mf/with-memo [shared-libraries linked-libraries file-id search-term]
@@ -208,18 +219,29 @@
(remove #(= (:id %) file-id))
(remove #(contains? linked-libraries (:id %)))
(filter #(matches-search (:name %) search-term))
+ (map #(assoc % :connected-to (find-connected-to (:id %))))
+ (map #(assoc % :connected-to-names (->> (:connected-to %)
+ (keep library-names))))
(sort-by (comp str/lower :name)))))
linked-libraries
- (mf/with-memo [linked-libraries]
+ (mf/with-memo [linked-libraries find-connected-to library-names]
(->> (vals linked-libraries)
+ (map #(assoc % :connected-to (find-connected-to (:id %))))
+ (map #(assoc % :connected-to-names (->> (:connected-to %)
+ (keep library-names))))
(sort-by (comp str/lower :name))))
+ linked-libraries-ids (mf/with-memo [linked-libraries]
+ (into #{} (map :id) linked-libraries))
+
+
importing* (mf/use-state nil)
sample-libraries [{:id "penpot-design-system", :name "Design system example"}
{:id "wireframing-kit", :name "Wireframe library"}
{:id "whiteboarding-kit", :name "Whiteboarding Kit"}]
+
change-search-term
(mf/use-fn
(fn [event]
@@ -311,22 +333,30 @@
:value (tr "common.publish")
:on-click publish}])]
- (for [{:keys [id name data] :as library} linked-libraries]
- [:div {:class (stl/css :section-list-item)
- :key (dm/str id)
- :data-testid "library-item"}
- [:div {:class (stl/css :item-content)}
- [:div {:class (stl/css :item-name)} name]
- [:ul {:class (stl/css :item-contents)}
- (let [summary (get-library-summary data)]
- [:> library-description* {:summary summary}])]]
+ (for [{:keys [id name data connected-to connected-to-names] :as library} linked-libraries]
+ (let [disabled? (some #(contains? linked-libraries-ids %) connected-to)]
+ [:div {:class (stl/css :section-list-item)
+ :key (dm/str id)
+ :data-testid "library-item"}
+ [:div {:class (stl/css :item-content)}
+ [:div {:class (stl/css :item-name)} name]
+ [:ul {:class (stl/css :item-contents)}
+ (let [summary (get-library-summary data)]
+ [:*
+ [:> library-description* {:summary summary}]
+ (when (seq connected-to)
+ [:div {:class (stl/css :connected-to-wrapper)}
+ [:span "(" (tr "workspace.libraries.connected-to") " "]
+ [:span {:class (stl/css :connected-to-values)} (str/join ", " connected-to-names)]
+ [:span ")"]])])]]
- [:button {:class (stl/css :item-button)
- :type "button"
- :title (tr "workspace.libraries.unlink-library-btn")
- :data-library-id (dm/str id)
- :on-click unlink-library}
- detach-icon]])]]
+ [:> icon-button* {:type "button"
+ :aria-label (tr "workspace.libraries.unlink-library-btn")
+ :icon i/detach
+ :data-library-id (dm/str id)
+ :variant "secondary"
+ :disabled disabled?
+ :on-click unlink-library}]]))]]
[:div {:class (stl/css :shared-section)}
[:> title-bar* {:collapsable false
@@ -580,8 +610,7 @@
linked-libraries
(mf/with-memo [linked-libraries file-id]
(d/removem (fn [[_ lib]]
- (or (:is-indirect lib)
- (= (:id lib) file-id)))
+ (= (:id lib) file-id))
linked-libraries))
shared-libraries
diff --git a/frontend/src/app/main/ui/workspace/libraries.scss b/frontend/src/app/main/ui/workspace/libraries.scss
index 979b2b107d..2cd2a047b2 100644
--- a/frontend/src/app/main/ui/workspace/libraries.scss
+++ b/frontend/src/app/main/ui/workspace/libraries.scss
@@ -4,36 +4,65 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
+@use "ds/_sizes.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/_utils.scss" as *;
+@use "ds/z-index.scss" as *;
+@use "ds/typography.scss" as t;
+@use "ds/mixins.scss" as *;
// Library modal
.modal-overlay {
- @extend .modal-overlay-base;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ position: fixed;
+ left: 0;
+ top: 0;
+ height: 100%;
+ width: 100%;
+ z-index: var(--z-index-set);
+ background-color: var(--overlay-color);
}
.modal-dialog {
- @extend .modal-container-base;
+ position: relative;
+ padding: var(--sp-xxxl);
+ border-radius: $br-8;
+ background-color: var(--modal-background-color);
+ border: $b-2 solid var(--modal-border-color);
display: grid;
grid-template-rows: auto 1fr;
- height: $s-520;
- max-height: $s-520;
- width: $s-712;
- max-width: $s-712;
+ min-width: $sz-364;
+ min-height: $sz-192;
+ height: $sz-520;
+ max-height: $sz-520;
+ width: $sz-712;
+ max-width: $sz-712;
}
+// TODO: Remove this extended creating modal component
.close-btn {
@extend .modal-close-btn-base;
}
.close-icon {
- @extend .button-icon;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: $sz-16;
+ width: $sz-16;
+ color: transparent;
+ fill: none;
+ stroke-width: $b-1;
stroke: var(--icon-foreground);
}
.modal-title {
- @include headlineMediumTypography;
- margin-block-end: $s-16;
- color: var(--modal-title-foreground-color);
+ @include t.use-typography("headline-medium");
+ margin-block-end: var(--sp-l);
+ color: var(--color-foreground-primary);
}
// Tabs content
@@ -41,9 +70,9 @@
.updates-content {
display: grid;
grid-template-columns: 1fr 1fr;
- gap: $s-32;
- max-height: $s-400;
- padding-block-start: $s-16;
+ gap: var(--sp-xxxl);
+ max-height: $sz-400;
+ padding-block-start: var(--sp-l);
}
.lib-section,
@@ -51,30 +80,40 @@
.shared-section {
display: grid;
grid-template-rows: auto 1fr;
- gap: $s-8;
+ gap: var(--sp-s);
+
+ .section-list {
+ .section-list-item:first-child {
+ border: none;
+ }
+ }
}
.shared-section {
grid-template-rows: auto auto 1fr;
+ row-gap: var(--sp-l);
}
.title-spacing-lib {
- margin: 0 0 0 calc(-1 * $s-8);
+ margin: 0 0 0 calc(-1 * var(--sp-s));
}
.section-list,
.section-list-shared {
display: grid;
grid-auto-rows: min-content;
- gap: $s-8;
- max-height: $s-320;
+ gap: var(--sp-s);
+ max-height: px2rem(320);
overflow-y: auto;
}
.section-list-item {
display: grid;
grid-template-columns: 1fr auto;
- gap: $s-8;
+ gap: var(--sp-s);
+ border: $b-1 solid var(--color-background-quaternary);
+ padding: var(--sp-s) var(--sp-s) var(--sp-m) var(--sp-m);
+ border-radius: $br-8;
}
.item-content {
@@ -83,82 +122,107 @@
.item-publish,
.item-unpublish {
+ // TODO: remove this extended by using DS button component
@extend .button-primary;
- @include uppercaseTitleTipography;
- height: $s-32;
- min-width: $s-92;
- padding: $s-8 $s-24;
+ @include t.use-typography("headline-small");
+ height: $sz-32;
+ min-width: px2rem(92);
+ padding: var(--sp-s) var(--sp-xxl);
margin: 0;
border-radius: $br-8;
}
.item-unpublish {
+ // TODO: remove this extended by using DS button component
@extend .button-secondary;
}
.item-button,
.item-button-shared {
+ // TODO: remove this extended by using DS button component
@extend .button-secondary;
- height: $s-32;
- width: $s-32;
- margin-inline-start: $s-2;
- margin-inline-end: $s-8;
- padding: $s-8;
+ height: $sz-32;
+ width: $sz-32;
+ margin-inline-start: var(--sp-xxs);
+ padding: var(--sp-s);
}
.detach-icon,
.add-icon {
- @extend .button-icon;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: $sz-16;
+ width: $sz-16;
+ color: transparent;
+ fill: none;
+ stroke-width: $b-1;
stroke: var(--icon-foreground);
}
.section-list-shared {
- max-height: $s-272;
+ max-height: px2rem(272);
}
.section-title {
- @include headlineSmallTypography;
- margin-block-end: $s-12;
+ @include t.use-typography("headline-small");
+ margin-block-end: var(--sp-m);
color: var(--title-foreground-color);
}
.search-icon {
- @include flexCenter;
- width: $s-20;
- padding: 0 0 0 $s-8;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: px2rem(20);
+ padding: 0 0 0 var(--sp-s);
svg {
- @extend .button-icon-small;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ color: transparent;
+ fill: none;
+ height: px2rem(12);
+ width: px2rem(12);
+ stroke-width: 1.33px;
stroke: var(--icon-foreground);
}
}
// empty state
.section-list-empty {
- @include bodyMediumTypography;
+ @include t.use-typography("body-medium");
display: grid;
grid-template-rows: auto 1fr;
justify-items: center;
- gap: $s-8;
+ gap: var(--sp-s);
text-align: center;
height: fit-content;
- margin-block: $s-16;
+ margin-block: var(--sp-l);
color: var(--modal-title-foreground-color);
}
.empty-state-icon {
- @include flexCenter;
- width: $s-48;
- height: $s-48;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: $sz-48;
+ height: $sz-48;
border-radius: $br-circle;
background-color: var(--pill-background-color);
}
.library-icon {
- @extend .button-icon;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ color: transparent;
+ fill: none;
+ stroke-width: $b-1;
stroke: var(--icon-foreground);
- height: $s-32;
- width: $s-32;
+ height: $sz-32;
+ width: $sz-32;
}
// Update library tab
@@ -166,8 +230,8 @@
@extend .link;
direction: rtl;
grid-column: span 3;
- margin-block-start: $s-8;
- margin-inline-start: $s-8;
+ margin-block-start: var(--sp-s);
+ margin-inline-start: var(--sp-s);
margin: 0;
}
@@ -178,59 +242,59 @@
.libraries-updates {
display: grid;
grid-column: span 3;
- grid-template-columns: repeat(auto-fill, minmax($s-160, 1fr));
- gap: $s-24;
- margin-block-start: $s-16;
+ grid-template-columns: repeat(auto-fill, minmax(px2rem(160), 1fr));
+ gap: deprecated.$s-24;
+ margin-block-start: var(--sp-l);
}
.libraries-updates-column {
display: grid;
- gap: $s-4;
+ gap: var(--sp-xs);
}
.libraries-updates-item {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
display: grid;
grid-template-columns: auto 1fr;
align-items: start;
- gap: $s-8;
+ gap: var(--sp-s);
color: var(--library-content-foreground-color);
}
.component-svg {
background-color: var(--color-canvas);
border-radius: $br-4;
- border: $s-2 solid transparent;
- height: $s-24;
- width: $s-24;
- min-height: $s-24;
- min-width: $s-24;
+ border: $b-2 solid transparent;
+ height: $sz-24;
+ width: $sz-24;
+ min-height: $sz-24;
+ min-width: $sz-24;
}
.name-block {
color: var(--library-content-foreground-color);
- width: $s-168;
+ width: px2rem(168);
}
.ellipsis {
- padding-inline-start: calc($s-24 + #{$s-8});
+ padding-inline-start: calc(var(--sp-xxl) + var(--sp-s));
}
.item-name {
- @include bodyLargeTypography;
+ @include t.use-typography("body-large");
@include textEllipsis;
margin: 0;
- max-width: $s-244;
+ max-width: px2rem(216);
color: var(--library-name-foreground-color);
}
.item-update {
@extend .button-primary;
- @include headlineSmallTypography;
- height: $s-32;
- min-width: $s-92;
- padding: $s-8 $s-24;
- margin-inline-end: $s-2;
+ @include t.use-typography("headline-small");
+ height: $sz-32;
+ min-width: px2rem(92);
+ padding: var(--sp-s) var(--sp-xxl);
+ margin-inline-end: var(--sp-xxs);
border-radius: $br-8;
&:disabled {
@@ -239,7 +303,7 @@
}
.item-contents {
- @include bodyMediumTypography;
+ @include t.use-typography("body-small");
color: var(--library-content-foreground-color);
display: flex;
flex-wrap: wrap;
@@ -251,33 +315,41 @@
&:not(:last-child)::after {
content: "·";
- margin-inline: $s-4;
+ margin-inline: var(--sp-xs);
}
}
+.connected-to-wrapper {
+ display: block;
+}
+
+.connected-to-values {
+ color: var(--color-foreground-primary);
+}
+
// Modal Component v2 update
.modal-v2-info {
- width: $s-664;
+ width: px2rem(664);
height: fit-content;
max-height: fit-content;
}
.modal-v2-title {
- @include headlineMediumTypography;
+ @include t.use-typography("headline-medium");
color: var(--modal-title-foreground-color);
}
.info-content {
display: grid;
grid-template-rows: repeat(4, 1fr);
- margin-top: $s-32;
- gap: $s-24;
+ margin-top: var(--sp-xxxl);
+ gap: var(--sp-xxl);
}
.info-block {
display: grid;
grid-template-columns: auto 1fr;
- column-gap: $s-20;
+ column-gap: var(--sp-xl);
grid-template:
"icon title"
"icon content";
@@ -285,9 +357,9 @@
.info-icon {
grid-area: icon;
- width: $s-52;
- height: $s-52;
- margin-top: $s-8;
+ width: px2rem(52);
+ height: px2rem(52);
+ margin-top: var(--sp-s);
border-radius: $br-circle;
background: var(--color-background-quaternary);
display: flex;
@@ -295,20 +367,20 @@
align-items: center;
svg {
- width: $s-32;
- height: $s-32;
+ width: $sz-32;
+ height: $sz-32;
fill: var(--icon-foreground-active);
}
}
.info-block-title {
- @include bodyLargeTypography;
+ @include t.use-typography("body-large");
grid-area: title;
color: var(--modal-title-foreground-color);
}
.info-block-content {
- @include bodyMediumTypography;
+ @include t.use-typography("body-medium");
grid-area: content;
color: var(--library-content-foreground-color);
}
@@ -316,36 +388,37 @@
.info-bottom {
display: flex;
justify-content: flex-end;
- margin-block-start: $s-24;
- margin-inline-end: $s-8;
+ margin-block-start: var(--sp-xxl);
+ margin-inline-end: var(--sp-s);
}
.primary-button {
@extend .button-primary;
- @include headlineSmallTypography;
- padding: $s-0 $s-16;
+ @include t.use-typography("headline-small");
+ padding: 0 var(--sp-l);
}
.sample-libraries-info {
+ @include t.use-typography("body-small");
display: flex;
flex-direction: column;
- font-size: $fs-12;
- margin: $s-32;
+ margin: var(--sp-xxxl);
color: var(--color-foreground-secondary);
}
.sample-libraries-link {
+ @include t.use-typography("body-small");
color: var(--color-accent-primary);
- font-weight: $fw400;
+
&:hover {
text-decoration: underline;
}
}
.sample-libraries-container {
+ @include t.use-typography("body-small");
display: flex;
flex-direction: column;
- font-size: $fs-12;
width: 100%;
align-items: start;
color: var(--color-foreground-secondary);
@@ -356,30 +429,32 @@
justify-content: space-between;
align-items: center;
width: 100%;
- margin-top: $s-8;
+ margin-top: var(--sp-s);
}
.sample-library-item-name {
- font-size: $fs-14;
+ @include t.use-typography("body-medium");
color: var(--color-foreground-primary);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
- max-width: $s-232;
+ max-width: px2rem(232);
}
+// TODO: Remove this extended using a DS component
.sample-library-add {
@extend .button-secondary;
}
+// TODO: Remove this extended using a DS component
.sample-library-adding {
@extend .button-disabled;
}
.sample-library-button {
- @include uppercaseTitleTipography;
- height: $s-32;
- width: $s-80;
+ @include t.use-typography("headline-small");
+ height: $sz-32;
+ width: px2rem(80);
margin: 0;
border-radius: $br-8;
white-space: nowrap;
diff --git a/frontend/src/app/main/ui/workspace/main_menu.cljs b/frontend/src/app/main/ui/workspace/main_menu.cljs
index e8adccd671..e71929e508 100644
--- a/frontend/src/app/main/ui/workspace/main_menu.cljs
+++ b/frontend/src/app/main/ui/workspace/main_menu.cljs
@@ -53,22 +53,46 @@
::mf/wrap [mf/memo]}
[{:keys [layout on-close]}]
(let [nav-to-helpc-center
- (mf/use-fn #(dom/open-new-window "https://help.penpot.app"))
+ (mf/use-fn
+ (fn []
+ (st/emit! (ptk/event ::ev/event {::ev/name "explore-help-center-click"
+ ::ev/origin "workspace-menu:in-app"}))
+ (dom/open-new-window "https://help.penpot.app")))
nav-to-community
- (mf/use-fn #(dom/open-new-window "https://community.penpot.app"))
+ (mf/use-fn
+ (fn []
+ (st/emit! (ptk/event ::ev/event {::ev/name "explore-community-click"
+ ::ev/origin "workspace-menu:in-app"}))
+ (dom/open-new-window "https://community.penpot.app")))
nav-to-youtube
- (mf/use-fn #(dom/open-new-window "https://www.youtube.com/c/Penpot"))
+ (mf/use-fn
+ (fn []
+ (st/emit! (ptk/event ::ev/event {::ev/name "explore-tutorials-click"
+ ::ev/origin "workspace-menu:in-app"}))
+ (dom/open-new-window "https://www.youtube.com/c/Penpot")))
nav-to-templates
- (mf/use-fn #(dom/open-new-window "https://penpot.app/libraries-templates"))
+ (mf/use-fn
+ (fn []
+ (st/emit! (ptk/event ::ev/event {::ev/name "explore-libraries-click"
+ ::ev/origin "workspace"}))
+ (dom/open-new-window "https://penpot.app/libraries-templates")))
nav-to-github
- (mf/use-fn #(dom/open-new-window "https://github.com/penpot/penpot"))
+ (mf/use-fn
+ (fn []
+ (st/emit! (ptk/event ::ev/event {::ev/name "explore-github-repository-click"
+ ::ev/origin "workspace-menu:in-app"}))
+ (dom/open-new-window "https://github.com/penpot/penpot")))
nav-to-terms
- (mf/use-fn #(dom/open-new-window "https://penpot.app/terms"))
+ (mf/use-fn
+ (fn []
+ (st/emit! (ptk/event ::ev/event {::ev/name "explore-terms-service-click"
+ ::ev/origin "workspace-menu:in-app"}))
+ (dom/open-new-window "https://penpot.app/terms")))
nav-to-feedback
(mf/use-fn #(st/emit! (dcm/go-to-feedback)))
@@ -92,6 +116,7 @@
(fn [event]
(let [version (:main cf/version)]
(st/emit! (ptk/event ::ev/event {::ev/name "show-release-notes" :version version}))
+ (println version)
(if (and (kbd/alt? event) (kbd/mod? event))
(st/emit! (modal/show {:type :onboarding}))
(st/emit! (modal/show {:type :release-notes :version version}))))))]
diff --git a/frontend/src/app/main/ui/workspace/main_menu.scss b/frontend/src/app/main/ui/workspace/main_menu.scss
index c90fb8672d..d47def9ad2 100644
--- a/frontend/src/app/main/ui/workspace/main_menu.scss
+++ b/frontend/src/app/main/ui/workspace/main_menu.scss
@@ -4,13 +4,13 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.menu {
@extend .menu-dropdown;
- top: $s-48;
- left: calc(var(--width, $s-256) - $s-16);
- width: $s-192;
+ top: deprecated.$s-48;
+ left: calc(var(--width, deprecated.$s-256) - deprecated.$s-16);
+ width: deprecated.$s-192;
margin: 0;
}
@@ -19,7 +19,7 @@
cursor: pointer;
.open-arrow {
- @include flexCenter;
+ @include deprecated.flexCenter;
svg {
@extend .button-icon;
@@ -43,12 +43,12 @@
}
.separator {
- border-top: $s-1 solid var(--color-background-quaternary);
- height: $s-4;
- left: calc(-1 * $s-4);
- margin-top: $s-8;
+ border-top: deprecated.$s-1 solid var(--color-background-quaternary);
+ height: deprecated.$s-4;
+ left: calc(-1 * deprecated.$s-4);
+ margin-top: deprecated.$s-8;
position: relative;
- width: calc(100% + $s-8);
+ width: calc(100% + deprecated.$s-8);
}
.shortcut {
@@ -61,9 +61,9 @@
.sub-menu {
@extend .menu-dropdown;
- left: calc(var(--width, $s-256) + $s-180);
- width: $s-192;
- min-width: calc($s-272 - $s-2);
+ left: calc(var(--width, deprecated.$s-256) + deprecated.$s-180);
+ width: deprecated.$s-192;
+ min-width: calc(deprecated.$s-272 - deprecated.$s-2);
width: 110%;
.submenu-item {
@@ -89,34 +89,34 @@
}
&.file {
- top: $s-48;
+ top: deprecated.$s-48;
}
&.edit {
- top: $s-76;
+ top: deprecated.$s-76;
}
&.view {
- top: $s-116;
+ top: deprecated.$s-116;
}
&.preferences {
- top: $s-148;
+ top: deprecated.$s-148;
}
&.plugins {
- top: $s-180;
- max-height: calc(100vh - $s-180);
+ top: deprecated.$s-180;
+ max-height: calc(100vh - deprecated.$s-180);
overflow-x: hidden;
overflow-y: auto;
}
&.help-info {
- top: $s-232;
+ top: deprecated.$s-232;
}
&.help-info-old {
- top: $s-192;
+ top: deprecated.$s-192;
}
}
diff --git a/frontend/src/app/main/ui/workspace/nudge.scss b/frontend/src/app/main/ui/workspace/nudge.scss
index 6331cec646..9ed244bedd 100644
--- a/frontend/src/app/main/ui/workspace/nudge.scss
+++ b/frontend/src/app/main/ui/workspace/nudge.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -12,15 +12,15 @@
.modal-container {
@extend .modal-container-base;
- min-width: $s-408;
+ min-width: deprecated.$s-408;
}
.modal-header {
- margin-bottom: $s-24;
+ margin-bottom: deprecated.$s-24;
}
.modal-title {
- @include headlineMediumTypography;
+ @include deprecated.headlineMediumTypography;
color: var(--modal-title-foreground-color);
}
.modal-close-btn {
@@ -28,22 +28,22 @@
}
.modal-content {
- @include flexColumn;
- gap: $s-24;
- @include bodyLargeTypography;
- margin-bottom: $s-24;
+ @include deprecated.flexColumn;
+ gap: deprecated.$s-24;
+ @include deprecated.bodyLargeTypography;
+ margin-bottom: deprecated.$s-24;
}
.input-wrapper {
@extend .input-with-label;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
label {
text-transform: none;
}
}
.modal-msg {
- @include bodyLargeTypography;
+ @include deprecated.bodyLargeTypography;
color: var(--modal-text-foreground-color);
line-height: 1.5;
}
diff --git a/frontend/src/app/main/ui/workspace/palette.scss b/frontend/src/app/main/ui/workspace/palette.scss
index c4896a1c19..7dc42ffc37 100644
--- a/frontend/src/app/main/ui/workspace/palette.scss
+++ b/frontend/src/app/main/ui/workspace/palette.scss
@@ -4,18 +4,18 @@
//
// Copyright (c) KALEIDOS INC
-@use "../ds/spacing.scss" as *;
-@use "../ds/z-index.scss" as *;
-@use "../ds/_sizes.scss" as *;
+@use "ds/spacing.scss" as *;
+@use "ds/z-index.scss" as *;
+@use "ds/_sizes.scss" as *;
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.palette-wrapper {
position: absolute;
width: 100vw;
left: 0;
bottom: 0;
- padding-bottom: $s-4;
+ padding-bottom: deprecated.$s-4;
/** Aligns AI Chat button **/
display: flex;
@@ -25,7 +25,7 @@
}
.palettes {
- z-index: $z-index-2;
+ z-index: deprecated.$z-index-2;
position: relative;
right: 0;
grid-area: color-palette;
@@ -33,15 +33,15 @@
grid-template-areas:
"resize resize resize"
"buttons actions palette";
- grid-template-rows: $s-8 1fr;
- grid-template-columns: $s-32 auto 1fr;
- max-height: $s-80;
+ grid-template-rows: deprecated.$s-8 1fr;
+ grid-template-columns: deprecated.$s-32 auto 1fr;
+ max-height: deprecated.$s-80;
height: var(--height);
width: fit-content;
- padding: $s-0 $s-0 $s-8 $s-8;
- border-radius: $br-8;
+ padding: deprecated.$s-0 deprecated.$s-0 deprecated.$s-8 deprecated.$s-8;
+ border-radius: deprecated.$br-8;
background-color: var(--palette-background-color);
- border: $s-2 solid var(--panel-border-color);
+ border: deprecated.$s-2 solid var(--panel-border-color);
transition:
right 0.3s,
opacity 0.2s,
@@ -52,36 +52,36 @@
.resize-area {
grid-area: resize;
- height: $s-8;
- z-index: $z-index-4;
- width: calc(100% - $s-8);
- border-radius: $br-circle;
+ height: deprecated.$s-8;
+ z-index: deprecated.$z-index-4;
+ width: calc(100% - deprecated.$s-8);
+ border-radius: deprecated.$br-circle;
cursor: ns-resize;
background-color: var(--palette-background-color);
}
.palette-btn-list {
grid-area: buttons;
background-color: var(--palette-background-color);
- height: calc(var(--height) - $s-16);
- width: $s-32;
- margin: $s-0;
+ height: calc(var(--height) - deprecated.$s-16);
+ width: deprecated.$s-32;
+ margin: deprecated.$s-0;
list-style: none;
- z-index: $z-index-2;
- gap: $s-2;
+ z-index: deprecated.$z-index-2;
+ gap: deprecated.$s-2;
&.mid-palette,
&.small-palette {
display: flex;
}
.palette-item {
- @include flexCenter;
- border-radius: $br-8;
- opacity: $op-10;
+ @include deprecated.flexCenter;
+ border-radius: deprecated.$br-8;
+ opacity: deprecated.$op-10;
transition: opacity 1s ease;
.palette-btn {
@extend .button-tertiary;
- height: $s-32;
- width: $s-32;
- border-radius: $br-8;
+ height: deprecated.$s-32;
+ width: deprecated.$s-32;
+ border-radius: deprecated.$br-8;
background-clip: padding-box;
padding: 0;
svg {
@@ -98,13 +98,13 @@
.palette-actions {
@extend .button-tertiary;
grid-area: actions;
- height: calc(var(--height) - $s-16);
- width: $s-32;
+ height: calc(var(--height) - deprecated.$s-16);
+ width: deprecated.$s-32;
padding: 0;
- margin-left: $s-4;
- border-radius: $br-8;
+ margin-left: deprecated.$s-4;
+ border-radius: deprecated.$br-8;
background-color: var(--palette-background-color);
- z-index: $z-index-2;
+ z-index: deprecated.$z-index-2;
svg {
@extend .button-icon;
stroke: var(--icon-foreground);
@@ -118,41 +118,41 @@
}
.handler {
- @include buttonStyle;
- @include flexCenter;
- width: $s-12;
+ @include deprecated.buttonStyle;
+ @include deprecated.flexCenter;
+ width: deprecated.$s-12;
height: 100%;
.handler-btn {
- width: $s-4;
+ width: deprecated.$s-4;
height: 100%;
- max-height: $s-40;
- margin: $s-8 $s-4;
+ max-height: deprecated.$s-40;
+ margin: deprecated.$s-8 deprecated.$s-4;
padding: 0;
- border-radius: $s-4;
+ border-radius: deprecated.$s-4;
background-color: var(--palette-handler-background-color);
}
}
.mid-palette,
.small-palette {
- grid-template-columns: $s-64 auto 1fr;
+ grid-template-columns: deprecated.$s-64 auto 1fr;
}
.hidden-bts {
- right: $s-2;
- z-index: $z-index-1;
+ right: deprecated.$s-2;
+ z-index: deprecated.$z-index-1;
width: 22px;
- grid-template-columns: $s-8 auto 1fr;
+ grid-template-columns: deprecated.$s-8 auto 1fr;
padding: 0;
border-inline-start: 0;
border-start-start-radius: 0;
border-end-start-radius: 0;
.palette-btn-list {
- opacity: $op-0;
+ opacity: deprecated.$op-0;
visibility: hidden;
width: 0;
.palette-item {
- opacity: $op-0;
+ opacity: deprecated.$op-0;
visibility: hidden;
z-index: 0;
}
@@ -171,7 +171,7 @@
z-index: 0;
}
.handler {
- padding-bottom: $s-8;
+ padding-bottom: deprecated.$s-8;
}
}
@@ -182,7 +182,7 @@
@extend .button-secondary;
inline-size: $sz-40;
block-size: $sz-40;
- border-radius: $br-circle;
+ border-radius: deprecated.$br-circle;
border: none;
&.selected {
@extend .button-icon-selected;
diff --git a/frontend/src/app/main/ui/workspace/plugins.scss b/frontend/src/app/main/ui/workspace/plugins.scss
index 82d0bb6cd1..87af034d70 100644
--- a/frontend/src/app/main/ui/workspace/plugins.scss
+++ b/frontend/src/app/main/ui/workspace/plugins.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -17,18 +17,18 @@
max-height: initial;
&.plugin-permissions {
- width: $s-412;
- max-width: $s-412;
+ width: deprecated.$s-412;
+ max-width: deprecated.$s-412;
}
&.plugin-management {
- width: $s-472;
- max-width: $s-472;
+ width: deprecated.$s-472;
+ max-width: deprecated.$s-472;
}
&.plugin-try-out {
- width: $s-452;
- max-width: $s-452;
+ width: deprecated.$s-452;
+ max-width: deprecated.$s-452;
}
hr {
@@ -50,11 +50,11 @@
}
.modal-title {
- @include headlineMediumTypography;
- margin-block-end: $s-32;
+ @include deprecated.headlineMediumTypography;
+ margin-block-end: deprecated.$s-32;
color: var(--modal-title-foreground-color);
display: flex;
- gap: $s-12;
+ gap: deprecated.$s-12;
}
.modal-content {
@@ -62,29 +62,29 @@
flex-direction: column;
.plugin-permissions & {
- gap: $s-20;
+ gap: deprecated.$s-20;
}
.plugin-management & {
- height: $s-380;
- max-height: $s-380;
+ height: deprecated.$s-380;
+ max-height: deprecated.$s-380;
}
}
.modal-message {
- font-size: $fs-14;
+ font-size: deprecated.$fs-14;
color: var(--color-foreground-secondary);
}
.modal-paragraph {
- font-size: $fs-14;
+ font-size: deprecated.$fs-14;
color: var(--color-foreground-primary);
}
.primary-button {
@extend .button-primary;
- @include headlineSmallTypography;
- padding: $s-0 $s-16;
+ @include deprecated.headlineSmallTypography;
+ padding: deprecated.$s-0 deprecated.$s-16;
}
.button-expand {
@@ -94,14 +94,14 @@
.cancel-button {
@extend .button-secondary;
- @include headlineSmallTypography;
- padding: $s-0 $s-16;
+ @include deprecated.headlineSmallTypography;
+ padding: deprecated.$s-0 deprecated.$s-16;
}
.search-icon {
- @include flexCenter;
- width: $s-20;
- padding: 0 0 0 $s-8;
+ @include deprecated.flexCenter;
+ width: deprecated.$s-20;
+ padding: 0 0 0 deprecated.$s-8;
svg {
@extend .button-icon-small;
@@ -111,58 +111,58 @@
.top-bar {
display: flex;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.open-button {
display: flex;
justify-content: center;
align-items: center;
- width: $s-68;
- min-width: $s-68;
- height: $s-32;
+ width: deprecated.$s-68;
+ min-width: deprecated.$s-68;
+ height: deprecated.$s-32;
text-transform: uppercase;
}
.plugins-list {
- padding-top: $s-20;
+ padding-top: deprecated.$s-20;
overflow-x: hidden;
overflow-y: auto;
flex: 1;
display: flex;
flex-direction: column;
- gap: $s-12;
+ gap: deprecated.$s-12;
}
.plugins-list-element {
display: flex;
- gap: $s-12;
+ gap: deprecated.$s-12;
}
.plugin-icon {
- min-width: $s-32;
- min-height: $s-32;
- width: $s-32;
- height: $s-32;
+ min-width: deprecated.$s-32;
+ min-height: deprecated.$s-32;
+ width: deprecated.$s-32;
+ height: deprecated.$s-32;
background: var(--button-secondary-background-color-rest);
- padding: $s-2;
- border-radius: $s-4;
+ padding: deprecated.$s-2;
+ border-radius: deprecated.$s-4;
}
.plugin-description {
display: flex;
flex-direction: column;
- gap: $s-8;
+ gap: deprecated.$s-8;
width: 100%;
}
.plugin-title {
- @include bodyMediumTypography;
+ @include deprecated.bodyMediumTypography;
color: var(--color-foreground-primary);
}
.plugin-summary {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--color-foreground-secondary);
}
@@ -170,15 +170,15 @@
display: flex;
flex-direction: column;
align-items: center;
- gap: $s-20;
+ gap: deprecated.$s-20;
height: 100%;
justify-content: center;
- padding: $s-36 0;
+ padding: deprecated.$s-36 0;
}
.plugins-empty-logo {
- width: $s-44;
- height: $s-44;
+ width: deprecated.$s-44;
+ height: deprecated.$s-44;
border-radius: 50%;
display: flex;
justify-content: center;
@@ -186,25 +186,25 @@
background: var(--color-background-tertiary);
svg {
- width: $s-16;
- height: $s-16;
+ width: deprecated.$s-16;
+ height: deprecated.$s-16;
stroke: var(--color-foreground-secondary);
fill: none;
}
}
.plugins-empty-text {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--color-foreground-primary);
}
div.input-error {
- border: $s-1 solid var(--input-border-color-error);
+ border: deprecated.$s-1 solid var(--input-border-color-error);
}
.info {
- @include bodySmallTypography;
- margin-top: $s-4;
+ @include deprecated.bodySmallTypography;
+ margin-top: deprecated.$s-4;
&.error {
color: var(--input-border-color-error);
@@ -217,15 +217,15 @@ div.input-error {
.plugins-link {
color: var(--color-accent-primary);
- font-size: $fs-12;
+ font-size: deprecated.$fs-12;
display: inline-flex;
align-items: center;
- gap: $s-4;
+ gap: deprecated.$s-4;
svg {
- margin-top: calc(-1 * $s-2);
- width: $s-12;
- height: $s-12;
+ margin-top: calc(-1 * deprecated.$s-2);
+ width: deprecated.$s-12;
+ height: deprecated.$s-12;
stroke: var(--color-accent-primary);
fill: none;
}
@@ -237,46 +237,46 @@ div.input-error {
.permissions-list {
display: flex;
flex-direction: column;
- gap: $s-24;
+ gap: deprecated.$s-24;
}
.permissions-list-entry {
display: grid;
grid-template-columns: 24px 1fr;
- gap: $s-16;
+ gap: deprecated.$s-16;
align-items: center;
svg {
- width: $s-24;
- height: $s-24;
+ width: deprecated.$s-24;
+ height: deprecated.$s-24;
stroke: var(--color-accent-primary);
fill: none;
}
}
.permissions-list-text {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
margin: 0;
color: var(--color-foreground-secondary);
}
.permissions-disclaimer {
- @include bodySmallTypography;
- padding: $s-16;
+ @include deprecated.bodySmallTypography;
+ padding: deprecated.$s-16;
background: var(--color-background-quaternary);
color: var(--color-foreground-primary);
- border-radius: $br-4;
+ border-radius: deprecated.$br-4;
}
.action-buttons {
display: flex;
- gap: $s-12;
+ gap: deprecated.$s-12;
}
.discover {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--color-foreground-secondary);
- margin-top: $s-24;
+ margin-top: deprecated.$s-24;
a {
color: var(--color-accent-primary);
diff --git a/frontend/src/app/main/ui/workspace/presence.scss b/frontend/src/app/main/ui/workspace/presence.scss
index 22c76e3b02..7c54aafba7 100644
--- a/frontend/src/app/main/ui/workspace/presence.scss
+++ b/frontend/src/app/main/ui/workspace/presence.scss
@@ -4,18 +4,18 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.active-users,
.active-users-opened {
- @include buttonStyle;
+ @include deprecated.buttonStyle;
display: flex;
flex-direction: row-reverse;
justify-content: flex-end;
align-items: center;
margin: 0;
- padding: 0 $s-4;
- border-radius: $br-8;
+ padding: 0 deprecated.$s-4;
+ border-radius: deprecated.$br-8;
.active-users-list {
display: flex;
flex-direction: row-reverse;
@@ -26,8 +26,8 @@
@extend .user-icon;
background-color: var(--user-count-background-color);
color: var(--user-count-foreground-color);
- z-index: $z-index-2;
- border: $s-2 solid var(--user-count-foreground-color);
+ z-index: deprecated.$z-index-2;
+ border: deprecated.$s-2 solid var(--user-count-foreground-color);
}
.session-icon {
@extend .user-icon;
@@ -37,14 +37,14 @@
.active-users-opened {
position: absolute;
- right: calc(-1 * $s-2);
- top: calc(-1 * $s-2);
- padding: $s-8;
- margin: calc(-1 * $s-2) calc(-1 * $s-4) 0 0;
+ right: calc(-1 * deprecated.$s-2);
+ top: calc(-1 * deprecated.$s-2);
+ padding: deprecated.$s-8;
+ margin: calc(-1 * deprecated.$s-2) calc(-1 * deprecated.$s-4) 0 0;
background-color: var(--menu-background-color);
- z-index: $z-index-4;
+ z-index: deprecated.$z-index-4;
.active-users-list {
- gap: $s-4;
+ gap: deprecated.$s-4;
.users-num,
.session-icon {
margin-left: 0;
diff --git a/frontend/src/app/main/ui/workspace/right_header.scss b/frontend/src/app/main/ui/workspace/right_header.scss
index 6f1969d9b3..e6d7ea2092 100644
--- a/frontend/src/app/main/ui/workspace/right_header.scss
+++ b/frontend/src/app/main/ui/workspace/right_header.scss
@@ -4,23 +4,23 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.workspace-header-right {
display: flex;
justify-content: space-between;
align-items: center;
- min-width: $s-256;
- padding: $s-8;
- gap: $s-8;
+ min-width: deprecated.$s-256;
+ padding: deprecated.$s-8;
+ gap: deprecated.$s-8;
background-color: var(--panel-background-color);
}
.users-section {
position: relative;
- min-width: $s-32;
- max-width: $s-72;
- padding: $s-4 $s-6;
+ min-width: deprecated.$s-32;
+ max-width: deprecated.$s-72;
+ padding: deprecated.$s-4 deprecated.$s-6;
}
.separator {
@@ -28,19 +28,19 @@
}
.zoom-widget {
- @include buttonStyle;
+ @include deprecated.buttonStyle;
display: flex;
align-items: center;
justify-content: center;
- height: $s-28;
- max-width: $s-48;
- width: $s-48;
- border-radius: $br-8;
+ height: deprecated.$s-28;
+ max-width: deprecated.$s-48;
+ width: deprecated.$s-48;
+ border-radius: deprecated.$br-8;
.label {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
height: 100%;
- padding: $s-8 0;
+ padding: deprecated.$s-8 0;
color: var(--button-tertiary-foreground-color-rest);
}
@@ -59,15 +59,15 @@
.dropdown {
@extend .menu-dropdown;
- right: $s-2;
- top: calc($s-2 + $s-48);
- width: $s-272;
+ right: deprecated.$s-2;
+ top: calc(deprecated.$s-2 + deprecated.$s-48);
+ width: deprecated.$s-272;
}
.basic-zoom-bar {
display: flex;
justify-content: space-between;
- padding: $s-6;
+ padding: deprecated.$s-6;
cursor: auto;
}
@@ -76,19 +76,19 @@
}
.zoom-text {
- @include flexCenter;
+ @include deprecated.flexCenter;
height: 100%;
- min-width: $s-48;
+ min-width: deprecated.$s-48;
padding: 0;
- margin: 0 $s-2;
+ margin: 0 deprecated.$s-2;
color: var(--modal-title-foreground-color);
}
.reset-btn {
@extend .button-tertiary;
color: var(--button-tertiary-foreground-color-hover);
- height: $s-28;
- border-radius: $br-8;
+ height: deprecated.$s-28;
+ border-radius: deprecated.$br-8;
}
.zoom-option {
@@ -115,17 +115,17 @@
.comments-btn {
@extend .button-tertiary;
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
margin: 0;
- height: $s-28;
- width: $s-28;
+ height: deprecated.$s-28;
+ width: deprecated.$s-28;
border: none;
svg {
@extend .button-icon;
stroke: var(--icon-foreground);
- height: $s-16;
- width: $s-16;
+ height: deprecated.$s-16;
+ width: deprecated.$s-16;
}
&:hover {
@@ -144,17 +144,17 @@
.history-button {
@extend .button-tertiary;
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
margin: 0;
- height: $s-28;
- width: $s-28;
+ height: deprecated.$s-28;
+ width: deprecated.$s-28;
border: none;
svg {
@extend .button-icon;
stroke: var(--icon-foreground);
- height: $s-16;
- width: $s-16;
+ height: deprecated.$s-16;
+ width: deprecated.$s-16;
}
&:hover {
@@ -172,17 +172,17 @@
}
.persistence-status-widget {
- @include flexCenter;
- width: $s-28;
- height: $s-28;
+ @include deprecated.flexCenter;
+ width: deprecated.$s-28;
+ height: deprecated.$s-28;
}
.status-icon {
- @include flexCenter;
- width: $s-24;
- height: $s-24;
+ @include deprecated.flexCenter;
+ width: deprecated.$s-24;
+ height: deprecated.$s-24;
margin: 0;
- border-radius: $br-circle;
+ border-radius: deprecated.$br-circle;
svg {
@extend .button-icon;
@@ -214,16 +214,16 @@
.share-btn,
.viewer-btn {
@extend .button-tertiary;
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
margin: 0;
- width: $s-28;
- height: $s-28;
+ width: deprecated.$s-28;
+ height: deprecated.$s-28;
border: none;
svg {
@extend .button-icon;
- height: $s-16;
- width: $s-16;
+ height: deprecated.$s-16;
+ width: deprecated.$s-16;
stroke: var(--icon-foreground);
}
diff --git a/frontend/src/app/main/ui/workspace/shapes/text/viewport_texts_html.cljs b/frontend/src/app/main/ui/workspace/shapes/text/viewport_texts_html.cljs
index 19a10a1757..fda9e4e911 100644
--- a/frontend/src/app/main/ui/workspace/shapes/text/viewport_texts_html.cljs
+++ b/frontend/src/app/main/ui/workspace/shapes/text/viewport_texts_html.cljs
@@ -16,7 +16,6 @@
[app.common.types.modifiers :as ctm]
[app.common.types.text :as txt]
[app.common.uuid :as uuid]
- [app.main.data.workspace.modifiers :as mdwm]
[app.main.data.workspace.texts :as dwt]
[app.main.fonts :as fonts]
[app.main.refs :as refs]
@@ -44,7 +43,6 @@
(gpt/point old-sr))]
(-> shape
(gsh/transform-shape (ctm/move modifiers deltav))
- (mdwm/update-grow-type shape)
(dissoc :modifiers)))
shape))
diff --git a/frontend/src/app/main/ui/workspace/sidebar.cljs b/frontend/src/app/main/ui/workspace/sidebar.cljs
index a6b8e08078..3289e18bb9 100644
--- a/frontend/src/app/main/ui/workspace/sidebar.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar.cljs
@@ -303,7 +303,6 @@
[:> (mf/provider muc/sidebar) {:value :right}
[:> (mf/provider muc/active-tokens-by-type) {:value active-tokens-by-type}
-
[:aside
{:class (stl/css-case :right-settings-bar true
:not-expand (not can-be-expanded?)
diff --git a/frontend/src/app/main/ui/workspace/sidebar.scss b/frontend/src/app/main/ui/workspace/sidebar.scss
index aeca991142..cfb357eedd 100644
--- a/frontend/src/app/main/ui/workspace/sidebar.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar.scss
@@ -4,8 +4,8 @@
//
// Copyright (c) KALEIDOS INC
-@use "../ds/_sizes.scss" as *;
-@import "refactor/common-refactor.scss";
+@use "ds/_sizes.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
$width-settings-bar: $sz-318;
$width-settings-bar-max: $sz-500;
@@ -15,7 +15,7 @@ $width-settings-bar-max: $sz-500;
grid-template-areas:
"header header"
"content resize";
- grid-template-rows: $s-52 1fr;
+ grid-template-rows: deprecated.$s-52 1fr;
grid-template-columns: 1fr 0;
position: relative;
grid-area: left-sidebar;
@@ -25,7 +25,7 @@ $width-settings-bar-max: $sz-500;
background-color: var(--panel-background-color);
height: 100vh;
max-height: 100vh;
- z-index: $z-index-1;
+ z-index: deprecated.$z-index-1;
.resize-area {
grid-area: resize;
@@ -33,7 +33,7 @@ $width-settings-bar-max: $sz-500;
}
.layers-tab {
- padding-top: $s-4;
+ padding-top: deprecated.$s-4;
overflow-x: hidden;
}
@@ -43,21 +43,21 @@ $width-settings-bar-max: $sz-500;
.settings-bar-content {
grid-area: content;
- right: calc(-1 * $s-8);
+ right: calc(-1 * deprecated.$s-8);
}
.resize-area {
position: absolute;
top: 0;
left: unset;
- z-index: $z-index-4;
- width: $s-8;
+ z-index: deprecated.$z-index-4;
+ width: deprecated.$s-8;
cursor: ew-resize;
height: 100%;
}
.tab-spacing {
- margin-inline: $s-12;
+ margin-inline: deprecated.$s-12;
}
.right-settings-bar {
@@ -67,7 +67,7 @@ $width-settings-bar-max: $sz-500;
height: 100vh;
width: $width-settings-bar;
background-color: var(--panel-background-color);
- z-index: $z-index-1;
+ z-index: deprecated.$z-index-1;
&.not-expand {
max-width: $width-settings-bar;
}
@@ -80,7 +80,7 @@ $width-settings-bar-max: $sz-500;
grid-template-columns: 100%;
grid-template-rows: 100%;
- height: calc(100vh - $s-52);
+ height: calc(100vh - deprecated.$s-52);
overflow: hidden;
}
}
@@ -90,13 +90,13 @@ $width-settings-bar-max: $sz-500;
position: absolute;
left: 0;
width: 100%;
- padding: $s-3 0 $s-1 0;
- height: $s-6;
+ padding: deprecated.$s-3 0 deprecated.$s-1 0;
+ height: deprecated.$s-6;
cursor: ns-resize;
}
.resize-handle-horiz {
- border-bottom: $s-2 solid var(--resize-area-border-color);
+ border-bottom: deprecated.$s-2 solid var(--resize-area-border-color);
cursor: ns-resize;
}
@@ -107,11 +107,11 @@ $width-settings-bar-max: $sz-500;
.collapse-sidebar-button {
--collapse-icon-color: var(--color-foreground-secondary);
- @include flexCenter;
- @include buttonStyle;
+ @include deprecated.flexCenter;
+ @include deprecated.buttonStyle;
height: 100%;
- width: $s-24;
- border-radius: $br-5;
+ width: deprecated.$s-24;
+ border-radius: deprecated.$br-5;
color: var(--collapse-icon-color);
transform: rotate(180deg);
&:hover {
@@ -122,5 +122,5 @@ $width-settings-bar-max: $sz-500;
.versions-tab {
width: 100%;
overflow: hidden;
- height: calc(100vh - $s-88);
+ height: calc(100vh - deprecated.$s-88);
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/assets.cljs b/frontend/src/app/main/ui/workspace/sidebar/assets.cljs
index 50c93cc8d5..2227de25b9 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/assets.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/assets.cljs
@@ -137,21 +137,30 @@
on-menu-close
(mf/use-fn #(swap! filters* assoc :open-menu false))
+ ;; Memoize options to prevent infinite re-render loops when dev-tools are open.
+ ;;
+ ;; Problem: When dev-tools are open, they constantly monitor the application state,
+ ;; triggering frequent updates to okulary refs. This causes the parent component to
+ ;; re-render constantly, recreating the options array on every render.
+ ;;
+ ;; The context-menu* component has a mf/with-effect that depends on [options].
+ ;; When options are recreated (even with identical content), the effect runs,
+ ;; updating the internal state, which triggers another re-render, creating
+ ;; an infinite loop: render -> new options -> effect -> state update -> render...
options
- [{:name (tr "workspace.assets.box-filter-all")
- :id "all"
- :handler on-section-filter-change}
- {:name (tr "workspace.assets.components")
- :id "components"
- :handler on-section-filter-change}
-
- {:name (tr "workspace.assets.colors")
- :id "colors"
- :handler on-section-filter-change}
-
- {:name (tr "workspace.assets.typography")
- :id "typographies"
- :handler on-section-filter-change}]]
+ (mf/with-memo [on-section-filter-change]
+ [{:name (tr "workspace.assets.box-filter-all")
+ :id "all"
+ :handler on-section-filter-change}
+ {:name (tr "workspace.assets.components")
+ :id "components"
+ :handler on-section-filter-change}
+ {:name (tr "workspace.assets.colors")
+ :id "colors"
+ :handler on-section-filter-change}
+ {:name (tr "workspace.assets.typography")
+ :id "typographies"
+ :handler on-section-filter-change}])]
[:article {:class (stl/css :assets-bar)}
[:div {:class (stl/css :assets-header)}
@@ -178,18 +187,19 @@
:class (stl/css-case :section-button true
:opened menu-open?)}
deprecated-icon/filter-icon]]
- (when menu-open?
- [:> context-menu*
- {:on-close on-menu-close
- :selectable true
- :selected section
- :show true
- :fixed true
- :min-width true
- :width size
- :top 158
- :left 18
- :options options}])
+
+ [:> context-menu*
+ {:on-close on-menu-close
+ :selectable true
+ :selected section
+ :show menu-open?
+ :fixed true
+ :min-width true
+ :width size
+ :top 158
+ :left 18
+ :options options}]
+
[:> icon-button* {:variant "ghost"
:aria-label (tr "workspace.assets.sort")
:on-click toggle-ordering
diff --git a/frontend/src/app/main/ui/workspace/sidebar/assets.scss b/frontend/src/app/main/ui/workspace/sidebar/assets.scss
index 9223b299c9..f89069cca5 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/assets.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/assets.scss
@@ -4,69 +4,69 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.assets-bar {
display: grid;
height: 100%;
grid-auto-rows: max-content;
// TODO: ugly hack :( Fix this! we shouldn't be hardcoding this height
- height: calc(100vh - $s-92);
+ height: calc(100vh - deprecated.$s-92);
scrollbar-gutter: stable;
overflow-y: auto;
- padding-top: $s-8;
+ padding-top: deprecated.$s-8;
}
.libraries-button {
@extend .button-secondary;
- @include uppercaseTitleTipography;
- gap: $s-2;
- height: $s-32;
+ @include deprecated.uppercaseTitleTipography;
+ gap: deprecated.$s-2;
+ height: deprecated.$s-32;
width: 100%;
- margin-bottom: $s-4;
- border-radius: $s-8;
+ margin-bottom: deprecated.$s-4;
+ border-radius: deprecated.$s-8;
&:hover {
background-color: var(--button-secondary-background-color-hover);
color: var(--button-secondary-foreground-color-hover);
- border: $s-1 solid var(--button-secondary-border-color-hover);
+ border: deprecated.$s-1 solid var(--button-secondary-border-color-hover);
}
&:focus {
background-color: var(--button-secondary-background-color-focus);
color: var(--button-secondary-foreground-color-focus);
- border: $s-1 solid var(--button-secondary-border-color-focus);
+ border: deprecated.$s-1 solid var(--button-secondary-border-color-focus);
}
}
.add-library-button {
@extend .button-primary;
- @include uppercaseTitleTipography;
- gap: $s-2;
- height: $s-32;
+ @include deprecated.uppercaseTitleTipography;
+ gap: deprecated.$s-2;
+ height: deprecated.$s-32;
width: 100%;
- margin-bottom: $s-4;
- border-radius: $s-8;
+ margin-bottom: deprecated.$s-4;
+ border-radius: deprecated.$s-8;
}
.section-button {
- @include flexCenter;
- @include buttonStyle;
- height: $s-32;
- width: $s-32;
+ @include deprecated.flexCenter;
+ @include deprecated.buttonStyle;
+ height: deprecated.$s-32;
+ width: deprecated.$s-32;
margin: 0;
- border: $s-1 solid var(--input-border-color-rest);
- border-radius: $br-8 $br-2 $br-2 $br-8;
+ border: deprecated.$s-1 solid var(--input-border-color-rest);
+ border-radius: deprecated.$br-8 deprecated.$br-2 deprecated.$br-2 deprecated.$br-8;
background-color: var(--input-background-color-rest);
svg {
- height: $s-16;
- width: $s-16;
+ height: deprecated.$s-16;
+ width: deprecated.$s-16;
stroke: var(--icon-foreground);
}
&:focus {
- border: $s-1 solid var(--input-border-color-focus);
+ border: deprecated.$s-1 solid var(--input-border-color-focus);
outline: 0;
background-color: var(--input-background-color-focus);
color: var(--input-foreground-color-focus);
@@ -77,7 +77,7 @@
}
&:hover {
- border: $s-1 solid var(--input-border-color-hover);
+ border: deprecated.$s-1 solid var(--input-border-color-hover);
background-color: var(--input-background-color-hover);
svg {
@@ -86,7 +86,7 @@
}
&:focus {
- border: $s-1 solid var(--input-border-color-focus);
+ border: deprecated.$s-1 solid var(--input-border-color-focus);
outline: 0;
background-color: var(--input-background-color-focus);
color: var(--input-foreground-color-focus);
@@ -103,37 +103,37 @@
}
.sections-container {
- @include menuShadow;
- @include flexColumn;
+ @include deprecated.menuShadow;
+ @include deprecated.flexColumn;
position: absolute;
- top: $s-84;
- left: $s-12;
- width: $s-192;
- padding: $s-4;
- border-radius: $br-8;
+ top: deprecated.$s-84;
+ left: deprecated.$s-12;
+ width: deprecated.$s-192;
+ padding: deprecated.$s-4;
+ border-radius: deprecated.$br-8;
background-color: var(--menu-background-color);
- z-index: $z-index-2;
+ z-index: deprecated.$z-index-2;
}
.section-item {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
- padding: $s-6;
- border-radius: $br-8;
+ padding: deprecated.$s-6;
+ border-radius: deprecated.$br-8;
}
.section-btn {
- @include buttonStyle;
+ @include deprecated.buttonStyle;
}
.assets-header {
- padding: 0 0 $s-24 $s-12;
+ padding: 0 0 deprecated.$s-24 deprecated.$s-12;
}
.search-wrapper {
display: flex;
- gap: $s-4;
+ gap: deprecated.$s-4;
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/assets/colors.cljs b/frontend/src/app/main/ui/workspace/sidebar/assets/colors.cljs
index 25cfffa002..8eb686483e 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/assets/colors.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/assets/colors.cljs
@@ -9,7 +9,7 @@
(:require
[app.common.data :as d]
[app.common.data.macros :as dm]
- [app.common.files.helpers :as cfh]
+ [app.common.path-names :as cpn]
[app.main.constants :refer [max-input-length]]
[app.main.data.event :as ev]
[app.main.data.modal :as modal]
@@ -75,7 +75,7 @@
(mf/use-fn
(mf/deps color file-id)
(fn [attrs]
- (let [name (cfh/merge-path-item (:path color) (:name color))
+ (let [name (cpn/merge-path-item (:path color) (:name color))
color (-> attrs
(assoc :id (:id color))
(assoc :name name))]
@@ -128,6 +128,7 @@
{:x (.-clientX ^js event)
:y (.-clientY ^js event)
:on-accept edit-color
+ :origin :assets
:data color
:position :right})))
@@ -168,9 +169,9 @@
on-color-drag-start
(mf/use-fn
- (mf/deps color file-id selected item-ref read-only?)
+ (mf/deps color file-id selected item-ref read-only? editing?)
(fn [event]
- (if read-only?
+ (if (or read-only? editing?)
(dom/prevent-default event)
(cmm/on-asset-drag-start event file-id color selected item-ref :colors identity))))
@@ -220,7 +221,7 @@
:on-key-down input-key-down
:auto-focus true
:max-length max-input-length
- :default-value (cfh/merge-path-item (:path color) (:name color))}]
+ :default-value (cpn/merge-path-item (:path color) (:name color))}]
[:div {:title (if (= (:name color) default-name)
default-name
@@ -235,7 +236,7 @@
[:span {:class (stl/css :default-name :default-name-with-color)} default-name]])])
(when local?
- [:& cmm/assets-context-menu
+ [:> cmm/assets-context-menu*
{:on-close on-close-menu
:state @menu-state
:options [(when-not (or multi-colors? multi-assets?)
@@ -301,12 +302,12 @@
:on-drag-leave on-drag-leave
:on-drag-over dom/prevent-default
:on-drop on-drop}
- [:& grp/asset-group-title {:file-id file-id
- :section :colors
- :path prefix
- :group-open? group-open?
- :on-rename on-rename-group
- :on-ungroup on-ungroup}]
+ [:> grp/asset-group-title* {:file-id file-id
+ :section :colors
+ :path prefix
+ :is-group-open group-open?
+ :on-rename on-rename-group
+ :on-ungroup on-ungroup}]
(when group-open?
[:*
(let [colors (get groups "" [])]
@@ -344,7 +345,7 @@
(for [[path-item content] groups]
(when-not (empty? path-item)
[:& colors-group {:file-id file-id
- :prefix (cfh/merge-path-item prefix path-item)
+ :prefix (cpn/merge-path-item prefix path-item)
:key (dm/str "group-" path-item)
:groups content
:open-groups open-groups
@@ -362,9 +363,10 @@
:colors colors
:selected-full selected-full}]))])]))
-(mf/defc colors-section
- [{:keys [file-id local? colors open? force-open? open-status-ref selected reverse-sort?
- on-asset-click on-assets-delete on-clear-selection] :as props}]
+(mf/defc colors-section*
+ [{:keys [file-id colors open-status-ref selected
+ is-local is-open is-force-open is-reverse-sort
+ on-asset-click on-assets-delete on-clear-selection]}]
(let [selected (:colors selected)
selected-full (mf/with-memo [selected colors]
@@ -380,8 +382,8 @@
(seq (:graphics selected))
(seq (:typographies selected)))
- groups (mf/with-memo [colors reverse-sort?]
- (grp/group-assets colors reverse-sort?))
+ groups (mf/with-memo [colors is-reverse-sort]
+ (grp/group-assets colors is-reverse-sort))
read-only? (mf/use-ctx ctx/workspace-read-only?)
@@ -407,6 +409,7 @@
{:x x-position
:y y-position
:on-accept add-color
+ :origin :assets
:data {:color "#406280"
:opacity 1}
:position :right})))))
@@ -482,13 +485,13 @@
(mf/use-fn (mf/deps groups on-asset-click) (partial on-asset-click groups))]
- [:& cmm/asset-section {:file-id file-id
- :title (tr "workspace.assets.colors")
- :section :colors
- :assets-count (count colors)
- :open? open?}
- (when local?
- [:& cmm/asset-section-block {:role :title-button}
+ [:> cmm/asset-section* {:file-id file-id
+ :title (tr "workspace.assets.colors")
+ :section :colors
+ :assets-count (count colors)
+ :is-open is-open}
+ (when is-local
+ [:> cmm/asset-section-block* {:role :title-button}
(when-not read-only?
[:> icon-button* {:variant "ghost"
:aria-label (tr "workspace.assets.colors.add-color")
@@ -496,13 +499,13 @@
:icon i/add}])])
- [:& cmm/asset-section-block {:role :content}
+ [:> cmm/asset-section-block* {:role :content}
[:& colors-group {:file-id file-id
:prefix ""
:groups groups
:open-groups open-groups
- :force-open? force-open?
- :local? local?
+ :force-open? is-force-open
+ :local? is-local
:selected selected
:multi-colors? multi-colors?
:multi-assets? multi-assets?
diff --git a/frontend/src/app/main/ui/workspace/sidebar/assets/colors.scss b/frontend/src/app/main/ui/workspace/sidebar/assets/colors.scss
index 911df2b633..e2c86936cb 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/assets/colors.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/assets/colors.scss
@@ -4,19 +4,19 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
// TODO: we should be using subgrid in the common "assets component" to avoid
// using this SCSS variable here (we cannot use a CSS var in this CSS module because
// the elements are not part of the same cascade).
-$assets-button-width: $s-28;
+$assets-button-width: deprecated.$s-28;
.colors-group {
- margin-top: $s-4;
+ margin-top: deprecated.$s-4;
}
.asset-list {
- padding: 0 0 0 $s-4;
+ padding: 0 0 0 deprecated.$s-4;
}
.asset-list-item {
@@ -24,24 +24,24 @@ $assets-button-width: $s-28;
display: grid;
grid-template-columns: auto 1fr #{$assets-button-width};
align-items: center;
- height: $s-32;
- padding: $s-8;
+ height: deprecated.$s-32;
+ padding: deprecated.$s-8;
padding-inline-end: 0;
- margin-bottom: $s-4;
- border-radius: $br-8;
+ margin-bottom: deprecated.$s-4;
+ border-radius: deprecated.$br-8;
background-color: var(--assets-item-background-color);
cursor: pointer;
&.selected {
- border: $s-1 solid var(--assets-item-border-color);
+ border: deprecated.$s-1 solid var(--assets-item-border-color);
}
&.editing {
- border: $s-1 solid var(--input-border-color-focus);
+ border: deprecated.$s-1 solid var(--input-border-color-focus);
input.element-name {
- @include textEllipsis;
- @include bodySmallTypography;
- @include removeInputStyle;
+ @include deprecated.textEllipsis;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.removeInputStyle;
flex-grow: 1;
margin: 0;
color: var(--layer-row-foreground-color);
@@ -53,41 +53,41 @@ $assets-button-width: $s-28;
}
.bullet-block {
- @include flexCenter;
+ @include deprecated.flexCenter;
height: 100%;
justify-content: flex-start;
- margin-inline-end: $s-4;
+ margin-inline-end: deprecated.$s-4;
}
.name-block {
- @include bodySmallTypography;
- @include textEllipsis;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.textEllipsis;
margin: 0;
color: var(--assets-item-name-foreground-color);
}
.default-name {
- margin-inline-start: $s-4;
+ margin-inline-start: deprecated.$s-4;
color: var(--assets-item-name-foreground-color-rest);
}
.default-name-with-color {
- margin-left: $s-6;
+ margin-left: deprecated.$s-6;
}
.element-name {
- @include textEllipsis;
+ @include deprecated.textEllipsis;
color: var(--color-foreground-primary);
}
.grid-placeholder {
- height: $s-2;
- margin-bottom: $s-2;
+ height: deprecated.$s-2;
+ margin-bottom: deprecated.$s-2;
background-color: var(--color-accent-primary);
}
.drop-space {
- height: $s-12;
+ height: deprecated.$s-12;
}
.dragging {
@@ -96,7 +96,7 @@ $assets-button-width: $s-28;
left: 0;
width: 100%;
height: 100%;
- border-radius: $s-8;
+ border-radius: deprecated.$s-8;
background-color: var(--assets-item-background-color-drag);
- border: $s-2 solid var(--assets-item-border-color-drag);
+ border: deprecated.$s-2 solid var(--assets-item-border-color-drag);
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/assets/common.cljs b/frontend/src/app/main/ui/workspace/sidebar/assets/common.cljs
index 6ae9a43479..130da0bb82 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/assets/common.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/assets/common.cljs
@@ -10,6 +10,7 @@
(:require
[app.common.data.macros :as dm]
[app.common.files.helpers :as cfh]
+ [app.common.path-names :as cpn]
[app.common.spec :as us]
[app.common.thumbnails :as thc]
[app.common.types.component :as ctk]
@@ -62,7 +63,7 @@
(let [path (if (str/empty? path)
(if reverse? "z" "a")
path)]
- (str/lower (cfh/merge-path-item path name))))
+ (str/lower (cpn/merge-path-item path name))))
(if ^boolean reverse? > <))
:always
@@ -71,30 +72,30 @@
(defn add-group
[asset group-name]
(-> (:path asset)
- (cfh/merge-path-item group-name)
- (cfh/merge-path-item (:name asset))))
+ (cpn/merge-path-item group-name)
+ (cpn/merge-path-item (:name asset))))
(defn rename-group
[asset path last-path]
(-> (:path asset)
(str/slice 0 (count path))
- (cfh/split-path)
+ (cpn/split-path)
butlast
(vec)
(conj last-path)
- (cfh/join-path)
+ (cpn/join-path)
(str (str/slice (:path asset) (count path)))
- (cfh/merge-path-item (:name asset))))
+ (cpn/merge-path-item (:name asset))))
(defn ungroup
[asset path]
(-> (:path asset)
(str/slice 0 (count path))
- (cfh/split-path)
+ (cpn/split-path)
butlast
- (cfh/join-path)
+ (cpn/join-path)
(str (str/slice (:path asset) (count path)))
- (cfh/merge-path-item (:name asset))))
+ (cpn/merge-path-item (:name asset))))
(s/def ::asset-name ::us/not-empty-string)
(s/def ::name-group-form
@@ -116,8 +117,7 @@
[state]
(assoc state :open? false))
-(mf/defc assets-context-menu
- {::mf/wrap-props false}
+(mf/defc assets-context-menu*
[{:keys [options state on-close]}]
[:> context-menu*
{:show (:open? state)
@@ -139,9 +139,8 @@
[section assets-count]
(or (not (= section :tokens)) (and (< 0 assets-count) (= section :tokens))))
-(mf/defc asset-section
- {::mf/wrap-props false}
- [{:keys [children file-id title section assets-count icon open? on-click]}]
+(mf/defc asset-section*
+ [{:keys [children file-id title section assets-count icon is-open on-click]}]
(let [children (-> (array/normalize-to-array children)
(array/without-nils))
@@ -153,10 +152,10 @@
on-collapsed
(mf/use-fn
- (mf/deps file-id section open? assets-count)
+ (mf/deps file-id section is-open assets-count)
(fn [_]
(when (< 0 assets-count)
- (st/emit! (dw/set-assets-section-open file-id section (not open?))))))
+ (st/emit! (dw/set-assets-section-open file-id section (not is-open))))))
title
(mf/html
@@ -174,23 +173,22 @@
[:div {:class (stl/css-case :asset-section true
:opened (and (< 0 assets-count)
- open?))
+ is-open))
:on-click on-click}
[:> title-bar*
{:collapsable (< 0 assets-count)
- :collapsed (not open?)
+ :collapsed (not is-open)
:all-clickable true
:on-collapsed on-collapsed
:add-icon-gap (= 0 assets-count)
:title title}
buttons]
(when ^boolean (and (< 0 assets-count)
- open?)
- [:div {:class (stl/css-case :title-spacing open?)}
+ is-open)
+ [:div {:class (stl/css-case :title-spacing is-open)}
content])]))
-(mf/defc asset-section-block
- {::mf/wrap-props false}
+(mf/defc asset-section-block*
[{:keys [children]}]
[:* children])
@@ -282,7 +280,7 @@
(st/emit!
(rename
(:id target-asset)
- (cfh/merge-path-item prefix (:name target-asset))))))))
+ (cpn/merge-path-item prefix (:name target-asset))))))))
(mf/defc component-item-thumbnail*
"Component that renders the thumbnail image or the original SVG."
@@ -393,7 +391,7 @@
;; and the variant-container in which it will be restored still exists
(fn [shape]
(let [component (find-component shape true)
- main (ctk/get-component-root component)
+ main (ctk/get-deleted-component-root component)
objects (dm/get-in libraries [(:component-file shape)
:data
:pages-index
diff --git a/frontend/src/app/main/ui/workspace/sidebar/assets/common.scss b/frontend/src/app/main/ui/workspace/sidebar/assets/common.scss
index 0e21e53702..257bd24b3c 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/assets/common.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/assets/common.scss
@@ -4,10 +4,10 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.title-name {
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
display: flex;
align-items: center;
flex-grow: 1;
@@ -15,7 +15,7 @@
}
.title-tokens {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
text-transform: capitalize;
}
@@ -24,12 +24,12 @@
}
.section-icon {
- @include flexCenter;
- padding-right: $s-2;
+ @include deprecated.flexCenter;
+ padding-right: deprecated.$s-2;
svg {
- @include flexCenter;
- height: $s-16;
- width: $s-16;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-16;
+ width: deprecated.$s-16;
fill: none;
stroke: currentColor;
}
@@ -38,37 +38,37 @@
.section-name {
display: flex;
align-items: center;
- margin: 0 $s-2;
+ margin: 0 deprecated.$s-2;
}
.num-assets {
- @include flexCenter;
+ @include deprecated.flexCenter;
height: 100%;
- padding-left: $s-8;
+ padding-left: deprecated.$s-8;
}
.title-spacing {
- padding-block-start: $s-4;
+ padding-block-start: deprecated.$s-4;
}
.asset-section.opened {
- margin-bottom: $s-12;
+ margin-bottom: deprecated.$s-12;
}
.drag-counter {
- @include bodySmallTypography;
- @include textEllipsis;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.textEllipsis;
position: absolute;
bottom: 0;
left: 0;
width: 100%;
- height: calc($s-24 - $s-2);
+ height: calc(deprecated.$s-24 - deprecated.$s-2);
background-color: var(--assets-item-name-background-color);
color: var(--assets-item-name-foreground-color);
display: flex;
justify-content: flex-start;
align-items: center;
- margin: $s-4;
- padding-inline: $s-4;
+ margin: deprecated.$s-4;
+ padding-inline: deprecated.$s-4;
z-index: 2;
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/assets/components.cljs b/frontend/src/app/main/ui/workspace/sidebar/assets/components.cljs
index 288dbe4f87..b7f8cc121d 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/assets/components.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/assets/components.cljs
@@ -9,7 +9,7 @@
(:require
[app.common.data :as d]
[app.common.data.macros :as dm]
- [app.common.files.helpers :as cfh]
+ [app.common.path-names :as cpn]
[app.common.types.component :as ctc]
[app.common.types.file :as ctf]
[app.main.data.event :as ev]
@@ -21,7 +21,7 @@
[app.main.data.workspace.variants :as dwv]
[app.main.refs :as refs]
[app.main.store :as st]
- [app.main.ui.components.editable-label :refer [editable-label]]
+ [app.main.ui.components.editable-label :refer [editable-label*]]
[app.main.ui.components.file-uploader :refer [file-uploader]]
[app.main.ui.components.radio-buttons :refer [radio-button radio-buttons]]
[app.main.ui.context :as ctx]
@@ -51,9 +51,8 @@
container (ctf/get-component-page data component)]
[root-shape container]))
-(mf/defc components-item
- {::mf/wrap-props false}
- [{:keys [component renaming listing-thumbs? selected
+(mf/defc components-item*
+ [{:keys [component renaming is-listing-thumbs selected
file-id on-asset-click on-context-menu on-drag-start do-rename
cancel-rename selected-full selected-paths is-local num-variants]}]
@@ -66,6 +65,7 @@
component-id (:id component)
visible? (h/use-visible item-ref :once? true)
+ renaming? (= renaming (:id component))
;; NOTE: we don't use reactive deref for it because we don't
;; really need rerender on any change on the file change. If
@@ -83,12 +83,13 @@
on-component-double-click
(mf/use-fn
- (mf/deps file-id component is-local)
+ (mf/deps file-id component is-local renaming?)
(fn [event]
(dom/stop-propagation event)
- (if is-local
- (st/emit! (dwl/go-to-local-component :id component-id))
- (st/emit! (dwl/go-to-component-file file-id component false)))))
+ (when-not renaming?
+ (if is-local
+ (st/emit! (dwl/go-to-local-component :id component-id))
+ (st/emit! (dwl/go-to-component-file file-id component false))))))
on-drop
(mf/use-fn
@@ -114,24 +115,22 @@
on-component-drag-start
(mf/use-fn
- (mf/deps file-id component selected item-ref on-drag-start read-only? is-local)
+ (mf/deps file-id component selected item-ref on-drag-start read-only? renaming? is-local)
(fn [event]
- (if read-only?
+ (if (or read-only? renaming?)
(dom/prevent-default event)
(cmm/on-asset-drag-start event file-id component selected item-ref :components on-drag-start))))
on-context-menu
(mf/use-fn
(mf/deps on-context-menu component-id)
- (partial on-context-menu component-id))
-
- renaming? (= renaming (:id component))]
+ (partial on-context-menu component-id))]
[:div {:ref item-ref
- :class (stl/css-case :selected (contains? selected (:id component))
- :grid-cell listing-thumbs?
- :enum-item (not listing-thumbs?)
- :enum-item-with-mark (and (not listing-thumbs?) (ctc/is-variant? component)))
+ :class (stl/css-case :component-item true
+ :component-item-grid is-listing-thumbs
+ :component-item-list (not is-listing-thumbs)
+ :component-item-selected (contains? selected (:id component)))
:id (dm/str "component-shape-id-" (:id component))
:draggable (and (not read-only?) (not renaming?))
:on-click on-component-click
@@ -146,33 +145,36 @@
(some? container))
[:*
[:*
- [:& editable-label
- {:class (stl/css-case :cell-name listing-thumbs?
- :item-name (not listing-thumbs?)
- :editing renaming?)
- :value (cfh/merge-path-item (:path component) (:name component))
- :tooltip (cfh/merge-path-item (:path component) (:name component))
- :display-value (:name component)
- :editing renaming?
- :disable-dbl-click true
- :on-change do-rename
- :on-cancel cancel-rename}]
+ [:div {:class (stl/css-case :component-item-grid-name is-listing-thumbs
+ :component-item-list-name (not is-listing-thumbs)
+ :component-item-editing renaming?)}
+ [:> editable-label*
+ {:class-input (stl/css-case :component-item-grid-input is-listing-thumbs
+ :component-item-list-input (not is-listing-thumbs))
+ :class-label (stl/css-case :component-item-grid-label is-listing-thumbs
+ :component-item-list-label (not is-listing-thumbs))
+ :value (cpn/merge-path-item (:path component) (:name component))
+ :tooltip (cpn/merge-path-item (:path component) (:name component))
+ :display-value (:name component)
+ :is-editing renaming?
+ :on-change do-rename
+ :on-cancel cancel-rename}]]
(when ^boolean dragging?
- [:div {:class (stl/css :dragging)}])]
+ [:div {:class (stl/css :component-item-dragging)}])]
[:> cmm/component-item-thumbnail*
{:file-id file-id
- :class (stl/css-case :thumbnail true
- :asset-list-thumbnail (not listing-thumbs?))
+ :class (stl/css-case :component-item-thumbnail true
+ :component-item-list-thumbnail (not is-listing-thumbs))
:root-shape root-shape
:component component
:container container
:is-hidden (not visible?)}]
+
(when (ctc/is-variant? component)
- [:span {:class (stl/css-case :variant-mark-cell listing-thumbs?
- :variant-mark true
- :component-icon true)
+ [:span {:class (stl/css-case :component-item-variant-mark true
+ :component-item-grid-variant-mark is-listing-thumbs)
:title (tr "workspace.assets.components.num-variants" num-variants)}
[:> icon* {:icon-id i/variant :size "s"}]])])]))
@@ -188,15 +190,14 @@
0
m))
-(mf/defc components-group
- {::mf/wrap-props false}
- [{:keys [file-id prefix groups open-groups force-open? renaming listing-thumbs? selected on-asset-click
+(mf/defc components-group*
+ [{:keys [file-id prefix groups open-groups is-force-open renaming is-listing-thumbs selected on-asset-click
on-drag-start do-rename cancel-rename on-rename-group on-group on-ungroup on-context-menu
selected-full is-local count-variants on-group-combine-variants]}]
(let [group-open? (if (false? (get open-groups prefix)) ;; if the user has closed it specifically, respect that
false
- (or ^boolean force-open?
+ (or ^boolean is-force-open
^boolean (get open-groups prefix (if (= prefix "") true false))))
dragging* (mf/use-state false)
dragging? (deref dragging*)
@@ -238,40 +239,41 @@
:on-drag-leave on-drag-leave
:on-drag-over dom/prevent-default
:on-drop on-drop}
- [:& grp/asset-group-title
+ [:> grp/asset-group-title*
{:file-id file-id
:section :components
:path prefix
- :group-open? group-open?
- :can-combine? can-combine?
+ :is-group-open group-open?
+ :is-can-combine can-combine?
:on-rename on-rename-group
:on-ungroup on-ungroup
:on-group-combine-variants on-group-combine-variants}]
(when group-open?
[:*
- [:div {:class (stl/css-case :asset-grid listing-thumbs?
- :asset-enum (not listing-thumbs?))
+ [:div {:class (stl/css-case :component-group-grid is-listing-thumbs
+ :component-group-list (not is-listing-thumbs))
:on-drag-enter on-drag-enter
:on-drag-leave on-drag-leave
:on-drag-over dom/prevent-default
:on-drop on-drop}
(when ^boolean dragging?
- [:div {:class (stl/css :grid-placeholder)} "\u00A0"])
+ [:div {:class (stl/css :component-group-placeholder)} "\u00A0"])
(when (and (empty? components)
(some? groups)
is-local)
- [:div {:class (stl/css-case :drop-space true
- :drop-space-small (not dragging?))}])
+ [:div {:class (stl/css-case :component-group-drop-space true
+ :component-group-drop-space-small (not dragging?))}])
+ ;; FIXME: This could be in the thousands. We need to think about paginate this
(for [component components]
- [:& components-item
+ [:> components-item*
{:component component
:key (dm/str "component-" (:id component))
:renaming renaming
- :listing-thumbs? listing-thumbs?
+ :is-listing-thumbs is-listing-thumbs
:file-id file-id
:selected selected
:selected-full selected-full
@@ -287,32 +289,32 @@
(for [[path-item content] groups]
(when-not (empty? path-item)
- [:& components-group {:file-id file-id
- :key path-item
- :prefix (cfh/merge-path-item prefix path-item)
- :groups content
- :open-groups open-groups
- :force-open? force-open?
- :renaming renaming
- :listing-thumbs? listing-thumbs?
- :selected selected
- :on-asset-click on-asset-click
- :on-drag-start on-drag-start
- :do-rename do-rename
- :cancel-rename cancel-rename
- :on-rename-group on-rename-group
- :on-ungroup on-ungroup
- :on-context-menu on-context-menu
- :on-group-combine-variants on-group-combine-variants
- :selected-full selected-full
- :is-local is-local
- :count-variants count-variants}]))])]))
+ [:> components-group* {:file-id file-id
+ :key path-item
+ :prefix (cpn/merge-path-item prefix path-item)
+ :groups content
+ :open-groups open-groups
+ :is-force-open is-force-open
+ :renaming renaming
+ :is-listing-thumbs is-listing-thumbs
+ :selected selected
+ :on-asset-click on-asset-click
+ :on-drag-start on-drag-start
+ :do-rename do-rename
+ :cancel-rename cancel-rename
+ :on-rename-group on-rename-group
+ :on-ungroup on-ungroup
+ :on-context-menu on-context-menu
+ :on-group-combine-variants on-group-combine-variants
+ :selected-full selected-full
+ :is-local is-local
+ :count-variants count-variants}]))])]))
-(mf/defc components-section
- {::mf/wrap-props false}
- [{:keys [file-id is-local components listing-thumbs? open? force-open?
- reverse-sort? selected on-asset-click on-assets-delete
- on-clear-selection open-status-ref delete-component count-variants]}]
+(mf/defc components-section*
+ [{:keys [file-id components selected open-status-ref
+ is-local is-listing-thumbs is-open is-force-open is-reverse-sort
+ on-asset-click on-assets-delete on-clear-selection
+ delete-component count-variants]}]
(let [input-ref (mf/use-ref nil)
@@ -356,8 +358,8 @@
(let [page (:main-instance-page (first selected-and-current-full))]
(every? #(= page (:main-instance-page %)) selected-and-current-full)))
- groups (mf/with-memo [components reverse-sort?]
- (grp/group-assets components reverse-sort?))
+ groups (mf/with-memo [components is-reverse-sort]
+ (grp/group-assets components is-reverse-sort))
add-component
(mf/use-fn
@@ -457,7 +459,7 @@
(st/emit! (dwu/start-undo-transaction undo-id))
(run! st/emit!
(->> components
- (filter #(cfh/inside-path? (:path %) path))
+ (filter #(cpn/inside-path? (:path %) path))
(map #(dwv/rename-comp-or-variant-and-main
(:id %)
(cmm/rename-group % path last-path)))))
@@ -488,7 +490,7 @@
(st/emit! (dwu/start-undo-transaction undo-id))
(run! st/emit!
(->> components
- (filter #(cfh/inside-path? (:path %) path))
+ (filter #(cpn/inside-path? (:path %) path))
(map #(dwv/rename-comp-or-variant-and-main (:id %) (cmm/ungroup % path)))))
(st/emit! (dwu/commit-undo-transaction undo-id)))))
@@ -498,7 +500,7 @@
(fn [path]
(on-clear-selection)
(let [comps (->> components
- (filter #(cfh/inside-path? (:path %) path)))
+ (filter #(cpn/inside-path? (:path %) path)))
ids (into #{} (map :main-instance-id comps))
page-id (->> comps first :main-instance-page)]
@@ -554,15 +556,15 @@
(st/emit!
(dwv/combine-as-variants ids {:page-id page-id :trigger "workspace:context-menu-assets"})))))]
- [:& cmm/asset-section {:file-id file-id
- :title (tr "workspace.assets.components")
- :section :components
- :assets-count (count components)
- :open? open?}
- [:& cmm/asset-section-block {:role :title-button}
- (when ^boolean open?
- [:div {:class (stl/css :listing-options)}
- [:& radio-buttons {:selected (if listing-thumbs? "grid" "list")
+ [:> cmm/asset-section* {:file-id file-id
+ :title (tr "workspace.assets.components")
+ :section :components
+ :assets-count (count components)
+ :is-open is-open}
+ [:> cmm/asset-section-block* {:role :title-button}
+ (when ^boolean is-open
+ [:div
+ [:& radio-buttons {:selected (if is-listing-thumbs "grid" "list")
:on-change toggle-list-style
:name "listing-style"}
[:& radio-button {:icon deprecated-icon/view-as-list
@@ -584,30 +586,30 @@
:ref input-ref
:on-selected on-file-selected}]])]
- [:& cmm/asset-section-block {:role :content}
- (when ^boolean open?
- [:& components-group {:file-id file-id
- :prefix ""
- :groups groups
- :open-groups open-groups
- :force-open? force-open?
- :renaming (when ^boolean renaming? current-component-id)
- :listing-thumbs? listing-thumbs?
- :selected selected
- :on-asset-click on-asset-click
- :on-drag-start on-drag-start
- :do-rename do-rename
- :cancel-rename cancel-rename
- :on-rename-group on-rename-group
- :on-group on-group
- :on-ungroup on-ungroup
- :on-group-combine-variants on-group-combine-variants
- :on-context-menu on-context-menu
- :selected-full selected-full
- :is-local ^boolean is-local
- :count-variants count-variants}])
+ [:> cmm/asset-section-block* {:role :content}
+ (when ^boolean is-open
+ [:> components-group* {:file-id file-id
+ :prefix ""
+ :groups groups
+ :open-groups open-groups
+ :is-force-open is-force-open
+ :renaming (when ^boolean renaming? current-component-id)
+ :is-listing-thumbs is-listing-thumbs
+ :selected selected
+ :on-asset-click on-asset-click
+ :on-drag-start on-drag-start
+ :do-rename do-rename
+ :cancel-rename cancel-rename
+ :on-rename-group on-rename-group
+ :on-group on-group
+ :on-ungroup on-ungroup
+ :on-group-combine-variants on-group-combine-variants
+ :on-context-menu on-context-menu
+ :selected-full selected-full
+ :is-local ^boolean is-local
+ :count-variants count-variants}])
- [:& cmm/assets-context-menu
+ [:> cmm/assets-context-menu*
{:on-close on-close-menu
:state @menu-state
:options [(when (and is-local (not (or multi-components? multi-assets? read-only?)))
@@ -619,10 +621,6 @@
:id "assets-duplicate-component"
:handler on-duplicate})
- (when (and is-local (not read-only?))
- {:name (tr "workspace.assets.delete")
- :id "assets-delete-component"
- :handler on-delete})
(when (and is-local (not (or multi-assets? read-only?)))
{:name (tr "workspace.assets.group")
:id "assets-group-component"
@@ -637,4 +635,9 @@
:id "assets-combine-as-variants"
:title (when-not all-same-page? (tr "workspace.shape.menu.combine-as-variants-error"))
:disabled (not all-same-page?)
- :handler on-combine-as-variants})]}]]]))
+ :handler on-combine-as-variants})
+
+ (when (and is-local (not read-only?))
+ {:name (tr "workspace.assets.delete")
+ :id "assets-delete-component"
+ :handler on-delete})]}]]]))
diff --git a/frontend/src/app/main/ui/workspace/sidebar/assets/components.scss b/frontend/src/app/main/ui/workspace/sidebar/assets/components.scss
index 26db8efa7e..ec23a9d1f4 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/assets/components.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/assets/components.scss
@@ -4,108 +4,109 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "ds/_borders.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/colors.scss" as *;
+@use "ds/typography.scss" as t;
-.drop-space {
- height: $s-12;
-}
-
-.drop-space-small {
- height: $s-2;
-}
-
-.asset-grid {
- display: grid;
- grid-template-columns: repeat(auto-fill, minmax($s-96, 1fr));
- max-width: 100%;
- gap: $s-4;
- margin-inline: $s-8;
-}
-
-.grid-cell {
- @include flexCenter;
+.component-item {
position: relative;
- aspect-ratio: 1 / 1;
- padding: $s-8;
- border-radius: $br-8;
- background-color: var(--assets-component-background-color);
- overflow: hidden;
cursor: pointer;
+}
- .variant-mark {
- background-color: var(--color-background-tertiary);
- border-radius: $br-8;
- }
-
- .cell-name {
- @include bodySmallTypography;
- @include textEllipsis;
- display: none;
- position: absolute;
- left: $s-4;
- bottom: $s-4;
- height: calc($s-24 - $s-2);
- width: calc(100% - 2 * $s-4);
- padding: $s-2 $s-6;
- column-gap: $s-4;
- border-radius: $br-4;
- background-color: var(--assets-item-name-background-color);
- border: $s-1 solid transparent;
- color: var(--assets-item-name-foreground-color);
-
- input {
- @include textEllipsis;
- @include bodySmallTypography;
- @include removeInputStyle;
- height: auto;
- padding: 0;
- }
-
- span {
- display: flex;
- align-items: center;
- height: 100%;
- }
-
- &.editing {
- border-color: var(--input-border-color-focus);
- border-radius: $br-4;
- display: flex;
- align-items: center;
- background-color: var(--input-background-color);
- }
- }
-
+.component-item-grid {
+ aspect-ratio: 1 / 1;
+ padding: var(--sp-s);
+ border-radius: $br-8;
+ background-color: var(--color-canvas);
+ overflow: hidden;
&:hover {
- .cell-name {
- display: block;
+ .component-item-grid-name {
+ display: flex;
}
}
- &.selected {
- border: $s-2 solid var(--assets-item-border-color);
+ &.component-item-selected {
+ border: $b-2 solid var(--color-accent-primary);
&::before {
content: " ";
position: absolute;
- z-index: $z-index-2;
top: 0;
left: 0;
right: 0;
bottom: 0;
- border: $s-4 solid var(--assets-component-second-border-selected);
+ border: calc($b-2 * 2) solid var(--color-background-primary);
border-radius: $br-8;
}
}
}
-.component-group {
- display: grid;
- grid-template-columns: 1fr;
- gap: $s-4;
+.component-item-grid-name {
+ display: none;
+ align-items: center;
+ position: absolute;
+ height: $sz-24;
+ left: var(--sp-xs);
+ right: var(--sp-xs);
+ bottom: var(--sp-xs);
+ padding: var(--sp-xxs) var(--sp-s);
+ border-radius: $br-4;
+ background-color: var(--color-background-primary);
+ color: var(--color-foreground-primary);
+ padding: 0;
+
+ &.component-item-editing {
+ display: flex;
+ }
}
-.thumbnail {
+.component-item-grid-input {
+ border-radius: $br-4;
+}
+
+.component-item-grid-label {
+ padding: 0 var(--sp-s);
+}
+
+.component-item-list {
+ display: grid;
+ grid-template-columns: auto 1fr auto;
+ align-items: center;
+ column-gap: var(--sp-s);
+ padding: var(--sp-xxs);
+ margin-inline-end: var(--sp-xxs);
+ border-radius: $br-8;
+ background-color: var(--color-background-tertiary);
+
+ &:hover {
+ background-color: var(--color-background-quaternary);
+ }
+
+ &.component-item-selected {
+ outline: $b-1 solid var(--color-accent-primary);
+ }
+}
+
+.component-item-list-name {
+ overflow: hidden;
+ order: 2;
+ display: flex;
+ align-items: center;
+ color: var(--color-foreground-primary);
+ padding: 0;
+}
+
+.component-item-list-input {
+ border-radius: $br-8;
+ height: $sz-32;
+}
+
+.component-item-list-label {
+ padding: 0;
+}
+
+.component-item-thumbnail {
width: 100%;
height: 100%;
object-fit: contain;
@@ -113,130 +114,76 @@
border: 0;
}
-.grid-placeholder {
- width: 100%;
- border-radius: $br-8;
- background-color: var(--assets-item-background-color-drag);
- border: $s-2 solid var(--assets-item-border-color-drag);
-}
-
-.enum-item {
- position: relative;
- display: grid;
- grid-template-columns: auto 1fr;
- align-items: center;
- column-gap: $s-8;
- height: $s-44;
- padding-right: $s-4;
- padding: $s-1;
- border: $s-1 solid transparent;
- border-radius: $br-8;
- background-color: var(--assets-item-background-color);
- cursor: pointer;
-
- &:not(:last-child) {
- margin-bottom: $s-4;
- }
-
- &:hover {
- background-color: var(--assets-item-background-color-hover);
-
- .item-name {
- color: var(--assets-item-name-foreground-color-hover);
-
- &.editing {
- background: var(--input-background-color);
-
- input {
- color: var(--input-foreground-color-active);
- }
- }
- }
- }
-
- &.selected {
- border: $s-1 solid var(--assets-item-border-color);
- }
-}
-
-.enum-item-with-mark {
- grid-template-columns: auto 1fr $s-24;
- padding-right: $s-4;
-}
-
-.item-name {
- @include bodySmallTypography;
- @include textEllipsis;
- order: 2;
- color: var(--assets-item-name-foreground-color);
-
- input {
- @include textEllipsis;
- @include bodySmallTypography;
- @include removeInputStyle;
- height: $s-32;
- padding: $s-4;
- }
-
- span {
- display: flex;
- place-items: center;
- padding-inline-end: $s-4;
- }
-
- &.editing {
- display: grid;
- grid-template-columns: 1fr auto;
- align-items: center;
- column-gap: $s-8;
- border: $s-1 solid var(--input-border-color-focus);
- border-radius: $br-8;
- background-color: var(--input-background-color);
- }
-}
-
-.asset-list-thumbnail {
- @include flexCenter;
+.component-item-list-thumbnail {
flex-shrink: 0;
- padding: $s-2;
- height: $s-40;
- width: $s-40;
+ padding: var(--sp-xxs);
+ height: $sz-40;
+ width: $sz-40;
border-radius: $br-6;
- background-color: var(--assets-component-background-color);
+ background-color: var(--color-canvas);
}
-.grid-placeholder {
- height: $s-2;
- width: 100%;
- background-color: var(--color-accent-primary);
-}
-
-.listing-options {
+.component-item-variant-mark {
+ margin-right: var(--sp-xs);
display: flex;
align-items: center;
+ justify-content: center;
+ height: $sz-24;
+ width: $sz-24;
+ color: var(--color-accent-secondary);
+ order: 3;
}
-.dragging {
+.component-item-grid-variant-mark {
+ margin: 0;
+ position: absolute;
+ right: var(--sp-xxs);
+ top: var(--sp-xxs);
+ border-radius: $br-8;
+ background-color: var(--color-background-tertiary);
+}
+
+.component-item-dragging {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
- border-radius: $s-8;
- background-color: var(--assets-item-background-color-drag);
- border: $s-2 solid var(--assets-item-border-color-drag);
+ border-radius: var(--sp-s);
+ border: $b-2 solid var(--color-accent-primary-muted);
}
-.variant-mark-cell {
- position: absolute;
- right: $s-2;
- top: $s-2;
+.component-group {
+ display: grid;
+ grid-template-columns: 1fr;
+ gap: var(--sp-xs);
}
-.component-icon {
- @include flexCenter;
- height: $s-24;
- width: $s-24;
- order: 3;
- color: var(--color-accent-secondary);
+.component-group-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(calc($sz-48 * 2), 1fr));
+ max-width: 100%;
+ gap: var(--sp-xs);
+ margin-inline: var(--sp-s);
+}
+
+.component-group-list {
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-xs);
+}
+
+.component-group-placeholder {
+ width: 100%;
+ height: var(--sp-xxs);
+ border-radius: $br-8;
+ background-color: var(--color-accent-primary);
+}
+
+.component-group-drop-space {
+ height: var(--sp-m);
+}
+
+.component-group-drop-space-small {
+ height: var(--sp-xxs);
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/assets/file_library.cljs b/frontend/src/app/main/ui/workspace/sidebar/assets/file_library.cljs
index 410d14200a..27cd620eae 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/assets/file_library.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/assets/file_library.cljs
@@ -23,10 +23,10 @@
[app.main.ui.components.title-bar :refer [title-bar*]]
[app.main.ui.context :as ctx]
[app.main.ui.icons :as deprecated-icon]
- [app.main.ui.workspace.sidebar.assets.colors :refer [colors-section]]
+ [app.main.ui.workspace.sidebar.assets.colors :refer [colors-section*]]
[app.main.ui.workspace.sidebar.assets.common :as cmm]
- [app.main.ui.workspace.sidebar.assets.components :refer [components-section]]
- [app.main.ui.workspace.sidebar.assets.typographies :refer [typographies-section]]
+ [app.main.ui.workspace.sidebar.assets.components :refer [components-section*]]
+ [app.main.ui.workspace.sidebar.assets.typographies :refer [typographies-section*]]
[app.util.dom :as dom]
[app.util.i18n :as i18n :refer [tr]]
[app.util.keyboard :as kbd]
@@ -249,16 +249,16 @@
[:span {:class (stl/css :loading)} (tr "labels.loading")]
[:*
(when ^boolean show-components?
- [:& components-section
+ [:> components-section*
{:file-id file-id
:is-local is-local
:components components
- :listing-thumbs? listing-thumbs?
- :open? (or ^boolean force-open-components?
- ^boolean (get open-status :components false))
- :force-open? force-open-components?
+ :is-listing-thumbs listing-thumbs?
+ :is-open (or ^boolean force-open-components?
+ ^boolean (get open-status :components false))
+ :is-force-open force-open-components?
:open-status-ref open-status-ref
- :reverse-sort? reverse-sort?
+ :is-reverse-sort reverse-sort?
:selected selected
:on-asset-click on-component-click
:on-assets-delete on-assets-delete
@@ -267,31 +267,31 @@
:count-variants count-variants}])
(when ^boolean show-colors?
- [:& colors-section
+ [:> colors-section*
{:file-id file-id
- :local? is-local
+ :is-local is-local
:colors colors
- :open? (or ^boolean force-open-colors?
- ^boolean (get open-status :colors false))
- :force-open? force-open-colors?
+ :is-open (or ^boolean force-open-colors?
+ ^boolean (get open-status :colors false))
+ :is-force-open force-open-colors?
:open-status-ref open-status-ref
- :reverse-sort? reverse-sort?
+ :is-reverse-sort reverse-sort?
:selected selected
:on-asset-click on-colors-click
:on-assets-delete on-assets-delete
:on-clear-selection on-clear-selection}])
(when ^boolean show-typography?
- [:& typographies-section
+ [:> typographies-section*
{:file file
:file-id (:id file)
- :local? is-local
+ :is-local is-local
:typographies typographies
- :open? (or ^boolean force-open-typographies?
- ^boolean (get open-status :typographies false))
- :force-open? force-open-typographies?
+ :is-open (or ^boolean force-open-typographies?
+ ^boolean (get open-status :typographies false))
+ :is-force-open force-open-typographies?
:open-status-ref open-status-ref
- :reverse-sort? reverse-sort?
+ :is-reverse-sort reverse-sort?
:selected selected
:on-asset-click on-typography-click
:on-assets-delete on-assets-delete
@@ -363,13 +363,16 @@
(fn []
(st/emit! (dw/unselect-all-assets file-id))))
+ variants-counter
+ (mf/with-memo [library]
+ (-> (group-by :variant-id (ctkl/components-seq library))
+ (update-vals count)))
+
count-variants
(mf/use-fn
- (mf/deps library)
+ (mf/deps variants-counter)
(fn [variant-id]
- (->> (ctkl/components-seq library)
- (filterv #(= variant-id (:variant-id %)))
- count)))]
+ (get variants-counter variant-id)))]
[:div {:class (stl/css :tool-window)
:on-context-menu dom/prevent-default
diff --git a/frontend/src/app/main/ui/workspace/sidebar/assets/file_library.scss b/frontend/src/app/main/ui/workspace/sidebar/assets/file_library.scss
index 8e9fbd5232..18de784336 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/assets/file_library.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/assets/file_library.scss
@@ -4,13 +4,13 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../../ds/typography.scss" as t;
-@import "refactor/common-refactor.scss";
+@use "ds/typography.scss" as t;
+@use "refactor/common-refactor.scss" as deprecated;
.tool-window {
- padding: 0 0 $s-24 $s-12;
+ padding: 0 0 deprecated.$s-24 deprecated.$s-12;
display: grid;
grid-auto-rows: max-content;
- gap: $s-4;
+ gap: deprecated.$s-4;
height: 100%;
}
@@ -28,23 +28,23 @@
display: flex;
align-items: center;
justify-content: flex-start;
- height: $s-32;
- padding-left: calc($s-12 + $s-2);
+ height: deprecated.$s-32;
+ padding-left: calc(deprecated.$s-12 + deprecated.$s-2);
color: var(--color-foreground-secondary);
}
.special-title {
- @include textEllipsis;
+ @include deprecated.textEllipsis;
color: var(--title-foreground-color-hover);
- margin-left: $s-2;
+ margin-left: deprecated.$s-2;
text-align: left;
}
.file-link {
@extend .button-tertiary;
- height: $s-32;
- width: $s-28;
- border-radius: $br-8;
+ height: deprecated.$s-32;
+ width: deprecated.$s-28;
+ border-radius: deprecated.$br-8;
svg {
@extend .button-icon;
stroke: var(--icon-foreground);
@@ -56,32 +56,32 @@
width: 100%;
display: grid;
grid-auto-rows: max-content;
- gap: $s-4;
+ gap: deprecated.$s-4;
}
.asset-title {
- margin-left: $s-28;
+ margin-left: deprecated.$s-28;
display: flex;
flex-direction: column;
align-items: center;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.no-found-icon {
- @include flexCenter;
+ @include deprecated.flexCenter;
background-color: var(--not-found-background-color);
- border-radius: $br-circle;
- height: $s-48;
- width: $s-48;
+ border-radius: deprecated.$br-circle;
+ height: deprecated.$s-48;
+ width: deprecated.$s-48;
svg {
@extend .button-icon;
- height: $s-24;
- width: $s-24;
+ height: deprecated.$s-24;
+ width: deprecated.$s-24;
stroke: var(--not-found-foreground-color);
}
}
.no-found-text {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--not-found-foreground-color);
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/assets/groups.cljs b/frontend/src/app/main/ui/workspace/sidebar/assets/groups.cljs
index 5e7a7451d6..72a1be6996 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/assets/groups.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/assets/groups.cljs
@@ -7,7 +7,7 @@
(ns app.main.ui.workspace.sidebar.assets.groups
(:require-macros [app.main.style :as stl])
(:require
- [app.common.files.helpers :as cfh]
+ [app.common.path-names :as cpn]
[app.common.schema :as sm]
[app.main.data.modal :as modal]
[app.main.data.workspace :as dw]
@@ -22,20 +22,20 @@
[app.util.i18n :as i18n :refer [tr]]
[rumext.v2 :as mf]))
-(mf/defc asset-group-title
- [{:keys [file-id section path group-open? on-rename on-ungroup on-group-combine-variants can-combine?]}]
+(mf/defc asset-group-title*
+ [{:keys [file-id section path is-group-open on-rename on-ungroup on-group-combine-variants is-can-combine]}]
(when-not (empty? path)
- (let [[other-path last-path truncated] (cfh/compact-path path 35 true)
+ (let [[other-path last-path truncated] (cpn/compact-path path 35 true)
menu-state (mf/use-state cmm/initial-context-menu-state)
on-fold-group
(mf/use-fn
- (mf/deps file-id section path group-open?)
+ (mf/deps file-id section path is-group-open)
(fn [event]
(dom/stop-propagation event)
(st/emit! (dw/set-assets-group-open file-id
section
path
- (not group-open?)))))
+ (not is-group-open)))))
on-context-menu
(mf/use-fn
(fn [event]
@@ -50,7 +50,7 @@
[:div {:class (stl/css :group-title)
:on-context-menu on-context-menu}
[:> title-bar* {:collapsable true
- :collapsed (not group-open?)
+ :collapsed (not is-group-open)
:all-clickable true
:on-collapsed on-fold-group
:title (mf/html [:* (when-not (empty? other-path)
@@ -61,7 +61,7 @@
:title (when truncated path)}
last-path]])}]
- [:& cmm/assets-context-menu
+ [:> cmm/assets-context-menu*
{:on-close on-close-menu
:state @menu-state
:options (cond-> [{:name (tr "workspace.assets.rename")
@@ -70,7 +70,7 @@
{:name (tr "workspace.assets.ungroup")
:id "assets-ungroup-group"
:handler #(on-ungroup path)}]
- can-combine?
+ is-can-combine
(conj
{:name (tr "workspace.shape.menu.combine-as-variants")
:id "assets-combine-as-variants"
@@ -94,7 +94,7 @@
[assets reverse-sort?]
(when-not (empty? assets)
(reduce (fn [groups {:keys [path] :as asset}]
- (let [path (cfh/split-path (or path ""))]
+ (let [path (cpn/split-path (or path ""))]
(update-in groups
(conj path "")
(fn [group]
diff --git a/frontend/src/app/main/ui/workspace/sidebar/assets/groups.scss b/frontend/src/app/main/ui/workspace/sidebar/assets/groups.scss
index 7b1b9ff740..223a6d920e 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/assets/groups.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/assets/groups.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.group-title-wrapper {
width: 100%;
@@ -29,18 +29,18 @@
}
.group-title {
- padding-left: $s-4;
+ padding-left: deprecated.$s-4;
}
.pre-path {
- margin-left: $s-2;
+ margin-left: deprecated.$s-2;
text-transform: initial;
color: var(--title-foreground-color);
}
.path {
- @include textEllipsis;
- margin-left: $s-2;
+ @include deprecated.textEllipsis;
+ margin-left: deprecated.$s-2;
text-transform: initial;
color: var(--title-foreground-color-hover);
}
@@ -54,11 +54,11 @@
}
.modal-header {
- margin-bottom: $s-24;
+ margin-bottom: deprecated.$s-24;
}
.modal-title {
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
color: var(--modal-title-foreground-color);
}
@@ -67,14 +67,14 @@
}
.modal-content {
- @include bodySmallTypography;
- margin-bottom: $s-24;
+ @include deprecated.bodySmallTypography;
+ margin-bottom: deprecated.$s-24;
}
.input-wrapper {
@extend .input-with-label;
- @include bodySmallTypography;
- margin-bottom: $s-8;
+ @include deprecated.bodySmallTypography;
+ margin-bottom: deprecated.$s-8;
}
.action-buttons {
diff --git a/frontend/src/app/main/ui/workspace/sidebar/assets/typographies.cljs b/frontend/src/app/main/ui/workspace/sidebar/assets/typographies.cljs
index 75c456edc3..8ad40c2f4e 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/assets/typographies.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/assets/typographies.cljs
@@ -9,7 +9,7 @@
(:require
[app.common.data :as d]
[app.common.data.macros :as dm]
- [app.common.files.helpers :as cfh]
+ [app.common.path-names :as cpn]
[app.main.data.event :as ev]
[app.main.data.modal :as modal]
[app.main.data.workspace :as dw]
@@ -76,9 +76,9 @@
on-typography-drag-start
(mf/use-fn
- (mf/deps typography file-id selected item-ref read-only?)
+ (mf/deps typography file-id selected item-ref read-only? renaming? open?)
(fn [event]
- (if read-only?
+ (if (or read-only? renaming? open?)
(dom/prevent-default event)
(cmm/on-asset-drag-start event file-id typography selected item-ref :typographies identity))))
@@ -170,12 +170,12 @@
:on-drag-leave on-drag-leave
:on-drag-over dom/prevent-default
:on-drop on-drop}
- [:& grp/asset-group-title {:file-id file-id
- :section :typographies
- :path prefix
- :group-open? group-open?
- :on-rename on-rename-group
- :on-ungroup on-ungroup}]
+ [:> grp/asset-group-title* {:file-id file-id
+ :section :typographies
+ :path prefix
+ :is-group-open group-open?
+ :on-rename on-rename-group
+ :on-ungroup on-ungroup}]
(when group-open?
[:*
@@ -212,7 +212,7 @@
(for [[path-item content] groups]
(when-not (empty? path-item)
[:& typographies-group {:file-id file-id
- :prefix (cfh/merge-path-item prefix path-item)
+ :prefix (cpn/merge-path-item prefix path-item)
:key (dm/str "group-" path-item)
:groups content
:open-groups open-groups
@@ -230,9 +230,9 @@
:on-context-menu on-context-menu
:selected-full selected-full}]))])]))
-(mf/defc typographies-section
- {::mf/wrap-props false}
- [{:keys [file file-id local? typographies open? force-open? open-status-ref selected reverse-sort?
+(mf/defc typographies-section*
+ [{:keys [file file-id typographies open-status-ref selected
+ is-local is-open is-force-open is-reverse-sort
on-asset-click on-assets-delete on-clear-selection]}]
(let [state (mf/use-state {:detail-open? false :id nil})
local-data (mf/deref lens:typography-section-state)
@@ -243,8 +243,8 @@
typographies (mf/with-memo [typographies]
(mapv dwl/extract-path-if-missing typographies))
- groups (mf/with-memo [typographies reverse-sort?]
- (grp/group-assets typographies reverse-sort?))
+ groups (mf/with-memo [typographies is-reverse-sort]
+ (grp/group-assets typographies is-reverse-sort))
selected (:typographies selected)
selected-full (mf/with-memo [selected typographies]
@@ -393,28 +393,28 @@
(st/emit! #(update % :workspace-global dissoc :edit-typography)))))
[:*
- [:& cmm/asset-section {:file-id file-id
- :title (tr "workspace.assets.typography")
- :section :typographies
- :assets-count (count typographies)
- :open? open?}
- (when local?
- [:& cmm/asset-section-block {:role :title-button}
+ [:> cmm/asset-section* {:file-id file-id
+ :title (tr "workspace.assets.typography")
+ :section :typographies
+ :assets-count (count typographies)
+ :is-open is-open}
+ (when is-local
+ [:> cmm/asset-section-block* {:role :title-button}
(when-not read-only?
[:> icon-button* {:variant "ghost"
:aria-label (tr "workspace.assets.typography.add-typography")
:on-click add-typography
:icon i/add}])])
- [:& cmm/asset-section-block {:role :content}
+ [:> cmm/asset-section-block* {:role :content}
[:& typographies-group {:file-id file-id
:prefix ""
:groups groups
:open-groups open-groups
- :force-open? force-open?
+ :force-open? is-force-open
:state state
:file file
- :local? local?
+ :local? is-local
:selected selected
:editing-id editing-id
:renaming-id renaming-id
@@ -426,8 +426,8 @@
:on-context-menu on-context-menu
:selected-full selected-full}]
- (if local?
- [:& cmm/assets-context-menu
+ (if is-local
+ [:> cmm/assets-context-menu*
{:on-close on-close-menu
:state @menu-state
:options [(when-not (or multi-typographies? multi-assets?)
@@ -449,7 +449,7 @@
:id "assets-group-typography"
:handler on-group})]}]
- [:& cmm/assets-context-menu
+ [:> cmm/assets-context-menu*
{:on-close on-close-menu
:state @menu-state
:options [{:name "show info"
diff --git a/frontend/src/app/main/ui/workspace/sidebar/assets/typographies.scss b/frontend/src/app/main/ui/workspace/sidebar/assets/typographies.scss
index 8393c1bb41..d00eeb20f9 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/assets/typographies.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/assets/typographies.scss
@@ -4,18 +4,18 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.assets-list {
- padding: 0 0 0 $s-4;
+ padding: 0 0 0 deprecated.$s-4;
}
.drop-space {
- height: $s-12;
+ height: deprecated.$s-12;
}
.grid-placeholder {
- height: $s-2;
+ height: deprecated.$s-2;
width: 100%;
background-color: var(--color-accent-primary);
}
@@ -24,8 +24,8 @@
position: relative;
display: flex;
align-items: center;
- margin-bottom: $s-4;
- border-radius: $br-8;
+ margin-bottom: deprecated.$s-4;
+ border-radius: deprecated.$br-8;
background-color: var(--assets-item-background-color);
}
@@ -35,7 +35,7 @@
left: 0;
height: 100%;
width: 100%;
- border: $s-2 solid var(--assets-item-border-color-drag);
- border-radius: $s-8;
+ border: deprecated.$s-2 solid var(--assets-item-border-color-drag);
+ border-radius: deprecated.$s-8;
background-color: var(--assets-item-background-color-drag);
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/collapsable_button.scss b/frontend/src/app/main/ui/workspace/sidebar/collapsable_button.scss
index 3f62cd24b0..9d2f6156f5 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/collapsable_button.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/collapsable_button.scss
@@ -4,35 +4,35 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.collapsed-sidebar {
- @include flexCenter;
+ @include deprecated.flexCenter;
position: absolute;
- top: $s-48;
+ top: deprecated.$s-48;
left: 0;
- padding: $s-4;
- border-radius: $br-8;
+ padding: deprecated.$s-4;
+ border-radius: deprecated.$br-8;
background: var(--color-background-primary);
margin-inline-start: var(--sp-m);
}
.collapsed-title {
- @include flexCenter;
- height: $s-36;
- width: $s-24;
- border-radius: $br-8;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-36;
+ width: deprecated.$s-24;
+ border-radius: deprecated.$br-8;
background: var(--color-background-secondary);
}
.collapsed-button {
- @include buttonStyle;
- height: $s-24;
- width: $s-16;
+ @include deprecated.buttonStyle;
+ height: deprecated.$s-24;
+ width: deprecated.$s-16;
padding: 0;
- border-radius: $br-5;
+ border-radius: deprecated.$br-5;
svg {
- @include flexCenter;
- height: $s-16;
- width: $s-16;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-16;
+ width: deprecated.$s-16;
color: transparent;
fill: none;
stroke: var(--icon-foreground);
diff --git a/frontend/src/app/main/ui/workspace/sidebar/debug.scss b/frontend/src/app/main/ui/workspace/sidebar/debug.scss
index ecbb8c0d5d..ce9698a180 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/debug.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/debug.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
.debug-panel {
display: flex;
@@ -13,17 +13,17 @@
}
.panel-title {
- @include flexCenter;
- @include uppercaseTitleTipography;
+ @include deprecated.flexCenter;
+ @include deprecated.uppercaseTitleTipography;
position: relative;
- height: $s-32;
- min-height: $s-32;
- margin: $s-8 $s-8 0 $s-8;
- border-radius: $br-8;
+ height: deprecated.$s-32;
+ min-height: deprecated.$s-32;
+ margin: deprecated.$s-8 deprecated.$s-8 0 deprecated.$s-8;
+ border-radius: deprecated.$br-8;
background-color: var(--panel-title-background-color);
span {
- @include flexCenter;
+ @include deprecated.flexCenter;
flex-grow: 1;
color: var(--title-foreground-color-hover);
}
@@ -31,7 +31,7 @@
.checkbox-wrapper {
@extend .input-checkbox;
- height: $s-32;
+ height: deprecated.$s-32;
padding: 0;
}
@@ -41,5 +41,5 @@
}
.debug-panel-inner {
- padding: $s-16 $s-8;
+ padding: deprecated.$s-16 deprecated.$s-8;
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/debug_shape_info.scss b/frontend/src/app/main/ui/workspace/sidebar/debug_shape_info.scss
index 7d3c273520..45a00fe022 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/debug_shape_info.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/debug_shape_info.scss
@@ -4,29 +4,29 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.shape-info {
display: flex;
flex-direction: column;
background-color: var(--panel-background-color);
color: var(--color-foreground-primary);
- font-size: $fs-12;
+ font-size: deprecated.$fs-12;
user-select: text;
}
.shape-info-title {
- @include flexCenter;
- @include uppercaseTitleTipography;
+ @include deprecated.flexCenter;
+ @include deprecated.uppercaseTitleTipography;
position: relative;
- height: $s-32;
- min-height: $s-32;
- margin: $s-8 $s-8 0 $s-8;
- border-radius: $br-8;
+ height: deprecated.$s-32;
+ min-height: deprecated.$s-32;
+ margin: deprecated.$s-8 deprecated.$s-8 0 deprecated.$s-8;
+ border-radius: deprecated.$br-8;
background-color: var(--panel-title-background-color);
span {
- @include flexCenter;
+ @include deprecated.flexCenter;
flex-grow: 1;
color: var(--title-foreground-color-hover);
}
@@ -35,11 +35,11 @@
.close-button {
@extend .button-tertiary;
position: absolute;
- right: $s-2;
- top: $s-2;
- height: $s-28;
- width: $s-28;
- border-radius: $br-6;
+ right: deprecated.$s-2;
+ top: deprecated.$s-2;
+ height: deprecated.$s-28;
+ width: deprecated.$s-28;
+ border-radius: deprecated.$br-6;
svg {
@extend .button-icon;
stroke: var(--icon-foreground);
@@ -47,19 +47,19 @@
}
.attrs-container {
- padding: $s-16 $s-8;
+ padding: deprecated.$s-16 deprecated.$s-8;
overflow: hidden;
}
.shape-title {
- font-size: $fs-14;
- padding-bottom: $s-4;
+ font-size: deprecated.$fs-14;
+ padding-bottom: deprecated.$s-4;
background: var(--color-background-quaternary);
color: var(--color-foreground-primary);
- padding: $s-8;
- border-radius: $s-8;
+ padding: deprecated.$s-8;
+ border-radius: deprecated.$s-8;
display: flex;
- gap: $s-4;
+ gap: deprecated.$s-4;
}
.shape-name {
flex: 1;
@@ -68,7 +68,7 @@
.attrs-container-attr {
display: grid;
grid-template-columns: 25% auto;
- padding: $s-4 0;
+ padding: deprecated.$s-4 0;
&.vertical-layout {
grid-template-columns: auto;
@@ -90,12 +90,12 @@
.shape-list {
display: flex;
flex-direction: column;
- gap: $s-4;
+ gap: deprecated.$s-4;
}
.point-list {
display: flex;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.cell-container {
diff --git a/frontend/src/app/main/ui/workspace/sidebar/history.scss b/frontend/src/app/main/ui/workspace/sidebar/history.scss
index e6d775a353..b9df030fd8 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/history.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/history.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.history-toolbox {
display: flex;
@@ -13,59 +13,59 @@
}
.history-toolbox-title {
- @include flexCenter;
- @include uppercaseTitleTipography;
+ @include deprecated.flexCenter;
+ @include deprecated.uppercaseTitleTipography;
position: relative;
- height: $s-32;
- min-height: $s-32;
- margin: $s-8 $s-8 0 $s-8;
- border-radius: $br-8;
+ height: deprecated.$s-32;
+ min-height: deprecated.$s-32;
+ margin: deprecated.$s-8 deprecated.$s-8 0 deprecated.$s-8;
+ border-radius: deprecated.$br-8;
background-color: var(--panel-title-background-color);
span {
- @include flexCenter;
+ @include deprecated.flexCenter;
flex-grow: 1;
color: var(--title-foreground-color-hover);
}
}
.history-entry-empty {
- @include flexCenter;
+ @include deprecated.flexCenter;
flex-direction: column;
- gap: $s-16;
- padding: $s-28 $s-16;
+ gap: deprecated.$s-16;
+ padding: deprecated.$s-28 deprecated.$s-16;
text-align: center;
}
.history-entry-empty-icon {
@extend .empty-icon;
svg {
- margin-left: calc(-1 * $s-2);
+ margin-left: calc(-1 * deprecated.$s-2);
}
}
.history-entry-empty-msg {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--empty-message-foreground-color);
}
.history-entries {
- height: calc(100vh - $s-100);
- padding: $s-12;
+ height: calc(100vh - deprecated.$s-100);
+ padding: deprecated.$s-12;
overflow-x: hidden;
overflow-y: auto;
- font-size: $fs-12;
+ font-size: deprecated.$fs-12;
}
.history-entry {
display: flex;
justify-content: center;
flex-direction: column;
- min-height: $s-32;
- margin: $s-4;
- padding: $s-4 $s-8;
- border: $s-2 solid transparent;
- border-radius: $s-8;
+ min-height: deprecated.$s-32;
+ margin: deprecated.$s-4;
+ padding: deprecated.$s-4 deprecated.$s-8;
+ border: deprecated.$s-2 solid transparent;
+ border-radius: deprecated.$s-8;
background-color: var(--entry-background-color);
cursor: pointer;
transition: border 0.2s;
@@ -80,11 +80,11 @@
}
}
.history-entry-summary-text {
- margin: 0 $s-8;
+ margin: 0 deprecated.$s-8;
color: var(--color-foreground-primary);
}
.history-entry-summary-button {
- opacity: $op-0;
+ opacity: deprecated.$op-0;
margin-left: auto;
&.button-opened {
svg {
@@ -100,7 +100,7 @@
.history-entry-detail {
display: block;
- padding-top: $s-16;
+ padding-top: deprecated.$s-16;
color: var(--modal-text-foreground-color);
.history-entry-details-list {
margin: 0;
@@ -123,7 +123,7 @@
}
}
.history-entry-summary-button {
- opacity: $op-10;
+ opacity: deprecated.$op-10;
&.button-opened {
svg {
transform: rotate(90deg);
diff --git a/frontend/src/app/main/ui/workspace/sidebar/layer_item.scss b/frontend/src/app/main/ui/workspace/sidebar/layer_item.scss
index 70de9d49ce..e37644ad63 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/layer_item.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/layer_item.scss
@@ -4,32 +4,34 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.layer-row {
- --layer-indentation-size: calc(#{$s-4} * 6);
+ --layer-indentation-size: calc(#{deprecated.$s-4} * 6);
display: flex;
flex-direction: row;
align-items: center;
width: 100%;
background-color: var(--layer-row-background-color);
- border: $s-2 solid transparent;
+ border: deprecated.$s-2 solid transparent;
&.highlight,
&:hover {
--context-hover-color: var(--layer-row-foreground-color-hover);
- --context-hover-opacity: $op-10;
+ --context-hover-opacity: deprecated.$op-10;
background-color: var(--layer-row-background-color-hover);
color: var(--layer-row-foreground-color-hover);
- box-shadow: $s-16 $s-0 $s-0 $s-0 var(--layer-row-background-color-hover);
+ box-shadow: deprecated.$s-16 deprecated.$s-0 deprecated.$s-0 deprecated.$s-0
+ var(--layer-row-background-color-hover);
&.hidden {
- opacity: $op-10;
+ opacity: deprecated.$op-10;
}
}
&.selected {
background-color: var(--layer-row-background-color-selected);
- box-shadow: $s-16 $s-0 $s-0 $s-0 var(--layer-row-background-color-selected);
+ box-shadow: deprecated.$s-16 deprecated.$s-0 deprecated.$s-0 deprecated.$s-0
+ var(--layer-row-background-color-selected);
}
&.selected.highlight,
@@ -39,23 +41,25 @@
.parent-selected & {
background-color: var(--layer-child-row-background-color);
- box-shadow: $s-16 $s-0 $s-0 $s-0 var(--layer-child-row-background-color);
+ box-shadow: deprecated.$s-16 deprecated.$s-0 deprecated.$s-0 deprecated.$s-0
+ var(--layer-child-row-background-color);
}
.parent-selected &.highlight,
.parent-selected &:hover {
background-color: var(--layer-row-background-color-hover);
- box-shadow: $s-16 $s-0 $s-0 $s-0 var(--layer-row-background-color-hover);
+ box-shadow: deprecated.$s-16 deprecated.$s-0 deprecated.$s-0 deprecated.$s-0
+ var(--layer-row-background-color-hover);
}
&.dnd-over-bot {
- border-bottom: $s-2 solid var(--layer-row-foreground-color-hover);
+ border-bottom: deprecated.$s-2 solid var(--layer-row-foreground-color-hover);
}
&.dnd-over-top {
- border-top: $s-2 solid var(--layer-row-foreground-color-hover);
+ border-top: deprecated.$s-2 solid var(--layer-row-foreground-color-hover);
}
&.dnd-over {
- border: $s-2 solid var(--layer-row-foreground-color-hover);
+ border: deprecated.$s-2 solid var(--layer-row-foreground-color-hover);
}
}
@@ -63,7 +67,8 @@
.layer-row.highlight &,
.layer-row:hover & {
background-color: var(--layer-row-background-color-selected);
- box-shadow: $s-16 $s-0 $s-0 $s-0 var(--layer-row-background-color-selected);
+ box-shadow: deprecated.$s-16 deprecated.$s-0 deprecated.$s-0 deprecated.$s-0
+ var(--layer-row-background-color-selected);
}
.layer-row.type-comp & {
color: var(--layer-row-component-foreground-color);
@@ -78,13 +83,13 @@
align-items: center;
display: grid;
grid-template-columns: auto 1fr auto;
- column-gap: $s-4;
- height: $s-32;
+ column-gap: deprecated.$s-4;
+ height: deprecated.$s-32;
width: calc(100% - (var(--depth) * var(--layer-indentation-size)));
cursor: pointer;
&.filtered {
- width: calc(100% - $s-12);
+ width: calc(100% - deprecated.$s-12);
}
}
@@ -109,14 +114,14 @@
}
.icon-shape {
- @include flexCenter;
- @include buttonStyle;
+ @include deprecated.flexCenter;
+ @include deprecated.buttonStyle;
position: relative;
justify-self: flex-end;
- width: $s-16;
+ width: deprecated.$s-16;
height: 100%;
- width: $s-24;
- padding-inline-start: $s-4;
+ width: deprecated.$s-24;
+ padding-inline-start: deprecated.$s-4;
color: var(--icon-foreground);
.layer-row.selected & {
color: var(--layer-row-foreground-color-selected);
@@ -128,11 +133,11 @@
transform: rotate(-90deg);
}
.layer-row.hidden & {
- opacity: $op-7;
+ opacity: deprecated.$op-7;
}
.layer-row.highlight &,
.layer-row:hover & {
- opacity: $op-10;
+ opacity: deprecated.$op-10;
svg {
stroke: var(--layer-row-foreground-color-hover);
}
@@ -142,20 +147,20 @@
.absolute {
position: absolute;
background-color: var(--layer-row-foreground-color);
- opacity: $op-4;
- width: $s-12;
- height: $s-12;
- border-radius: $br-2;
+ opacity: deprecated.$op-4;
+ width: deprecated.$s-12;
+ height: deprecated.$s-12;
+ border-radius: deprecated.$br-2;
.layer-row.hidden & {
- opacity: $op-1;
+ opacity: deprecated.$op-1;
}
.layer-row.type-comp & {
background-color: var(--layer-row-component-foreground-color);
}
.layer-row.highlight &,
.layer-row:hover & {
- opacity: $op-4;
+ opacity: deprecated.$op-4;
background-color: var(--layer-row-foreground-color-hover);
}
.layer-row.selected & {
@@ -164,20 +169,20 @@
}
.toggle-content {
- @include buttonStyle;
+ @include deprecated.buttonStyle;
display: grid;
grid-template-columns: 1fr 1fr;
align-items: center;
height: 100%;
- width: $s-24;
- padding-inline-start: $s-8;
+ width: deprecated.$s-24;
+ padding-inline-start: deprecated.$s-8;
svg {
@extend .button-icon-small;
stroke: var(--icon-foreground);
.layer-row.hidden & {
- opacity: $op-7;
+ opacity: deprecated.$op-7;
}
.layer-row.selected & {
stroke: var(--layer-row-foreground-color-selected);
@@ -187,7 +192,7 @@
}
.layer-row.highlight &,
.layer-row:hover & {
- opacity: $op-10;
+ opacity: deprecated.$op-10;
stroke: var(--layer-row-foreground-color-hover);
}
}
@@ -202,10 +207,10 @@
.toggle-element,
.block-element {
- @include buttonStyle;
- @include flexCenter;
+ @include deprecated.buttonStyle;
+ @include deprecated.flexCenter;
height: 100%;
- width: $s-24;
+ width: deprecated.$s-24;
margin: 0;
display: none;
@@ -214,7 +219,7 @@
stroke: var(--icon-foreground);
.layer-row.hidden & {
- opacity: $op-7;
+ opacity: deprecated.$op-7;
}
.type-comp & {
stroke: var(--layer-row-component-foreground-color);
@@ -223,22 +228,22 @@
.element-actions.selected & {
display: flex;
- opacity: $op-0;
+ opacity: deprecated.$op-0;
&.selected {
- opacity: $op-10;
+ opacity: deprecated.$op-10;
}
}
.layer-row:hover .element-actions.selected & {
- opacity: $op-10;
+ opacity: deprecated.$op-10;
}
.layer-row.highlight &,
.layer-row:hover & {
display: flex;
svg {
- opacity: $op-10;
+ opacity: deprecated.$op-10;
stroke: var(--layer-row-foreground-color-hover);
}
}
@@ -252,15 +257,15 @@
:global(.sticky) {
position: sticky;
- top: $s-0;
- z-index: $z-index-4;
+ top: deprecated.$s-0;
+ z-index: deprecated.$z-index-4;
}
.tab-indentation {
display: block;
- height: $s-16;
+ height: deprecated.$s-16;
min-width: calc(var(--depth) * var(--layer-indentation-size));
}
.filtered {
- min-width: $s-12;
+ min-width: deprecated.$s-12;
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/layer_name.scss b/frontend/src/app/main/ui/workspace/sidebar/layer_name.scss
index ae32b320a2..e2e4b1a723 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/layer_name.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/layer_name.scss
@@ -4,15 +4,15 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.element-name {
--element-name-color: var(--context-hover-color, var(--layer-row-foreground-color));
--element-name-comp-color: var(--context-hover-color, var(--layer-row-component-foreground-color));
- --element-name-opacity: var(--context-hover-opacity, $op-7);
+ --element-name-opacity: var(--context-hover-opacity, deprecated.$op-7);
- @include textEllipsis;
- @include bodySmallTypography;
+ @include deprecated.textEllipsis;
+ @include deprecated.bodySmallTypography;
color: var(--element-name-color);
@@ -42,21 +42,21 @@
--element-name-input-border-color: var(--input-border-color-focus);
--element-name-input-color: var(--layer-row-foreground-color);
- @include textEllipsis;
- @include bodySmallTypography;
- @include removeInputStyle;
+ @include deprecated.textEllipsis;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.removeInputStyle;
flex-grow: 1;
- height: $s-28;
+ height: deprecated.$s-28;
max-inline-size: calc(var(--parent-size) - (var(--depth) * var(--layer-indentation-size)));
margin: 0;
- padding-inline-start: $s-6;
- border-radius: $br-8;
- border: $s-1 solid var(--element-name-input-border-color);
+ padding-inline-start: deprecated.$s-6;
+ border-radius: deprecated.$br-8;
+ border: deprecated.$s-1 solid var(--element-name-input-border-color);
color: var(--element-name-input-color);
&.selected {
- min-inline-size: $s-100;
+ min-inline-size: deprecated.$s-100;
}
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/layers.cljs b/frontend/src/app/main/ui/workspace/sidebar/layers.cljs
index dcc12bdb65..398473f54c 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/layers.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/layers.cljs
@@ -72,7 +72,7 @@
highlighted (hooks/use-equal-memo highlighted)
root (get objects uuid/zero)]
[:div {:class (stl/css :element-list) :data-testid "layer-item"}
- [:& hooks/sortable-container {}
+ [:> hooks/sortable-container* {}
(for [[index id] (reverse (d/enumerate (:shapes root)))]
(when-let [obj (get objects id)]
(if (cfh/frame-shape? obj)
diff --git a/frontend/src/app/main/ui/workspace/sidebar/layers.scss b/frontend/src/app/main/ui/workspace/sidebar/layers.scss
index a2595ab740..1aa4b9845a 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/layers.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/layers.scss
@@ -4,36 +4,36 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.tool-window-bar {
display: flex;
align-items: center;
justify-content: space-between;
- height: $s-32;
- min-height: $s-32;
- margin: $s-8 0 $s-4 $s-8;
- padding-right: $s-12;
+ height: deprecated.$s-32;
+ min-height: deprecated.$s-32;
+ margin: deprecated.$s-8 0 deprecated.$s-4 deprecated.$s-8;
+ padding-right: deprecated.$s-12;
&.search {
- padding: 0 $s-12 0 $s-8;
- gap: $s-4;
+ padding: 0 deprecated.$s-12 0 deprecated.$s-8;
+ gap: deprecated.$s-4;
.filter-button {
- @include flexCenter;
- @include buttonStyle;
- height: $s-32;
- width: $s-32;
+ @include deprecated.flexCenter;
+ @include deprecated.buttonStyle;
+ height: deprecated.$s-32;
+ width: deprecated.$s-32;
margin: 0;
- border: $s-1 solid var(--color-background-tertiary);
- border-radius: $br-8 $br-2 $br-2 $br-8;
+ border: deprecated.$s-1 solid var(--color-background-tertiary);
+ border-radius: deprecated.$br-8 deprecated.$br-2 deprecated.$br-2 deprecated.$br-8;
background-color: var(--color-background-tertiary);
svg {
- height: $s-16;
- width: $s-16;
+ height: deprecated.$s-16;
+ width: deprecated.$s-16;
stroke: var(--icon-foreground);
}
&:focus {
- border: $s-1 solid var(--input-border-color-focus);
+ border: deprecated.$s-1 solid var(--input-border-color-focus);
outline: 0;
background-color: var(--input-background-color-active);
color: var(--input-foreground-color-active);
@@ -42,7 +42,7 @@
}
}
&:hover {
- border: $s-1 solid var(--input-border-color-hover);
+ border: deprecated.$s-1 solid var(--input-border-color-hover);
background-color: var(--input-background-color-hover);
svg {
background-color: var(--input-background-color-hover);
@@ -57,17 +57,17 @@
}
.page-name {
- @include uppercaseTitleTipography;
- padding: 0 $s-12;
+ @include deprecated.uppercaseTitleTipography;
+ padding: 0 deprecated.$s-12;
color: var(--title-foreground-color);
}
.icon-search {
@extend .button-tertiary;
- height: $s-32;
- width: $s-28;
- border-radius: $br-8;
- margin-right: $s-8;
+ height: deprecated.$s-32;
+ width: deprecated.$s-28;
+ border-radius: deprecated.$br-8;
+ margin-right: deprecated.$s-8;
padding: 0;
svg {
@extend .button-icon;
@@ -76,7 +76,7 @@
}
.focus-title {
- @include buttonStyle;
+ @include deprecated.buttonStyle;
display: grid;
grid-template-columns: auto 1fr auto;
align-items: center;
@@ -85,10 +85,10 @@
}
.back-button {
- @include flexCenter;
- height: $s-32;
- width: $s-24;
- padding: 0 $s-4 0 $s-8;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-32;
+ width: deprecated.$s-24;
+ padding: 0 deprecated.$s-4 0 deprecated.$s-8;
svg {
@extend .button-icon-small;
stroke: var(--icon-foreground);
@@ -97,30 +97,30 @@
}
.focus-name {
- @include textEllipsis;
- @include bodySmallTypography;
- padding-left: $s-4;
+ @include deprecated.textEllipsis;
+ @include deprecated.bodySmallTypography;
+ padding-left: deprecated.$s-4;
color: var(--title-foreground-color);
}
.focus-mode-tag-wrapper {
- @include flexCenter;
+ @include deprecated.flexCenter;
height: 100%;
- margin-right: $s-12;
+ margin-right: deprecated.$s-12;
}
.active-filters {
- @include flexRow;
+ @include deprecated.flexRow;
flex-wrap: wrap;
- margin: 0 $s-12;
+ margin: 0 deprecated.$s-12;
}
.layer-filter {
@extend .button-tag;
- gap: $s-6;
- height: $s-24;
- margin: $s-2 0;
- border-radius: $br-6;
+ gap: deprecated.$s-6;
+ height: deprecated.$s-24;
+ margin: deprecated.$s-2 0;
+ border-radius: deprecated.$br-6;
background-color: var(--pill-background-color);
cursor: pointer;
}
@@ -131,8 +131,8 @@
}
.layer-filter-name {
- @include flexCenter;
- @include bodySmallTypography;
+ @include deprecated.flexCenter;
+ @include deprecated.bodySmallTypography;
color: var(--pill-foreground-color);
}
@@ -143,26 +143,26 @@
.filters-container {
@extend .menu-dropdown;
position: absolute;
- left: $s-20;
- width: $s-192;
+ left: deprecated.$s-20;
+ width: deprecated.$s-192;
.filter-menu-item {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
- padding: $s-6;
- border-radius: $br-8;
+ padding: deprecated.$s-6;
+ border-radius: deprecated.$br-8;
.filter-menu-item-name-wrapper {
display: flex;
align-items: center;
- gap: $s-8;
+ gap: deprecated.$s-8;
.filter-menu-item-icon {
color: var(--menu-foreground-color);
}
.filter-menu-item-name {
- padding-top: $s-2;
+ padding-top: deprecated.$s-2;
color: var(--menu-foreground-color);
}
}
@@ -203,7 +203,7 @@
}
.tool-window-content {
- --calculated-height: calc(#{$s-136} + var(--height, #{$s-200}));
+ --calculated-height: calc(#{deprecated.$s-136} + var(--height, #{deprecated.$s-200}));
display: flex;
flex-direction: column;
height: calc(100vh - var(--calculated-height));
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options.cljs b/frontend/src/app/main/ui/workspace/sidebar/options.cljs
index 37510ba166..ddd314ca40 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options.cljs
@@ -23,7 +23,7 @@
[app.main.ui.workspace.sidebar.options.drawing :as drawing]
[app.main.ui.workspace.sidebar.options.menus.align :refer [align-options*]]
[app.main.ui.workspace.sidebar.options.menus.bool :refer [bool-options*]]
- [app.main.ui.workspace.sidebar.options.menus.component :refer [component-menu]]
+ [app.main.ui.workspace.sidebar.options.menus.component :refer [component-menu*]]
[app.main.ui.workspace.sidebar.options.menus.grid-cell :as grid-cell]
[app.main.ui.workspace.sidebar.options.menus.interactions :refer [interactions-menu]]
[app.main.ui.workspace.sidebar.options.menus.layout-container :as layout-container]
@@ -46,7 +46,7 @@
(mf/defc single-shape-options*
{::mf/private true}
- [{:keys [shape page-id file-id libraries] :as props}]
+ [{:keys [shape page-id file-id libraries] :rest props}]
(let [shape-type (dm/get-prop shape :type)
shape-id (dm/get-prop shape :id)
@@ -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})]
+ props (mf/spread-props props {:shape shape :file-id file-id :page-id page-id})]
(case shape-type
:frame [:> frame/options* props]
@@ -89,7 +89,7 @@
{::mf/private true}
[{:keys [panel]}]
(when (= (:type panel) :component-swap)
- [:& component-menu {:shapes (:shapes panel) :swap-opened? true}]))
+ [:> component-menu* {:shapes (:shapes panel) :is-swap-opened true}]))
(mf/defc design-menu*
{::mf/private true}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options.scss b/frontend/src/app/main/ui/workspace/sidebar/options.scss
index 4aad10f018..8a819471e8 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options.scss
@@ -4,8 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../ds/_sizes.scss" as *;
-@import "refactor/common-refactor.scss";
+@use "ds/_sizes.scss" as *;
.tool-window {
position: relative;
@@ -15,23 +14,26 @@
}
.tab-spacing {
- margin-right: $s-12;
+ margin-inline-end: var(--sp-m);
}
.content-class {
overflow-y: auto;
overflow-x: hidden;
- height: calc(100vh - $s-96);
+ height: calc(100vh - #{$sz-96});
scrollbar-gutter: stable;
}
.element-options {
display: flex;
flex-direction: column;
- gap: $s-8;
+ gap: var(--sp-s);
width: 100%;
- height: calc(100vh - $sz-88);
- padding-top: $s-8;
+ /* FIXME: This is hacky and prone to break, we should tackle the whole layout
+ of the sidebar differently */
+ --sidebar-element-options-height: calc(100vh - #{$sz-88});
+ height: var(--sidebar-element-options-height);
+ padding-block-start: var(--sp-s);
}
.read-only {
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/common.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/common.cljs
index 1efb38e5a0..7ea8e42132 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/common.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/common.cljs
@@ -7,20 +7,20 @@
(ns app.main.ui.workspace.sidebar.options.common
(:require-macros [app.main.style :as stl])
(:require
- [app.common.data.macros :as dm]
[app.util.dom :as dom]
[rumext.v2 :as mf]))
-(mf/defc advanced-options [{:keys [visible? class children]}]
+(mf/defc advanced-options*
+ [{:keys [class is-visible children]}]
(let [ref (mf/use-ref nil)]
(mf/use-effect
- (mf/deps visible?)
+ (mf/deps is-visible)
(fn []
(when-let [node (mf/ref-val ref)]
- (when visible?
+ (when is-visible
(dom/scroll-into-view-if-needed! node)))))
- (when visible?
- [:div {:class (dm/str class " " (stl/css :advanced-options-wrapper))
+ (when is-visible
+ [:div {:class [class (stl/css :advanced-options-wrapper)]
:ref ref}
children])))
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/common.scss b/frontend/src/app/main/ui/workspace/sidebar/options/common.scss
index ce1ffb4d6f..abad10d4af 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/common.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/common.scss
@@ -4,8 +4,8 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
-
.advanced-options-wrapper {
- @include flexColumn;
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-xs);
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/drawing/frame.scss b/frontend/src/app/main/ui/workspace/sidebar/options/drawing/frame.scss
index 442f03036b..c435bfae64 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/drawing/frame.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/drawing/frame.scss
@@ -4,8 +4,8 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../../../ds/_sizes.scss" as *;
-@import "refactor/common-refactor.scss";
+@use "ds/_sizes.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
.presets {
display: grid;
@@ -19,12 +19,12 @@
position: relative;
grid-column: span 6;
display: flex;
- height: $s-32;
- padding: $s-8;
- border-radius: $br-8;
+ height: deprecated.$s-32;
+ padding: deprecated.$s-8;
+ border-radius: deprecated.$br-8;
.collapsed-icon {
- @include flexCenter;
+ @include deprecated.flexCenter;
cursor: pointer;
svg {
@extend .button-icon-small;
@@ -45,7 +45,7 @@
}
.select-name {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
display: flex;
justify-content: flex-start;
align-items: center;
@@ -55,14 +55,14 @@
.custom-select-dropdown {
@extend .dropdown-wrapper;
- margin-top: $s-2;
+ margin-top: deprecated.$s-2;
max-height: 70vh;
- width: $s-252;
+ width: deprecated.$s-252;
.dropdown-element {
@extend .dropdown-element-base;
.name-wrapper {
display: flex;
- gap: $s-8;
+ gap: deprecated.$s-8;
flex-grow: 1;
.preset-name {
color: var(--menu-foreground-color-rest);
@@ -73,7 +73,7 @@
}
.check-icon {
- @include flexCenter;
+ @include deprecated.flexCenter;
svg {
@extend .button-icon-small;
stroke: var(--icon-foreground);
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/align.scss b/frontend/src/app/main/ui/workspace/sidebar/options/menus/align.scss
index a2ec2aafd2..17a8224454 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/align.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/align.scss
@@ -4,13 +4,13 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.align-options {
display: grid;
grid-template-columns: repeat(8, var(--sp-xxxl));
column-gap: var(--sp-xs);
- height: $s-32;
+ height: deprecated.$s-32;
}
.align-group-horizontal,
.align-group-vertical {
@@ -30,10 +30,10 @@
.align-button {
@extend .button-tertiary;
- height: $s-32;
- width: $s-32;
+ height: deprecated.$s-32;
+ width: deprecated.$s-32;
padding: 0;
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
svg {
@extend .button-icon;
stroke: var(--icon-foreground);
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/blur.scss b/frontend/src/app/main/ui/workspace/sidebar/options/menus/blur.scss
index 962fb292ff..9c2e5733d7 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/blur.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/blur.scss
@@ -4,20 +4,26 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.element-set {
- margin: 0;
+ display: grid;
+ grid-template-columns: repeat(8, var(--sp-xxxl));
+ column-gap: var(--sp-xs);
+}
+
+.element-title {
+ grid-column: span 8;
}
.title-spacing-blur {
- padding-left: $s-2;
+ padding-left: deprecated.$s-2;
margin: 0;
}
.element-set-content {
- @include flexColumn;
- margin-bottom: $s-8;
+ @include deprecated.flexColumn;
+ margin-bottom: deprecated.$s-8;
}
.first-row {
@@ -29,17 +35,17 @@
grid-column: span 6;
display: flex;
align-items: center;
- gap: $s-1;
+ gap: deprecated.$s-1;
flex-grow: 1;
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
background-color: var(--input-details-color);
.show-more {
@extend .button-secondary;
- height: $s-32;
- width: $s-28;
- border-radius: $br-8 0 0 $br-8;
+ height: deprecated.$s-32;
+ width: deprecated.$s-28;
+ border-radius: deprecated.$br-8 0 0 deprecated.$br-8;
box-sizing: border-box;
- border: $s-1 solid var(--button-secondary-background-color-rest);
+ border: deprecated.$s-1 solid var(--button-secondary-background-color-rest);
svg {
@extend .button-icon;
}
@@ -51,33 +57,33 @@
}
}
.label {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
flex-grow: 1;
display: flex;
align-items: center;
- height: $s-32;
- padding: 0 $s-8;
- border-radius: 0 $br-8 $br-8 0;
+ height: deprecated.$s-32;
+ padding: 0 deprecated.$s-8;
+ border-radius: 0 deprecated.$br-8 deprecated.$br-8 0;
background-color: var(--input-background-color);
color: var(--menu-foreground-color);
box-sizing: border-box;
- border: $s-1 solid var(--input-border-color);
+ border: deprecated.$s-1 solid var(--input-border-color);
}
}
.actions {
- @include flexRow;
+ @include deprecated.flexRow;
}
&.hidden {
.blur-info {
- @include hiddenElement;
+ @include deprecated.hiddenElement;
.show-more {
- @include hiddenElement;
- border: $s-1 solid var(--input-border-color-disabled);
+ @include deprecated.hiddenElement;
+ border: deprecated.$s-1 solid var(--input-border-color-disabled);
}
.label {
- @include hiddenElement;
- border: $s-1 solid var(--input-border-color-disabled);
+ @include deprecated.hiddenElement;
+ border: deprecated.$s-1 solid var(--input-border-color-disabled);
}
}
}
@@ -85,10 +91,10 @@
.second-row {
@extend .input-element;
- @include bodySmallTypography;
- width: $s-92;
+ @include deprecated.bodySmallTypography;
+ width: deprecated.$s-92;
.label {
- padding-left: $s-8;
- width: $s-60;
+ padding-left: deprecated.$s-8;
+ width: deprecated.$s-60;
}
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/bool.scss b/frontend/src/app/main/ui/workspace/sidebar/options/menus/bool.scss
index 3aedcaa593..ab0f18d00e 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/bool.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/bool.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.boolean-options {
display: grid;
@@ -21,9 +21,9 @@
.flatten-button {
@extend .button-tertiary;
- height: $s-32;
- width: $s-32;
- border-radius: $br-8;
+ height: deprecated.$s-32;
+ width: deprecated.$s-32;
+ border-radius: deprecated.$br-8;
grid-column: 5 / span 1;
--flatten-icon-foreground-color: var(--icon-foreground);
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs
index b30ee20cbf..d2311f26d4 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs
@@ -5,7 +5,7 @@
[app.common.types.shape.radius :as ctsr]
[app.main.data.workspace.shapes :as dwsh]
[app.main.store :as st]
- [app.main.ui.components.numeric-input :refer [numeric-input*]]
+ [app.main.ui.components.numeric-input :as deprecated-input]
[app.main.ui.ds.buttons.icon-button :refer [icon-button*]]
[app.main.ui.ds.foundations.assets.icon :refer [icon*] :as i]
[app.main.ui.hooks :as hooks]
@@ -68,6 +68,7 @@
(change-radius (fn [shape]
(ctsr/set-radius-to-all-corners shape value))))))
+
on-radius-4-change
(mf/use-fn
(mf/deps ids change-radius)
@@ -98,7 +99,7 @@
[:> icon* {:icon-id i/corner-radius
:size "s"
:class (stl/css :icon)}]
- [:> numeric-input*
+ [:> deprecated-input/numeric-input*
{:placeholder (cond
(not all-equal?)
"Mixed"
@@ -113,7 +114,7 @@
[:div {:class (stl/css :radius-4)}
[:div {:class (stl/css :small-input)}
- [:> numeric-input*
+ [:> deprecated-input/numeric-input*
{:placeholder "--"
:title (tr "workspace.options.radius-top-left")
:min 0
@@ -121,7 +122,7 @@
:value (:r1 values)}]]
[:div {:class (stl/css :small-input)}
- [:> numeric-input*
+ [:> deprecated-input/numeric-input*
{:placeholder "--"
:title (tr "workspace.options.radius-top-right")
:min 0
@@ -129,7 +130,7 @@
:value (:r2 values)}]]
[:div {:class (stl/css :small-input)}
- [:> numeric-input*
+ [:> deprecated-input/numeric-input*
{:placeholder "--"
:title (tr "workspace.options.radius-bottom-left")
:min 0
@@ -137,7 +138,7 @@
:value (:r4 values)}]]
[:div {:class (stl/css :small-input)}
- [:> numeric-input*
+ [:> deprecated-input/numeric-input*
{:placeholder "--"
:title (tr "workspace.options.radius-bottom-right")
:min 0
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/border_radius.scss b/frontend/src/app/main/ui/workspace/sidebar/options/menus/border_radius.scss
index 0a93669b5e..65a421790c 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/border_radius.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/border_radius.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.radius {
display: grid;
@@ -14,7 +14,7 @@
.radius-1 {
@extend .input-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
}
.radius-4 {
@@ -25,7 +25,7 @@
.small-input {
@extend .input-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
}
.selected {
@@ -35,5 +35,5 @@
}
.icon {
- margin-inline: $s-4;
+ margin-inline: deprecated.$s-4;
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs
index 64a34297a1..a785230dac 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs
@@ -10,6 +10,7 @@
[app.common.data :as d]
[app.main.data.workspace.colors :as dwc]
[app.main.data.workspace.selection :as dws]
+ [app.main.data.workspace.tokens.application :as dwta]
[app.main.store :as st]
[app.main.ui.components.title-bar :refer [title-bar*]]
[app.main.ui.hooks :as h]
@@ -34,6 +35,18 @@
(def xf:map-shape-id
(map :shape-id))
+(defn- generate-color-operations
+ [groups old-color prev-colors]
+ (let [old-color (-> old-color
+ (dissoc :name :path)
+ (d/without-nils))
+ prev-color (d/seek (partial get groups) prev-colors)
+ color-operations-old (get groups old-color)
+ color-operations-prev (get groups prev-colors)
+ color-operations (or color-operations-prev color-operations-old)
+ old-color (or prev-color old-color)]
+ [color-operations old-color]))
+
(mf/defc color-selection-menu*
{::mf/wrap [#(mf/memo' % (mf/check-props ["shapes"]))]}
[{:keys [shapes file-id libraries]}]
@@ -57,22 +70,13 @@
on-change
(mf/use-fn
(fn [new-color old-color from-picker?]
- (let [old-color (-> old-color
- (dissoc :name :path)
- (d/without-nils))
-
- ;; When dragging on the color picker sometimes all
+ (let [;; When dragging on the color picker sometimes all
;; the shapes hasn't updated the color to the prev
;; value so we need this extra calculation
groups (mf/ref-val groups-ref)
prev-colors (mf/ref-val prev-colors-ref)
- prev-color (d/seek (partial get groups) prev-colors)
-
- cops-old (get groups old-color)
- cops-prev (get groups prev-colors)
- cops (or cops-prev cops-old)
- old-color (or prev-color old-color)]
+ [color-operations old-color] (generate-color-operations groups old-color prev-colors)]
(when from-picker?
(let [color (-> new-color
@@ -81,7 +85,7 @@
(mf/set-ref-val! prev-colors-ref
(conj prev-colors color))))
- (st/emit! (dwc/change-color-in-selected cops new-color old-color)))))
+ (st/emit! (dwc/change-color-in-selected color-operations new-color old-color)))))
on-open
(mf/use-fn #(mf/set-ref-val! prev-colors-ref []))
@@ -93,17 +97,32 @@
(mf/use-fn
(fn [color]
(let [groups (mf/ref-val groups-ref)
- cops (get groups color)
+ color-operations (get groups color)
color' (dissoc color :id :file-id)]
- (st/emit! (dwc/change-color-in-selected cops color' color)))))
+ (st/emit! (dwc/change-color-in-selected color-operations color' color)))))
select-only
(mf/use-fn
(fn [color]
(let [groups (mf/ref-val groups-ref)
- cops (get groups color)
- ids (into (d/ordered-set) xf:map-shape-id cops)]
- (st/emit! (dws/select-shapes ids)))))]
+ color-operations (get groups color)
+ ids (into (d/ordered-set) xf:map-shape-id color-operations)]
+ (st/emit! (dws/select-shapes ids)))))
+
+ on-token-change
+ (mf/use-fn
+ (fn [_ token old-color]
+ (let [groups (mf/ref-val groups-ref)
+ prev-colors (mf/ref-val prev-colors-ref)
+ resolved-value (:resolved-value token)
+ new-color (dwta/value->color resolved-value)
+ color (-> new-color
+ (dissoc :name :path)
+ (d/without-nils))
+ [color-operations _] (generate-color-operations groups old-color prev-colors)]
+ (mf/set-ref-val! prev-colors-ref
+ (conj prev-colors color))
+ (st/emit! (dwta/apply-token-on-selected color-operations token)))))]
[:div {:class (stl/css :element-set)}
[:div {:class (stl/css :element-title)}
@@ -132,7 +151,9 @@
:on-detach on-detach
:select-only select-only
:on-change #(on-change %1 color %2)
+ :on-token-change #(on-token-change %1 %2 color)
:on-open on-open
+ :origin :color-selection
:on-close on-close}]))
(when (and (false? @expand-lib-color) (< 3 (count library-colors)))
[:button {:class (stl/css :more-colors-btn)
@@ -147,6 +168,8 @@
:index index
:select-only select-only
:on-change #(on-change %1 color %2)
+ :origin :color-selection
+ :on-token-change #(on-token-change %1 %2 color)
:on-open on-open
:on-close on-close}])
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/color_selection.scss b/frontend/src/app/main/ui/workspace/sidebar/options/menus/color_selection.scss
index 0ded56cb7a..46f0793a15 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/color_selection.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/color_selection.scss
@@ -4,37 +4,44 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.element-set {
- margin: 0;
+ display: grid;
+ grid-template-columns: repeat(8, var(--sp-xxxl));
+ column-gap: var(--sp-xs);
+}
+
+.element-title {
+ grid-column: span 8;
}
.title-spacing-selected-colors {
- padding-left: $s-2;
+ padding-left: deprecated.$s-2;
margin: 0;
}
.add-fill {
@extend .button-tertiary;
- height: $s-32;
- width: $s-28;
+ height: deprecated.$s-32;
+ width: deprecated.$s-28;
svg {
@extend .button-icon;
}
}
.element-content {
- @include flexColumn;
- margin-bottom: $s-8;
+ grid-column: span 8;
+ @include deprecated.flexColumn;
+ margin-bottom: deprecated.$s-8;
}
.selected-color-group {
- @include flexColumn;
+ @include deprecated.flexColumn;
}
.more-colors-btn {
@extend .button-secondary;
- @include uppercaseTitleTipography;
- height: $s-32;
+ @include deprecated.uppercaseTitleTipography;
+ height: deprecated.$s-32;
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/component.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/component.cljs
index 830b364c69..b34552e7f2 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/component.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/component.cljs
@@ -11,6 +11,7 @@
[app.common.data.macros :as dm]
[app.common.files.helpers :as cfh]
[app.common.files.variant :as cfv]
+ [app.common.path-names :as cpn]
[app.common.types.component :as ctk]
[app.common.types.components-list :as ctkl]
[app.common.types.file :as ctf]
@@ -28,10 +29,12 @@
[app.main.store :as st]
[app.main.ui.components.dropdown :refer [dropdown]]
[app.main.ui.components.radio-buttons :refer [radio-button radio-buttons]]
+ [app.main.ui.components.reorder-handler :refer [reorder-handler*]]
[app.main.ui.components.search-bar :refer [search-bar*]]
[app.main.ui.components.select :refer [select]]
[app.main.ui.components.title-bar :refer [title-bar*]]
[app.main.ui.context :as ctx]
+ [app.main.ui.ds.buttons.button :refer [button*]]
[app.main.ui.ds.buttons.icon-button :refer [icon-button*]]
[app.main.ui.ds.controls.combobox :refer [combobox*]]
[app.main.ui.ds.controls.select :refer [select*]]
@@ -148,12 +151,11 @@
(dw/set-annotations-id-for-create nil))
(dw/update-component-annotation component-id nil)
(rerender-fn)))]
- (st/emit! (modal/show
- {:type :confirm
- :title (tr "modals.delete-component-annotation.title")
- :message (tr "modals.delete-component-annotation.message")
- :accept-label (tr "ds.confirm-ok")
- :on-accept on-accept})))))]
+ (st/emit! (modal/show {:type :confirm
+ :title (tr "modals.delete-component-annotation.title")
+ :message (tr "modals.delete-component-annotation.message")
+ :accept-label (tr "ds.confirm-ok")
+ :on-accept on-accept})))))]
(mf/with-effect [shape-id state create-id creating?]
(when-let [textarea (mf/ref-val textarea-ref)]
@@ -170,31 +172,28 @@
(st/emit! (dw/set-annotations-id-for-create nil)))))
(when (or creating? annotation)
- [:div {:class (stl/css-case
- :component-annotation true
- :editing editing?
- :creating creating?)}
- [:div {:class (stl/css-case
- :annotation-title true
- :expandeable (not (or editing? creating?))
- :expanded expanded?)
+ [:div {:class (stl/css-case :annotation true
+ :editing editing?
+ :creating creating?)}
+ [:div {:class (stl/css-case :annotation-title true
+ :expandeable (not (or editing? creating?))
+ :expanded expanded?)
:on-click on-toggle-expand}
(if (or editing? creating?)
- [:span {:class (stl/css :annotation-text)}
+ [:span {:class (stl/css :annotation-title-name)}
(if editing?
(tr "workspace.options.component.edit-annotation")
(tr "workspace.options.component.create-annotation"))]
[:*
- [:span {:class (stl/css-case
- :icon-arrow true
- :expanded expanded?)}
- deprecated-icon/arrow]
- [:span {:class (stl/css :annotation-text)}
+ [:> icon* {:icon-id (if expanded? i/arrow-down i/arrow-right)
+ :class (stl/css :annotation-title-icon-arrow)
+ :size "s"}]
+ [:span {:class (stl/css :annotation-title-name)}
(tr "workspace.options.component.annotation")]])
- [:div {:class (stl/css :icons-wrapper)}
+ [:div {:class (stl/css :annotation-title-actions)}
(when (and ^boolean main-instance?
^boolean expanded?)
(if (or ^boolean editing?
@@ -204,40 +203,41 @@
(tr "labels.create")
(tr "labels.save"))
:on-click on-save
- :class (stl/css-case
- :icon true
- :icon-tick true
- :invalid invalid-text?)}
- deprecated-icon/tick]
- [:div {:class (stl/css :icon :icon-cross)
+ :class (stl/css :annotation-title-icon-action)}
+ [:> icon* {:icon-id i/tick
+ :class (stl/css-case :annotation-title-icon-ok true
+ :disabled invalid-text?)}]]
+ [:div {:class (stl/css :annotation-title-icon-action)
:title (tr "labels.discard")
:on-click on-discard}
- deprecated-icon/close]]
+ [:> icon* {:icon-id i/close
+ :class (stl/css :annotation-title-icon-nok)}]]]
[:*
- [:div {:class (stl/css :icon :icon-edit)
+ [:div {:class (stl/css :annotation-title-icon-action)
:title (tr "labels.edit")
:on-click on-edit}
- deprecated-icon/curve]
- [:div {:class (stl/css :icon :icon-trash)
+ [:> icon* {:icon-id i/curve
+ :class (stl/css :annotation-title-icon-ok)}]]
+ [:div {:class (stl/css :annotation-title-icon-action)
:title (tr "labels.delete")
:on-click on-delete-annotation}
- deprecated-icon/delete]]))]]
+ [:> icon* {:icon-id i/delete
+ :class (stl/css :annotation-title-icon-nok)}]]]))]]
- [:div {:class (stl/css-case :hidden (not expanded?))}
- [:div {:class (stl/css :grow-wrap)}
- [:div {:class (stl/css :texarea-copy)}]
- [:textarea
- {:ref textarea-ref
- :id "annotation-textarea"
- :data-debug annotation
- :auto-focus (or editing? creating?)
- :maxLength 300
- :on-input adjust-textarea-size
- :default-value annotation
- :read-only (not (or creating? editing?))}]]
+ [:div {:class (stl/css-case :annotation-body-hidden (not expanded?))}
+ [:div {:class (stl/css :annotation-body)}
+ [:textarea {:ref textarea-ref
+ :id "annotation-textarea"
+ :class (stl/css :annotation-textarea)
+ :data-debug annotation
+ :auto-focus (or editing? creating?)
+ :max-length 300
+ :on-input adjust-textarea-size
+ :default-value annotation
+ :read-only (not (or creating? editing?))}]]
(when (or editing? creating?)
- [:div {:class (stl/css :counter)} (str size "/300")])]])))
+ [:div {:class (stl/css :annotation-counter)} (str size "/300")])]])))
(defn- get-variant-malformed-warning-message
"Receive a list of booleans, one for each selected variant, indicating if that variant
@@ -299,7 +299,47 @@
(mapv (fn [val] {:id val
:label (if (str/blank? val) (str "(" (tr "labels.empty") ")") val)}))))
-(mf/defc component-variant-main-instance*
+(mf/defc component-variant-property*
+ [{:keys [pos prop options on-prop-name-blur on-prop-value-change on-reorder]}]
+ (let [on-drop
+ (mf/use-fn
+ (fn [relative-pos data]
+ (let [from-pos (:from-pos data)
+ to-space-between-pos (if (= relative-pos :bot) (inc pos) pos)]
+ (on-reorder from-pos to-space-between-pos))))
+
+ [dprops dref]
+ (h/use-sortable
+ :data-type "penpot/variant-property"
+ :on-drop on-drop
+ :draggable? true
+ :data {:from-pos pos})]
+
+ [:div {:class (stl/css-case :variant-property true
+ :dnd-over-top (= (:over dprops) :top)
+ :dnd-over-bot (= (:over dprops) :bot))}
+ (when (some? on-reorder)
+ [:> reorder-handler* {:ref dref}])
+
+ [:div {:class (stl/css :variant-property-container)}
+ [:div {:class (stl/css :variant-property-name-wrapper)}
+ [:> input-with-meta* {:value (:name prop)
+ :is-editing (:editing? (meta prop))
+ :max-length ctv/property-max-length
+ :data-position pos
+ :on-blur on-prop-name-blur}]]
+
+ [:div {:class (stl/css :variant-property-value-wrapper)}
+ (let [mixed-value? (= (:value prop) false)]
+ [:> combobox* {:id (str "variant-prop-" pos)
+ :placeholder (if mixed-value? (tr "settings.multiple") "--")
+ :default-selected (if mixed-value? "" (:value prop))
+ :options options
+ :empty-to-end true
+ :max-length ctv/property-max-length
+ :on-change on-prop-value-change}])]]]))
+
+(mf/defc component-variant*
[{:keys [components shapes data]}]
(let [component (first components)
@@ -355,33 +395,28 @@
int)]
(when (seq value)
(st/emit!
- (dwv/update-property-name variant-id pos value {:trigger "workspace:design-tab-variant"}))))))]
+ (dwv/update-property-name variant-id pos value {:trigger "workspace:design-tab-variant"}))))))
+
+ reorder-properties
+ (mf/use-fn
+ (mf/deps variant-id)
+ (fn [from-pos to-space-between-pos]
+ (st/emit! (dwv/reorder-variant-poperties variant-id from-pos to-space-between-pos))))]
[:*
- [:div {:class (stl/css :variant-property-list)}
- (for [[pos prop] (map-indexed vector properties)]
- [:div {:key (str variant-id "-" pos)
- :class (stl/css :variant-property-container)}
-
- [:div {:class (stl/css :variant-property-name-wrapper)}
- [:> input-with-meta* {:value (:name prop)
- :is-editing (:editing? (meta prop))
- :max-length ctv/property-max-length
- :data-position pos
- :on-blur update-property-name}]]
-
- [:div {:class (stl/css :variant-property-value-wrapper)}
- (let [mixed-value? (= (:value prop) false)]
- [:> combobox* {:id (str "variant-prop-" variant-id "-" pos)
- :placeholder (if mixed-value? (tr "settings.multiple") "--")
- :default-selected (if mixed-value? "" (:value prop))
- :options (get-options (:name prop))
- :empty-to-end true
- :max-length ctv/property-max-length
- :on-change (partial update-property-value pos)}])]])]
+ [:> h/sortable-container* {}
+ [:div {:class (stl/css :variant-property-list)}
+ (for [[pos prop] (map-indexed vector properties)]
+ [:> component-variant-property* {:key (str variant-id "-" pos)
+ :pos pos
+ :prop prop
+ :options (get-options (:name prop))
+ :on-prop-name-blur update-property-name
+ :on-prop-value-change (partial update-property-value pos)
+ :on-reorder reorder-properties}])]]
(if malformed-msg
- [:div {:class (stl/css :variant-warning-wrapper)}
+ [:div {:class (stl/css :variant-warning)}
[:> icon* {:icon-id i/msg-neutral
:class (stl/css :variant-warning-darken)}]
[:div {:class (stl/css :variant-warning-highlight)}
@@ -390,22 +425,23 @@
(tr "workspace.options.component.variant.malformed.structure.example")]]
(when duplicated-msg
- [:div {:class (stl/css :variant-warning-wrapper)}
+ [:div {:class (stl/css :variant-warning)}
[:> icon* {:icon-id i/msg-neutral
:class (stl/css :variant-warning-darken)}]
[:div {:class (stl/css :variant-warning-highlight)}
(str duplicated-msg)]]))]))
(mf/defc component-variant-copy*
- [{:keys [component shape data current-file-id]}]
- (let [page-objects (mf/deref refs/workspace-page-objects)
- component-id (:id component)
- properties (:variant-properties component)
+ [{:keys [components shapes component-file-data current-file-id]}]
+ (let [component (first components)
+ shape (first shapes)
+ properties (map :variant-properties components)
+ props-first (:variant-properties component)
variant-id (:variant-id component)
- objects (-> (dsh/get-page data (:main-instance-page component))
- (get :objects))
- variant-comps (mf/with-memo [data objects variant-id]
- (cfv/find-variant-components data objects variant-id))
+ component-page-objects (-> (dsh/get-page component-file-data (:main-instance-page component))
+ (get :objects))
+ variant-comps (mf/with-memo [component-file-data component-page-objects variant-id]
+ (cfv/find-variant-components component-file-data component-page-objects variant-id))
duplicated-comps (mf/with-memo [variant-comps]
(->> variant-comps
@@ -414,11 +450,11 @@
malformed-comps (mf/with-memo [variant-comps]
(->> variant-comps
(filter #(->> (:main-instance-id %)
- (get objects)
+ (get component-page-objects)
:variant-error))))
- prop-vals (mf/with-memo [data objects variant-id]
- (cfv/extract-properties-values data objects variant-id))
+ prop-vals (mf/with-memo [component-file-data component-page-objects variant-id]
+ (cfv/extract-properties-values component-file-data component-page-objects variant-id))
get-options
(mf/use-fn
@@ -449,50 +485,48 @@
;; Used to force a remount after an error
key* (mf/use-state (uuid/next))
key (deref key*)
+ mixed-label (tr "settings.multiple")
switch-component
(mf/use-fn
- (mf/deps shape component component-id variant-comps)
+ (mf/deps shapes)
(fn [pos val]
- (when (not= val (dm/get-in component [:variant-properties pos :value]))
- (let [target-props (-> (:variant-properties component)
- (update pos assoc :value val))
- valid-comps (->> variant-comps
- (remove #(= (:id %) component-id))
- (filter #(= (dm/get-in % [:variant-properties pos :value]) val))
- (reverse))
- nearest-comp (apply min-key #(ctv/distance target-props (:variant-properties %)) valid-comps)
- parents (cfh/get-parents-with-self page-objects (:parent-id shape))
- children (cfh/get-children-with-self objects (:main-instance-id nearest-comp))
- comps-nesting-loop? (seq? (cfh/components-nesting-loop? children parents))]
+ (if (= val mixed-label)
+ (reset! key* (uuid/next))
+ (let [error-msg (if (> (count shapes) 1)
+ (tr "workspace.component.switch.loop-error-multi")
+ (tr "workspace.component.swap.loop-error"))
- (when nearest-comp
- (if comps-nesting-loop?
- (do
- (st/emit! (ntf/error (tr "workspace.component.swap.loop-error")))
- (reset! key* (uuid/next)))
- (st/emit! (dwl/component-swap shape (:component-file shape) (:id nearest-comp) true))))))))]
+ mdata {:on-error #(do
+ (reset! key* (uuid/next))
+ (st/emit! (ntf/error error-msg)))}
+ params {:shapes shapes :pos pos :val val}]
+ (st/emit! (dwv/variants-switch (with-meta params mdata)))))))]
[:*
[:div {:class (stl/css :variant-property-list)}
- (for [[pos prop] (map vector (range) properties)]
- [:div {:key (str (:id shape) pos)
- :class (stl/css :variant-property-container)}
+ (for [[pos prop] (map-indexed vector props-first)]
+ (let [mixed-value? (not-every? #(= (:value prop) (:value (nth % pos))) properties)
+ options (cond-> (get-options (:name prop))
+ mixed-value?
+ (conj {:id mixed-label, :label mixed-label :dimmed true}))]
+ [:div {:key (str pos mixed-value?)
+ :class (stl/css :variant-property-container)}
- [:div {:class (stl/css :variant-property-name-wrapper)
- :title (:name prop)}
- [:div {:class (stl/css :variant-property-name)}
- (:name prop)]]
+ [:div {:class (stl/css :variant-property-name-wrapper)
+ :title (:name prop)}
+ [:div {:class (stl/css :variant-property-name)}
+ (:name prop)]]
- [:div {:class (stl/css :variant-property-value-wrapper)}
- [:> select* {:default-selected (:value prop)
- :options (get-options (:name prop))
- :empty-to-end true
- :on-change (partial switch-component pos)
- :key (str (:value prop) "-" key)}]]])]
+ [:div {:class (stl/css :variant-property-value-wrapper)}
+ [:> select* {:default-selected (if mixed-value? mixed-label (:value prop))
+ :options options
+ :empty-to-end true
+ :on-change (partial switch-component pos)
+ :key (str (:value prop) "-" key)}]]]))]
(if (seq malformed-comps)
- [:div {:class (stl/css :variant-warning-wrapper)}
+ [:div {:class (stl/css :variant-warning)}
[:> icon* {:icon-id i/msg-neutral
:class (stl/css :variant-warning-darken)}]
[:div {:class (stl/css :variant-warning-highlight)}
@@ -502,7 +536,7 @@
(tr "workspace.options.component.variant.malformed.locate")]]
(when (seq duplicated-comps)
- [:div {:class (stl/css :variant-warning-wrapper)}
+ [:div {:class (stl/css :variant-warning)}
[:> icon* {:icon-id i/msg-neutral
:class (stl/css :variant-warning-darken)}]
[:div {:class (stl/css :variant-warning-highlight)}
@@ -523,50 +557,47 @@
item-ref (mf/use-ref)
visible? (h/use-visible item-ref :once? true)]
- [:div {:ref item-ref
- :class (stl/css-case :component-item (not listing-thumbs)
- :grid-cell listing-thumbs
- :selected (= (:id item) component-id)
- :disabled loop)
- :key (str "swap-item-" (:id item))
- :on-click on-select}
+ [:button {:ref item-ref
+ :key (str "swap-item-" (:id item))
+ :class (stl/css-case :swap-item-list (not listing-thumbs)
+ :swap-item-grid listing-thumbs
+ :selected (= (:id item) component-id))
+ :on-click on-select
+ :disabled loop}
(when visible?
- [:> cmm/component-item-thumbnail*
- {:file-id (:file-id item)
- :class (stl/css :component-img)
- :root-shape root-shape
- :component item
- :container container}])
+ [:> cmm/component-item-thumbnail* {:file-id (:file-id item)
+ :class (stl/css :swap-item-thumbnail)
+ :root-shape root-shape
+ :component item
+ :container container}])
[:span {:title (if is-search (:full-name item) (:name item))
- :class (stl/css-case :component-name true
- :selected (= (:id item) component-id))}
+ :class (stl/css :swap-item-name)}
(if is-search (:full-name item) (:name item))]
(when (ctk/is-variant? item)
- [:span {:class (stl/css-case :variant-mark-cell listing-thumbs
- :variant-icon true)
+ [:span {:class (stl/css :swap-item-variant-icon)
:title (tr "workspace.assets.components.num-variants" num-variants)}
[:> icon* {:icon-id i/variant
:size "s"}]])]))
-(mf/defc component-group-item*
+(mf/defc component-swap-group-title*
[{:keys [item on-enter-group]}]
- (let [group-name (:name item)
+ (let [group-name (:name item)
on-group-click #(on-enter-group group-name)]
- [:div {:class (stl/css :component-group)
+ [:div {:class (stl/css :swap-group)
:on-click on-group-click
:title group-name}
- [:span {:class (stl/css :component-group-name)}
- (cfh/last-path group-name)]
+ [:span {:class (stl/css :swap-group-name)}
+ (cpn/last-path group-name)]
- [:> icon* {:class (stl/css :component-group-icon)
+ [:> icon* {:class (stl/css :swap-group-icon)
:variant "ghost"
:icon-id i/arrow-right
:size "s"}]]))
(defn- find-common-path
([components]
- (let [paths (map (comp cfh/split-path :path) components)]
+ (let [paths (map (comp cpn/split-path :path) components)]
(find-common-path paths [] 0)))
([paths path n]
(let [current (nth (first paths) n nil)]
@@ -609,7 +640,7 @@
path (if single?
(:path (first components))
- (cfh/join-path (if (not every-same-file?)
+ (cpn/join-path (if (not every-same-file?)
""
(find-common-path components))))
@@ -621,7 +652,7 @@
filters (deref filters*)
- is-search? (not (str/blank? (:term filters)))
+ search? (not (str/blank? (:term filters)))
current-library-id (if (contains? libraries (:file-id filters))
(:file-id filters)
@@ -631,21 +662,25 @@
(str/upper (tr "workspace.assets.local-library"))
(dm/get-in libraries [current-library-id :name]))
- current-lib-data (get-in libraries [current-library-id :data])
+ current-lib-data (mf/with-memo [libraries]
+ (get-in libraries [current-library-id :data]))
+
+ current-lib-counts (mf/with-memo [current-lib-data]
+ (-> (group-by :variant-id
+ (ctkl/components-seq current-lib-data))
+ (update-vals count)))
components (->> (get-in libraries [current-library-id :data :components])
vals
(remove #(true? (:deleted %)))
(remove #(cfv/is-secondary-variant? % current-lib-data))
- (map #(assoc % :full-name (cfh/merge-path-item-with-dot (:path %) (:name %)))))
+ (map #(assoc % :full-name (cpn/merge-path-item-with-dot (:path %) (:name %)))))
count-variants (fn [component]
- (->> (ctkl/components-seq current-lib-data)
- (filterv #(= (:variant-id component) (:variant-id %)))
- count))
+ (get current-lib-counts (:variant-id component)))
get-subgroups (fn [path]
- (let [split-path (cfh/split-path path)]
+ (let [split-path (cpn/split-path path)]
(reduce (fn [acc dir]
(conj acc (str (last acc) " / " dir)))
[(first split-path)] (rest split-path))))
@@ -656,17 +691,17 @@
(remove str/empty?)
(remove nil?)
(distinct)
- (filter #(= (cfh/butlast-path %) (:path filters))))
+ (filter #(= (cpn/butlast-path %) (:path filters))))
- groups (when-not is-search?
+ groups (when-not search?
(->> (sort (sequence xform components))
(map (fn [name] {:name name}))))
- components (if is-search?
+ components (if search?
(filter #(str/includes? (str/lower (:full-name %)) (str/lower (:term filters))) components)
(filter #(= (:path %) (:path filters)) components))
- items (if (or is-search? (:listing-thumbs? filters))
+ items (if (or search? (:listing-thumbs? filters))
(sort-by :full-name components)
(->> (concat groups components)
(sort-by :name)))
@@ -682,7 +717,8 @@
;; Get the ids of the components that are parents of the shapes, to avoid loops
parent-components (mapcat find-parent-components shapes)
- libraries-options (map (fn [library] {:value (:id library) :label (:name library)})
+ libraries-options (map (fn [library] {:value (:id library)
+ :label (:name library)})
(vals libraries))
on-library-change
@@ -701,7 +737,7 @@
on-go-back
(mf/use-fn
(mf/deps (:path filters))
- #(swap! filters* assoc :path (cfh/butlast-path (:path filters))))
+ #(swap! filters* assoc :path (cpn/butlast-path (:path filters))))
on-enter-group
(mf/use-fn #(swap! filters* assoc :path %))
@@ -710,63 +746,61 @@
(mf/use-fn
(fn [style]
(swap! filters* assoc :listing-thumbs? (= style "grid"))))
- filter-path-with-dots (->> (:path filters) (cfh/split-path) (cfh/join-path-with-dot))]
- [:div {:class (stl/css :component-swap)}
- [:div {:class (stl/css :element-set-title)}
+ filter-path-with-dots (->> (:path filters)
+ (cpn/split-path)
+ (cpn/join-path-with-dot))]
+
+ [:div {:class (stl/css :swap)}
+ [:div {:class (stl/css :swap-title)}
[:span (tr "workspace.options.component.swap")]]
- [:div {:class (stl/css :component-swap-content)}
- [:div {:class (stl/css :fields-wrapper)}
- [:div {:class (stl/css :search-field)}
- [:> search-bar* {:on-change on-search-term-change
- :on-clear on-search-clear-click
- :class (stl/css :search-wrapper)
- :id "swap-component-search-filter"
- :value (:term filters)
- :placeholder (str (tr "labels.search") " " (get-in libraries [current-library-id :name]))
- :icon-id i/search}]]
-
- [:& select {:class (stl/css :select-library)
- :default-value current-library-id
+ [:div {:class (stl/css :swap-content)}
+ [:div {:class (stl/css :swap-filters)}
+ [:> search-bar* {:id "swap-component-search-filter"
+ :icon-id i/search
+ :value (:term filters)
+ :placeholder (str (tr "labels.search") " " (get-in libraries [current-library-id :name]))
+ :on-change on-search-term-change
+ :on-clear on-search-clear-click}]
+ [:& select {:default-value current-library-id
:options libraries-options
:on-change on-library-change}]]
- [:div {:class (stl/css :swap-wrapper)}
- [:div {:class (stl/css :library-name-wrapper)}
- [:div {:class (stl/css :library-name)} current-lib-name]
+ [:div {:class (stl/css :swap-library)}
+ [:div {:class (stl/css :swap-library-title)}
+ [:div {:class (stl/css :swap-library-name)} current-lib-name]
+ [:& radio-buttons {:selected (if (:listing-thumbs? filters) "grid" "list")
+ :on-change toggle-list-style
+ :name "swap-listing-style"}
+ [:& radio-button {:icon deprecated-icon/view-as-list
+ :value "list"
+ :id "swap-opt-list"}]
+ [:& radio-button {:icon deprecated-icon/flex-grid
+ :value "grid"
+ :id "swap-opt-grid"}]]]
- [:div {:class (stl/css :listing-options-wrapper)}
- [:& radio-buttons {:class (stl/css :listing-options)
- :selected (if (:listing-thumbs? filters) "grid" "list")
- :on-change toggle-list-style
- :name "swap-listing-style"}
- [:& radio-button {:icon deprecated-icon/view-as-list
- :value "list"
- :id "swap-opt-list"}]
- [:& radio-button {:icon deprecated-icon/flex-grid
- :value "grid"
- :id "swap-opt-grid"}]]]]
-
- (when-not (or is-search? (str/empty? (:path filters)))
- [:button {:class (stl/css :component-path)
+ (when-not (or search? (str/empty? (:path filters)))
+ [:button {:class (stl/css :swap-library-back)
:on-click on-go-back
:title filter-path-with-dots}
[:> icon* {:icon-id i/arrow-left
:size "s"}]
- [:span {:class (stl/css :path-name)}
+ [:span {:class (stl/css :swap-library-back-name)}
filter-path-with-dots]])
(when (empty? items)
- [:div {:class (stl/css :component-list-empty)}
+ [:div {:class (stl/css :swap-library-empty)}
(tr "workspace.options.component.swap.empty")]) ;;TODO review this empty space
(when (:listing-thumbs? filters)
- [:div {:class (stl/css :component-list)}
+ [:div
(for [item groups]
- [:> component-group-item* {:item item :on-enter-group on-enter-group}])])
+ [:> component-swap-group-title* {:item item
+ :on-enter-group on-enter-group}])])
- [:div {:class (stl/css-case :component-grid (:listing-thumbs? filters)
- :component-list (not (:listing-thumbs? filters)))}
+ [:div {:class (stl/css-case :swap-library-grid (:listing-thumbs? filters)
+ :swap-library-list (not (:listing-thumbs? filters)))}
+ ;; FIXME: This could be in the thousands. We need to think about paginate this
(for [item items]
(if (:id item)
(let [data (dm/get-in libraries [current-library-id :data])
@@ -784,34 +818,78 @@
:root-shape root-shape
:container container
:component-id component-id
- :is-search is-search?
+ :is-search search?
:listing-thumbs (:listing-thumbs? filters)
:num-variants (count-variants item)}])
- [:> component-group-item* {:item item
- :key (:name item)
- :on-enter-group on-enter-group}]))]]]]))
+ [:> component-swap-group-title* {:item item
+ :key (:name item)
+ :on-enter-group on-enter-group}]))]]]]))
-(mf/defc component-ctx-menu*
- [{:keys [menu-entries on-close show main-instance]}]
- (let [do-action
+(mf/defc component-pill*
+ [{:keys [icon text subtext menu-entries disabled on-click]}]
+ (let [menu-open* (mf/use-state false)
+ menu-open? (deref menu-open*)
+
+ menu-entries? (seq menu-entries)
+
+ on-menu-click
+ (mf/use-fn
+ (mf/deps menu-open* menu-open?)
+ (fn [event]
+ (dom/prevent-default event)
+ (dom/stop-propagation event)
+ (reset! menu-open* (not menu-open?))))
+
+ on-menu-close
+ (mf/use-fn
+ (mf/deps menu-open*)
+ #(reset! menu-open* false))
+
+ do-action
(fn [action event]
(dom/stop-propagation event)
(action)
- (on-close))]
- [:& dropdown {:show show :on-close on-close}
- [:ul {:class (stl/css-case :custom-select-dropdown true
- :not-main (not main-instance))}
- (for [{:keys [title action]} menu-entries]
- (when (some? title)
- [:li {:key title
- :class (stl/css :dropdown-element)
- :on-click (partial do-action action)}
- [:span {:class (stl/css :dropdown-label)} title]]))]]))
+ (on-menu-close))]
-(mf/defc component-menu
- {::mf/props :obj}
- [{:keys [shapes swap-opened?]}]
+ [:div {:class (stl/css :pill)}
+ [:button {:class (stl/css-case :pill-btn true
+ :with-menu menu-entries?)
+ :data-testid "component-pill-button"
+ :on-click on-click
+ :disabled disabled}
+
+ [:div {:class (stl/css :pill-btn-icon)}
+ [:> icon* {:size "s"
+ :icon-id icon}]]
+
+ [:div {:class (stl/css :pill-btn-name)}
+ [:div {:class (stl/css :pill-btn-text)}
+ text]
+ (when subtext
+ [:div {:class (stl/css :pill-btn-subtext)}
+ subtext])]]
+
+ (when menu-entries?
+ [:div {:class (stl/css :pill-actions)}
+ [:button {:class (stl/css-case :pill-actions-btn true
+ :selected menu-open?)
+ :on-click on-menu-click}
+ [:> icon* {:icon-id i/menu}]]
+
+ [:& dropdown {:show menu-open?
+ :on-close on-menu-close}
+ [:ul {:class (stl/css-case :pill-actions-dropdown true
+ :extended subtext)}
+ (for [{:keys [title action]} menu-entries]
+ (when (some? title)
+ [:li {:key title
+ :class (stl/css :pill-actions-dropdown-item)
+ :on-click (partial do-action action)}
+ [:span title]]))]]])]))
+
+(mf/defc component-menu*
+ [{:keys [shapes is-swap-opened]}]
(let [current-file-id (mf/use-ctx ctx/current-file-id)
libraries (mf/deref refs/files)
@@ -822,7 +900,6 @@
:menu-open false}))
state (deref state*)
open? (:show-content state)
- menu-open? (:menu-open state)
shapes (filter ctk/instance-head? shapes)
multi (> (count shapes) 1)
@@ -832,39 +909,26 @@
all-main? (every? ctk/main-instance? shapes)
any-variant? (some ctk/is-variant? shapes)
- ;; For when it's only one shape
- shape (first shapes)
- id (:id shape)
- shape-name (:name shape)
-
- component (ctf/resolve-component shape
- current-file
- libraries
- {:include-deleted? true})
- data (dm/get-in libraries [(:component-file shape) :data])
- is-variant? (ctk/is-variant? component)
-
- main-instance? (ctk/main-instance? shape)
-
components (mapv #(ctf/resolve-component %
current-file
libraries
{:include-deleted? true}) shapes)
same-variant? (ctv/same-variant? components)
+ ;; For when it's only one shape
+ shape (first shapes)
+ id (:id shape)
+ shape-name (:name shape)
+
+ component (first components)
+ data (dm/get-in libraries [(:component-file shape) :data])
+ is-variant? (ctk/is-variant? component)
+
+ main-instance? (ctk/main-instance? shape)
+
toggle-content
- (mf/use-fn #(swap! state* update :show-content not))
-
- on-menu-click
(mf/use-fn
- (fn [event]
- (dom/prevent-default event)
- (dom/stop-propagation event)
- (swap! state* update :menu-open not)))
-
- on-menu-close
- (mf/use-fn
- #(swap! state* assoc :menu-open false))
+ #(swap! state* update :show-content not))
on-click-variant-title-help
(mf/use-fn
@@ -921,14 +985,13 @@
(swap! state* update :render inc)))
menu-entries (cmm/generate-components-menu-entries shapes {:for-design-tab? true})
- show-menu? (seq menu-entries)
- path (->> component (:path) (cfh/split-path) (cfh/join-path-with-dot))]
+ path (->> component (:path) (cpn/split-path) (cpn/join-path-with-dot))]
(when (seq shapes)
- [:div {:class (stl/css :element-set)}
- [:div {:class (stl/css :element-title)}
- (if swap-opened?
- [:button {:class (stl/css :title-back)
+ [:div {:class (stl/css :component-section)}
+ [:div {:class (stl/css :component-title)}
+ (if is-swap-opened
+ [:button {:class (stl/css :component-title-swap)
:on-click on-component-back}
[:> icon* {:icon-id i/arrow-left
:size "s"}]
@@ -939,9 +1002,9 @@
:collapsed (not open?)
:on-collapsed toggle-content
:title (tr "workspace.options.component")
- :class (stl/css :title-spacing-component)
- :title-class (stl/css :title-bar-variant)}
- [:span {:class (stl/css :copy-text)}
+ :class (stl/css :component-title-bar)
+ :title-class (stl/css :component-title-bar-title)}
+ [:span {:class (stl/css :component-title-bar-type)}
(if main-instance?
(if is-variant?
(tr "labels.variant")
@@ -961,82 +1024,56 @@
:icon i/variant}])])]
(when open?
- [:div {:class (stl/css :element-content)}
- [:div {:class (stl/css :component-line)}
-
- [:div {:class (stl/css :component-wrapper)}
-
- [:button {:class (stl/css-case :component-name-wrapper true
- :without-menu (not show-menu?))
- :data-testid "swap-component-btn"
- :on-click open-component-panel
- :disabled (or swap-opened? (not can-swap?))}
-
- [:div {:class (stl/css :component-icon)}
- [:> icon* {:size "s"
- :icon-id (if main-instance?
- (if is-variant? i/variant i/component)
- i/component-copy)}]]
-
- [:div {:class (stl/css :component-name-outside)}
- [:div {:class (stl/css :component-name)}
- [:span {:class (stl/css :component-name-inside)}
- (if (and multi (not same-variant?))
- (tr "settings.multiple")
- (cfh/last-path shape-name))]]
-
- (when (and can-swap? (not multi))
- [:div {:class (stl/css :component-parent-name)}
- (if (:deleted component)
- (tr "workspace.options.component.unlinked")
- (cfh/merge-path-item-with-dot path (:name component)))])]]
-
- (when show-menu?
- [:div {:class (stl/css :component-actions)}
- [:button {:class (stl/css-case :component-menu-btn true
- :selected menu-open?)
- :on-click on-menu-click}
- [:> icon* {:icon-id i/menu}]]
-
- [:> component-ctx-menu* {:show menu-open?
- :on-close on-menu-close
- :menu-entries menu-entries
- :main-instance main-instance?}]])]
-
+ [:div {:class (stl/css :component-content)}
+ [:div {:class (stl/css :component-pill)}
+ [:> component-pill* {:icon (if main-instance?
+ (if is-variant? i/variant i/component)
+ i/component-copy)
+ :text (if (and multi (not same-variant?))
+ (tr "settings.multiple")
+ (cpn/last-path shape-name))
+ :subtext (when (and can-swap? (or (not multi) same-variant?))
+ (if (:deleted component)
+ (tr "workspace.options.component.unlinked")
+ (cpn/merge-path-item-with-dot path (:name component))))
+ :on-click open-component-panel
+ :disabled (or is-swap-opened (not can-swap?))
+ :menu-entries menu-entries}]
(when (and is-variant? main-instance?)
[:> icon-button* {:variant "ghost"
:aria-label (tr "workspace.shape.menu.add-variant-property")
:on-click add-new-property
:icon i/add}])]
- (when swap-opened?
+ (when is-swap-opened
[:> component-swap* {:shapes copies}])
(when (and is-variant?
(not main-instance?)
(not (:deleted component))
- (not swap-opened?)
- (not multi))
+ (not is-swap-opened)
+ (or (not multi) same-variant?))
[:> component-variant-copy* {:current-file-id current-file-id
- :component component
- :shape shape
- :data data}])
+ :components components
+ :shapes shapes
+ :component-file-data data}])
- (when (and is-variant? main-instance? same-variant? (not swap-opened?))
- [:> component-variant-main-instance* {:components components
- :shapes shapes
- :data data}])
+ (when (and is-variant? main-instance? same-variant? (not is-swap-opened))
+ [:> component-variant* {:components components
+ :shapes shapes
+ :data data}])
- (when (and (not swap-opened?) (not multi))
+ (when (and (not is-swap-opened) (not multi))
[:> component-annotation* {:id id
:shape shape
:component component
:rerender-fn rerender-fn}])
(when (and multi all-main? (not any-variant?))
- [:button {:class (stl/css :combine-variant-button)
- :on-click on-combine-as-variants}
- [:span (tr "workspace.shape.menu.combine-as-variants")]])
+ [:> button* {:variant "secondary"
+ :class (stl/css :component-combine)
+ :on-click on-combine-as-variants}
+ (tr "workspace.shape.menu.combine-as-variants")])
(when (dbg/enabled? :display-touched)
[:div ":touched " (str (:touched shape))])])])))
@@ -1048,7 +1085,50 @@
(into (remove empty?) v)
(into (filter empty?) v)))
-(mf/defc variant-menu*
+(mf/defc component-variant-main-property*
+ [{:keys [pos property is-remove-disabled on-remove on-blur on-reorder]}]
+ (let [values (->> (:value property)
+ (move-empty-items-to-end)
+ (replace {"" "--"})
+ (str/join ", "))
+
+ on-drop
+ (mf/use-fn
+ (fn [relative-pos data]
+ (let [from-pos (:from-pos data)
+ to-space-between-pos (if (= relative-pos :bot) (inc pos) pos)]
+ (on-reorder from-pos to-space-between-pos))))
+
+ [dprops dref]
+ (h/use-sortable
+ :data-type "penpot/variant-main-property"
+ :on-drop on-drop
+ :draggable? true
+ :data {:from-pos pos})]
+
+ [:div {:class (stl/css-case :variant-property true
+ :dnd-over-top (= (:over dprops) :top)
+ :dnd-over-bot (= (:over dprops) :bot))}
+ (when (some? on-reorder)
+ [:> reorder-handler* {:ref dref}])
+
+ [:div {:class (stl/css :variant-property-row)}
+ [:> input-with-meta* {:value (:name property)
+ :data-position pos
+ :meta values
+ :is-editing (:editing? (meta property))
+ :max-length ctv/property-max-length
+ :on-blur on-blur}]
+ [:> icon-button* {:variant "ghost"
+ :icon i/remove
+ :data-position pos
+ :aria-label (if is-remove-disabled
+ (tr "workspace.shape.menu.remove-variant-property.last-property")
+ (tr "workspace.shape.menu.remove-variant-property"))
+ :on-click on-remove
+ :disabled is-remove-disabled}]]]))
+
+(mf/defc component-variant-main*
[{:keys [shapes]}]
(let [multi? (> (count shapes) 1)
@@ -1078,13 +1158,11 @@
properties (mf/with-memo [data objects variant-id]
(cfv/extract-properties-values data objects (:id shape)))
+ single-property? (= (count properties) 1)
open* (mf/use-state true)
open? (deref open*)
- menu-open* (mf/use-state false)
- menu-open? (deref menu-open*)
-
show-in-assets-panel
(mf/use-fn
(mf/deps variants)
@@ -1117,19 +1195,6 @@
(mf/use-fn
#(swap! open* not))
- on-menu-click
- (mf/use-fn
- (mf/deps menu-open* menu-open?)
- (fn [event]
- (dom/prevent-default event)
- (dom/stop-propagation event)
- (reset! menu-open* (not menu-open?))))
-
- on-menu-close
- (mf/use-fn
- (mf/deps menu-open*)
- #(reset! menu-open* false))
-
on-click-variant-title-help
(mf/use-fn
(fn []
@@ -1160,6 +1225,12 @@
(ev/event {::ev/name "variant-remove-property" ::ev/origin "workspace:button-design-tab"})
(dwv/remove-property variant-id pos))))))
+ reorder-properties
+ (mf/use-fn
+ (mf/deps variant-id)
+ (fn [from-pos to-space-between-pos]
+ (st/emit! (dwv/reorder-variant-poperties variant-id from-pos to-space-between-pos))))
+
select-shapes-with-malformed
(mf/use-fn
(mf/deps malformed-ids)
@@ -1171,95 +1242,56 @@
#(st/emit! (dw/select-shapes (into (d/ordered-set) duplicated-ids))))]
(when (seq shapes)
- [:div {:class (stl/css :element-set)}
- [:div {:class (stl/css :element-title)}
+ [:div {:class (stl/css :component-section)}
+ [:div {:class (stl/css :component-title)}
[:*
[:> title-bar* {:collapsable true
:collapsed (not open?)
:on-collapsed toggle-content
:title (tr "workspace.options.component")
- :class (stl/css :title-spacing-component)
- :title-class (stl/css :title-bar-variant)}
- [:span {:class (stl/css :copy-text)}
+ :class (stl/css :component-title-bar)
+ :title-class (stl/css :component-title-bar-title)}
+ [:span {:class (stl/css :component-title-bar-type)}
(tr "workspace.options.component.main")]]
- [:div {:class (stl/css :title-actions)}
- [:> icon-button* {:variant "ghost"
- :aria-label (tr "workspace.options.component.variants-help-modal.title")
- :on-click on-click-variant-title-help
- :icon i/help}]
- [:> icon-button* {:variant "ghost"
- :aria-label (tr "workspace.shape.menu.add-variant")
- :on-click (partial create-variant "workspace:button-design-tab-component")
- :icon i/variant}]]]]
+ [:> icon-button* {:variant "ghost"
+ :aria-label (tr "workspace.options.component.variants-help-modal.title")
+ :on-click on-click-variant-title-help
+ :icon i/help}]
+ [:> icon-button* {:variant "ghost"
+ :aria-label (tr "workspace.shape.menu.add-variant")
+ :on-click (partial create-variant "workspace:button-design-tab-component")
+ :icon i/variant}]]]
(when open?
- [:div {:class (stl/css :element-content)}
- [:div {:class (stl/css :component-line)}
-
- [:div {:class (stl/css :component-wrapper)}
-
- [:button {:class (stl/css :component-name-wrapper)
- :disabled true}
-
- [:div {:class (stl/css :component-icon)}
- [:> icon* {:size "s"
- :icon-id i/component}]]
-
- [:div {:class (stl/css :component-name-outside)}
- [:div {:class (stl/css :component-name)}
- [:span {:class (stl/css :component-name-inside)}
- (if multi?
- (tr "settings.multiple")
- (cfh/last-path shape-name))]]]]
-
- (when-not multi?
- [:div {:class (stl/css :component-actions)}
-
- [:button {:class (stl/css-case :component-menu-btn true
- :selected menu-open?)
- :on-click on-menu-click}
- [:> icon* {:icon-id i/menu}]]
-
- [:> component-ctx-menu* {:show menu-open?
- :on-close on-menu-close
- :menu-entries menu-entries
- :main-instance true}]])]
-
+ [:div {:class (stl/css :component-content)}
+ [:div {:class (stl/css :component-pill)}
+ [:> component-pill* {:icon i/component
+ :text (if multi?
+ (tr "settings.multiple")
+ (cpn/last-path shape-name))
+ :disabled true
+ :menu-entries menu-entries}]
[:> icon-button* {:variant "ghost"
:aria-label (tr "workspace.shape.menu.add-variant-property")
:on-click (partial add-new-property "workspace:button-design-tab-component")
:icon i/add}]]
(when-not multi?
- [:div {:class (stl/css :variant-property-list)}
- (for [[pos property] (map-indexed vector properties)]
- (let [last-prop? (<= (count properties) 1)
- values (->> (:value property)
- (move-empty-items-to-end)
- (replace {"" "--"})
- (str/join ", "))
- is-editing (:editing? (meta property))]
- [:div {:key (str (:id shape) pos)
- :class (stl/css :variant-property-row)}
- [:> input-with-meta* {:value (:name property)
- :meta values
- :is-editing is-editing
- :max-length ctv/property-max-length
- :data-position pos
- :on-blur update-property-name}]
- [:> icon-button* {:variant "ghost"
- :aria-label (if last-prop?
- (tr "workspace.shape.menu.remove-variant-property.last-property")
- (tr "workspace.shape.menu.remove-variant-property"))
- :on-click remove-property
- :data-position pos
- :icon i/remove
- :disabled last-prop?}]]))])
+ [:> h/sortable-container* {}
+ [:div {:class (stl/css :variant-property-list)}
+ (for [[pos property] (map-indexed vector properties)]
+ [:> component-variant-main-property* {:key (str (:id shape) pos)
+ :pos pos
+ :property property
+ :is-remove-disabled single-property?
+ :on-remove remove-property
+ :on-blur update-property-name
+ :on-reorder reorder-properties}])]])
(if malformed?
- [:div {:class (stl/css :variant-warning-wrapper)}
+ [:div {:class (stl/css :variant-warning)}
[:> icon* {:icon-id i/msg-neutral
:class (stl/css :variant-warning-darken)}]
[:div {:class (stl/css :variant-warning-highlight)}
@@ -1269,7 +1301,7 @@
(tr "workspace.options.component.variant.malformed.group.locate")]]
(when duplicated?
- [:div {:class (stl/css :variant-warning-wrapper)}
+ [:div {:class (stl/css :variant-warning)}
[:> icon* {:icon-id i/msg-neutral
:class (stl/css :variant-warning-darken)}]
[:div {:class (stl/css :variant-warning-highlight)}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/component.scss b/frontend/src/app/main/ui/workspace/sidebar/options/menus/component.scss
index f0265b807a..35a499746a 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/component.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/component.scss
@@ -4,152 +4,595 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../../../ds/typography.scss" as t;
-@import "refactor/common-refactor.scss";
+@use "ds/_borders.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/_utils.scss" as *;
+@use "ds/spacing.scss" as *;
+@use "ds/typography.scss" as t;
-.element-set {
- margin: 0;
- display: grid;
- grid-template-columns: repeat(8, var(--sp-xxxl));
- column-gap: var(--sp-xs);
-}
+@use "refactor/common-refactor.scss" as deprecated;
-.element-content {
- @include flexColumn;
- display: grid;
- grid-template-columns: repeat(8, var(--sp-xxxl));
- row-gap: var(--sp-m);
- padding-top: $s-4;
- padding-bottom: $s-8;
-}
-
-.element-title {
+.annotation {
+ @include t.use-typography("body-small");
grid-column: span 8;
- column-gap: var(--sp-xs);
- display: flex;
-}
-
-.title-back {
- @include uppercaseTitleTipography;
- display: flex;
- align-items: center;
- gap: $s-4;
- width: 100%;
- height: $s-32;
- padding: 0;
- border: 0;
+ color: var(--color-foreground-secondary);
border-radius: $br-8;
- background-color: var(--title-background-color);
- color: var(--title-foreground-color);
- cursor: pointer;
-}
-.title-spacing-component {
- justify-content: flex-start;
- gap: $s-8;
- flex-grow: 1;
-}
+ &.editing {
+ border: $b-1 solid var(--color-accent-primary);
-.title-bar-variant {
- flex-grow: 0;
-}
+ .annotation-title {
+ border-bottom: $b-1 solid var(--entry-border-color-disabled);
+ }
-.title-actions {
- display: flex;
- gap: var(--sp-xs);
-}
+ .annotation-title-icon-action {
+ display: flex;
+ }
-.component-line {
- grid-column: span 8;
- width: 100%;
- min-height: $s-32;
- border-radius: $br-8;
- display: flex;
- gap: var(--sp-xs);
-}
+ .annotation-title-name {
+ margin-inline-start: var(--sp-m);
+ }
-.component-wrapper {
- display: flex;
- flex-grow: 1;
- gap: $s-1;
-}
-
-.component-name-wrapper {
- @include buttonStyle;
- cursor: default;
- flex-grow: 1;
- display: grid;
- grid-template-columns: $s-16 1fr;
- gap: $s-4;
- padding: 0 $s-8;
- border-radius: $br-8 0 0 $br-8;
- background-color: var(--assets-item-background-color);
- color: var(--assets-item-name-foreground-color-hover);
-
- &.without-menu {
- width: 100%;
- border-radius: $br-8;
+ .annotation-textarea {
+ min-block-size: $sz-252;
+ }
}
- &:focus {
- outline: $s-1 solid var(--color-accent-primary);
+ &.creating {
+ border: $b-1 solid var(--color-accent-primary);
+
+ .annotation-title .annotation-title-icon-action {
+ display: flex;
+ }
+
+ .annotation-title-name {
+ margin-inline-start: var(--sp-m);
+ }
+
+ .annotation-textarea {
+ min-block-size: $sz-252;
+ }
+ }
+}
+
+.annotation-title {
+ display: flex;
+ align-items: center;
+ block-size: $sz-32;
+
+ &.expanded {
+ border-bottom: $b-1 solid var(--color-background-quaternary);
+ }
+
+ &.expandeable {
+ cursor: pointer;
+ }
+
+ &:hover {
+ .annotation-title-icon-action {
+ display: flex;
+ }
+ }
+}
+
+.annotation-title-name {
+ flex-grow: 1;
+}
+
+.annotation-title-icon-arrow {
+ margin: 0 var(--sp-xs);
+}
+
+.annotation-title-actions {
+ display: flex;
+ align-items: center;
+ line-height: 2.5;
+}
+
+.annotation-title-icon-action {
+ cursor: pointer;
+ display: none;
+ justify-content: center;
+ align-items: center;
+ inline-size: $sz-28;
+ block-size: $sz-32;
+ border-radius: $br-8;
+ margin: 0;
+ padding: 0;
+}
+
+.annotation-title-icon-ok:hover {
+ color: var(--color-accent-success);
+
+ &.disabled {
+ cursor: default;
+ color: var(--color-foreground-secondary);
+ }
+}
+
+.annotation-title-icon-nok:hover {
+ color: var(--color-accent-error);
+}
+
+.annotation-body-hidden {
+ display: none;
+}
+
+// Auto growing text
+.annotation-body {
+ // easy way to plop the elements on top of each other and have them both sized based on the tallest one's height
+ display: grid;
+
+ &:after {
+ // The space is needed to preventy jumpy behavior
+ content: attr(data-replicated-value) " ";
+ white-space: pre-wrap;
+ visibility: hidden;
+
+ /* Identical styling required!! */
+ font: inherit;
+ overflow-wrap: anywhere;
+
+ padding: var(--sp-m);
+
+ /* Place on top of each other */
+ grid-area: 1 / 1 / 2 / 2;
+ }
+}
+
+.annotation-textarea {
+ background-color: var(--color-background-primary);
+ color: var(--color-foreground-primary);
+ padding: var(--sp-m);
+
+ border: none;
+ overflow: hidden;
+ outline: none;
+
+ box-shadow: none;
+
+ resize: none;
+
+ /* Identical styling required!! */
+ font: inherit;
+ overflow-wrap: anywhere;
+
+ padding: var(--sp-m);
+
+ /* Place on top of each other */
+ grid-area: 1 / 1 / 2 / 2;
+}
+
+.annotation-counter {
+ @include t.use-typography("body-small");
+ text-align: right;
+ color: var(--color-foreground-secondary);
+ margin: 0 var(--sp-s) var(--sp-s) 0;
+}
+
+.swap-item-list {
+ --swap-item-foreground-color: var(--color-foreground-primary);
+ --swap-item-foreground-color-hover: var(--color-foreground-primary);
+ --swap-item-foreground-color-disabled: var(--color-foreground-disabled);
+ --swap-item-background-color: var(--color-background-tertiary);
+ --swap-item-background-color-hover: var(--color-background-quaternary);
+ --swap-item-border-color: transparent;
+ --swap-item-border-color-selected: var(--color-accent-primary);
+ --swap-item-thumbnail-background-color: var(--color-canvas);
+
+ @include t.use-typography("body-small");
+ display: flex;
+ align-items: center;
+ padding: px2rem(1) var(--sp-m) px2rem(1) px2rem(1);
+ gap: var(--sp-s);
+ block-size: calc($sz-32 + $sz-12);
+ border-radius: $br-8;
+ background-color: var(--swap-item-background-color);
+ color: var(--swap-item-foreground-color);
+ border: $b-1 solid var(--swap-item-border-color);
+
+ .swap-item-thumbnail {
+ flex: 0 0 $sz-40;
+ background-color: var(--swap-item-thumbnail-background-color);
+ border-radius: $br-6;
+ block-size: $sz-40;
+ inline-size: $sz-40;
+ padding: var(--sp-xxs);
+ }
+
+ .swap-item-name {
+ flex: 1;
+ text-align: left;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+
+ .swap-item-variant-icon {
+ flex: 0 0 $sz-16;
+ background-color: none;
+ }
+
+ &.selected {
+ --swap-item-border-color: var(--swap-item-border-color-selected);
}
&:hover:not(:disabled) {
- background-color: var(--assets-item-background-color-hover);
- color: var(--assets-item-name-foreground-color-hover);
+ --swap-item-foreground-color: var(--swap-item-foreground-color-hover);
+ --swap-item-background-color: var(--swap-item-background-color-hover);
+ }
+
+ &:disabled {
+ --swap-item-foreground-color: var(--swap-item-foreground-color-disabled);
}
}
-.component-icon {
+.swap-item-grid {
+ --swap-item-foreground-color: var(--color-foreground-primary);
+ --swap-item-foreground-color-hover: var(--color-foreground-primary);
+ --swap-item-background-color: var(--color-background-primary);
+ --swap-item-border-color: var(--color-accent-primary);
+ --swap-item-border-inner-color-selected: var(--color-background-primary);
+ --swap-item-thumbnail-background-color: var(--color-canvas);
+ --swap-item-thumbnail-background-color-disabled: var(--color-foreground-secondary);
+
display: flex;
- height: $s-32;
+ justify-content: center;
align-items: center;
- color: var(--icon-foreground);
+ place-items: center;
+ aspect-ratio: 1 / 1;
+ flex-wrap: wrap;
+ position: relative;
+ padding: var(--sp-s);
+ border: none;
+ border-radius: $br-8;
+ background-color: var(--swap-item-thumbnail-background-color);
+ overflow: hidden;
+
+ .swap-item-thumbnail {
+ block-size: 100%;
+ inline-size: 100%;
+ object-fit: contain;
+ }
+
+ .swap-item-name {
+ @include t.use-typography("body-small");
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ text-align: left;
+ display: none;
+ position: absolute;
+ inset-inline-start: var(--sp-xs);
+ inset-block-end: var(--sp-xs);
+ block-size: var(--sp-xxl);
+ inline-size: calc(100% - var(--sp-s));
+ padding: var(--sp-xs);
+ column-gap: var(--sp-xs);
+ border-radius: $br-4;
+ border: $b-1 solid transparent;
+ background-color: var(--swap-item-background-color);
+ color: var(--swap-item-foreground-color);
+ direction: rtl;
+ }
+
+ .swap-item-variant-icon {
+ position: absolute;
+ inset-inline-end: var(--sp-xxs);
+ inset-block-start: var(--sp-xxs);
+ background-color: var(--color-background-tertiary);
+ }
+
+ &:hover {
+ .swap-item-name {
+ display: block;
+ }
+ }
+
+ &.selected {
+ border: $b-2 solid var(--swap-item-border-color);
+
+ &::before {
+ content: " ";
+ position: absolute;
+ inset-inline-start: 0;
+ inset-inline-end: 0;
+ inset-block-start: 0;
+ inset-block-end: 0;
+ border: calc($b-2 * 2) solid var(--swap-item-border-inner-color-selected);
+ border-radius: $br-8;
+ }
+
+ .swap-item-name {
+ color: var(--swap-item-foreground-color-hover);
+ }
+ }
+
+ &:disabled {
+ background: var(--swap-item-thumbnail-background-color-disabled);
+
+ .swap-item-name {
+ background: linear-gradient(
+ to top,
+ var(--swap-item-thumbnail-background-color-disabled) 0%,
+ transparent 100%
+ );
+ color: var(--swap-item-foreground-color-hover);
+ }
+ }
}
-.component-name-outside {
- @include flexColumn;
- min-height: $s-32;
- padding: $s-8 0 $s-8 $s-2;
+.swap-item-variant-icon {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ block-size: $sz-24;
+ inline-size: $sz-24;
+ color: var(--color-accent-secondary);
+ border-radius: $br-8;
+}
+
+.swap-group {
+ @include t.use-typography("body-small");
+ cursor: pointer;
+ display: grid;
+ grid-template-columns: 1fr var(--sp-m);
+ block-size: $sz-32;
+ align-items: center;
+
+ &:hover {
+ .swap-group-icon {
+ color: var(--color-foreground-primary);
+ }
+ }
+}
+
+.swap-group-name {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ color: var(--color-foreground-primary);
+}
+
+.swap-group-icon {
+ color: var(--color-foreground-secondary);
+}
+
+.swap {
+ padding-block-start: var(--sp-m);
+ grid-column: span 8;
+}
+
+.swap-title {
+ @include t.use-typography("headline-small");
+ display: flex;
+ align-items: center;
+ block-size: $sz-32;
+ padding-inline-start: var(--sp-xxs);
+ color: var(--color-foreground-secondary);
+}
+
+.swap-content {
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-l);
+}
+
+.swap-filters {
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-xs);
+}
+
+.swap-library {
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-xs);
+}
+
+.swap-library-title {
+ display: grid;
+ grid-template-columns: 1fr auto;
+}
+
+.swap-library-name {
+ @include t.use-typography("body-small");
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ color: var(--color-foreground-secondary);
+ padding: var(--sp-s) 0 var(--sp-s) var(--sp-xxs);
+}
+
+.swap-library-back {
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ gap: var(--sp-xs);
+ inline-size: 100%;
+ block-size: $sz-32;
+ padding: 0;
+ border: 0;
+ background-color: var(--color-background-primary);
+ color: var(--color-foreground-secondary);
+}
+
+.swap-library-back-name {
+ @include t.use-typography("body-small");
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ direction: rtl;
+ block-size: $sz-32;
+ padding: var(--sp-s) 0 var(--sp-s) var(--sp-xxs);
+}
+
+.swap-library-empty {
+ @include t.use-typography("body-small");
+ margin: 0 var(--sp-xs) 0 var(--sp-s);
+ color: var(--color-foreground-secondary);
+}
+
+.swap-library-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(calc($sz-48 * 2), 1fr));
+ gap: var(--sp-xs);
+}
+
+.swap-library-list {
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-xs);
+}
+
+.component-section {
+ display: grid;
+ grid-template-columns: repeat(8, var(--sp-xxxl));
+ column-gap: var(--sp-xs);
+}
+
+.component-title {
+ grid-column: span 8;
+ column-gap: var(--sp-xs);
+ display: flex;
+}
+
+.component-title-swap {
+ @include t.use-typography("headline-small");
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ gap: var(--sp-xs);
+ inline-size: 100%;
+ block-size: $sz-32;
+ padding: 0;
+ border: 0;
+ border-radius: $br-8;
+ background-color: var(--color-background-primary);
+ color: var(--color-foreground-secondary);
+}
+
+.component-title-bar {
+ justify-content: flex-start;
+ gap: var(--sp-s);
+ flex-grow: 1;
+}
+
+.component-title-bar-title {
+ flex-grow: 0;
+}
+
+.component-title-bar-type {
+ @include t.use-typography("body-small");
+ block-size: 100%;
+ display: flex;
+ align-items: center;
+ color: var(--color-foreground-secondary);
+}
+
+.component-title-actions {
+ display: flex;
+ gap: var(--sp-xs);
+}
+
+.component-content {
+ grid-column: span 8;
+ display: flex;
+ flex-direction: column;
+ row-gap: var(--sp-m);
+ padding-block-start: var(--sp-xs);
+ padding-block-end: var(--sp-s);
+}
+
+.component-pill {
+ border-radius: $br-8;
+ display: flex;
+ gap: var(--sp-xs);
+}
+
+.component-combine {
+ justify-content: center;
+}
+
+.pill {
+ display: flex;
+ flex-grow: 1;
+ gap: px2rem(1);
+}
+
+.pill-btn {
+ flex-grow: 1;
+ display: grid;
+ grid-template-columns: var(--sp-l) 1fr;
+ gap: var(--sp-xs);
+ padding: 0 var(--sp-m) 0 var(--sp-s);
+ border: none;
+ border-radius: $br-8;
+ background-color: var(--color-background-tertiary);
+ color: var(--color-foreground-primary);
+
+ &.with-menu {
+ border-radius: $br-8 0 0 $br-8;
+ }
+
+ &:focus {
+ outline: $b-1 solid var(--color-accent-primary);
+ }
+
+ &:hover:not(:disabled) {
+ background-color: var(--color-background-quaternary);
+ color: var(--color-foreground-primary);
+ }
+}
+
+.pill-btn-icon {
+ display: flex;
+ block-size: $sz-32;
+ align-items: center;
+ color: var(--color-foreground-secondary);
+}
+
+.pill-btn-name {
+ display: flex;
+ flex-direction: column;
+ min-block-size: $sz-32;
+ padding: var(--sp-s) 0 var(--sp-s) var(--sp-xxs);
border-radius: $br-8 0 0 $br-8;
overflow: hidden;
gap: 0;
}
-.component-name {
- @include bodySmallTypography;
- @include textEllipsis;
+.pill-btn-text {
+ @include t.use-typography("body-small");
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
direction: rtl;
text-align: left;
- height: $s-16;
+ block-size: $sz-16;
}
-.component-name-inside {
- direction: ltr;
- unicode-bidi: bidi-override;
-}
-
-.component-parent-name {
- @include bodySmallTypography;
- @include textEllipsis;
+.pill-btn-subtext {
+ @include t.use-typography("body-small");
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
direction: rtl;
text-align: left;
- height: $s-16;
- max-width: $s-184;
- color: var(--title-foreground-color);
+ block-size: $sz-16;
+ color: var(--color-foreground-secondary);
}
-.component-actions {
+.pill-actions {
+ flex: 0 0 $sz-32;
position: relative;
- width: $s-32;
}
-.component-menu-btn {
+.pill-actions-btn {
@extend .button-secondary;
cursor: unset;
- height: 100%;
- width: 100%;
+ block-size: 100%;
+ inline-size: 100%;
border-radius: 0 $br-8 $br-8 0;
&.selected {
@@ -157,502 +600,21 @@
}
}
-.copy-text {
- @include bodySmallTypography;
- height: 100%;
- display: flex;
- align-items: center;
- color: var(--title-foreground-color);
-}
-
-.custom-select-dropdown {
+.pill-actions-dropdown {
@extend .dropdown-wrapper;
- right: 0;
- left: unset;
- width: $s-252;
+ inline-size: $sz-252;
+ inset-inline-end: 0;
+ inset-inline-start: unset;
+
+ &.extended {
+ inset-block-start: $sz-48;
+ }
}
-.not-main {
- top: $s-48;
-}
-
-.dropdown-element {
+.pill-actions-dropdown-item {
@extend .dropdown-element-base;
}
-.component-path {
- display: flex;
- align-items: center;
- gap: $s-4;
- width: 100%;
- height: $s-32;
- padding: 0;
- border: 0;
- background-color: var(--title-background-color);
- color: var(--title-foreground-color);
- cursor: pointer;
-}
-
-.path-name {
- @include bodySmallTypography;
- @include textEllipsis;
- direction: rtl;
- height: $s-32;
- padding: $s-8 0 $s-8 $s-2;
- margin-right: $s-4;
-}
-
-.component-list-empty {
- @include bodySmallTypography;
- margin: 0 $s-4 0 $s-8;
- color: var(--color-foreground-secondary);
-}
-
-.component-item {
- display: flex;
- align-items: center;
- margin-bottom: $s-4;
- padding: $s-1 $s-8 $s-1 $s-1;
- gap: $s-8;
- font-size: $s-12;
- cursor: pointer;
- width: 100%;
- height: $s-44;
- border-radius: $br-8;
- background-color: var(--assets-item-background-color);
- color: var(--assets-item-name-foreground-color);
- border: $s-1 solid transparent;
-
- .variant-icon {
- background-color: none;
- padding: $s-2;
- flex: 0 0 $s-16;
- }
-
- .component-name {
- @include textEllipsis;
- width: 80%;
- }
-
- .component-img {
- flex: 0 0 $s-40;
- background-color: var(--assets-component-background-color);
- border-radius: $br-6;
- height: $s-40;
- width: $s-40;
- padding: $s-2;
- }
-
- &.selected {
- border: $s-1 solid var(--assets-item-border-color);
- }
-
- &:hover {
- color: var(--assets-item-name-foreground-color-hover);
- background-color: var(--assets-item-background-color-hover);
- }
-
- &.disabled {
- cursor: auto;
- color: var(--assets-item-name-foreground-color-disabled);
- background-color: var(--assets-item-background-color);
-
- svg {
- cursor: auto;
- }
- }
-}
-
-.component-grid {
- display: grid;
- grid-template-columns: repeat(auto-fill, minmax($s-96, 1fr));
- gap: $s-4;
-}
-
-.grid-cell {
- @include flexCenter;
- place-items: center;
- aspect-ratio: 1 / 1;
- flex-wrap: wrap;
- position: relative;
- padding: $s-8;
- border-radius: $br-8;
- background-color: var(--assets-component-background-color);
- overflow: hidden;
- cursor: pointer;
-
- .variant-icon {
- background-color: var(--color-background-tertiary);
- }
-
- img {
- height: auto;
- width: auto;
- max-height: 100%;
- max-width: 100%;
- pointer-events: none;
- border: 0;
- }
-
- .component-img {
- height: 100%;
- width: 100%;
- object-fit: contain;
- }
-
- .component-name {
- @include bodySmallTypography;
- @include textEllipsis;
- display: none;
- position: absolute;
- left: $s-4;
- bottom: $s-4;
- height: calc($s-24 - $s-2);
- width: calc(100% - 2 * $s-4);
- padding: $s-2 $s-6;
- column-gap: $s-4;
- border-radius: $br-4;
- background-color: var(--assets-item-name-background-color);
- border: $s-1 solid transparent;
- color: var(--assets-item-name-foreground-color);
- direction: rtl;
- }
-
- &:hover {
- .component-name {
- display: block;
- }
- }
-
- &.selected {
- border: $s-2 solid var(--assets-item-border-color);
-
- &::before {
- content: " ";
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- border: $s-4 solid var(--assets-component-second-border-selected);
- border-radius: $br-8;
- }
-
- .component-name {
- color: var(--assets-item-name-foreground-color-hover);
- }
- }
-
- &.disabled {
- background: var(--assets-component-background-color-disabled);
- cursor: auto;
-
- svg {
- cursor: auto;
- }
-
- .component-name {
- background: linear-gradient(
- to top,
- var(--assets-component-background-color-disabled) 0%,
- transparent 100%
- );
- color: var(--assets-item-name-foreground-color-hover);
- }
- }
-}
-
-.element-set-title {
- @include uppercaseTitleTipography;
- display: flex;
- align-items: center;
- height: $s-32;
- padding-left: $s-2;
- color: var(--title-foreground-color);
-}
-
-// Component swap
-
-.component-swap {
- padding-top: $s-12;
- grid-column: span 8;
-}
-
-.component-swap-content {
- @include flexColumn;
- gap: $s-16;
-}
-
-.fields-wrapper {
- @include flexColumn;
- gap: $s-4;
-}
-
-.search-field {
- display: flex;
- align-items: center;
- height: $s-32;
- border-radius: $br-8;
- font-family: "worksans", "vazirmatn", sans-serif;
- background-color: var(--input-background-color);
-}
-
-.library-name-wrapper {
- display: grid;
- grid-template-columns: 1fr auto;
-}
-
-.library-name {
- @include bodySmallTypography;
- @include textEllipsis;
- color: var(--title-foreground-color);
- padding: $s-8 0 $s-8 $s-2;
-}
-
-.swap-wrapper {
- @include flexColumn;
- gap: $s-4;
-}
-
-.listing-options-wrapper {
- width: 100%;
-}
-
-.listing-options {
- display: flex;
- align-items: center;
-}
-
-.component-group {
- @include bodySmallTypography;
- display: grid;
- grid-template-columns: 1fr $s-12;
- height: $s-32;
- cursor: pointer;
- align-items: center;
-
- .component-group-name {
- @include textEllipsis;
- color: var(--assets-item-name-foreground-color);
- }
-
- &:hover {
- color: var(--assets-item-name-foreground-color-hover);
-
- .component-group-name {
- color: var(--assets-item-name-foreground-color-hover);
- }
- }
-}
-
-.component-group-icon {
- color: var(--icon-foreground);
-}
-
-.path-wrapper {
- display: flex;
- max-width: $s-232;
- padding: $s-8 0 $s-8 $s-2;
-}
-
-.component-group-path {
- @include textEllipsis;
- direction: rtl;
- color: var(--assets-item-name-foreground-color-rest);
-}
-
-// Component annotation
-
-.component-annotation {
- @include bodySmallTypography;
- grid-column: span 8;
- color: var(--entry-foreground-color);
- border-radius: $br-8;
-
- .annotation-title {
- display: flex;
- align-items: center;
- height: $s-32;
-
- &.expanded {
- border-bottom: $s-1 solid var(--entry-border-color-disabled);
- }
-
- &.expandeable {
- cursor: pointer;
- }
-
- div {
- display: flex;
- align-items: center;
- line-height: 2.5;
- }
-
- .icon-arrow {
- @include flexCenter;
- width: $s-28;
- height: $s-32;
- display: flex;
- margin: 0;
- padding: 0;
- cursor: pointer;
-
- svg {
- @extend .button-icon;
- stroke: var(--icon-foreground);
- width: $s-16;
- height: $s-16;
- }
-
- &.expanded svg {
- transform: rotate(90deg);
- }
- }
-
- .icon {
- @include flexCenter;
- width: $s-28;
- height: $s-32;
- border-radius: $br-8;
- display: none;
- margin: 0;
- padding: 0;
- cursor: pointer;
-
- svg {
- @extend .button-icon;
- stroke: var(--icon-foreground);
- width: $s-16;
- height: $s-16;
- }
-
- &.icon-tick:hover,
- &.icon-edit:hover {
- svg {
- stroke: var(--icon-foreground-accept);
- }
- }
-
- &.icon-tick.invalid:hover {
- cursor: default;
-
- svg {
- stroke: var(--icon-foreground);
- }
- }
-
- &.icon-cross:hover,
- &.icon-trash:hover {
- svg {
- stroke: var(--icon-foreground-discard);
- }
- }
- }
-
- .annotation-text {
- flex-grow: 1;
- margin-left: $s-12;
- }
-
- &:hover {
- .icon {
- display: flex;
- }
- }
- }
-
- &.editing {
- border: $s-1 solid var(--input-border-color-success);
-
- .annotation-title {
- border-bottom: $s-1 solid var(--entry-border-color-disabled);
-
- .icon {
- display: flex;
- }
- }
-
- textarea {
- min-height: $s-252;
- }
- }
-
- &.creating {
- border: $s-1 solid var(--input-border-color-success);
-
- .annotation-title .icon {
- display: flex;
- }
-
- textarea {
- min-height: $s-252;
- }
- }
-
- .hidden {
- display: none;
-
- svg {
- display: none;
- }
- }
-
- .counter {
- @include bodySmallTypography;
- text-align: right;
- color: var(--entry-foreground-color);
- margin: 0 $s-8 $s-8 0;
- }
-
- // Auto growing text
- .grow-wrap {
- // easy way to plop the elements on top of each other and have them both sized based on the tallest one's height
- display: grid;
-
- &:after {
- // The space is needed to preventy jumpy behavior
- content: attr(data-replicated-value) " ";
- white-space: pre-wrap;
- visibility: hidden;
- }
-
- textarea {
- background-color: var(--input-background-color-active);
- color: var(--input-foreground-color-active);
- padding: $s-12;
-
- border: none;
- overflow: hidden;
- outline: none;
-
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
-
- resize: none;
- /*remove the resize handle on the bottom right*/
- }
-
- textarea,
- &:after {
- /* Identical styling required!! */
- font: inherit;
- overflow-wrap: anywhere;
-
- padding: 10px;
-
- /* Place on top of each other */
- grid-area: 1 / 1 / 2 / 2;
- }
- }
-}
-
-.variant-property-row {
- @include flexRow;
- justify-content: space-between;
- width: 100%;
-}
-
.variant-property-list {
grid-column: span 8;
@@ -661,8 +623,34 @@
gap: var(--sp-xs);
}
+.variant-property {
+ display: flex;
+ flex-direction: column;
+ position: relative;
+
+ --reorder-left-position: calc(-1 * var(--sp-m) - var(--sp-xxs));
+
+ &:hover {
+ --reorder-icon-visibility: visible;
+ }
+
+ &.dnd-over-top {
+ --reorder-top-display: block;
+ }
+
+ &.dnd-over-bot {
+ --reorder-bottom-display: block;
+ }
+}
+
+.variant-property-row {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: var(--sp-xs);
+}
+
.variant-property-container {
- @include t.use-typography("body-small");
display: grid;
grid-template-columns: repeat(8, var(--sp-xxxl));
gap: var(--sp-xs);
@@ -679,6 +667,7 @@
}
.variant-property-name {
+ @include t.use-typography("body-small");
color: var(--color-foreground-secondary);
display: block;
overflow: hidden;
@@ -686,16 +675,16 @@
white-space: nowrap;
}
-.variant-warning-wrapper {
- @include bodySmallTypography;
+.variant-warning {
+ @include t.use-typography("body-small");
grid-column: span 8;
- border: 1px solid var(--color-background-quaternary);
- border-radius: $s-8;
- padding: $s-12;
+ border: $b-1 solid var(--color-background-quaternary);
+ border-radius: $br-8;
+ padding: var(--sp-m);
display: flex;
flex-direction: column;
- gap: $s-8;
+ gap: var(--sp-s);
}
.variant-warning-highlight {
@@ -707,50 +696,12 @@
}
.variant-warning-button {
- @include bodySmallTypography;
+ @include t.use-typography("body-small");
+ cursor: pointer;
background-color: transparent;
border: none;
appearance: none;
color: var(--color-accent-primary);
- cursor: pointer;
padding: 0;
text-align: start;
}
-
-.variant-icon {
- @include flexCenter;
- height: $s-24;
- width: $s-24;
- color: var(--color-accent-secondary);
- border-radius: $s-8;
-}
-
-.variant-mark-cell {
- position: absolute;
- right: $s-2;
- top: $s-2;
-}
-
-.combine-variant-button {
- @include buttonStyle;
- @include uppercaseTitleTipography;
- grid-column: span 8;
- cursor: default;
- display: flex;
- justify-content: center;
- align-items: center;
- padding: $s-8;
- border-radius: $br-8;
- background-color: var(--assets-item-background-color);
- color: var(--color-foreground-secondary);
- cursor: pointer;
-
- &:hover {
- background-color: var(--assets-item-background-color-hover);
- color: var(--color-foreground-primary);
- }
-
- &:focus {
- outline: $s-1 solid var(--color-accent-primary);
- }
-}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/constraints.scss b/frontend/src/app/main/ui/workspace/sidebar/options/menus/constraints.scss
index 2384facf21..50fffa78ac 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/constraints.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/constraints.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.element-set {
margin: 0;
@@ -12,21 +12,21 @@
.element-set-content {
display: flex;
- gap: $s-4;
+ gap: deprecated.$s-4;
}
.constraints-widget {
background-color: var(--constraint-widget-background-color);
display: grid;
- grid-template-columns: $s-24 $s-60 $s-24;
- grid-template-rows: $s-24 $s-60 $s-24;
+ grid-template-columns: deprecated.$s-24 deprecated.$s-60 deprecated.$s-24;
+ grid-template-rows: deprecated.$s-24 deprecated.$s-60 deprecated.$s-24;
grid-template-areas:
"top top top"
"left center right"
"bottom bottom bottom";
- height: $s-108;
- width: $s-108;
- border-radius: $br-8;
+ height: deprecated.$s-108;
+ width: deprecated.$s-108;
+ border-radius: deprecated.$br-8;
}
.constraints-top,
@@ -34,14 +34,14 @@
.constraints-center,
.constraints-right,
.constraints-bottom {
- @include flexCenter;
+ @include deprecated.flexCenter;
grid-area: top;
}
.constraint-btn,
.constraint-btn-special,
.constraint-btn-rotated {
- @include buttonStyle;
- @include flexCenter;
+ @include deprecated.buttonStyle;
+ @include deprecated.flexCenter;
width: 100%;
height: 100%;
--resalted-area-background-color: var(--button-constraint-background-color-rest);
@@ -58,11 +58,11 @@
}
.resalted-area {
- width: $s-32;
- height: $s-3;
- border-radius: $br-8;
+ width: deprecated.$s-32;
+ height: deprecated.$s-3;
+ border-radius: deprecated.$br-8;
background-color: var(--resalted-area-background-color);
- outline: $s-4 solid var(--resalted-area-border-color);
+ outline: deprecated.$s-4 solid var(--resalted-area-border-color);
padding: 0;
margin: 0;
}
@@ -70,11 +70,11 @@
.constraints-left {
grid-area: left;
.constraint-btn-rotated {
- height: $s-60;
- width: $s-24;
+ height: deprecated.$s-60;
+ width: deprecated.$s-24;
.resalted-area {
- height: $s-32;
- width: $s-3;
+ height: deprecated.$s-32;
+ width: deprecated.$s-3;
}
}
}
@@ -83,22 +83,22 @@
grid-area: center;
position: relative;
background-color: var(--constraint-center-area-background-color);
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
.constraint-btn {
- width: $s-60;
- height: $s-24;
+ width: deprecated.$s-60;
+ height: deprecated.$s-24;
.resalted-area {
- width: $s-32;
- height: $s-3;
+ width: deprecated.$s-32;
+ height: deprecated.$s-3;
}
}
.constraint-btn-special {
position: absolute;
- height: $s-60;
- width: $s-24;
+ height: deprecated.$s-60;
+ width: deprecated.$s-24;
.resalted-area {
- height: $s-32;
- width: $s-3;
+ height: deprecated.$s-32;
+ width: deprecated.$s-3;
}
}
}
@@ -106,11 +106,11 @@
.constraints-right {
grid-area: right;
.constraint-btn-rotated {
- height: $s-72;
- width: $s-24;
+ height: deprecated.$s-72;
+ width: deprecated.$s-24;
.resalted-area {
- height: $s-32;
- width: $s-3;
+ height: deprecated.$s-32;
+ width: deprecated.$s-3;
}
}
}
@@ -120,37 +120,37 @@
}
.constraints-selects {
- @include flexColumn;
+ @include deprecated.flexColumn;
}
.horizontal-select,
.vertical-select {
- width: $s-124;
+ width: deprecated.$s-124;
padding: 0;
}
.checkbox {
display: flex;
align-items: center;
- margin-bottom: $s-8;
- margin-top: $s-8;
+ margin-bottom: deprecated.$s-8;
+ margin-top: deprecated.$s-8;
padding-left: 0;
input {
margin: 0;
}
label {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
display: flex;
align-items: center;
- gap: $s-2;
+ gap: deprecated.$s-2;
cursor: pointer;
color: var(--input-checkbox-text-foreground-color);
.check-mark {
- @include flexCenter;
- width: $s-16;
- height: $s-16;
- border-radius: $br-6;
+ @include deprecated.flexCenter;
+ width: deprecated.$s-16;
+ height: deprecated.$s-16;
+ border-radius: deprecated.$br-6;
background-color: var(--input-checkbox-inactive-background-color);
&.checked {
background-color: var(--input-checkbox-background-color-active);
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/exports.scss b/frontend/src/app/main/ui/workspace/sidebar/options/menus/exports.scss
index 264b658a58..2d6cc25313 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/exports.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/exports.scss
@@ -4,14 +4,20 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.element-set {
- margin: 0;
+ display: grid;
+ grid-template-columns: repeat(8, var(--sp-xxxl));
+ column-gap: var(--sp-xs);
+}
+
+.element-title {
+ grid-column: span 8;
}
.title-spacing-export {
- padding-left: $s-2;
+ padding-left: deprecated.$s-2;
margin: 0;
}
@@ -22,13 +28,13 @@
}
.multiple-exports {
- @include flexRow;
+ @include deprecated.flexRow;
grid-column: 1 / span 9;
.label {
@extend .mixed-bar;
}
.actions {
- @include flexRow;
+ @include deprecated.flexRow;
}
}
@@ -49,8 +55,8 @@
padding: 0;
.dropdown-upwards {
- bottom: $s-36;
- width: $s-80;
+ bottom: deprecated.$s-36;
+ width: deprecated.$s-80;
top: unset;
}
}
@@ -59,21 +65,21 @@
grid-column: span 2;
padding: 0;
.dropdown-upwards {
- bottom: $s-36;
+ bottom: deprecated.$s-36;
top: unset;
- width: $s-80;
+ width: deprecated.$s-80;
}
}
.suffix-input {
grid-column: span 3;
@extend .input-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
}
.export-btn {
@extend .button-secondary;
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
grid-column: 1 / span 9;
- height: $s-32;
+ height: deprecated.$s-32;
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/fill.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/fill.cljs
index f49bbc6104..fe1954680b 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/fill.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/fill.cljs
@@ -10,9 +10,10 @@
[app.common.types.color :as clr]
[app.common.types.fills :as types.fills]
[app.common.types.shape.attrs :refer [default-color]]
- [app.config :as cfg]
[app.main.data.workspace :as udw]
[app.main.data.workspace.colors :as dc]
+ [app.main.data.workspace.tokens.application :as dwta]
+ [app.main.features :as feat]
[app.main.store :as st]
[app.main.ui.components.title-bar :refer [title-bar*]]
[app.main.ui.ds.buttons.icon-button :refer [icon-button*]]
@@ -28,25 +29,12 @@
#{:fills :hide-fill-on-export})
(def ^:private
- xf:take-max-fills
- (take types.fills/MAX-FILLS))
-
-(def ^:private
- xf:enumerate
+ xf:process-fills
(map-indexed
(fn [index item]
(let [color (types.fills/fill->color item)]
(with-meta item {:index index :color color})))))
-(def ^:private ^boolean binary-fills-enabled?
- (contains? cfg/flags :frontend-binary-fills))
-
-(def ^:private
- xf:process-fills
- (if binary-fills-enabled?
- (comp xf:take-max-fills xf:enumerate)
- xf:enumerate))
-
(defn- prepare-fills
"Internal helper hook that prepares fills"
[fills]
@@ -68,16 +56,27 @@
n-vals (unchecked-get n-props "values")
o-fills (get o-vals :fills)
n-fills (get n-vals :fills)
+ o-objects (get o-vals :objects)
+ n-objects (get n-vals :objects)
+ o-applied-tokens (get o-vals :applied-tokens)
+ n-applied-tokens (get n-vals :applied-tokens)
o-hide (get o-vals :hide-fill-on-export)
n-hide (get n-vals :hide-fill-on-export)]
(and (identical? o-hide n-hide)
- (identical? o-fills n-fills)))))
+ (identical? o-applied-tokens n-applied-tokens)
+ (identical? o-fills n-fills)
+ (identical? o-objects n-objects)))))
(mf/defc fill-menu*
{::mf/wrap [#(mf/memo' % check-props)]}
- [{:keys [ids type values]}]
+ [{:keys [ids type values applied-tokens shapes objects]}]
+
(let [fills (get values :fills)
hide-on-export (get values :hide-fill-on-export false)
+ fill-token-applied (:fill applied-tokens)
+
+ render-wasm? (feat/use-feature "render-wasm/v1")
+
^boolean
multiple? (= :multiple fills)
@@ -100,7 +99,7 @@
checkbox-ref (mf/use-ref)
can-add-fills?
- (if binary-fills-enabled?
+ (if render-wasm?
(and (not multiple?)
(< (count fills) types.fills/MAX-FILLS))
(not ^boolean multiple?))
@@ -132,8 +131,8 @@
on-reorder
(mf/use-fn
(mf/deps ids)
- (fn [new-index index]
- (st/emit! (dc/reorder-fills ids index new-index))))
+ (fn [from-pos to-space-between-pos]
+ (st/emit! (dc/reorder-fills ids from-pos to-space-between-pos))))
on-remove
(mf/use-fn
@@ -172,7 +171,37 @@
#(reset! disable-drag* true))
on-blur
- (mf/use-fn #(reset! disable-drag* false))]
+ (mf/use-fn #(reset! disable-drag* false))
+
+ on-token-change
+ (mf/use-fn
+ (mf/deps shapes objects)
+ (fn [_ token]
+ (let [expanded-shapes
+ (if (= 1 (count shapes))
+ (let [shape (first shapes)]
+ (if (= (:type shape) :group)
+ (keep objects (:shapes shape))
+ [shape]))
+
+ (mapcat (fn [shape]
+ (if (= (:type shape) :group)
+ (keep objects (:shapes shape))
+ [shape]))
+ shapes))]
+
+ (st/emit!
+ (dwta/toggle-token {:token token
+ :attrs #{:fill}
+ :shapes expanded-shapes})))))
+
+ on-detach-token
+ (mf/use-fn
+ (mf/deps ids)
+ (fn [token]
+ (st/emit! (dwta/unapply-token {:attributes #{:fill}
+ :token token
+ :shape-ids ids}))))]
(mf/with-layout-effect [hide-on-export]
(when-let [checkbox (mf/ref-val checkbox-ref)]
@@ -182,13 +211,13 @@
(dom/set-attribute! checkbox "indeterminate" true)
(dom/remove-attribute! checkbox "indeterminate"))))
- [:div {:class (stl/css :element-set)}
- [:div {:class (stl/css :element-title)}
+ [:div {:class (stl/css :fill-section)}
+ [:div {:class (stl/css :fill-title)}
[:> title-bar* {:collapsable has-fills?
:collapsed (not open?)
:on-collapsed toggle-content
:title label
- :class (stl/css-case :title-spacing-fill (not has-fills?))}
+ :class (stl/css-case :fill-title-bar (not has-fills?))}
(when (not (= :multiple fills))
[:> icon-button* {:variant "ghost"
@@ -199,11 +228,11 @@
:icon i/add}])]]
(when open?
- [:div {:class (stl/css :element-content)}
+ [:div {:class (stl/css :fill-content)}
(cond
(= :multiple fills)
- [:div {:class (stl/css :element-set-options-group)}
- [:div {:class (stl/css :group-label)}
+ [:div {:class (stl/css :fill-multiple)}
+ [:div {:class (stl/css :fill-multiple-label)}
(tr "settings.multiple")]
[:> icon-button* {:variant "ghost"
:aria-label (tr "workspace.options.fill.remove-fill")
@@ -211,7 +240,7 @@
:icon i/remove}]]
(some? fills)
- [:& h/sortable-container {}
+ [:> h/sortable-container* {}
(for [value fills]
(let [mdata (meta value)
index (get mdata :index)
@@ -223,16 +252,20 @@
:on-change on-change
:on-reorder on-reorder
:on-detach on-detach
+ :on-detach-token on-detach-token
:on-remove on-remove
:disable-drag disable-drag?
:on-focus on-focus
+ :applied-token fill-token-applied
+ :on-token-change on-token-change
+ :origin :fill
:select-on-focus (not disable-drag?)
:on-blur on-blur}]))])
(when (or (= type :frame)
(and (= type :multiple)
(some? hide-on-export)))
- [:div {:class (stl/css :checkbox)}
+ [:div {:class (stl/css :fill-checkbox)}
[:label {:for "show-fill-on-export"
:class (stl/css-case :global/checked (not hide-on-export))}
[:span {:class (stl/css-case :check-mark true
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/fill.scss b/frontend/src/app/main/ui/workspace/sidebar/options/menus/fill.scss
index 5646c32f19..82e182b54d 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/fill.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/fill.scss
@@ -4,44 +4,61 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "ds/_sizes.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/typography.scss" as t;
+@use "refactor/common-refactor.scss" as deprecated;
-.element-set {
- margin: 0;
+.fill-section {
+ display: grid;
+ grid-template-columns: repeat(8, var(--sp-xxxl));
+ column-gap: var(--sp-xs);
}
-.element-title {
- margin: 0;
+.fill-title {
+ grid-column: span 8;
}
-.title-spacing-fill {
- padding-left: $s-2;
- margin: 0;
+.fill-title-bar {
+ padding-inline-start: var(--sp-xxs);
}
-.element-content {
+.fill-content {
+ grid-column: span 8;
+
display: flex;
flex-direction: column;
- gap: $s-12;
- margin: $s-4 0 $s-8 0;
+ gap: var(--sp-m);
+ margin: var(--sp-xs) 0 var(--sp-s) 0;
}
-.element-set-options-group {
- @include flexRow;
+.fill-multiple {
+ display: flex;
+ align-items: center;
+ gap: var(--sp-xs);
}
-.group-label {
- @extend .mixed-bar;
+.fill-multiple-label {
+ @include t.use-typography("body-small");
+ display: flex;
+ align-items: center;
+ flex-grow: 1;
+ border-radius: $br-8;
+ block-size: $sz-32;
+ padding: var(--sp-s);
+ background-color: var(--color-background-tertiary);
+ color: var(--color-foreground-primary);
}
-.checkbox {
+.fill-checkbox {
+ // TODO create a checkbox component in the DS
@extend .input-checkbox;
- padding-left: $s-8;
+ padding-inline-start: var(--sp-s);
span.checked {
- background-color: var(--input-border-color-active);
+ background-color: var(--color-accent-primary);
svg {
@extend .button-icon-small;
- stroke: var(--input-details-color);
+ stroke: var(--color-background-primary);
}
}
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs
index edda70d353..326b5efa4a 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs
@@ -19,7 +19,7 @@
[app.main.ui.ds.buttons.icon-button :refer [icon-button*]]
[app.main.ui.ds.foundations.assets.icon :as i]
[app.main.ui.icons :as deprecated-icon]
- [app.main.ui.workspace.sidebar.options.common :refer [advanced-options]]
+ [app.main.ui.workspace.sidebar.options.common :refer [advanced-options*]]
[app.main.ui.workspace.sidebar.options.rows.color-row :refer [color-row*]]
[app.util.i18n :as i18n :refer [tr]]
[okulary.core :as l]
@@ -190,9 +190,9 @@
:icon i/remove}]]]
(when (:display grid)
- [:& advanced-options {:class (stl/css :grid-advanced-options)
- :visible? open?
- :on-close toggle-advanced-options}
+ [:> advanced-options* {:class (stl/css :grid-advanced-options)
+ :is-visible open?
+ :on-close toggle-advanced-options}
;; square
(when (= :square type)
[:div {:class (stl/css :square-row)}
@@ -201,6 +201,7 @@
:title (tr "workspace.options.grid.params.color")
:disable-gradient true
:disable-image true
+ :origin :guides
:on-change handle-change-color
:on-detach handle-detach-color}]
[:button {:class (stl/css-case :show-more-options true
@@ -242,6 +243,7 @@
:title (tr "workspace.options.grid.params.color")
:disable-gradient true
:disable-image true
+ :origin :guides
:on-change handle-change-color
:on-detach handle-detach-color}]]]
@@ -314,16 +316,17 @@
#(st/emit! (dw/add-frame-grid id)))]
[:div {:class (stl/css :element-set)}
- [:> title-bar* {:collapsable has-frame-grids?
- :collapsed (not open?)
- :on-collapsed toggle-content
- :class (stl/css-case :title-spacing-board-grid (not has-frame-grids?))
- :title (tr "workspace.options.guides.title")}
+ [:div {:class (stl/css :element-title)}
+ [:> title-bar* {:collapsable has-frame-grids?
+ :collapsed (not open?)
+ :on-collapsed toggle-content
+ :class (stl/css-case :title-spacing-board-grid (not has-frame-grids?))
+ :title (tr "workspace.options.guides.title")}
- [:> icon-button* {:variant "ghost"
- :aria-label (tr "workspace.options.guides.add-guide")
- :on-click handle-create-grid
- :icon i/add}]]
+ [:> icon-button* {:variant "ghost"
+ :aria-label (tr "workspace.options.guides.add-guide")
+ :on-click handle-create-grid
+ :icon i/add}]]]
(when (and open? (seq frame-grids))
[:div {:class (stl/css :element-set-content)}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/frame_grid.scss b/frontend/src/app/main/ui/workspace/sidebar/options/menus/frame_grid.scss
index d2a0bf4caf..e7caff9882 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/frame_grid.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/frame_grid.scss
@@ -4,42 +4,49 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.element-set {
- margin: 0;
+ display: grid;
+ grid-template-columns: repeat(8, var(--sp-xxxl));
+ column-gap: var(--sp-xs);
+}
+
+.element-title {
+ grid-column: span 8;
}
.title-spacing-board-grid {
- padding-left: $s-2;
+ padding-left: deprecated.$s-2;
margin: 0;
}
.element-set-content {
- @include flexColumn;
- margin: $s-4 0 $s-8 0;
+ @include deprecated.flexColumn;
+ grid-column: span 8;
+ margin: deprecated.$s-4 0 deprecated.$s-8 0;
}
.grid-title {
display: grid;
grid-template-columns: repeat(8, var(--sp-xxxl));
- gap: $s-4;
+ gap: deprecated.$s-4;
}
.option-row {
grid-column: span 6;
display: flex;
align-items: center;
- gap: $s-1;
- border-radius: $br-8;
+ gap: deprecated.$s-1;
+ border-radius: deprecated.$br-8;
background-color: var(--input-details-color);
.show-options {
@extend .button-secondary;
- height: $s-32;
- width: $s-28;
- border-radius: $br-8 0 0 $br-8;
+ height: deprecated.$s-32;
+ width: deprecated.$s-28;
+ border-radius: deprecated.$br-8 0 0 deprecated.$br-8;
box-sizing: border-box;
- border: $s-1 solid var(--input-border-color);
+ border: deprecated.$s-1 solid var(--input-border-color);
svg {
@extend .button-icon;
}
@@ -49,52 +56,52 @@
}
.type-select-wrapper {
flex-grow: 1;
- width: $s-96;
+ width: deprecated.$s-96;
padding: 0;
border-radius: 0;
- height: $s-32;
+ height: deprecated.$s-32;
.grid-type-select {
border-radius: 0;
height: 100%;
box-sizing: border-box;
- border: $s-1 solid var(--input-border-color);
+ border: deprecated.$s-1 solid var(--input-border-color);
&:hover {
- border: $s-1 solid var(--input-border-color-hover);
+ border: deprecated.$s-1 solid var(--input-border-color-hover);
}
}
}
.grid-size {
@extend .asset-element;
- width: $s-60;
+ width: deprecated.$s-60;
margin: 0;
padding: 0;
- padding-left: $s-8;
- border-radius: 0 $br-8 $br-8 0;
+ padding-left: deprecated.$s-8;
+ border-radius: 0 deprecated.$br-8 deprecated.$br-8 0;
.numeric-input {
@extend .input-base;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
}
}
.editable-select-wrapper {
@extend .asset-element;
- width: $s-60;
+ width: deprecated.$s-60;
margin: 0;
padding: 0;
position: relative;
- border-radius: 0 $br-8 $br-8 0;
+ border-radius: 0 deprecated.$br-8 deprecated.$br-8 0;
.column-select {
- height: $s-32;
- border-radius: 0 $br-8 $br-8 0;
+ height: deprecated.$s-32;
+ border-radius: 0 deprecated.$br-8 deprecated.$br-8 0;
box-sizing: border-box;
- border: $s-1 solid var(--input-border-color);
+ border: deprecated.$s-1 solid var(--input-border-color);
.numeric-input {
@extend .input-base;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
margin: 0;
padding: 0;
}
span {
- @include flexCenter;
+ @include deprecated.flexCenter;
svg {
@extend .button-icon;
}
@@ -104,28 +111,28 @@
&.hidden {
.show-options {
- @include hiddenElement;
- border: $s-1 solid var(--input-border-color-disabled);
+ @include deprecated.hiddenElement;
+ border: deprecated.$s-1 solid var(--input-border-color-disabled);
}
.type-select-wrapper,
.editable-select-wrapper {
- @include hiddenElement;
+ @include deprecated.hiddenElement;
.column-select,
.grid-type-select {
- @include hiddenElement;
- border: $s-1 solid var(--input-border-color-disabled);
+ @include deprecated.hiddenElement;
+ border: deprecated.$s-1 solid var(--input-border-color-disabled);
}
.column-select {
- @include hiddenElement;
- border-radius: 0 $br-8 $br-8 0;
+ @include deprecated.hiddenElement;
+ border-radius: 0 deprecated.$br-8 deprecated.$br-8 0;
.numeric-input {
- @include hiddenElement;
+ @include deprecated.hiddenElement;
}
}
}
.grid-size {
- @include hiddenElement;
- border: $s-1 solid var(--input-border-color-disabled);
+ @include deprecated.hiddenElement;
+ border: deprecated.$s-1 solid var(--input-border-color-disabled);
.icon {
stroke: var(--input-foreground-color-disabled);
}
@@ -146,36 +153,36 @@
}
.actions {
- @include flexRow;
+ @include deprecated.flexRow;
grid-column: span 2;
}
.grid-advanced-options {
- @include flexColumn;
- margin-top: $s-4;
+ @include deprecated.flexColumn;
+ margin-top: deprecated.$s-4;
}
.column-row,
.square-row {
- @include flexColumn;
+ @include deprecated.flexColumn;
position: relative;
}
.advanced-row {
position: relative;
display: flex;
- gap: $s-4;
+ gap: deprecated.$s-4;
.orientation-select-wrapper {
- width: $s-92;
+ width: deprecated.$s-92;
padding: 0;
}
.color-wrapper {
- width: $s-156;
+ width: deprecated.$s-156;
}
.show-more-options {
@extend .button-tertiary;
- height: $s-32;
- width: $s-32;
+ height: deprecated.$s-32;
+ width: deprecated.$s-32;
svg {
@extend .button-icon;
}
@@ -185,15 +192,15 @@
}
.height {
@extend .input-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
.icon-text {
- padding-top: $s-1;
+ padding-top: deprecated.$s-1;
}
}
.gutter,
.margin {
@extend .input-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
.icon {
&.rotated svg {
transform: rotate(90deg);
@@ -202,27 +209,27 @@
}
.more-options {
- @include menuShadow;
- @include flexColumn;
+ @include deprecated.menuShadow;
+ @include deprecated.flexColumn;
position: absolute;
- top: calc($s-2 + $s-28);
+ top: calc(deprecated.$s-2 + deprecated.$s-28);
right: 0;
- width: $s-156;
- max-height: $s-300;
- padding: $s-2;
- margin: 0 0 $s-40 0;
- margin-top: $s-4;
- border-radius: $br-8;
- z-index: $z-index-4;
+ width: deprecated.$s-156;
+ max-height: deprecated.$s-300;
+ padding: deprecated.$s-2;
+ margin: 0 0 deprecated.$s-40 0;
+ margin-top: deprecated.$s-4;
+ border-radius: deprecated.$br-8;
+ z-index: deprecated.$z-index-4;
overflow-y: auto;
background-color: var(--menu-background-color);
.option-btn {
- @include buttonStyle;
+ @include deprecated.buttonStyle;
display: flex;
align-items: center;
- height: $s-32;
- padding: 0 $s-8;
- border-radius: $br-6;
+ height: deprecated.$s-32;
+ padding: 0 deprecated.$s-8;
+ border-radius: deprecated.$br-6;
color: var(--menu-foreground-color);
&:hover {
@@ -237,9 +244,9 @@
@extend .dropdown-wrapper;
left: unset;
right: 0;
- width: $s-108;
+ width: deprecated.$s-108;
.btn-options {
- @include buttonStyle;
+ @include deprecated.buttonStyle;
@extend .dropdown-element-base;
width: 100%;
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/grid_cell.scss b/frontend/src/app/main/ui/workspace/sidebar/options/menus/grid_cell.scss
index 9220b1cf82..5264a1e757 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/grid_cell.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/grid_cell.scss
@@ -4,44 +4,55 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.grid-cell-menu-container {
- @include flexColumn;
- margin-top: $s-8;
- gap: $s-16;
+ @include deprecated.flexColumn;
+ margin-top: deprecated.$s-8;
+ gap: deprecated.$s-16;
+}
+
+.grid-cell-menu {
+ display: grid;
+ grid-template-columns: repeat(8, var(--sp-xxxl));
+ column-gap: var(--sp-xs);
}
.grid-cell-menu-title {
- font-size: $fs-11;
+ grid-column: span 8;
+ font-size: deprecated.$fs-11;
+}
+
+.grid-cell-menu-container {
+ grid-column: span 8;
}
.row {
- @include flexRow;
+ @include deprecated.flexRow;
}
.cell-mode :global(label) {
- padding: 0 $s-12;
+ padding: 0 deprecated.$s-12;
}
.edit-grid-btn {
@extend .button-secondary;
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
width: 100%;
- padding: $s-8;
+ padding: deprecated.$s-8;
}
.area-input {
@extend .input-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
width: 100%;
- padding: $s-8;
+ padding: deprecated.$s-8;
}
.grid-coord-group {
- @include flexRow;
- border-radius: $br-8;
- padding-left: $s-4;
+ @include deprecated.flexRow;
+ border-radius: deprecated.$br-8;
+ padding-left: deprecated.$s-4;
background-color: var(--input-background-color);
}
@@ -52,7 +63,7 @@
.coord-input {
@extend .input-element;
- @include bodySmallTypography;
- border-radius: 0 $br-8 $br-8 0;
- border-left: $s-1 solid var(--panel-background-color);
+ @include deprecated.bodySmallTypography;
+ border-radius: 0 deprecated.$br-8 deprecated.$br-8 0;
+ border-left: deprecated.$s-1 solid var(--panel-background-color);
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/interactions.scss b/frontend/src/app/main/ui/workspace/sidebar/options/menus/interactions.scss
index a443f17cfb..313f5a4a2f 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/interactions.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/interactions.scss
@@ -4,22 +4,22 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.interactions-content {
display: flex;
flex-direction: column;
- gap: $s-8;
+ gap: deprecated.$s-8;
padding-left: var(--sp-m);
}
.interaction-options {
- @include flexColumn;
+ @include deprecated.flexColumn;
}
.help-content {
- padding: $s-32 0;
- width: $s-200;
+ padding: deprecated.$s-32 0;
+ width: deprecated.$s-200;
margin: 0 auto;
}
@@ -27,37 +27,37 @@
display: flex;
flex-direction: column;
align-items: center;
- margin-bottom: $s-40;
- gap: $s-12;
+ margin-bottom: deprecated.$s-40;
+ gap: deprecated.$s-12;
}
.interactions-help-icon {
- @include flexCenter;
- width: $s-48;
- height: $s-48;
- border-radius: $br-circle;
+ @include deprecated.flexCenter;
+ width: deprecated.$s-48;
+ height: deprecated.$s-48;
+ border-radius: deprecated.$br-circle;
background-color: var(--pill-background-color);
svg {
@extend .button-icon;
stroke: var(--icon-foreground);
- height: $s-32;
- width: $s-32;
+ height: deprecated.$s-32;
+ width: deprecated.$s-32;
}
}
.after {
- @include bodySmallTypography;
- margin-top: $s-1;
+ @include deprecated.bodySmallTypography;
+ margin-top: deprecated.$s-1;
}
.interactions-help {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
text-align: center;
color: var(--title-foreground-color);
}
.element-set {
- @include flexColumn;
+ @include deprecated.flexColumn;
}
.interactions-info {
@@ -71,27 +71,27 @@
.action-summary {
color: var(--color-foreground-secondary);
- @include textEllipsis;
+ @include deprecated.textEllipsis;
}
.groups {
- @include flexColumn($s-12);
+ @include deprecated.flexColumn(deprecated.$s-12);
}
.element-set-options-group-open {
- @include flexColumn;
+ @include deprecated.flexColumn;
}
.extended-options {
- @include flexColumn;
+ @include deprecated.flexColumn;
}
.property-list {
list-style: none;
margin: 0;
display: grid;
- row-gap: $s-16;
- margin-block: calc(#{$s-16} - #{$s-4});
+ row-gap: deprecated.$s-16;
+ margin-block: calc(#{deprecated.$s-16} - #{deprecated.$s-4});
}
.property-row {
@@ -101,10 +101,10 @@
height: 100%;
}
.interaction-name {
- @include twoLineTextEllipsis;
- @include bodySmallTypography;
- padding-left: $s-4;
- width: $s-92;
+ @include deprecated.twoLineTextEllipsis;
+ @include deprecated.bodySmallTypography;
+ padding-left: deprecated.$s-4;
+ width: deprecated.$s-92;
margin: auto 0;
grid-area: name;
color: var(--title-foreground-color);
@@ -114,18 +114,18 @@
align-items: center;
grid-area: content;
.easing-select {
- width: $s-156;
- padding: 0 $s-8;
+ width: deprecated.$s-156;
+ padding: 0 deprecated.$s-8;
.dropdown-upwards {
- bottom: $s-36;
- width: $s-156;
+ bottom: deprecated.$s-36;
+ width: deprecated.$s-156;
top: unset;
}
}
}
.input-element-wrapper {
@extend .input-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
grid-area: content;
}
.buttons-wrapper {
@@ -142,7 +142,7 @@
}
.inputs-wrapper {
grid-area: content;
- @include flexRow;
+ @include deprecated.flexRow;
.radio-btn {
@extend .input-checkbox;
}
@@ -158,9 +158,9 @@
"bottomleft bottom bottomright";
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, 1fr);
- width: $s-84;
- height: $s-84;
- border-radius: $br-8;
+ width: deprecated.$s-84;
+ height: deprecated.$s-84;
+ border-radius: deprecated.$br-8;
background-color: var(--color-background-tertiary);
.center-btn {
grid-area: center;
@@ -187,8 +187,8 @@
.direction-btn {
@extend .button-tertiary;
- height: $s-28;
- width: $s-28;
+ height: deprecated.$s-28;
+ width: deprecated.$s-28;
&.active {
@extend .button-icon-selected;
@@ -206,14 +206,14 @@
.interactions-summary {
@extend .asset-element;
- height: $s-44;
+ height: deprecated.$s-44;
padding: 0;
- gap: $s-8;
+ gap: deprecated.$s-8;
.remove-btn {
@extend .button-tertiary;
- height: $s-32;
- width: $s-28;
+ height: deprecated.$s-32;
+ width: deprecated.$s-28;
svg {
@extend .button-icon-small;
}
@@ -224,7 +224,7 @@
@extend .button-tertiary;
--button-tertiary-border-width: var(--expand-button-icon-border-width);
height: 100%;
- width: $s-28;
+ width: deprecated.$s-28;
border-end-end-radius: 0;
border-start-end-radius: 0;
padding: 0;
@@ -239,7 +239,7 @@
left: 0;
right: 0;
bottom: 0;
- border-inline-end: $s-1 solid var(--panel-background-color);
+ border-inline-end: deprecated.$s-1 solid var(--panel-background-color);
}
&.extended {
@extend .button-icon-selected;
@@ -250,46 +250,46 @@
.corner-icon {
fill: none;
stroke: currentColor;
- width: $s-12;
- height: $s-12;
+ width: deprecated.$s-12;
+ height: deprecated.$s-12;
}
.flow-element {
- @include flexRow;
+ @include deprecated.flexRow;
}
.flow-info {
display: flex;
align-items: center;
- gap: $s-2;
- border-radius: $s-8;
+ gap: deprecated.$s-2;
+ border-radius: deprecated.$s-8;
background-color: var(--input-details-color);
- height: $s-32;
+ height: deprecated.$s-32;
width: 100%;
flex-grow: 1;
}
.flow-name-wrapper {
- @include bodySmallTypography;
- @include focusInput;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.focusInput;
display: flex;
align-items: center;
- gap: $s-4;
+ gap: deprecated.$s-4;
flex-grow: 1;
- height: $s-32;
+ height: deprecated.$s-32;
width: 100%;
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
padding: 0;
margin-right: 0;
background-color: var(--input-background-color);
- border: $s-1 solid var(--input-border-color);
+ border: deprecated.$s-1 solid var(--input-border-color);
color: var(--input-foreground-color);
.start-flow-btn {
- @include buttonStyle;
- height: $s-32;
- width: $s-28;
- padding: 0 $s-2 0 $s-8;
- border-radius: $br-8 0 0 $br-8;
+ @include deprecated.buttonStyle;
+ height: deprecated.$s-32;
+ width: deprecated.$s-28;
+ padding: 0 deprecated.$s-2 0 deprecated.$s-8;
+ border-radius: deprecated.$br-8 0 0 deprecated.$br-8;
background-color: transparent;
svg {
@extend .button-icon;
@@ -302,28 +302,28 @@
.flow-input {
@extend .input-base;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
background-color: transparent;
- height: $s-28;
+ height: deprecated.$s-28;
}
.flow-input-wrapper {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
display: flex;
align-items: center;
- height: $s-28;
+ height: deprecated.$s-28;
padding: 0;
width: 100%;
margin: 0;
flex-grow: 1;
background-color: transparent;
color: var(--input-foreground-color);
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
}
&:hover {
background-color: var(--input-background-color-hover);
- border: $s-1 solid var(--input-border-color-hover);
+ border: deprecated.$s-1 solid var(--input-border-color-hover);
&:active {
background-color: var(--input-background-color-hover);
.flow-input-wrapper {
@@ -335,14 +335,14 @@
&:focus,
&:focus-within {
background-color: var(--input-background-color-focus);
- border: $s-1 solid var(--input-border-color-focus);
+ border: deprecated.$s-1 solid var(--input-border-color-focus);
&:hover {
- border: $s-1 solid var(--input-border-color-focus);
+ border: deprecated.$s-1 solid var(--input-border-color-focus);
}
}
&.editing {
background-color: var(--input-background-color-active);
- border: $s-1 solid var(--input-border-color-active);
+ border: deprecated.$s-1 solid var(--input-border-color-active);
}
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/layer.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/layer.cljs
index 73be28c89d..a98913a86c 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/layer.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/layer.cljs
@@ -95,9 +95,11 @@
:option-highlighted? true)
(when wasm-renderer-enabled?
- (doseq [shape ids]
- (wasm.api/use-shape (:id shape))
- (wasm.api/set-shape-blend-mode value)))
+ (doseq [id ids]
+ (wasm.api/use-shape id)
+ (wasm.api/set-shape-blend-mode value)
+ (wasm.api/update-shape-tiles)
+ (wasm.api/request-render "preview-blend-mode")))
(st/emit! (dw/trigger-bounding-box-cloaking ids))
(st/emit! (dw/set-preview-blend-mode ids value))))
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/layer.scss b/frontend/src/app/main/ui/workspace/sidebar/options/menus/layer.scss
index 33b93f308d..fb0ad3dcf5 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/layer.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/layer.scss
@@ -4,21 +4,21 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.element-set-content {
display: grid;
grid-template-columns: repeat(8, var(--sp-xxxl));
gap: var(--sp-xs);
- height: $s-32;
- margin-bottom: $s-8;
+ height: deprecated.$s-32;
+ margin-bottom: deprecated.$s-8;
.select {
grid-column: span 4;
padding: 0;
}
.input {
@extend .input-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
grid-column: span 2;
}
.actions {
@@ -29,12 +29,12 @@
&.hidden {
.hidden-select {
- @include hiddenElement;
- border: $s-1 solid var(--input-border-color-disabled);
+ @include deprecated.hiddenElement;
+ border: deprecated.$s-1 solid var(--input-border-color-disabled);
}
.input {
- @include hiddenElement;
- border: $s-1 solid var(--input-border-color-disabled);
+ @include deprecated.hiddenElement;
+ border: deprecated.$s-1 solid var(--input-border-color-disabled);
.icon {
stroke: var(--input-foreground-color-disabled);
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs
index 68a60566ba..bcc4f928ec 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs
@@ -812,7 +812,7 @@
[:button {:class (stl/css :add-column) :on-click add-track} deprecated-icon/add]]
(when expanded?
- [:& h/sortable-container {}
+ [:> h/sortable-container* {}
[:div {:class (stl/css :grid-tracks-info-container)}
(for [[index column] (d/enumerate column-values)]
[:& grid-track-info {:key (dm/str index "-" (d/name type))
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_container.scss b/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_container.scss
index 7bcb540945..66f6d1a0b8 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_container.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_container.scss
@@ -4,21 +4,26 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.element-set {
- margin: 0;
+ display: grid;
+ grid-template-columns: repeat(8, var(--sp-xxxl));
+ column-gap: var(--sp-xs);
+
.element-title {
+ grid-column: span 8;
+
.title-spacing-layout {
- padding-left: $s-2;
+ padding-left: deprecated.$s-2;
margin: 0;
}
.title-actions {
position: relative;
display: flex;
- gap: $s-4;
- height: $s-32;
+ gap: deprecated.$s-4;
+ height: deprecated.$s-32;
padding: 0;
margin: 0;
.layout-options {
@@ -33,14 +38,14 @@
display: grid;
grid-template-columns: repeat(8, var(--sp-xxxl));
gap: var(--sp-xs);
- margin-bottom: $s-8;
+ margin-bottom: deprecated.$s-8;
.first-row {
grid-column: 1 / -1;
display: grid;
grid-template-columns: subgrid;
- margin-bottom: $s-12;
- margin-top: $s-4;
+ margin-bottom: deprecated.$s-12;
+ margin-top: deprecated.$s-4;
.align-row {
grid-column: span 3;
@@ -52,9 +57,9 @@
.wrap-button {
@extend .button-tertiary;
- border-radius: $br-8;
- height: $s-32;
- width: $s-32;
+ border-radius: deprecated.$br-8;
+ height: deprecated.$s-32;
+ width: deprecated.$s-32;
svg {
@extend .button-icon;
stroke: var(--icon-foreground);
@@ -69,7 +74,7 @@
grid-column: 1 / -1;
display: grid;
grid-template-columns: subgrid;
- margin-bottom: $s-12;
+ margin-bottom: deprecated.$s-12;
.align-content-row,
.justify-content-row {
@@ -98,14 +103,14 @@
grid-template-columns: subgrid;
.column-gap {
@extend .input-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
&.disabled {
@extend .disabled-input;
}
}
.row-gap {
@extend .input-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
&.disabled {
@extend .disabled-input;
}
@@ -130,7 +135,7 @@
.padding-simple {
@extend .input-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
}
}
@@ -142,15 +147,15 @@
.padding-multiple {
@extend .input-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
}
}
.padding-toggle {
@extend .button-tertiary;
- height: $s-32;
- width: $s-32;
- border-radius: $br-8;
+ height: deprecated.$s-32;
+ width: deprecated.$s-32;
+ border-radius: deprecated.$br-8;
svg {
@extend .button-icon;
stroke: var(--icon-foreground);
@@ -175,7 +180,7 @@
}
.first-row {
- margin-bottom: $s-8;
+ margin-bottom: deprecated.$s-8;
display: grid;
grid-template-columns: subgrid;
}
@@ -195,23 +200,23 @@
.grid-layout-menu-title {
flex: 1;
- font-size: $fs-11;
+ font-size: deprecated.$fs-11;
color: var(--title-foreground-color-hover);
grid-column: span 5;
}
.edit-mode-btn {
@extend .button-secondary;
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
width: 100%;
- padding: $s-8;
+ padding: deprecated.$s-8;
grid-column: span 7;
}
.exit-btn {
@extend .button-secondary;
- @include uppercaseTitleTipography;
- padding: $s-8 $s-20;
+ @include deprecated.uppercaseTitleTipography;
+ padding: deprecated.$s-8 deprecated.$s-20;
grid-column: span 2;
}
@@ -220,11 +225,11 @@
grid-template-columns: subgrid;
grid-column: 1 / -1;
gap: var(--sp-xs);
- margin-top: $s-4;
+ margin-top: deprecated.$s-4;
}
.padding-section {
- margin-top: $s-8;
+ margin-top: deprecated.$s-8;
}
.grid-tracks-row {
@@ -245,11 +250,11 @@
grid-template-columns: subgrid;
&.dnd-over-top {
- border-top: $s-2 solid var(--button-foreground-hover);
+ border-top: deprecated.$s-2 solid var(--button-foreground-hover);
}
&.dnd-over-bot {
- border-bottom: $s-2 solid var(--button-foreground-hover);
+ border-bottom: deprecated.$s-2 solid var(--button-foreground-hover);
}
.track-info-container {
@@ -259,9 +264,9 @@
.track-info-dir-icon {
cursor: pointer;
- border-radius: $br-8 0 0 $br-8;
+ border-radius: deprecated.$br-8 0 0 deprecated.$br-8;
background-color: var(--input-background-color);
- padding: 0 $s-8;
+ padding: 0 deprecated.$s-8;
svg {
@extend .button-icon;
stroke: var(--icon-foreground);
@@ -274,14 +279,14 @@
.track-info-value {
@extend .input-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
border-radius: 0;
- border-right: $s-1 solid var(--panel-background-color);
+ border-right: deprecated.$s-1 solid var(--panel-background-color);
}
.track-info-unit-selector {
- border-radius: 0 $br-8 $br-8 0;
- width: $s-96;
+ border-radius: 0 deprecated.$br-8 deprecated.$br-8 0;
+ width: deprecated.$s-96;
}
}
@@ -289,22 +294,22 @@
display: grid;
grid-template-columns: subgrid;
grid-column: 1 / -1;
- margin-top: $s-8;
+ margin-top: deprecated.$s-8;
.grid-track-header {
- @include flexRow;
- font-size: $fs-12;
- border-radius: $br-8;
+ @include deprecated.flexRow;
+ font-size: deprecated.$fs-12;
+ border-radius: deprecated.$br-8;
overflow: hidden;
background: var(--button-secondary-background-color-rest);
- height: $s-52;
+ height: deprecated.$s-52;
grid-column: 1 / -1;
}
.track-title {
display: grid;
flex-grow: 1;
- padding: $s-8;
+ padding: deprecated.$s-8;
gap: 0;
overflow: hidden;
}
@@ -323,10 +328,10 @@
.expand-icon {
@extend .button-secondary;
- height: $s-52;
+ height: deprecated.$s-52;
- border-radius: $s-8 0 0 $s-8;
- border-right: $s-1 solid var(--panel-background-color);
+ border-radius: deprecated.$s-8 0 0 deprecated.$s-8;
+ border-right: deprecated.$s-1 solid var(--panel-background-color);
svg {
@extend .button-icon;
stroke: var(--icon-foreground);
@@ -343,12 +348,12 @@
.add-column {
@extend .button-tertiary;
- height: $s-52;
+ height: deprecated.$s-52;
svg {
@extend .button-icon;
- height: $s-12;
- width: $s-12;
+ height: deprecated.$s-12;
+ width: deprecated.$s-12;
stroke: var(--icon-foreground);
fill: var(--icon-foreground);
}
@@ -357,15 +362,15 @@
.layout-options {
@extend .dropdown-wrapper;
- @include flexColumn;
+ @include deprecated.flexColumn;
right: var(--sp-s);
left: initial;
button {
- @include buttonStyle;
- padding: $s-8;
+ @include deprecated.buttonStyle;
+ padding: deprecated.$s-8;
color: var(--color-foreground-primary);
- border-radius: $br-6;
+ border-radius: deprecated.$br-6;
&:hover {
background: var(--color-background-quaternary);
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_item.scss b/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_item.scss
index eaa53011db..511b7a4adc 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_item.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/layout_item.scss
@@ -4,18 +4,18 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.element-set {
margin: 0;
}
.title-spacing-layout-element {
- margin: 0 0 $s-4 0;
+ margin: 0 0 deprecated.$s-4 0;
}
.title-spacing-empty {
- padding-left: $s-2;
+ padding-left: deprecated.$s-2;
}
.flex-element-menu {
@@ -38,7 +38,7 @@
.z-index-wrapper {
@extend .input-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
grid-column: 6 / span 3;
}
@@ -72,7 +72,7 @@
.margin-mode {
@extend .button-tertiary;
grid-column: 3;
- height: $s-32;
+ height: deprecated.$s-32;
svg {
@extend .button-icon;
}
@@ -88,7 +88,7 @@
.vertical-margin,
.horizontal-margin {
@extend .input-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
}
.vertical-margin {
grid-column: 1;
@@ -109,7 +109,7 @@
.left-margin,
.right-margin {
@extend .input-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
}
.top-margin {
@@ -151,11 +151,11 @@
.layout-item-max-w,
.layout-item-max-h {
@extend .input-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
.icon-text {
justify-content: flex-start;
- width: $s-80;
- padding-top: $s-2;
+ width: deprecated.$s-80;
+ padding-top: deprecated.$s-2;
}
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/measures.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/measures.cljs
index 43b0726a3b..040bb3eb29 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/measures.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/measures.cljs
@@ -14,18 +14,23 @@
[app.common.logic.shapes :as cls]
[app.common.types.shape :as cts]
[app.common.types.shape.layout :as ctl]
+ [app.common.types.token :as tk]
[app.main.constants :refer [size-presets]]
[app.main.data.workspace :as udw]
[app.main.data.workspace.interactions :as dwi]
[app.main.data.workspace.shapes :as dwsh]
+ [app.main.data.workspace.tokens.application :as dwta]
[app.main.data.workspace.transforms :as dwt]
[app.main.data.workspace.undo :as dwu]
+ [app.main.features :as features]
[app.main.refs :as refs]
[app.main.store :as st]
[app.main.ui.components.dropdown :refer [dropdown]]
- [app.main.ui.components.numeric-input :refer [numeric-input*]]
+ [app.main.ui.components.numeric-input :as deprecated-input]
[app.main.ui.components.radio-buttons :refer [radio-button radio-buttons]]
+ [app.main.ui.context :as muc]
[app.main.ui.ds.buttons.icon-button :refer [icon-button*]]
+ [app.main.ui.ds.controls.numeric-input :refer [numeric-input*]]
[app.main.ui.ds.foundations.assets.icon :refer [icon*] :as i]
[app.main.ui.icons :as deprecated-icon]
[app.main.ui.workspace.sidebar.options.menus.border-radius :refer [border-radius-menu*]]
@@ -87,13 +92,41 @@
shape)]
(select-keys shape measure-attrs)))
+(mf/defc numeric-input-wrapper*
+ {::mf/private true}
+ [{:keys [values name applied-tokens align on-detach] :rest props}]
+ (let [tokens (mf/use-ctx muc/active-tokens-by-type)
+ tokens (mf/with-memo [tokens name]
+ (delay
+ (-> (deref tokens)
+ (select-keys (get tk/tokens-by-input name))
+ (not-empty))))
+ on-detach-attr
+ (mf/use-fn
+ (mf/deps on-detach name)
+ #(on-detach % name))
+
+ props (mf/spread-props props
+ {:placeholder (if (or (= :multiple (:applied-tokens values))
+ (= :multiple (get values name)))
+ (tr "settings.multiple") "--")
+ :class (stl/css :numeric-input-measures)
+ :applied-token (get applied-tokens name)
+ :tokens tokens
+ :align align
+ :on-detach on-detach-attr
+ :value (get values name)})]
+ [:> numeric-input* props]))
+
(def ^:private xf:map-type (map :type))
(def ^:private xf:mapcat-type-to-options (mapcat type->options))
(mf/defc measures-menu*
- {::mf/memo true}
- [{:keys [ids values type shapes]}]
- (let [all-types
+ [{:keys [ids values applied-tokens type shapes]}]
+ (let [token-numeric-inputs
+ (features/use-feature "tokens/numeric-input")
+
+ all-types
(mf/with-memo [type shapes]
;; We only need this when multiple type is used
(when (= type :multiple)
@@ -258,8 +291,7 @@
(st/emit! (udw/change-orientation ids (keyword orientation)))))
;; SIZE AND PROPORTION LOCK
-
- on-size-change
+ do-size-change
(mf/use-fn
(mf/deps ids)
(fn [value attr]
@@ -267,6 +299,24 @@
(st/emit! (udw/trigger-bounding-box-cloaking ids)
(udw/update-dimensions ids attr value)))))
+ on-size-change
+ (mf/use-fn
+ (mf/deps ids)
+ (fn [value attr]
+ (if (or (string? value) (int? value))
+ (do
+ (st/emit! (udw/trigger-bounding-box-cloaking ids))
+ (binding [cts/*wasm-sync* true]
+ (run! #(do-size-change value attr) shapes)))
+ (do
+ (let [resolved-value (:resolved-value (first value))]
+ (st/emit! (udw/trigger-bounding-box-cloaking ids)
+ (dwta/toggle-token {:token (first value)
+ :attrs #{attr}
+ :shapes shapes}))
+ (binding [cts/*wasm-sync* true]
+ (run! #(do-size-change resolved-value attr) shapes)))))))
+
on-proportion-lock-change
(mf/use-fn
(mf/deps ids proportion-lock)
@@ -284,19 +334,44 @@
(mf/use-fn
(mf/deps ids)
(fn [value attr]
- (st/emit! (udw/trigger-bounding-box-cloaking ids))
- (binding [cts/*wasm-sync* true]
- (run! #(do-position-change %1 value attr) shapes))))
+ (if (or (string? value) (int? value))
+ (do
+ (st/emit! (udw/trigger-bounding-box-cloaking ids))
+ (binding [cts/*wasm-sync* true]
+ (run! #(do-position-change %1 value attr) shapes)))
+ (do
+ (let [resolved-value (:resolved-value (first value))]
+ (st/emit! (udw/trigger-bounding-box-cloaking ids)
+ (dwta/toggle-token {:token (first value)
+ :attrs #{attr}
+ :shapes shapes}))
+ (binding [cts/*wasm-sync* true]
+ (run! #(do-position-change %1 resolved-value attr) shapes)))))))
;; ROTATION
+ do-rotation-change
+ (mf/use-fn
+ (mf/deps ids)
+ (fn [value]
+ (st/emit! (udw/increase-rotation ids value))))
on-rotation-change
(mf/use-fn
(mf/deps ids)
(fn [value]
- (binding [cts/*wasm-sync* true]
- (st/emit! (udw/trigger-bounding-box-cloaking ids)
- (udw/increase-rotation ids value)))))
+ (if (or (string? value) (int? value))
+ (do
+ (st/emit! (udw/trigger-bounding-box-cloaking ids))
+ (binding [cts/*wasm-sync* true]
+ (run! #(do-rotation-change value) shapes)))
+ (do
+ (let [resolved-value (:resolved-value (first value))]
+ (st/emit! (udw/trigger-bounding-box-cloaking ids)
+ (dwta/toggle-token {:token (first value)
+ :attrs #{:rotation}
+ :shapes shapes}))
+ (binding [cts/*wasm-sync* true]
+ (run! #(do-rotation-change resolved-value) shapes)))))))
on-width-change
(mf/use-fn (mf/deps on-size-change) #(on-size-change % :width))
@@ -310,6 +385,16 @@
on-pos-y-change
(mf/use-fn (mf/deps on-position-change) #(on-position-change % :y))
+
+ ;; DETACH
+ on-detach-token
+ (mf/use-fn
+ (mf/deps ids)
+ (fn [token attr]
+ (st/emit! (dwta/unapply-token {:token (first token)
+ :attributes #{attr}
+ :shape-ids ids}))))
+
;; CLIP CONTENT AND SHOW IN VIEWER
on-change-clip-content
(mf/use-fn
@@ -392,78 +477,144 @@
(when (options :size)
[:div {:class (stl/css :size)}
- [:div {:class (stl/css-case :width true
- :disabled disabled-width-sizing?)
- :title (tr "workspace.options.width")}
- [:span {:class (stl/css :icon-text)} "W"]
- [:> numeric-input* {:min 0.01
- :no-validate true
- :placeholder (if (= :multiple (:width values)) (tr "settings.multiple") "--")
- :on-change on-width-change
- :disabled disabled-width-sizing?
- :class (stl/css :numeric-input)
- :value (:width values)}]]
- [:div {:class (stl/css-case :height true
- :disabled disabled-height-sizing?)
- :title (tr "workspace.options.height")}
- [:span {:class (stl/css :icon-text)} "H"]
- [:> numeric-input* {:min 0.01
- :no-validate true
- :placeholder (if (= :multiple (:height values)) (tr "settings.multiple") "--")
- :on-change on-height-change
- :disabled disabled-height-sizing?
- :class (stl/css :numeric-input)
- :value (:height values)}]]
+ (if token-numeric-inputs
+ [:*
+ [:> numeric-input-wrapper*
+ {:disabled disabled-width-sizing?
+ :on-change on-width-change
+ :on-detach on-detach-token
+ :icon i/character-w
+ :min 0.01
+ :name :width
+ :property (tr "workspace.options.width")
+ :applied-tokens applied-tokens
+ :values values}]
+
+ [:> numeric-input-wrapper*
+ {:disabled disabled-height-sizing?
+ :on-change on-height-change
+ :on-detach on-detach-token
+ :min 0.01
+ :icon i/character-h
+ :name :height
+ :align :right
+ :property (tr "workspace.options.height")
+ :applied-tokens applied-tokens
+ :values values}]]
+
+ [:*
+ [:div {:class (stl/css-case :width true
+ :disabled disabled-width-sizing?)
+ :title (tr "workspace.options.width")}
+ [:span {:class (stl/css :icon-text)} "W"]
+ [:> deprecated-input/numeric-input*
+ {:min 0.01
+ :no-validate true
+ :placeholder (if (= :multiple (:width values)) (tr "settings.multiple") "--")
+ :on-change on-width-change
+ :disabled disabled-width-sizing?
+ :class (stl/css :numeric-input)
+ :value (:width values)}]]
+ [:div {:class (stl/css-case :height true
+ :disabled disabled-height-sizing?)
+ :title (tr "workspace.options.height")}
+ [:span {:class (stl/css :icon-text)} "H"]
+ [:> deprecated-input/numeric-input* {:min 0.01
+ :no-validate true
+ :placeholder (if (= :multiple (:height values)) (tr "settings.multiple") "--")
+ :on-change on-height-change
+ :disabled disabled-height-sizing?
+ :class (stl/css :numeric-input)
+ :value (:height values)}]]])
[:> icon-button* {:variant "ghost"
+ :tooltip-placement "top-left"
:icon (if proportion-lock "lock" "unlock")
:class (stl/css-case :selected (true? proportion-lock))
:disabled (= proportion-lock :multiple)
:aria-label (if proportion-lock (tr "workspace.options.size.unlock") (tr "workspace.options.size.lock"))
:on-click on-proportion-lock-change}]])
+
(when (options :position)
[:div {:class (stl/css :position)}
- [:div {:class (stl/css-case :x-position true
- :disabled disabled-position?)
- :title (tr "workspace.options.x")}
- [:span {:class (stl/css :icon-text)} "X"]
- [:> numeric-input* {:no-validate true
- :placeholder (if (= :multiple (:x values)) (tr "settings.multiple") "--")
- :on-change on-pos-x-change
- :disabled disabled-position?
- :class (stl/css :numeric-input)
- :value (:x values)}]]
+ (if token-numeric-inputs
+ [:*
+ [:> numeric-input-wrapper*
+ {:disabled disabled-position?
+ :on-change on-pos-x-change
+ :on-detach on-detach-token
+ :icon i/character-x
+ :name :x
+ :property (tr "workspace.options.x")
+ :applied-tokens applied-tokens
+ :values values}]
+ [:> numeric-input-wrapper*
+ {:disabled disabled-position?
+ :on-change on-pos-y-change
+ :on-detach on-detach-token
+ :icon i/character-y
+ :name :y
+ :align :right
+ :property (tr "workspace.options.y")
+ :applied-tokens applied-tokens
+ :values values}]]
- [:div {:class (stl/css-case :y-position true
- :disabled disabled-position?)
- :title (tr "workspace.options.y")}
- [:span {:class (stl/css :icon-text)} "Y"]
- [:> numeric-input* {:no-validate true
- :placeholder (if (= :multiple (:y values)) (tr "settings.multiple") "--")
- :disabled disabled-position?
- :on-change on-pos-y-change
- :class (stl/css :numeric-input)
- :value (:y values)}]]])
- (when (or (options :rotation)
- (options :radius))
+ [:*
+ [:div {:class (stl/css-case :x-position true
+ :disabled disabled-position?)
+ :title (tr "workspace.options.x")}
+ [:span {:class (stl/css :icon-text)} "X"]
+ [:> deprecated-input/numeric-input* {:no-validate true
+ :placeholder (if (= :multiple (:x values)) (tr "settings.multiple") "--")
+ :on-change on-pos-x-change
+ :disabled disabled-position?
+ :class (stl/css :numeric-input)
+ :value (:x values)}]]
+
+ [:div {:class (stl/css-case :y-position true
+ :disabled disabled-position?)
+ :title (tr "workspace.options.y")}
+ [:span {:class (stl/css :icon-text)} "Y"]
+ [:> deprecated-input/numeric-input* {:no-validate true
+ :placeholder (if (= :multiple (:y values)) (tr "settings.multiple") "--")
+ :disabled disabled-position?
+ :on-change on-pos-y-change
+ :class (stl/css :numeric-input)
+ :value (:y values)}]]])])
+
+ (when (or (options :rotation) (options :radius))
[:div {:class (stl/css :rotation-radius)}
(when (options :rotation)
- [:div {:class (stl/css :rotation)
- :title (tr "workspace.options.rotation")}
- [:span {:class (stl/css :icon)} deprecated-icon/rotation]
- [:> numeric-input*
- {:no-validate true
- :min -359
- :max 359
- :data-wrap true
- :placeholder (if (= :multiple (:rotation values)) (tr "settings.multiple") "--")
- :on-change on-rotation-change
- :class (stl/css :numeric-input)
- :value (:rotation values)}]])
+ (if token-numeric-inputs
+ [:> numeric-input-wrapper*
+ {:on-change on-rotation-change
+ :on-detach on-detach-token
+ :icon i/rotation
+ :min -359
+ :max 359
+ :name :rotation
+ :property (tr "workspace.options.rotation")
+ :applied-tokens applied-tokens
+ :values values}]
+
+ [:div {:class (stl/css :rotation)
+ :title (tr "workspace.options.rotation")}
+ [:span {:class (stl/css :icon)} deprecated-icon/rotation]
+ [:> deprecated-input/numeric-input*
+ {:no-validate true
+ :min -359
+ :max 359
+ :data-wrap true
+ :placeholder (if (= :multiple (:rotation values)) (tr "settings.multiple") "--")
+ :on-change on-rotation-change
+ :class (stl/css :numeric-input)
+ :value (:rotation values)}]]))
(when (options :radius)
[:> border-radius-menu* {:class (stl/css :border-radius)
:ids ids
:values values
+ :applied-tokens applied-tokens
+ :shapes shapes
:shape shape}])])
(when (or (options :clip-content) (options :show-in-viewer))
[:div {:class (stl/css :clip-show)}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/measures.scss b/frontend/src/app/main/ui/workspace/sidebar/options/menus/measures.scss
index 86d9781c80..96dee5fe7f 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/measures.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/measures.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.element-set {
display: grid;
@@ -27,12 +27,12 @@
position: relative;
grid-column: span 5;
display: flex;
- height: $s-32;
- padding: $s-8;
- border-radius: $br-8;
+ height: deprecated.$s-32;
+ padding: deprecated.$s-8;
+ border-radius: deprecated.$br-8;
.collapsed-icon {
- @include flexCenter;
+ @include deprecated.flexCenter;
cursor: pointer;
svg {
@extend .button-icon-small;
@@ -53,7 +53,7 @@
}
.select-name {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
display: flex;
justify-content: flex-start;
align-items: center;
@@ -63,14 +63,14 @@
.custom-select-dropdown {
@extend .dropdown-wrapper;
- margin-top: $s-2;
+ margin-top: deprecated.$s-2;
max-height: 70vh;
- width: $s-252;
+ width: deprecated.$s-252;
.dropdown-element {
@extend .dropdown-element-base;
.name-wrapper {
display: flex;
- gap: $s-8;
+ gap: deprecated.$s-8;
flex-grow: 1;
.preset-name {
color: var(--menu-foreground-color-rest);
@@ -81,7 +81,7 @@
}
.check-icon {
- @include flexCenter;
+ @include deprecated.flexCenter;
svg {
@extend .button-icon-small;
stroke: var(--icon-foreground);
@@ -131,9 +131,9 @@
.y-position,
.rotation {
@extend .input-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
.icon-text {
- padding-top: $s-1;
+ padding-top: deprecated.$s-1;
}
&.disabled {
@extend .disabled-input;
@@ -146,9 +146,9 @@
.lock-size-btn {
@extend .button-tertiary;
- border-radius: $br-8;
- height: $s-32;
- width: $s-28;
+ border-radius: deprecated.$br-8;
+ height: deprecated.$s-32;
+ width: deprecated.$s-28;
&.selected {
@extend .button-icon-selected;
}
@@ -163,7 +163,7 @@
display: flex;
align-items: flex-start;
justify-content: flex-start;
- gap: $s-4;
+ gap: deprecated.$s-4;
}
.clip-content,
@@ -177,7 +177,7 @@
@extend .button-tertiary;
height: var(--sp-xxxl);
width: var(--sp-xxxl);
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
}
.selected {
@@ -187,3 +187,7 @@
.checkbox-button {
@extend .button-icon;
}
+
+.numeric-input-measures {
+ --dropdown-width: 247px;
+}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs
index afc6061ae1..d517dc675b 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs
@@ -15,18 +15,12 @@
[app.main.data.workspace :as dw]
[app.main.data.workspace.colors :as dc]
[app.main.data.workspace.shapes :as dwsh]
- [app.main.data.workspace.undo :as dwu]
[app.main.store :as st]
- [app.main.ui.components.numeric-input :refer [numeric-input*]]
- [app.main.ui.components.reorder-handler :refer [reorder-handler*]]
- [app.main.ui.components.select :refer [select]]
[app.main.ui.components.title-bar :refer [title-bar*]]
[app.main.ui.ds.buttons.icon-button :refer [icon-button*]]
[app.main.ui.ds.foundations.assets.icon :as i]
[app.main.ui.hooks :as h]
- [app.main.ui.icons :as deprecated-icon]
- [app.main.ui.workspace.sidebar.options.common :refer [advanced-options]]
- [app.main.ui.workspace.sidebar.options.rows.color-row :refer [color-row*]]
+ [app.main.ui.workspace.sidebar.options.rows.shadow-row :refer [shadow-row*]]
[app.util.i18n :as i18n :refer [tr]]
[rumext.v2 :as mf]))
@@ -50,193 +44,6 @@
(filterv (fn [[idx _]] (not= idx index)))
(mapv second)))
-(mf/defc shadow-entry*
- [{:keys [index shadow is-open
- on-reorder
- on-toggle-open
- on-detach-color
- on-update
- on-remove
- on-toggle-visibility]}]
- (let [shadow-style (:style shadow)
- shadow-id (:id shadow)
-
- hidden? (:hidden shadow)
-
- on-drop
- (mf/use-fn
- (mf/deps on-reorder index)
- (fn [_ data]
- (on-reorder index (:index data))))
-
- [dprops dref]
- (h/use-sortable
- :data-type "penpot/shadow-entry"
- :on-drop on-drop
- :detect-center? false
- :data {:id (dm/str "shadow-" index)
- :index index
- :name (dm/str "Border row" index)})
-
- on-remove
- (mf/use-fn (mf/deps index) #(on-remove index))
-
- on-update-offset-x
- (mf/use-fn
- (mf/deps index)
- (fn [value]
- (st/emit! (dw/trigger-bounding-box-cloaking [shadow-id]))
- (on-update index :offset-x value)))
-
- on-update-offset-y
- (mf/use-fn
- (mf/deps index)
- (fn [value]
- (st/emit! (dw/trigger-bounding-box-cloaking [shadow-id]))
- (on-update index :offset-y value)))
-
- on-update-spread
- (mf/use-fn
- (mf/deps index)
- (fn [value]
- (st/emit! (dw/trigger-bounding-box-cloaking [shadow-id]))
- (on-update index :spread value)))
-
- on-update-blur
- (mf/use-fn
- (mf/deps index)
- (fn [value]
- (st/emit! (dw/trigger-bounding-box-cloaking [shadow-id]))
- (on-update index :blur value)))
-
- on-update-color
- (mf/use-fn
- (mf/deps index on-update)
- (fn [color]
- (st/emit! (dw/trigger-bounding-box-cloaking [shadow-id]))
- (on-update index :color color)))
-
- on-detach-color
- (mf/use-fn (mf/deps index) #(on-detach-color index))
-
- on-style-change
- (mf/use-fn
- (mf/deps index)
- (fn [value]
- (st/emit! (dw/trigger-bounding-box-cloaking [shadow-id]))
- (on-update index :style (keyword value))))
-
- on-toggle-visibility
- (mf/use-fn
- (mf/deps index)
- (fn []
- (st/emit! (dw/trigger-bounding-box-cloaking [shadow-id]))
- (on-toggle-visibility index)))
-
- on-toggle-open
- (mf/use-fn
- (mf/deps shadow-id on-toggle-open)
- #(on-toggle-open shadow-id))
-
- type-options
- (mf/with-memo []
- [{:value "drop-shadow" :label (tr "workspace.options.shadow-options.drop-shadow")}
- {:value "inner-shadow" :label (tr "workspace.options.shadow-options.inner-shadow")}])
-
- on-open-row
- (mf/use-fn #(st/emit! (dwu/start-undo-transaction :color-row)))
-
- on-close-row
- (mf/use-fn #(st/emit! (dwu/commit-undo-transaction :color-row)))]
-
- [:div {:class (stl/css-case :global/shadow-option true
- :shadow-element true
- :dnd-over-top (= (:over dprops) :top)
- :dnd-over-bot (= (:over dprops) :bot))}
- (when (some? on-reorder)
- [:> reorder-handler* {:ref dref}])
-
- [:*
- [:div {:class (stl/css :basic-options)}
- [:div {:class (stl/css-case :shadow-info true
- :hidden hidden?)}
- [:button {:class (stl/css-case :more-options true
- :selected is-open)
- :on-click on-toggle-open}
- deprecated-icon/menu]
- [:div {:class (stl/css :type-select)}
- [:& select
- {:class (stl/css :shadow-type-select)
- :default-value (d/name shadow-style)
- :options type-options
- :on-change on-style-change}]]]
- [:div {:class (stl/css :actions)}
- [:> icon-button* {:variant "ghost"
- :aria-label (tr "workspace.options.shadow-options.toggle-shadow")
- :on-click on-toggle-visibility
- :icon (if hidden? "hide" "shown")}]
- [:> icon-button* {:variant "ghost"
- :aria-label (tr "workspace.options.shadow-options.remove-shadow")
- :on-click on-remove
- :icon i/remove}]]]
- (when is-open
- [:& advanced-options {:class (stl/css :shadow-advanced-options)
- :visible? is-open
- :on-close on-toggle-open}
-
- [:div {:class (stl/css :first-row)}
- [:div {:class (stl/css :offset-x-input)
- :title (tr "workspace.options.shadow-options.offsetx")}
- [:span {:class (stl/css :input-label)}
- "X"]
- [:> numeric-input* {:class (stl/css :numeric-input)
- :no-validate true
- :placeholder "--"
- :on-change on-update-offset-x
- :value (:offset-x shadow)}]]
-
- [:div {:class (stl/css :blur-input)
- :title (tr "workspace.options.shadow-options.blur")}
- [:span {:class (stl/css :input-label)}
- (tr "workspace.options.shadow-options.blur")]
- [:> numeric-input* {:class (stl/css :numeric-input)
- :no-validate true
- :placeholder "--"
- :on-change on-update-blur
- :min 0
- :value (:blur shadow)}]]
-
- [:div {:class (stl/css :spread-input)
- :title (tr "workspace.options.shadow-options.spread")}
- [:span {:class (stl/css :input-label)}
- (tr "workspace.options.shadow-options.spread")]
- [:> numeric-input* {:class (stl/css :numeric-input)
- :no-validate true
- :placeholder "--"
- :on-change on-update-spread
- :value (:spread shadow)}]]]
-
- [:div {:class (stl/css :second-row)}
- [:div {:class (stl/css :offset-y-input)
- :title (tr "workspace.options.shadow-options.offsety")}
- [:span {:class (stl/css :input-label)}
- "Y"]
- [:> numeric-input* {:class (stl/css :numeric-input)
- :no-validate true
- :placeholder "--"
- :on-change on-update-offset-y
- :value (:offset-y shadow)}]]
-
- [:> color-row* {:class (stl/css :shadow-color)
- :color (:color shadow)
- :title (tr "workspace.options.shadow-options.color")
- :disable-gradient true
- :disable-image true
- :on-change on-update-color
- :on-detach on-detach-color
- :on-open on-open-row
- :on-close on-close-row}]]])]]))
-
(def ^:private xf:add-index
(map-indexed (fn [index shadow]
(assoc shadow ::index index))))
@@ -274,10 +81,10 @@
handle-reorder
(mf/use-fn
- (fn [new-index index]
+ (fn [from-pos to-space-between-pos]
(let [ids (mf/ref-val ids-ref)]
(st/emit! (dw/trigger-bounding-box-cloaking ids))
- (st/emit! (dc/reorder-shadows ids index new-index)))))
+ (st/emit! (dc/reorder-shadows ids from-pos to-space-between-pos)))))
on-add-shadow
(mf/use-fn
@@ -320,8 +127,8 @@
(-> shadow
(assoc attr value)
(ctss/check-shadow))))))))))]
- [:div {:class (stl/css :element-set)}
- [:div {:class (stl/css :element-title)}
+ [:div {:class (stl/css :shadow-section)}
+ [:div {:class (stl/css :shadow-title)}
[:> title-bar* {:collapsable has-shadows?
:collapsed (not show-content?)
:on-collapsed toggle-content
@@ -329,7 +136,7 @@
:multiple (tr "workspace.options.shadow-options.title.multiple")
:group (tr "workspace.options.shadow-options.title.group")
(tr "workspace.options.shadow-options.title"))
- :class (stl/css-case :title-spacing-shadow (not has-shadows?))}
+ :class (stl/css-case :shadow-title-bar (not has-shadows?))}
(when-not (= :multiple shadows)
[:> icon-button* {:variant "ghost"
@@ -341,20 +148,20 @@
(when show-content?
(cond
(= :multiple shadows)
- [:div {:class (stl/css :element-set-content)}
- [:div {:class (stl/css :multiple-shadows)}
- [:div {:class (stl/css :label)} (tr "settings.multiple")]
- [:div {:class (stl/css :actions)}
- [:> icon-button* {:variant "ghost"
- :aria-label (tr "workspace.options.shadow-options.remove-shadow")
- :on-click on-remove-all
- :icon i/remove}]]]]
+ [:div {:class (stl/css :shadow-content)}
+ [:div {:class (stl/css :shadow-multiple)}
+ [:div {:class (stl/css :shadow-multiple-label)}
+ (tr "settings.multiple")]
+ [:> icon-button* {:variant "ghost"
+ :aria-label (tr "workspace.options.shadow-options.remove-shadow")
+ :on-click on-remove-all
+ :icon i/remove}]]]
(some? shadows)
- [:& h/sortable-container {}
- [:div {:class (stl/css :element-set-content)}
+ [:> h/sortable-container* {}
+ [:div {:class (stl/css :shadow-content)}
(for [{:keys [::index id] :as shadow} shadows]
- [:> shadow-entry*
+ [:> shadow-row*
{:key (dm/str index)
:index index
:shadow shadow
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/shadow.scss b/frontend/src/app/main/ui/workspace/sidebar/options/menus/shadow.scss
index a96e67b8c4..bc922763ca 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/shadow.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/shadow.scss
@@ -4,149 +4,47 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../../../ds/_sizes.scss" as *;
-@import "refactor/common-refactor.scss";
+@use "ds/_sizes.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/typography.scss" as t;
-.element-set {
- margin: 0;
-}
-
-.title-spacing-shadow {
- margin: 0;
- padding-left: $s-2;
-}
-
-.element-set-content {
- margin-top: $s-4;
- @include flexColumn;
-}
-
-.multiple-shadows {
- @include flexRow;
-}
-
-.label {
- @extend .mixed-bar;
-}
-
-.actions {
- display: grid;
- grid-template-columns: subgrid;
- grid-column: span 2;
-}
-
-.shadow-element {
- @include flexColumn;
- position: relative;
-
- --reorder-left-position: calc(-1 * var(--sp-m) - var(--sp-xxs));
-
- &:hover {
- --reorder-icon-visibility: visible;
- }
-
- &.dnd-over-top {
- --reorder-top-display: block;
- }
-
- &.dnd-over-bot {
- --reorder-bottom-display: block;
- }
-}
-
-.basic-options {
+.shadow-section {
display: grid;
grid-template-columns: repeat(8, var(--sp-xxxl));
- gap: var(--sp-xs);
+ column-gap: var(--sp-xs);
}
-.shadow-info {
- grid-column: span 6;
+.shadow-title {
+ grid-column: span 8;
+}
+
+.shadow-title-bar {
+ padding-inline-start: var(--sp-xxs);
+}
+
+.shadow-content {
+ grid-column: span 8;
+
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-xs);
+ margin-block-start: var(--sp-xs);
+}
+
+.shadow-multiple {
display: flex;
align-items: center;
- gap: $s-1;
-
- .more-options {
- @extend .button-secondary;
- height: $s-32;
- width: $s-28;
- border-radius: $br-8 0 0 $br-8;
- svg {
- @extend .button-icon;
- }
- &.selected {
- background-color: var(--button-radio-background-color-active);
- svg {
- stroke: var(--button-radio-foreground-color-active);
- }
- }
- }
- .type-select {
- padding: 0;
- border-radius: 0 $br-8 $br-8 0;
- flex-grow: 1;
- .shadow-type-select {
- flex-grow: 1;
- border-radius: 0 $br-8 $br-8 0;
- }
- }
-
- &.hidden {
- .more-options {
- @include hiddenElement;
- border: $s-1 solid var(--input-border-color-disabled);
- }
- .type-select {
- @include hiddenElement;
- .shadow-type-select {
- @include hiddenElement;
- border: $s-1 solid var(--input-border-color-disabled);
- }
- }
- }
-}
-
-.shadow-advanced-options {
- display: grid;
- grid-template-columns: repeat(8, var(--sp-xxxl));
gap: var(--sp-xs);
}
-.first-row,
-.second-row {
- display: grid;
- grid-column: 1 / -1;
- grid-template-columns: subgrid;
-}
-
-.offset-x-input,
-.blur-input,
-.spread-input,
-.offset-y-input {
- @extend .input-element;
- @include bodySmallTypography;
-}
-
-.input-label {
- width: $sz-48;
-}
-
-.offset-x-input {
- grid-column: span 2;
-}
-
-.offset-y-input {
- grid-column: span 2;
-}
-
-.blur-input {
- grid-column: span 3;
-}
-
-.spread-input {
- grid-column: span 3;
-}
-
-.shadow-color {
- grid-column: span 6;
+.shadow-multiple-label {
+ @include t.use-typography("body-small");
+ display: flex;
+ align-items: center;
+ flex-grow: 1;
+ border-radius: $br-8;
+ block-size: $sz-32;
+ padding: var(--sp-s);
+ background-color: var(--color-background-tertiary);
+ color: var(--color-foreground-primary);
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs
index 309416698e..f18ec400dc 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs
@@ -12,12 +12,13 @@
[app.common.types.stroke :as cts]
[app.main.data.workspace :as udw]
[app.main.data.workspace.colors :as dc]
+ [app.main.data.workspace.tokens.application :as dwta]
[app.main.store :as st]
[app.main.ui.components.title-bar :refer [title-bar*]]
[app.main.ui.ds.buttons.icon-button :refer [icon-button*]]
[app.main.ui.ds.foundations.assets.icon :as i]
[app.main.ui.hooks :as h]
- [app.main.ui.workspace.sidebar.options.rows.stroke-row :refer [stroke-row]]
+ [app.main.ui.workspace.sidebar.options.rows.stroke-row :refer [stroke-row*]]
[app.util.dom :as dom]
[app.util.i18n :as i18n :refer [tr]]
[cuerdas.core :as str]
@@ -37,12 +38,12 @@
:stroke-cap-end])
(mf/defc stroke-menu
- {::mf/wrap [#(mf/memo' % (mf/check-props ["ids" "values" "type" "show-caps"]))]}
- [{:keys [ids type values show-caps disable-stroke-style] :as props}]
+ {::mf/wrap [#(mf/memo' % (mf/check-props ["ids" "values" "type" "show-caps" "applied-tokens" "shapes" "objects"]))]}
+ [{:keys [ids type values show-caps disable-stroke-style applied-tokens shapes objects] :as props}]
(let [label (case type
:multiple (tr "workspace.options.selection-stroke")
:group (tr "workspace.options.group-stroke")
- (tr "workspace.options.stroke"))
+ (tr "labels.stroke"))
state* (mf/use-state true)
open? (deref state*)
@@ -88,10 +89,9 @@
handle-reorder
(mf/use-fn
(mf/deps ids)
- (fn [new-index]
- (fn [index]
- (st/emit! (udw/trigger-bounding-box-cloaking ids))
- (st/emit! (dc/reorder-strokes ids index new-index)))))
+ (fn [from-pos to-space-between-pos]
+ (st/emit! (udw/trigger-bounding-box-cloaking ids))
+ (st/emit! (dc/reorder-strokes ids from-pos to-space-between-pos))))
on-stroke-style-change
(mf/use-fn
@@ -167,15 +167,22 @@
(reset! disable-drag true))
on-blur (fn [_]
- (reset! disable-drag false))]
+ (reset! disable-drag false))
+ on-detach-token
+ (mf/use-fn
+ (mf/deps ids)
+ (fn [token attrs]
+ (st/emit! (dwta/unapply-token {:attributes attrs
+ :token token
+ :shape-ids ids}))))]
- [:div {:class (stl/css :element-set)}
- [:div {:class (stl/css :element-title)}
+ [:div {:class (stl/css :stroke-section)}
+ [:div {:class (stl/css :stroke-title)}
[:> title-bar* {:collapsable has-strokes?
:collapsed (not open?)
:on-collapsed toggle-content
:title label
- :class (stl/css-case :title-spacing-stroke (not has-strokes?))}
+ :class (stl/css-case :stroke-title-bar (not has-strokes?))}
(when (not (= :multiple strokes))
[:> icon-button* {:variant "ghost"
:aria-label (tr "workspace.options.stroke.add-stroke")
@@ -183,39 +190,43 @@
:icon i/add
:data-testid "add-stroke"}])]]
(when open?
- [:div {:class (stl/css-case :element-content true
- :empty-content (not has-strokes?))}
+ [:div {:class (stl/css-case :stroke-content true
+ :stroke-content-empty (not has-strokes?))}
(cond
(= :multiple strokes)
- [:div {:class (stl/css :element-set-options-group)}
- [:div {:class (stl/css :group-label)}
+ [:div {:class (stl/css :stroke-multiple)}
+ [:div {:class (stl/css :stroke-multiple-label)}
(tr "settings.multiple")]
[:> icon-button* {:variant "ghost"
:aria-label (tr "workspace.options.stroke.remove-stroke")
:on-click handle-remove-all
:icon i/remove}]]
(seq strokes)
- [:& h/sortable-container {}
+ [:> h/sortable-container* {}
(for [[index value] (d/enumerate (:strokes values []))]
- [:& stroke-row {:key (dm/str "stroke-" index)
- :stroke value
- :title (tr "workspace.options.stroke-color")
- :index index
- :show-caps show-caps
- :on-color-change on-color-change
- :on-color-detach on-color-detach
- :on-stroke-width-change on-stroke-width-change
- :on-stroke-style-change on-stroke-style-change
- :on-stroke-alignment-change on-stroke-alignment-change
- :open-caps-select open-caps-select
- :close-caps-select close-caps-select
- :on-stroke-cap-start-change on-stroke-cap-start-change
- :on-stroke-cap-end-change on-stroke-cap-end-change
- :on-stroke-cap-switch on-stroke-cap-switch
- :on-remove on-remove
- :on-reorder (handle-reorder index)
- :disable-drag disable-drag
- :on-focus on-focus
- :select-on-focus (not @disable-drag)
- :on-blur on-blur
- :disable-stroke-style disable-stroke-style}])])])]))
+ [:> stroke-row* {:key (dm/str "stroke-" index)
+ :stroke value
+ :title (tr "workspace.options.stroke-color")
+ :index index
+ :shapes shapes
+ :objects objects
+ :show-caps show-caps
+ :on-color-change on-color-change
+ :on-color-detach on-color-detach
+ :on-stroke-width-change on-stroke-width-change
+ :on-stroke-style-change on-stroke-style-change
+ :on-stroke-alignment-change on-stroke-alignment-change
+ :open-caps-select open-caps-select
+ :close-caps-select close-caps-select
+ :on-stroke-cap-start-change on-stroke-cap-start-change
+ :on-stroke-cap-end-change on-stroke-cap-end-change
+ :on-stroke-cap-switch on-stroke-cap-switch
+ :applied-tokens applied-tokens
+ :on-detach-token on-detach-token
+ :on-remove on-remove
+ :on-reorder handle-reorder
+ :disable-drag disable-drag
+ :on-focus on-focus
+ :select-on-focus (not @disable-drag)
+ :on-blur on-blur
+ :disable-stroke-style disable-stroke-style}])])])]))
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/stroke.scss b/frontend/src/app/main/ui/workspace/sidebar/options/menus/stroke.scss
index 9e5bd41e17..e85f576b45 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/stroke.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/stroke.scss
@@ -4,35 +4,51 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "ds/_sizes.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/typography.scss" as t;
-.element-set {
- margin: 0;
+.stroke-section {
+ display: grid;
+ grid-template-columns: repeat(8, var(--sp-xxxl));
+ column-gap: var(--sp-xs);
}
-.element-title {
- margin: 0;
+.stroke-title {
+ grid-column: span 8;
}
-.title-spacing-stroke {
- padding-left: $s-2;
- margin: 0;
+.stroke-title-bar {
+ padding-inline-start: var(--sp-xxs);
}
-.element-content {
+.stroke-content {
+ grid-column: span 8;
+
display: flex;
flex-direction: column;
- gap: $s-12;
- margin: $s-4 0 $s-8 0;
- &.empty-content {
+ gap: var(--sp-m);
+ margin: var(--sp-xs) 0 var(--sp-s) 0;
+
+ &.stroke-content-empty {
margin: 0;
}
}
-.element-set-options-group {
- @include flexRow;
+.stroke-multiple {
+ display: flex;
+ align-items: center;
+ gap: var(--sp-xs);
}
-.group-label {
- @extend .mixed-bar;
+.stroke-multiple-label {
+ @include t.use-typography("body-small");
+ display: flex;
+ align-items: center;
+ flex-grow: 1;
+ border-radius: $br-8;
+ block-size: $sz-32;
+ padding: var(--sp-s);
+ background-color: var(--color-background-tertiary);
+ color: var(--color-foreground-primary);
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/svg_attrs.scss b/frontend/src/app/main/ui/workspace/sidebar/options/menus/svg_attrs.scss
index 87ce7989e6..50ba70a209 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/svg_attrs.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/svg_attrs.scss
@@ -4,32 +4,32 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.element-set {
margin: 0;
}
.title-spacing-svg-attrs {
- padding-left: $s-2;
+ padding-left: deprecated.$s-2;
margin: 0;
}
.element-set-content {
- @include flexColumn;
- margin: $s-4 0 0 0;
+ @include deprecated.flexColumn;
+ margin: deprecated.$s-4 0 0 0;
}
.attr-content {
display: flex;
- gap: $s-4;
+ gap: deprecated.$s-4;
}
.attr-name {
- @include bodySmallTypography;
- @include twoLineTextEllipsis;
- width: $s-88;
- margin: auto $s-4;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.twoLineTextEllipsis;
+ width: deprecated.$s-88;
+ margin: auto deprecated.$s-4;
margin-right: 0;
display: inline-block;
color: var(--title-foreground-color);
@@ -37,19 +37,19 @@
.attr-input {
@extend .input-element;
- @include bodySmallTypography;
- width: $s-124;
+ @include deprecated.bodySmallTypography;
+ width: deprecated.$s-124;
}
.attr-actions {
display: flex;
- gap: $s-4;
+ gap: deprecated.$s-4;
}
.attr-action-btn {
@extend .button-tertiary;
- width: $s-28;
- height: $s-32;
+ width: deprecated.$s-28;
+ height: deprecated.$s-32;
svg {
@extend .button-icon;
}
@@ -57,18 +57,18 @@
.attr-nested-content {
display: grid;
- row-gap: $s-4;
+ row-gap: deprecated.$s-4;
}
.attr-title {
- @include bodySmallTypography;
- font-size: $fs-10;
+ @include deprecated.bodySmallTypography;
+ font-size: deprecated.$fs-10;
text-transform: uppercase;
- margin-inline-start: $s-4;
+ margin-inline-start: deprecated.$s-4;
color: var(--color-foreground-primary);
}
.attr-row {
display: flex;
- gap: $s-4;
+ gap: deprecated.$s-4;
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/text.scss b/frontend/src/app/main/ui/workspace/sidebar/options/menus/text.scss
index 873287c59b..6090b4a2ed 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/text.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/text.scss
@@ -4,19 +4,22 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.element-set {
- margin: 0;
+ display: grid;
+ grid-template-columns: repeat(8, var(--sp-xxxl));
+ column-gap: var(--sp-xs);
}
.element-title {
- margin: 0;
+ grid-column: span 8;
}
.element-content {
- @include flexColumn;
- margin-top: $s-4;
+ grid-column: span 8;
+ @include deprecated.flexColumn;
+ margin-top: deprecated.$s-4;
}
.multiple-typography {
@@ -24,15 +27,15 @@
}
.multiple-text {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
flex-grow: 1;
color: var(--input-foreground-color-active);
}
.multiple-typography-button {
@extend .button-tertiary;
- height: $s-32;
- width: $s-28;
+ height: deprecated.$s-32;
+ width: deprecated.$s-28;
svg {
@extend .button-icon;
}
@@ -40,7 +43,7 @@
.text-align-options {
display: flex;
- gap: $s-4;
+ gap: deprecated.$s-4;
}
.align-options,
@@ -48,10 +51,10 @@
.vertical-align-options,
.grow-options,
.text-decoration-options {
- height: $s-32;
+ height: deprecated.$s-32;
}
.text-decoration-options {
display: flex;
- gap: $s-4;
+ gap: deprecated.$s-4;
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/typography.scss b/frontend/src/app/main/ui/workspace/sidebar/options/menus/typography.scss
index 02acda18b3..75be0b665d 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/typography.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/typography.scss
@@ -4,15 +4,17 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
+
+$width-settings-bar: deprecated.$s-276;
.typography-entry {
display: flex;
flex-direction: row;
align-items: center;
- height: $s-32;
+ height: deprecated.$s-32;
width: 100%;
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
background-color: var(--assets-item-background-color);
color: var(--assets-item-name-foreground-color-hover);
&:hover,
@@ -22,7 +24,7 @@
}
&.selected {
- border: $s-1 solid var(--assets-item-border-color);
+ border: deprecated.$s-1 solid var(--assets-item-border-color);
}
.element-set-actions {
@@ -31,8 +33,8 @@
.element-set-actions-button,
.menu-btn {
@extend .button-tertiary;
- height: $s-32;
- width: $s-28;
+ height: deprecated.$s-32;
+ width: deprecated.$s-28;
svg {
@extend .button-icon;
}
@@ -52,11 +54,11 @@
.typography-selection-wrapper {
display: grid;
- grid-template-columns: $s-24 auto 1fr;
+ grid-template-columns: deprecated.$s-24 auto 1fr;
flex: 1;
height: 100%;
width: 100%;
- padding: 0 $s-12;
+ padding: 0 deprecated.$s-12;
&.is-selectable {
cursor: pointer;
@@ -64,64 +66,62 @@
}
.typography-sample {
- @include flexCenter;
- min-width: $s-24;
- height: $s-32;
+ @include deprecated.flexCenter;
+ min-width: deprecated.$s-24;
+ height: deprecated.$s-32;
color: var(--assets-item-name-foreground-color);
}
.typography-name,
.typography-font {
- @include bodySmallTypography;
- @include textEllipsis;
- display: flex;
- align-items: center;
- justify-content: flex-start;
- margin-left: $s-6;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.textEllipsis;
+ display: block;
+ align-self: center;
+ margin-left: deprecated.$s-6;
+}
+
+.typography-name {
color: var(--assets-item-name-foreground-color);
}
.typography-font {
- display: flex;
- align-items: center;
- justify-content: flex-start;
- min-width: 0;
color: var(--assets-item-name-foreground-color-rest);
}
.font-name-wrapper {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
display: flex;
align-items: center;
- height: $s-32;
+ height: deprecated.$s-32;
width: 100%;
- border-radius: $br-8;
- border: $s-1 solid transparent;
+ border-radius: deprecated.$br-8;
+ border: deprecated.$s-1 solid transparent;
box-sizing: border-box;
background-color: var(--assets-item-background-color);
- margin-bottom: $s-4;
- padding: $s-8 $s-0 $s-8 $s-12;
+ margin-bottom: deprecated.$s-4;
+ padding: deprecated.$s-8 deprecated.$s-0 deprecated.$s-8 deprecated.$s-12;
.typography-sample-input {
- @include flexCenter;
- width: $s-24;
+ @include deprecated.flexCenter;
+ width: deprecated.$s-24;
height: 100%;
- font-size: $fs-16;
+ font-size: deprecated.$fs-16;
color: var(--assets-item-name-foreground-color-hover);
}
.adv-typography-name {
- @include removeInputStyle;
- font-size: $fs-12;
+ @include deprecated.removeInputStyle;
+ font-size: deprecated.$fs-12;
color: var(--input-foreground-color-active);
flex-grow: 1;
- padding-left: $s-6;
+ padding-left: deprecated.$s-6;
margin: 0;
}
.action-btn {
@extend .button-tertiary;
- @include flexCenter;
- width: $s-28;
- height: $s-28;
+ @include deprecated.flexCenter;
+ width: deprecated.$s-28;
+ height: deprecated.$s-28;
svg {
@extend .button-icon-small;
stroke: var(--icon-foreground);
@@ -131,7 +131,7 @@
}
}
&:focus-within {
- border: $s-1 solid var(--input-border-color-active);
+ border: deprecated.$s-1 solid var(--input-border-color-active);
.adv-typography-name {
color: var(--input-foreground-color-active);
}
@@ -148,39 +148,39 @@
}
.typography-info-wrapper {
- @include flexColumn;
- margin-bottom: $s-12;
+ @include deprecated.flexColumn;
+ margin-bottom: deprecated.$s-12;
.typography-name-wrapper {
@extend .asset-element;
display: grid;
- grid-template-columns: $s-24 auto 1fr $s-28;
+ grid-template-columns: deprecated.$s-24 auto 1fr deprecated.$s-28;
flex: 1;
- height: $s-32;
+ height: deprecated.$s-32;
width: 100%;
- padding: 0 0 0 $s-12;
+ padding: 0 0 0 deprecated.$s-12;
background-color: var(--assets-item-background-color-hover);
- margin-bottom: $s-4;
+ margin-bottom: deprecated.$s-4;
.typography-sample {
- @include flexCenter;
- min-width: $s-24;
- font-size: $fs-16;
- height: $s-32;
+ @include deprecated.flexCenter;
+ min-width: deprecated.$s-24;
+ font-size: deprecated.$fs-16;
+ height: deprecated.$s-32;
padding: 0;
color: var(--assets-item-name-foreground-color-hover);
}
.typography-name {
- @include bodySmallTypography;
- @include textEllipsis;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.textEllipsis;
display: flex;
align-items: center;
justify-content: flex-start;
- margin-left: $s-6;
+ margin-left: deprecated.$s-6;
color: var(--assets-item-name-foreground-color-hover);
}
.typography-font {
- @include bodySmallTypography;
- @include textEllipsis;
- margin-left: $s-6;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.textEllipsis;
+ margin-left: deprecated.$s-6;
display: flex;
align-items: center;
justify-content: flex-start;
@@ -189,8 +189,8 @@
}
.action-btn {
@extend .button-tertiary;
- width: $s-28;
- height: $s-32;
+ width: deprecated.$s-28;
+ height: deprecated.$s-32;
svg {
@extend .button-icon;
}
@@ -203,35 +203,35 @@
.info-row {
display: grid;
grid-template-columns: 50% 50%;
- height: $s-32;
- --calcualted-width: calc(var(--width) - $s-48);
- padding-left: $s-2;
+ height: deprecated.$s-32;
+ --calcualted-width: calc(var(--width) - deprecated.$s-48);
+ padding-left: deprecated.$s-2;
.info-label {
- @include bodySmallTypography;
- @include textEllipsis;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.textEllipsis;
width: calc(var(--calcualted-width) / 2);
- padding-top: $s-8;
+ padding-top: deprecated.$s-8;
color: var(--assets-item-name-foreground-color);
}
.info-content {
- @include bodySmallTypography;
- @include textEllipsis;
- padding-top: $s-8;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.textEllipsis;
+ padding-top: deprecated.$s-8;
width: calc(var(--calcualted-width) / 2);
color: var(--assets-item-name-foreground-color-hover);
}
}
.link-btn {
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
@extend .button-secondary;
width: 100%;
- height: $s-32;
- border-radius: $br-8;
+ height: deprecated.$s-32;
+ border-radius: deprecated.$br-8;
&:hover {
background-color: var(--button-secondary-background-color-hover);
color: var(--button-secondary-foreground-color-hover);
- border: $s-1 solid var(--button-secondary-border-color-hover);
+ border: deprecated.$s-1 solid var(--button-secondary-border-color-hover);
text-decoration: none;
svg {
stroke: var(--button-secondary-foreground-color-hover);
@@ -240,7 +240,7 @@
&:focus {
background-color: var(--button-secondary-background-color-focus);
color: var(--button-secondary-foreground-color-focus);
- border: $s-1 solid var(--button-secondary-border-color-focus);
+ border: deprecated.$s-1 solid var(--button-secondary-border-color-focus);
svg {
stroke: var(--button-secondary-foreground-color-focus);
}
@@ -249,22 +249,30 @@
}
.text-options {
- @include flexColumn;
+ @include deprecated.flexColumn;
+ max-width: calc(var(--width, $width-settings-bar) - deprecated.$s-16);
+
&:not(.text-options-full-size) {
position: relative;
}
.font-option {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
@extend .asset-element;
- padding: $s-8 0 $s-8 $s-8;
+ padding: deprecated.$s-8 0 deprecated.$s-8 deprecated.$s-8;
cursor: pointer;
+
.name {
flex-grow: 1;
+ display: block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ width: 100%;
}
.icon {
- @include flexCenter;
- height: $s-28;
- width: $s-28;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-28;
+ width: deprecated.$s-28;
svg {
@extend .button-icon-small;
stroke: var(--icon-foreground);
@@ -274,21 +282,21 @@
}
.font-modifiers {
display: flex;
- gap: $s-4;
+ gap: deprecated.$s-4;
.font-size-options {
@extend .asset-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
flex-grow: 1;
- width: $s-60;
+ width: deprecated.$s-60;
margin: 0;
padding: 0;
- border: $s-1 solid var(--input-border-color);
+ border: deprecated.$s-1 solid var(--input-border-color);
position: relative;
.icon {
- @include flexCenter;
- height: $s-28;
- min-width: $s-28;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-28;
+ min-width: deprecated.$s-28;
svg {
@extend .button-icon-small;
stroke: var(--icon-foreground);
@@ -302,16 +310,16 @@
}
}
.typography-variations {
- @include flexRow;
+ @include deprecated.flexRow;
.spacing-options {
- @include flexRow;
+ @include deprecated.flexRow;
.line-height,
.letter-spacing {
@extend .input-element;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
.icon {
- @include flexCenter;
- width: $s-28;
+ @include deprecated.flexCenter;
+ width: deprecated.$s-28;
svg {
@extend .button-icon-small;
}
@@ -331,35 +339,35 @@
}
.font-size-select {
- @include removeInputStyle;
- @include bodySmallTypography;
- height: $s-32;
+ @include deprecated.removeInputStyle;
+ @include deprecated.bodySmallTypography;
+ height: deprecated.$s-32;
height: 100%;
width: 100%;
margin: 0;
- padding: $s-8;
+ padding: deprecated.$s-8;
.numeric-input {
@extend .input-base;
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
padding: 0;
}
}
.font-selector {
- @include flexCenter;
+ @include deprecated.flexCenter;
position: absolute;
top: 0;
left: 0;
right: 0;
height: 100%;
width: 100%;
- z-index: $z-index-4;
+ z-index: deprecated.$z-index-4;
}
.show-recent {
- border-radius: $br-8 $br-8 0 0;
+ border-radius: deprecated.$br-8 deprecated.$br-8 0 0;
background: var(--dropdown-background-color);
- border: $s-1 solid var(--color-background-quaternary);
+ border: deprecated.$s-1 solid var(--color-background-quaternary);
border-block-end: none;
}
@@ -373,30 +381,30 @@
}
.header {
display: grid;
- row-gap: $s-2;
+ row-gap: deprecated.$s-2;
.title {
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
color: var(--title-foreground-color);
margin: 0;
- padding: $s-12;
+ padding: deprecated.$s-12;
}
}
}
.font-wrapper {
- padding-bottom: $s-4;
+ padding-bottom: deprecated.$s-4;
cursor: pointer;
}
.font-item {
@extend .asset-element;
- margin-bottom: $s-4;
- border-radius: $br-8;
+ margin-bottom: deprecated.$s-4;
+ border-radius: deprecated.$br-8;
display: flex;
.icon {
- @include flexCenter;
- height: $s-28;
- width: $s-28;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-28;
+ width: deprecated.$s-28;
svg {
@extend .button-icon-small;
stroke: var(--icon-foreground);
@@ -412,8 +420,10 @@
}
.label {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.textEllipsis;
flex-grow: 1;
+ min-width: 0;
}
}
@@ -421,7 +431,7 @@
height: calc(100vh - 48px); // TODO: ugly hack :( Find a workaround for this.
display: grid;
grid-template-rows: auto 1fr;
- padding: $s-2 $s-12 $s-12 $s-12;
+ padding: deprecated.$s-2 deprecated.$s-12 deprecated.$s-12 deprecated.$s-12;
}
.fonts-list {
@@ -432,19 +442,19 @@
min-height: 100%;
width: 100%;
height: 100%;
- padding: $s-2;
- border-radius: $br-8;
+ padding: deprecated.$s-2;
+ border-radius: deprecated.$br-8;
background-color: var(--dropdown-background-color);
overflow: hidden;
&:not(.fonts-list-full-size) {
- margin-block-start: $s-2;
+ margin-block-start: deprecated.$s-2;
}
}
.fonts-list-full-size {
border-start-start-radius: 0;
border-start-end-radius: 0;
- border: $s-1 solid var(--color-background-quaternary);
+ border: deprecated.$s-1 solid var(--color-background-quaternary);
// TODO: this should belong to typography-entry , but atm we don't have a clear
// way of accessing whether we are in fullsize mode or not
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.scss b/frontend/src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.scss
index cb5fc755ee..5d77b269d2 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -13,21 +13,21 @@
.modal-dialog {
@extend .modal-container-base;
- max-width: $s-888;
+ max-width: deprecated.$s-888;
width: 100%;
max-height: unset;
}
.modal-title {
color: var(--modal-title-foreground-color);
- margin-bottom: $s-32;
+ margin-bottom: deprecated.$s-32;
}
.modal-content {
display: flex;
color: var(--color-foreground-secondary);
- padding-block-end: $s-32;
- gap: $s-32;
+ padding-block-end: deprecated.$s-32;
+ gap: deprecated.$s-32;
}
.modal-close-btn {
@@ -35,14 +35,14 @@
}
.rule-list {
- margin: $s-32 0;
+ margin: deprecated.$s-32 0;
}
.rule-item {
display: flex;
- gap: $s-16;
+ gap: deprecated.$s-16;
align-items: center;
- margin-bottom: $s-16;
+ margin-bottom: deprecated.$s-16;
&:last-child {
margin-bottom: 0;
@@ -51,7 +51,7 @@
.rule-item-highlight {
color: var(--color-foreground-primary);
- margin-inline-end: $s-4;
+ margin-inline-end: deprecated.$s-4;
}
.rule-item-icon {
@@ -59,8 +59,8 @@
align-items: center;
justify-content: center;
flex-shrink: 0;
- width: $s-32;
- height: $s-32;
+ width: deprecated.$s-32;
+ height: deprecated.$s-32;
background: var(--color-background-quaternary);
color: var(--color-foreground-secondary);
border-radius: 90px;
@@ -87,6 +87,6 @@
flex: 0 1 50%;
img {
- border-radius: $br-8;
+ border-radius: deprecated.$br-8;
}
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/page.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/page.cljs
index f68a90f356..740750b0cf 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/page.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/page.cljs
@@ -50,6 +50,7 @@
:title (tr "workspace.options.canvas-background")
:color color
:on-change on-change
+ :origin :canvas
:on-open on-open
:on-close on-close}]]]))
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/page.scss b/frontend/src/app/main/ui/workspace/sidebar/options/page.scss
index da131647f1..d7e4cf8a20 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/page.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/page.scss
@@ -4,4 +4,4 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs
index b2bd704263..42aad3e1ba 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs
@@ -11,27 +11,27 @@
[app.common.data.macros :as dm]
[app.common.types.color :as clr]
[app.common.types.shape.attrs :refer [default-color]]
+ [app.common.types.token :as tk]
+ [app.config :as cfg]
[app.main.data.modal :as modal]
[app.main.data.workspace.colors :as dwc]
[app.main.refs :as refs]
[app.main.store :as st]
- [app.main.ui.components.color-bullet :as cb]
[app.main.ui.components.color-input :refer [color-input*]]
[app.main.ui.components.numeric-input :refer [numeric-input*]]
[app.main.ui.components.reorder-handler :refer [reorder-handler*]]
+ [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.tooltip.tooltip :refer [tooltip*]]
+ [app.main.ui.ds.utilities.swatch :refer [swatch*]]
[app.main.ui.formats :as fmt]
[app.main.ui.hooks :as h]
- [app.main.ui.icons :as deprecated-icon]
[app.util.color :as uc]
[app.util.dom :as dom]
[app.util.i18n :as i18n :refer [tr]]
[rumext.v2 :as mf]))
-(def ^:private detach-icon
- (deprecated-icon/icon-xref :detach (stl/css :detach-icon)))
-
(defn opacity->string
[opacity]
(if (= opacity :multiple)
@@ -41,39 +41,139 @@
(* 100)
(fmt/format-number)))))
-(defn remove-multiple
- [v]
- (if (= v :multiple) nil v))
+(mf/defc color-info-wrapper*
+ {::mf/private true}
+ [{:keys [color class handle-click-color children select-on-focus opacity on-focus on-blur on-opacity-change]}]
+ [:div {:class (stl/css :color-info)}
+ [:div {:class class}
+ [:div {:class (stl/css :color-bullet-wrapper)}
+ [:> swatch* {:background color
+ :on-click handle-click-color
+ :size "small"}]]
+ children]
+ (when opacity
+ [:div {:class (stl/css :opacity-element-wrapper)}
+ [:span {:class (stl/css :icon-text)} "%"]
+ [:> numeric-input* {:value (-> color :opacity opacity->string)
+ :class (stl/css :opacity-input)
+ :placeholder "--"
+ :select-on-focus select-on-focus
+ :on-focus on-focus
+ :on-blur on-blur
+ :on-change on-opacity-change
+ :data-testid "opacity-input"
+ :default 100
+ :min 0
+ :max 100}]])])
+
+(mf/defc color-token-row*
+ {::mf/private true}
+ [{:keys [active-tokens color-token color on-swatch-click-token detach-token open-modal-from-token]}]
+ (let [;; `active-tokens` may be provided as a `delay` (lazy computation).
+ ;; In that case we must deref it (`@active-tokens`) to force evaluation
+ ;; and obtain the actual value. If it’s already realized (not a delay),
+ ;; we just use it directly.
+ active-tokens (if (delay? active-tokens)
+ @active-tokens
+ active-tokens)
+
+ color-tokens (:color active-tokens)
+
+ token (some #(when (= (:name %) color-token) %) color-tokens)
+
+ on-detach-token
+ (mf/use-fn
+ (mf/deps detach-token token)
+ #(detach-token token))
+
+ has-errors (some? (:errors token))
+ token-name (:name token)
+ resolved (:resolved-value token)
+ not-active (and (some? active-tokens) (nil? token))
+ id (dm/str (:id token) "-name")
+ swatch-tooltip-content (cond
+ not-active
+ (tr "ds.inputs.token-field.no-active-token-option")
+ has-errors
+ (tr "color-row.token-color-row.deleted-token")
+ :else
+ (tr "workspace.tokens.resolved-value" resolved))
+ name-tooltip-content (cond
+ not-active
+ (tr "ds.inputs.token-field.no-active-token-option")
+ has-errors
+ (tr "color-row.token-color-row.deleted-token")
+ :else
+ #(mf/html
+ [:div
+ [:span (dm/str (tr "workspace.tokens.token-name") ": ")]
+ [:span {:class (stl/css :token-name-tooltip)} color-token]]))]
+
+ [:div {:class (stl/css :color-info)}
+ [:div {:class (stl/css-case :token-color-wrapper true
+ :token-color-with-errors has-errors
+ :token-color-not-active not-active)}
+ [:div {:class (stl/css :color-bullet-wrapper)}
+ (when (or has-errors not-active)
+ [:div {:class (stl/css :error-dot)}])
+ [:> swatch* {:background color
+ :tooltip-content swatch-tooltip-content
+ :on-click on-swatch-click-token
+ :has-errors (or has-errors not-active)
+ :size "small"}]]
+ [:> tooltip* {:content name-tooltip-content
+ :id id
+ :class (stl/css :token-tooltip)}
+ [:div {:class (stl/css :token-name)
+ :aria-labelledby id}
+ (or token-name color-token)]]
+ [:div {:class (stl/css :token-actions)}
+ [:> icon-button*
+ {:variant "action"
+ :aria-label (tr "ds.inputs.token-field.detach-token")
+ :on-click on-detach-token
+ :icon i/detach}]
+ [:> icon-button*
+ {:variant "action"
+ :aria-label (tr "ds.inputs.numeric-input.open-token-list-dropdown")
+ :on-click open-modal-from-token
+ :icon i/tokens}]]]]))
(mf/defc color-row*
[{:keys [index color class disable-gradient disable-opacity disable-image disable-picker hidden
- on-change on-reorder on-detach on-open on-close on-remove
- disable-drag on-focus on-blur select-only select-on-focus]}]
- (let [libraries (mf/deref refs/files)
+ on-change on-reorder on-detach on-open on-close on-remove origin on-detach-token
+ disable-drag on-focus on-blur select-only select-on-focus on-token-change applied-token]}]
+ (let [token-color (contains? cfg/flags :token-color)
+ libraries (mf/deref refs/files)
on-change (h/use-ref-callback on-change)
+ on-token-change (h/use-ref-callback on-token-change)
+ color-without-hash (mf/use-memo
+ (mf/deps color)
+ #(-> color :color clr/remove-hash))
file-id (or (:ref-file color) (:file-id color))
color-id (or (:ref-id color) (:id color))
src-colors (dm/get-in libraries [file-id :data :colors])
color-name (dm/get-in src-colors [color-id :name])
- multiple-colors? (uc/multiple? color)
- library-color? (and (or (:id color) (:ref-id color)) color-name (not multiple-colors?))
- gradient-color? (and (not multiple-colors?)
+ has-multiple-colors (uc/multiple? color)
+ library-color? (and (or (:id color) (:ref-id color)) color-name (not has-multiple-colors))
+ gradient-color? (and (not has-multiple-colors)
(:gradient color)
(dm/get-in color [:gradient :type]))
- image-color? (and (not multiple-colors?)
+ image-color? (and (not has-multiple-colors)
(:image color))
editing-text* (mf/use-state false)
- editing-text? (deref editing-text*)
+ is-editing-text (deref editing-text*)
- class (if (some? class) (dm/str class " ") "")
+ active-tokens* (mf/use-ctx ctx/active-tokens-by-type)
- opacity?
- (and (not multiple-colors?)
- (not library-color?)
- (not disable-opacity))
+ tokens (mf/with-memo [active-tokens* origin]
+ (delay
+ (-> (deref active-tokens*)
+ (select-keys (get tk/tokens-by-input origin))
+ (not-empty))))
on-focus'
(mf/use-fn
@@ -131,12 +231,12 @@
(st/emit! (dwc/add-recent-color color)
(on-change color index)))))
- handle-click-color
+ open-modal
(mf/use-fn
- (mf/deps disable-gradient disable-opacity disable-image disable-picker on-change on-close on-open)
- (fn [color event]
+ (mf/deps disable-gradient disable-opacity disable-image disable-picker on-change on-close on-open tokens)
+ (fn [color pos tab]
(let [color (cond
- multiple-colors?
+ has-multiple-colors
{:color default-color
:opacity 1}
@@ -145,21 +245,21 @@
:else
color)
-
- cpos (dom/get-client-position event)
- x (dm/get-prop cpos :x)
- y (dm/get-prop cpos :y)
-
- props {:x x
- :y y
+ props {:x (:x pos)
+ :y (:y pos)
:disable-gradient disable-gradient
:disable-opacity disable-opacity
:disable-image disable-image
;; on-change second parameter means if the source is the color-picker
:on-change #(on-change % index)
+ :on-token-change on-token-change
:on-close (fn [value opacity id file-id]
(when on-close
(on-close value opacity id file-id)))
+ :active-tokens tokens
+ :color-origin origin
+ :tab tab
+ :origin :sidebar
:data color}]
(when (fn? on-open)
@@ -168,6 +268,38 @@
(when-not disable-picker
(modal/show! :colorpicker props)))))
+ handle-click-color
+ (mf/use-fn
+ (mf/deps open-modal)
+ (fn [color event]
+ (let [cpos (dom/get-client-position event)]
+ (open-modal color cpos nil))))
+
+ open-modal-from-token
+ (mf/use-fn
+ (mf/deps open-modal color)
+ (fn [event]
+ (let [cpos (dom/get-client-position event)
+ x (:x cpos)
+ y (:y cpos)
+ pos {:x (- x 215)
+ :y y}]
+ (open-modal color pos :token-color))))
+
+ on-swatch-click-token
+ (mf/use-fn
+ (mf/deps open-modal)
+ (fn [color event]
+ (let [cpos (dom/get-client-position event)]
+ (open-modal color cpos :token-color))))
+
+ detach-token
+ (mf/use-fn
+ (mf/deps on-detach-token)
+ (fn [token]
+ (when on-detach-token
+ (on-detach-token token))))
+
on-remove'
(mf/use-fn
(mf/deps index)
@@ -181,8 +313,10 @@
on-drop
(mf/use-fn
(mf/deps on-reorder index)
- (fn [_ data]
- (on-reorder index (:index data))))
+ (fn [relative-pos data]
+ (let [from-pos (:index data)
+ to-space-between-pos (if (= relative-pos :bot) (inc index) index)]
+ (on-reorder from-pos to-space-between-pos))))
[dprops dref]
(if (some? on-reorder)
@@ -191,93 +325,98 @@
:on-drop on-drop
:disabled disable-drag
:detect-center? false
- :data {:id (str "color-row-" index)
- :index index
- :name (str "Color row" index)})
+ :data {:index index})
[nil nil])
-
row-class
(stl/css-case :color-data true
:hidden hidden
:dnd-over-top (= (:over dprops) :top)
:dnd-over-bot (= (:over dprops) :bot))]
-
(mf/with-effect [color prev-color disable-picker]
(when (and (not disable-picker) (not= prev-color color))
(modal/update-props! :colorpicker {:data (parse-color color)})))
[:div {:class [class row-class]}
-
;; Drag handler
(when (some? on-reorder)
[:> reorder-handler* {:ref dref}])
+ (cond
+ (and token-color applied-token)
+ [:> color-token-row* {:active-tokens tokens
+ :color-token applied-token
+ :color (dissoc color :ref-id :ref-file)
+ :on-swatch-click-token on-swatch-click-token
+ :detach-token detach-token
+ :open-modal-from-token open-modal-from-token}]
- [:div {:class (stl/css :color-info)}
- [:div {:class (stl/css-case :color-name-wrapper true
- :no-opacity (or disable-opacity
- (not opacity?))
- :library-name-wrapper library-color?
- :editing editing-text?
- :gradient-name-wrapper gradient-color?)}
- [:div {:class (stl/css :color-bullet-wrapper)}
- [:& cb/color-bullet {:color (cond-> color
- (nil? color-name) (dissoc :ref-id :ref-file))
- :mini true
- :on-click handle-click-color}]]
- (cond
- ;; Rendering a color with ID
- library-color?
- [:*
- [:div {:class (stl/css :color-name)
- :title (str color-name)}
+ library-color?
+ [:> color-info-wrapper* {:class (stl/css-case :color-name-wrapper true
+ :library-name-wrapper true)
+ :handle-click-color handle-click-color
+ :color color}
+ [:*
+ [:div {:class (stl/css :color-name)
+ :title (str color-name)}
+ (str color-name)]
+ [:> icon-button*
+ {:variant "ghost"
+ :class (stl/css :detach-btn)
+ :aria-label (tr "settings.detach")
+ :on-click detach-value
+ :icon i/detach}]]]
- (str color-name)]
- (when on-detach
- [:button
- {:class (stl/css :detach-btn)
- :title (tr "settings.detach")
- :on-click detach-value}
- detach-icon])]
+ gradient-color?
+ [:> color-info-wrapper* {:class (stl/css-case :color-name-wrapper true
+ :no-opacity disable-opacity
+ :gradient-name-wrapper true)
+ :handle-click-color handle-click-color
+ :color color
+ :opacity true
+ :select-on-focus select-on-focus
+ :on-focus on-focus'
+ :on-blur on-blur'
+ :on-opacity-change on-opacity-change}
+ [:div {:class (stl/css :color-name)}
+ (uc/gradient-type->string (dm/get-in color [:gradient :type]))]]
- ;; Rendering a gradient
- gradient-color?
- [:div {:class (stl/css :color-name)}
- (uc/gradient-type->string (dm/get-in color [:gradient :type]))]
+ image-color?
+ [:> color-info-wrapper* {:class (stl/css-case :color-name-wrapper true
+ :no-opacity disable-opacity)
+ :handle-click-color handle-click-color
+ :color color
+ :opacity true
+ :select-on-focus select-on-focus
+ :on-focus on-focus'
+ :on-blur on-blur'
+ :on-opacity-change on-opacity-change}
+ [:div {:class (stl/css :color-name)}
+ (tr "media.image")]]
- ;; Rendering an image
- image-color?
- [:div {:class (stl/css :color-name)}
- (tr "media.image")]
+ :else
+ [:> color-info-wrapper* {:class (stl/css-case :color-name-wrapper true
+ :no-opacity (or disable-opacity
+ has-multiple-colors)
+ :editing is-editing-text)
+ :handle-click-color handle-click-color
+ :color color
+ :opacity true
+ :select-on-focus select-on-focus
+ :on-focus on-focus'
+ :on-blur on-blur'
+ :on-opacity-change on-opacity-change}
- ;; Rendering a plain color
- :else
- [:span {:class (stl/css :color-input-wrapper)}
- [:> color-input* {:value (if multiple-colors?
- ""
- (-> color :color clr/remove-hash))
- :placeholder (tr "settings.multiple")
- :data-index index
- :class (stl/css :color-input)
- :on-focus on-focus'
- :on-blur on-blur'
- :on-change on-color-change}]])]
-
- (when opacity?
- [:div {:class (stl/css :opacity-element-wrapper)}
- [:span {:class (stl/css :icon-text)} "%"]
- [:> numeric-input* {:value (-> color :opacity opacity->string)
- :class (stl/css :opacity-input)
- :placeholder "--"
- :select-on-focus select-on-focus
- :on-focus on-focus'
- :on-blur on-blur'
- :on-change on-opacity-change
- :data-testid "opacity-input"
- :default 100
- :min 0
- :max 100}]])]
+ [:span {:class (stl/css :color-input-wrapper)}
+ [:> color-input* {:value (if has-multiple-colors
+ ""
+ color-without-hash)
+ :placeholder (tr "settings.multiple")
+ :data-index index
+ :class (stl/css :color-input)
+ :on-focus on-focus'
+ :on-blur on-blur'
+ :on-change on-color-change}]]])
(when (some? on-remove)
[:> icon-button* {:variant "ghost"
@@ -289,4 +428,3 @@
:aria-label (tr "settings.select-this-color")
:on-click handle-select
:icon i/move}])]))
-
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/rows/color_row.scss b/frontend/src/app/main/ui/workspace/sidebar/options/rows/color_row.scss
index ff2e897e55..6ecce7425c 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/rows/color_row.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/rows/color_row.scss
@@ -4,15 +4,18 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "ds/typography.scss" as t;
+@use "ds/_sizes.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/mixins.scss" as *;
+@use "ds/_utils.scss" as *;
.color-data {
- @include flexRow;
-
+ display: flex;
+ align-items: center;
+ gap: var(--sp-xs);
position: relative;
- --reorder-left-position: calc(-1 * var(--sp-m) - var(--sp-xxs));
-
&:hover {
--reorder-icon-visibility: visible;
}
@@ -34,156 +37,289 @@
--detach-icon-foreground-color: none;
display: grid;
- flex: 1;
grid-template-columns: 1fr auto;
align-items: center;
- gap: $s-2;
- border-radius: $s-8;
- background-color: var(--input-details-color);
- height: $s-32;
+ flex: 1;
+ gap: var(--sp-xxs);
+ block-size: $sz-32;
+ border-radius: $br-8;
+ background-color: var(--color-background-primary);
&:hover {
- --detach-icon-foreground-color: var(--input-foreground-color-active);
-
- .detach-btn,
- .select-btn {
- background-color: transparent;
- }
+ --detach-icon-foreground-color: var(--color-foreground-primary);
}
}
.color-name-wrapper {
- @extend .input-element;
- @include bodySmallTypography;
+ --color-name-wrapper-background-color: var(--color-background-tertiary);
+ --color-name-wrapper-foreground-color: var(--color-foreground-primary);
+ --color-name-wrapper-boder-color: var(--color-background-tertiary);
+ @include t.use-typography("body-small");
+ @include textEllipsis;
+ display: flex;
+ align-items: center;
flex-grow: 1;
- width: 100%;
- min-width: 0;
- border-radius: $br-8 0 0 $br-8;
+ gap: var(--sp-xs);
+ block-size: $sz-32;
+ min-inline-size: 0;
+ inline-size: 100%;
padding: 0;
margin-inline-end: 0;
- gap: $s-4;
+ border: $b-1 solid var(--color-name-wrapper-boder-color);
+ border-radius: $br-8;
+ background-color: var(--color-name-wrapper-background-color);
+ color: var(--color-name-wrapper-foreground-color);
+ border-radius: $br-8 0 0 $br-8;
- text-overflow: ellipsis;
- white-space: nowrap;
- overflow: hidden;
- input {
- padding: 0;
- }
- .color-bullet-wrapper {
- height: $s-28;
- padding: 0 $s-2 0 $s-8;
- border-radius: $br-8 0 0 $br-8;
- background-color: transparent;
- display: flex;
- align-items: center;
- &:hover {
- background-color: transparent;
- }
- }
- .color-name {
- @include bodySmallTypography;
- @include textEllipsis;
- padding-inline: $s-6;
- border-radius: $br-8;
- color: var(--input-foreground-color-active);
- }
- .detach-btn {
- @extend .button-tertiary;
- height: $s-28;
- width: $s-28;
- margin-inline-start: auto;
- border-radius: 0 $br-8 $br-8 0;
- display: none;
- }
- .detach-icon {
- @extend .button-icon;
- stroke: var(--detach-icon-foreground-color);
- }
- .color-input-wrapper {
- @include bodySmallTypography;
- display: flex;
- align-items: center;
- height: $s-28;
- padding: 0 $s-0;
- width: 100%;
- margin: 0;
- flex-grow: 1;
- background-color: var(--input-background-color);
- color: var(--input-foreground-color);
- border-radius: $br-0;
- }
&.no-opacity {
border-radius: $br-8;
.color-input-wrapper {
border-radius: $br-8;
}
}
+
&:hover {
--detach-icon-foreground-color: var(--input-foreground-color-active);
+ --color-name-wrapper-background-color: var(--color-background-quaternary);
+ --color-name-wrapper-boder-color: var(--color-background-quaternary);
- background-color: var(--input-background-color-hover);
- border: $s-1 solid var(--input-border-color-hover);
- .color-bullet-wrapper,
- .color-name,
- .detach-btn,
- .color-input-wrapper {
- background-color: var(--input-background-color-hover);
- }
.detach-btn {
- display: flex;
+ display: grid;
}
&.editing {
- background-color: var(--input-background-color-active);
- .color-bullet-wrapper,
- .color-name,
- .detach-btn,
- .color-input-wrapper {
- background-color: var(--input-background-color-active);
- }
+ --color-name-wrapper-background-color: var(--color-background-primary);
}
+
&:focus,
&:focus-within {
- background-color: var(--input-background-color-focus);
- border: $s-1 solid var(--input-border-color-focus);
+ --color-name-wrapper-background-color: var(--color-background-tertiary);
+ --color-name-wrapper-boder-color: var(--color-accent-primary);
}
}
&:focus,
&:focus-within {
- background-color: var(--input-background-color-focus);
- border: $s-1 solid var(--input-border-color-focus);
+ --color-name-wrapper-background-color: var(--color-background-tertiary);
+ --color-name-wrapper-boder-color: var(--color-accent-primary);
&:hover {
- background-color: var(--input-background-color-hover);
- border: $s-1 solid var(--input-border-color-focus);
+ --color-name-wrapper-background-color: var(--color-background-quaternary);
}
}
&.editing {
- background-color: var(--input-background-color-active);
+ --color-name-wrapper-background-color: var(--color-background-primary);
&:hover {
- border: $s-1 solid var(--input-border-color-active);
+ --color-name-wrapper-boder-color: var(--color-accent-primary);
}
}
}
+.detach-btn {
+ display: none;
+ background: var(--color-name-wrapper-background-color);
+}
+
+.color-input-wrapper {
+ @include t.use-typography("body-small");
+ display: flex;
+ align-items: center;
+ flex-grow: 1;
+ block-size: $sz-28;
+ inline-size: 100%;
+ padding: 0;
+ margin: 0;
+ background-color: var(--color-name-wrapper-background-color);
+ color: var(--color-name-wrapper-foreground-color);
+ border-radius: 0;
+}
+
+.color-name {
+ @include t.use-typography("body-small");
+ @include textEllipsis;
+ flex-grow: 1;
+ padding-inline: px2rem(6);
+ border-radius: $br-8;
+ color: var(--color-name-wrapper-foreground-color);
+}
+
+.color-bullet-wrapper {
+ display: flex;
+ align-items: center;
+ position: relative;
+ block-size: $sz-28;
+ padding: 0 var(--sp-xxs) 0 var(--sp-s);
+ border-radius: $br-8 0 0 $br-8;
+ background-color: transparent;
+ &:hover {
+ background-color: transparent;
+ }
+}
+
+.color-input {
+ @include textEllipsis;
+ border: none;
+ background: none;
+ outline: none;
+ block-size: $sz-28;
+ inline-size: 100%;
+ flex-grow: 1;
+ margin: var(--sp-xxs) 0;
+ padding: 0 0 0 px2rem(6);
+ border-radius: $br-8;
+ color: var(--input-foreground-color-active);
+ &[disabled] {
+ opacity: 0.5;
+ pointer-events: none;
+ }
+}
+
.library-name-wrapper {
border-radius: $br-8;
}
.opacity-element-wrapper {
- @extend .input-element;
- @include bodySmallTypography;
- width: $s-60;
+ --opacity-input-background-color: var(--color-background-tertiary);
+ --opacity-input-boder-color: var(--color-background-tertiary);
+
+ @include t.use-typography("body-small");
+ display: flex;
+ align-items: center;
+ block-size: $sz-32;
+ inline-size: px2rem(60);
border-radius: 0 $br-8 $br-8 0;
- .opacity-input {
- padding: 0;
- border-radius: 0 $br-8 $br-8 0;
- min-width: $s-28;
+ border: $b-1 solid var(--opacity-input-boder-color);
+ background-color: var(--opacity-input-background-color);
+
+ &:hover {
+ --opacity-input-background-color: var(--color-background-quaternary);
+ --opacity-input-boder-color: var(--color-background-quaternary);
+
+ .detach-btn {
+ display: grid;
+ }
+ &.editing {
+ --opacity-input-background-color: var(--color-background-primary);
+ }
+
+ &:focus,
+ &:focus-within {
+ --opacity-input-background-color: var(--color-background-tertiary);
+ --opacity-input-boder-color: var(--color-accent-primary);
+ }
}
- .icon-text {
- @include flexCenter;
- height: $s-32;
- margin-inline-end: $s-4;
- margin-block-start: $s-2;
+
+ &:focus,
+ &:focus-within {
+ --opacity-input-background-color: var(--color-background-tertiary);
+ --opacity-input-boder-color: var(--color-accent-primary);
+ &:hover {
+ --opacity-input-background-color: var(--color-background-quaternary);
+ }
+ }
+
+ &.editing {
+ --opacity-input-background-color: var(--color-background-primary);
+ &:hover {
+ --opacity-input-boder-color: var(--color-accent-primary);
+ }
}
}
+
+.opacity-input {
+ @include textEllipsis;
+ block-size: $sz-28;
+ min-inline-size: $sz-28;
+ flex-grow: 1;
+ inline-size: 100%;
+ padding: 0;
+ border-radius: 0 $br-8 $br-8 0;
+ border: none;
+ background: none;
+ outline: none;
+ margin: var(--sp-xxs) 0;
+ padding: 0 0 0 px2rem(6);
+ color: var(--color-foreground-primary);
+ &[disabled] {
+ opacity: 0.5;
+ pointer-events: none;
+ }
+}
+
+.icon-text {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ block-size: $sz-32;
+ margin-inline-end: var(--sp-xs);
+ margin-block-start: var(--sp-xxs);
+ color: var(--color-foreground-secondary);
+}
+
+// TOKEN ROW
+
+.token-color-wrapper {
+ --token-color-wrapper-background-color: var(--color-background-tertiary);
+ --token-color-wrapper-foreground-color: var(--color-token-foreground);
+ --token-color-wrapper-border-color: var(--color-token-border);
+ --token-actions-display: none;
+ display: grid;
+ grid-template-columns: auto 1fr auto;
+ gap: var(--sp-xs);
+ block-size: $sz-32;
+ min-inline-size: 0;
+ inline-size: 100%;
+ padding: 0;
+ margin-inline-end: 0;
+ background: var(--token-color-wrapper-background-color);
+ border: $b-1 solid var(--token-color-wrapper-border-color);
+ border-radius: $br-8;
+ &:hover {
+ --token-color-wrapper-background-color: var(--color-token-background);
+ --token-color-wrapper-foreground-color: var(--color-foreground-primary);
+ --token-color-wrapper-border-color: var(--color-token-accent);
+ --token-actions-display: flex;
+ }
+}
+
+.token-color-with-errors,
+.token-color-not-active {
+ --token-color-wrapper-background-color: var(--color-background-primary);
+ --token-color-wrapper-foreground-color: var(--color-foreground-secondary);
+ --token-color-wrapper-border-color: var(--color-token-border);
+ &:hover {
+ --token-color-wrapper-background-color: var(--color-background-primary);
+ --token-color-wrapper-foreground-color: var(--color-foreground-secondary);
+ --token-color-wrapper-border-color: var(--color-token-background);
+ --token-actions-display: flex;
+ }
+}
+
+.token-name {
+ @include t.use-typography("body-small");
+ @include textEllipsis;
+ color: var(--token-color-wrapper-foreground-color);
+ block-size: $sz-32;
+ display: flex;
+ align-items: center;
+}
+
+.token-name-tooltip {
+ color: var(--color-foreground-primary);
+}
+
+.token-actions {
+ display: var(--token-actions-display);
+ justify-self: flex-end;
+ align-items: center;
+}
+
+.error-dot {
+ inline-size: px2rem(4);
+ block-size: px2rem(4);
+ border-radius: 50%;
+ background-color: var(--color-foreground-error);
+ margin-inline-start: var(--sp-xs);
+ position: absolute;
+ inset-inline-end: px2rem(1);
+ inset-block-start: px2rem(5);
+}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/rows/shadow_row.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/rows/shadow_row.cljs
new file mode 100644
index 0000000000..e361615511
--- /dev/null
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/rows/shadow_row.cljs
@@ -0,0 +1,210 @@
+;; 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.sidebar.options.rows.shadow-row
+ (:require-macros [app.main.style :as stl])
+ (:require
+ [app.common.data :as d]
+ [app.main.data.workspace :as dw]
+ [app.main.data.workspace.undo :as dwu]
+ [app.main.store :as st]
+ [app.main.ui.components.numeric-input :refer [numeric-input*]]
+ [app.main.ui.components.reorder-handler :refer [reorder-handler*]]
+ [app.main.ui.components.select :refer [select]]
+ [app.main.ui.ds.buttons.icon-button :refer [icon-button*]]
+ [app.main.ui.ds.foundations.assets.icon :as i]
+ [app.main.ui.hooks :as h]
+ [app.main.ui.workspace.sidebar.options.common :refer [advanced-options*]]
+ [app.main.ui.workspace.sidebar.options.rows.color-row :refer [color-row*]]
+ [app.util.i18n :as i18n :refer [tr]]
+ [rumext.v2 :as mf]))
+
+(mf/defc shadow-row*
+ [{:keys [index shadow is-open
+ on-reorder
+ on-toggle-open
+ on-detach-color
+ on-update
+ on-remove
+ on-toggle-visibility]}]
+ (let [shadow-style (:style shadow)
+ shadow-id (:id shadow)
+
+ hidden? (:hidden shadow)
+
+ on-drop
+ (mf/use-fn
+ (mf/deps on-reorder index)
+ (fn [relative-pos data]
+ (let [from-pos (:index data)
+ to-space-between-pos (if (= relative-pos :bot) (inc index) index)]
+ (on-reorder from-pos to-space-between-pos))))
+
+ [dprops dref]
+ (h/use-sortable
+ :data-type "penpot/shadow-entry"
+ :on-drop on-drop
+ :detect-center? false
+ :data {:index index})
+
+ on-remove
+ (mf/use-fn (mf/deps index) #(on-remove index))
+
+ on-update-offset-x
+ (mf/use-fn
+ (mf/deps index)
+ (fn [value]
+ (st/emit! (dw/trigger-bounding-box-cloaking [shadow-id]))
+ (on-update index :offset-x value)))
+
+ on-update-offset-y
+ (mf/use-fn
+ (mf/deps index)
+ (fn [value]
+ (st/emit! (dw/trigger-bounding-box-cloaking [shadow-id]))
+ (on-update index :offset-y value)))
+
+ on-update-spread
+ (mf/use-fn
+ (mf/deps index)
+ (fn [value]
+ (st/emit! (dw/trigger-bounding-box-cloaking [shadow-id]))
+ (on-update index :spread value)))
+
+ on-update-blur
+ (mf/use-fn
+ (mf/deps index)
+ (fn [value]
+ (st/emit! (dw/trigger-bounding-box-cloaking [shadow-id]))
+ (on-update index :blur value)))
+
+ on-update-color
+ (mf/use-fn
+ (mf/deps index on-update)
+ (fn [color]
+ (st/emit! (dw/trigger-bounding-box-cloaking [shadow-id]))
+ (on-update index :color color)))
+
+ on-detach-color
+ (mf/use-fn (mf/deps index) #(on-detach-color index))
+
+ on-style-change
+ (mf/use-fn
+ (mf/deps index)
+ (fn [value]
+ (st/emit! (dw/trigger-bounding-box-cloaking [shadow-id]))
+ (on-update index :style (keyword value))))
+
+ on-toggle-visibility
+ (mf/use-fn
+ (mf/deps index)
+ (fn []
+ (st/emit! (dw/trigger-bounding-box-cloaking [shadow-id]))
+ (on-toggle-visibility index)))
+
+ on-toggle-open
+ (mf/use-fn
+ (mf/deps shadow-id on-toggle-open)
+ #(on-toggle-open shadow-id))
+
+ type-options
+ (mf/with-memo []
+ [{:value "drop-shadow" :label (tr "workspace.options.shadow-options.drop-shadow")}
+ {:value "inner-shadow" :label (tr "workspace.options.shadow-options.inner-shadow")}])
+
+ on-open-row
+ (mf/use-fn #(st/emit! (dwu/start-undo-transaction :color-row)))
+
+ on-close-row
+ (mf/use-fn #(st/emit! (dwu/commit-undo-transaction :color-row)))]
+
+ [:div {:class (stl/css-case :global/shadow-option true
+ :shadow-element true
+ :dnd-over-top (= (:over dprops) :top)
+ :dnd-over-bot (= (:over dprops) :bot))}
+ (when (some? on-reorder)
+ [:> reorder-handler* {:ref dref}])
+
+ [:*
+ [:div {:class (stl/css :shadow-basic)}
+ [:div {:class (stl/css :shadow-basic-info)}
+ [:> icon-button* {:variant "secondary"
+ :icon i/menu
+ :class (stl/css-case :shadow-basic-button true
+ :selected is-open)
+ :aria-label "open more options"
+ :disabled hidden?
+ :on-click on-toggle-open}]
+ [:& select {:class (stl/css :shadow-basic-select)
+ :default-value (d/name shadow-style)
+ :options type-options
+ :disabled hidden?
+ :on-change on-style-change}]]
+
+ [:div {:class (stl/css :shadow-basic-actions)}
+ [:> icon-button* {:variant "ghost"
+ :aria-label (tr "workspace.options.shadow-options.toggle-shadow")
+ :on-click on-toggle-visibility
+ :icon (if hidden? "hide" "shown")}]
+ [:> icon-button* {:variant "ghost"
+ :aria-label (tr "workspace.options.shadow-options.remove-shadow")
+ :on-click on-remove
+ :icon i/remove}]]]
+
+ (when is-open
+ [:> advanced-options* {:class (stl/css :shadow-advanced)
+ :is-visible is-open
+ :on-close on-toggle-open}
+
+ [:div {:class (stl/css :shadow-advanced-row)}
+ [:div {:class (stl/css :shadow-advanced-offset-x)
+ :title (tr "workspace.options.shadow-options.offsetx")}
+ [:span {:class (stl/css :shadow-advanced-label)}
+ "X"]
+ [:> numeric-input* {:no-validate true
+ :placeholder "--"
+ :on-change on-update-offset-x
+ :value (:offset-x shadow)}]]
+
+ [:div {:class (stl/css :shadow-advanced-blur)
+ :title (tr "workspace.options.shadow-options.blur")}
+ [:span {:class (stl/css :shadow-advanced-label)}
+ (tr "workspace.options.shadow-options.blur")]
+ [:> numeric-input* {:no-validate true
+ :placeholder "--"
+ :on-change on-update-blur
+ :min 0
+ :value (:blur shadow)}]]
+
+ [:div {:class (stl/css :shadow-advanced-spread)
+ :title (tr "workspace.options.shadow-options.spread")}
+ [:span {:class (stl/css :shadow-advanced-label)}
+ (tr "workspace.options.shadow-options.spread")]
+ [:> numeric-input* {:no-validate true
+ :placeholder "--"
+ :on-change on-update-spread
+ :value (:spread shadow)}]]]
+
+ [:div {:class (stl/css :shadow-advanced-row)}
+ [:div {:class (stl/css :shadow-advanced-offset-y)
+ :title (tr "workspace.options.shadow-options.offsety")}
+ [:span {:class (stl/css :shadow-advanced-label)}
+ "Y"]
+ [:> numeric-input* {:no-validate true
+ :placeholder "--"
+ :on-change on-update-offset-y
+ :value (:offset-y shadow)}]]
+
+ [:> color-row* {:class (stl/css :shadow-advanced-color)
+ :color (:color shadow)
+ :title (tr "workspace.options.shadow-options.color")
+ :disable-gradient true
+ :disable-image true
+ :origin :shadow
+ :on-change on-update-color
+ :on-detach on-detach-color
+ :on-open on-open-row
+ :on-close on-close-row}]]])]]))
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/rows/shadow_row.scss b/frontend/src/app/main/ui/workspace/sidebar/options/rows/shadow_row.scss
new file mode 100644
index 0000000000..79c9b5b0f4
--- /dev/null
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/rows/shadow_row.scss
@@ -0,0 +1,112 @@
+// 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/_sizes.scss" as *;
+@use "ds/typography.scss" as t;
+@use "ds/_borders.scss" as *;
+@use "ds/_utils.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
+
+.shadow-element {
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-xs);
+ position: relative;
+
+ &:hover {
+ --reorder-icon-visibility: visible;
+ }
+
+ &.dnd-over-top {
+ --reorder-top-display: block;
+ }
+
+ &.dnd-over-bot {
+ --reorder-bottom-display: block;
+ }
+}
+
+.shadow-basic {
+ display: grid;
+ grid-template-columns: repeat(8, var(--sp-xxxl));
+ gap: var(--sp-xs);
+}
+
+.shadow-basic-info {
+ grid-column: span 6;
+ display: flex;
+ align-items: center;
+ gap: px2rem(1);
+}
+
+.shadow-basic-button {
+ border-radius: $br-8 0 0 $br-8;
+
+ &.selected {
+ --button-bg-color: var(--color-background-quaternary);
+ --button-fg-color: var(--color-accent-primary);
+ }
+
+ &:disabled {
+ border: $b-1 solid var(--color-background-quaternary);
+ }
+}
+
+.shadow-basic-select {
+ flex-grow: 1;
+ border-radius: 0 $br-8 $br-8 0;
+}
+
+.shadow-basic-actions {
+ display: grid;
+ grid-template-columns: subgrid;
+ grid-column: span 2;
+}
+
+.shadow-advanced {
+ display: grid;
+ grid-template-columns: repeat(8, var(--sp-xxxl));
+ gap: var(--sp-xs);
+}
+
+.shadow-advanced-row {
+ display: grid;
+ grid-column: 1 / -1;
+ grid-template-columns: subgrid;
+}
+
+.shadow-advanced-offset-x,
+.shadow-advanced-blur,
+.shadow-advanced-spread,
+.shadow-advanced-offset-y {
+ // TODO remove this input by changing the input to DS component
+ @extend .input-element;
+ @include t.use-typography("body-small");
+ .shadow-advanced-label {
+ padding-inline-start: var(--sp-s);
+ inline-size: px2rem(60);
+ }
+}
+
+.shadow-advanced-offset-x {
+ grid-column: span 2;
+}
+
+.shadow-advanced-blur {
+ grid-column: span 3;
+}
+
+.shadow-advanced-spread {
+ grid-column: span 3;
+}
+
+.shadow-advanced-offset-y {
+ grid-column: span 2;
+}
+
+.shadow-advanced-color {
+ grid-column: span 6;
+}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs
index 9d084a2cb9..31963877ae 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs
@@ -9,17 +9,19 @@
(:require
[app.common.data :as d]
[app.common.types.color :as ctc]
+ [app.main.data.workspace.tokens.application :as dwta]
+ [app.main.store :as st]
[app.main.ui.components.numeric-input :refer [numeric-input*]]
[app.main.ui.components.reorder-handler :refer [reorder-handler*]]
[app.main.ui.components.select :refer [select]]
+ [app.main.ui.ds.buttons.icon-button :refer [icon-button*]]
+ [app.main.ui.ds.foundations.assets.icon :refer [icon*] :as i]
[app.main.ui.hooks :as h]
- [app.main.ui.icons :as deprecated-icon]
[app.main.ui.workspace.sidebar.options.rows.color-row :refer [color-row*]]
[app.util.i18n :as i18n :refer [tr]]
[rumext.v2 :as mf]))
-(mf/defc stroke-row
- {::mf/wrap-props false}
+(mf/defc stroke-row*
[{:keys [index
stroke
title
@@ -37,45 +39,54 @@
disable-drag
on-focus
on-blur
+ applied-tokens
+ on-detach-token
disable-stroke-style
- select-on-focus]}]
+ select-on-focus
+ shapes
+ objects]}]
(let [on-drop
- (fn [_ data]
- (on-reorder (:index data)))
+ (mf/use-fn
+ (mf/deps on-reorder index)
+ (fn [relative-pos data]
+ (let [from-pos (:index data)
+ to-space-between-pos (if (= relative-pos :bot) (inc index) index)]
+ (on-reorder from-pos to-space-between-pos))))
- [dprops dref] (if (some? on-reorder)
- (h/use-sortable
- :data-type "penpot/stroke-row"
- :on-drop on-drop
- :disabled @disable-drag
- :detect-center? false
- :data {:id (str "stroke-row-" index)
- :index index
- :name (str "Border row" index)})
- [nil nil])
+ [dprops dref]
+ (if (some? on-reorder)
+ (h/use-sortable
+ :data-type "penpot/stroke-row"
+ :on-drop on-drop
+ :disabled @disable-drag
+ :detect-center? false
+ :data {:index index})
+ [nil nil])
+
+ stroke-color-token (:stroke-color applied-tokens)
on-color-change-refactor
- (mf/use-callback
+ (mf/use-fn
(mf/deps index on-color-change)
(fn [color]
(on-color-change index color)))
on-color-detach
- (mf/use-callback
+ (mf/use-fn
(mf/deps index on-color-detach)
(fn [color]
(on-color-detach index color)))
on-remove
- (mf/use-callback
+ (mf/use-fn
(mf/deps index on-remove)
#(on-remove index))
stroke-width (:stroke-width stroke)
on-width-change
- (mf/use-callback
+ (mf/use-fn
(mf/deps index on-stroke-width-change)
#(on-stroke-width-change index %))
@@ -91,12 +102,35 @@
{:value :outer :label (tr "workspace.options.stroke.outer")}]))
on-alignment-change
- (mf/use-callback
+ (mf/use-fn
(mf/deps index on-stroke-alignment-change)
#(on-stroke-alignment-change index (keyword %)))
+ on-token-change
+ (mf/use-fn
+ (mf/deps shapes objects)
+ (fn [_ token]
+ (let [expanded-shapes
+ (if (= 1 (count shapes))
+ (let [shape (first shapes)]
+ (if (= (:type shape) :group)
+ (keep objects (:shapes shape))
+ [shape]))
+
+ (mapcat (fn [shape]
+ (if (= (:type shape) :group)
+ (keep objects (:shapes shape))
+ [shape]))
+ shapes))]
+
+ (st/emit!
+ (dwta/toggle-token {:token token
+ :attrs #{:stroke-color}
+ :shapes expanded-shapes})))))
+
stroke-style (or (:stroke-style stroke) :solid)
+
stroke-style-options
(mf/with-memo [stroke-style]
(d/concat-vec
@@ -108,20 +142,26 @@
{:value :mixed :label (tr "workspace.options.stroke.mixed")}]))
on-style-change
- (mf/use-callback
+ (mf/use-fn
(mf/deps index on-stroke-style-change)
#(on-stroke-style-change index (keyword %)))
on-caps-start-change
- (mf/use-callback
+ (mf/use-fn
(mf/deps index on-stroke-cap-start-change)
#(on-stroke-cap-start-change index (keyword %)))
on-caps-end-change
- (mf/use-callback
+ (mf/use-fn
(mf/deps index on-stroke-cap-end-change)
#(on-stroke-cap-end-change index (keyword %)))
+ on-detach-token-color
+ (mf/use-fn
+ (mf/deps on-detach-token)
+ (fn [token]
+ (on-detach-token token #{:stroke-color})))
+
stroke-caps-options
[{:value nil :label (tr "workspace.options.stroke-cap.none")}
:separator
@@ -135,7 +175,7 @@
{:value :square :label (tr "workspace.options.stroke-cap.square") :icon :stroke-squared}]
on-cap-switch
- (mf/use-callback
+ (mf/use-fn
(mf/deps index on-stroke-cap-switch)
#(on-stroke-cap-switch index))]
@@ -156,58 +196,51 @@
:on-detach on-color-detach
:on-remove on-remove
:disable-drag disable-drag
+ :applied-token stroke-color-token
+ :on-detach-token on-detach-token-color
+ :on-token-change on-token-change
:on-focus on-focus
+ :origin :stroke-color
:select-on-focus select-on-focus
:on-blur on-blur}]
- ;; Stroke Width, Alignment & Style
+ ;; Stroke Width, Alignment & Style
[:div {:class (stl/css :stroke-options)}
- [:div {:class (stl/css :stroke-width-input-element)
+ [:div {:class (stl/css :stroke-width-input)
:title (tr "workspace.options.stroke-width")}
- [:span {:class (stl/css :icon)}
- deprecated-icon/stroke-size]
- [:> numeric-input*
- {:min 0
- :className (stl/css :stroke-width-input)
- :value stroke-width
- :placeholder (tr "settings.multiple")
- :on-change on-width-change
- :on-focus on-focus
- :select-on-focus select-on-focus
- :on-blur on-blur}]]
+ [:> icon* {:icon-id i/stroke-size
+ :size "s"}]
+ [:> numeric-input* {:value stroke-width
+ :min 0
+ :placeholder (tr "settings.multiple")
+ :on-change on-width-change
+ :on-focus on-focus
+ :select-on-focus select-on-focus
+ :on-blur on-blur}]]
- [:div {:class (stl/css :select-wrapper :stroke-alignment-select)
+ [:div {:class (stl/css :stroke-alignment-select)
:data-testid "stroke.alignment"}
- [:& select
- {:default-value stroke-alignment
- :options stroke-alignment-options
- :on-change on-alignment-change}]]
+ [:& select {:default-value stroke-alignment
+ :options stroke-alignment-options
+ :on-change on-alignment-change}]]
(when-not disable-stroke-style
- [:div {:class (stl/css :select-wrapper :stroke-style-select)
+ [:div {:class (stl/css :stroke-style-select)
:data-testid "stroke.style"}
- [:& select
- {:default-value stroke-style
- :options stroke-style-options
- :on-change on-style-change}]])]
+ [:& select {:default-value stroke-style
+ :options stroke-style-options
+ :on-change on-style-change}]])]
;; Stroke Caps
(when show-caps
[:div {:class (stl/css :stroke-caps-options)}
- [:div {:class (stl/css :cap-select)}
- [:& select
- {:default-value (:stroke-cap-start stroke)
- :dropdown-class (stl/css :stroke-cap-dropdown-start)
- :options stroke-caps-options
- :on-change on-caps-start-change}]]
-
- [:button {:class (stl/css :swap-caps-btn)
- :on-click on-cap-switch}
- deprecated-icon/switch]
-
- [:div {:class (stl/css :cap-select)}
- [:& select
- {:default-value (:stroke-cap-end stroke)
- :dropdown-class (stl/css :stroke-cap-dropdown)
- :options stroke-caps-options
- :on-change on-caps-end-change}]]])]))
+ [:& select {:default-value (:stroke-cap-start stroke)
+ :options stroke-caps-options
+ :on-change on-caps-start-change}]
+ [:> icon-button* {:variant "secondary"
+ :aria-label (tr "labels.switch")
+ :on-click on-cap-switch
+ :icon i/switch}]
+ [:& select {:default-value (:stroke-cap-end stroke)
+ :options stroke-caps-options
+ :on-change on-caps-end-change}]])]))
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/rows/stroke_row.scss b/frontend/src/app/main/ui/workspace/sidebar/options/rows/stroke_row.scss
index fc2579a70e..1d2fe1198a 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/rows/stroke_row.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/rows/stroke_row.scss
@@ -4,10 +4,13 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "ds/typography.scss" as t;
+@use "refactor/common-refactor.scss" as deprecated;
.stroke-data {
- @include flexColumn;
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-xs);
position: relative;
@@ -31,46 +34,28 @@
align-items: center;
grid-template-columns: repeat(8, var(--sp-xxxl));
gap: var(--sp-xs);
-
- .stroke-width-input-element {
- @extend .input-element;
- @include bodySmallTypography;
- grid-column: span 2;
- }
-
- .stroke-alignment-select {
- grid-column: span 3;
- }
-
- .stroke-style-select {
- grid-column: span 3;
- }
}
+
+.stroke-width-input {
+ grid-column: span 2;
+
+ // TODO replace with numeric-input* from DS
+ @extend .input-element;
+
+ @include t.use-typography("body-small");
+ padding-inline-start: var(--sp-xs);
+}
+
+.stroke-alignment-select {
+ grid-column: span 3;
+}
+
+.stroke-style-select {
+ grid-column: span 3;
+}
+
.stroke-caps-options {
display: grid;
- --input-width: calc(var(--sp-xxxl) * 3.5 + 3 * var(--sp-xs) - var(--sp-xs) / 2);
- grid-template-columns: var(--input-width) var(--sp-xxxl) var(--input-width);
- gap: var(--sp-xs);
-}
-
-.stroke-cap-dropdown,
-.stroke-cap-dropdown-start {
- min-width: $s-124;
- width: fit-content;
- max-width: $s-252;
- right: 0;
- left: unset;
-}
-
-.stroke-cap-dropdown-start {
- left: 0;
- right: unset;
-}
-.swap-caps-btn {
- @extend .button-secondary;
- height: var(--sp-xxxl);
- width: var(--sp-xxxl);
- svg {
- @extend .button-icon;
- }
+ grid-template-columns: 1fr auto 1fr;
+ column-gap: var(--sp-xs);
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/bool.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/bool.cljs
index 56fb1dbdb2..8311104d68 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/bool.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/bool.cljs
@@ -29,6 +29,10 @@
ids (mf/with-memo [id] [id])
shapes (mf/with-memo [shape] [shape])
+ applied-tokens
+ (when (seq (get shape :applied-tokens))
+ (get shape :applied-tokens))
+
measure-values
(select-keys shape measure-attrs)
@@ -84,6 +88,7 @@
:values layer-values}]
[:> measures-menu* {:ids ids
+ :applied-tokens applied-tokens
:type type
:values measure-values
:shapes shapes}]
@@ -116,12 +121,16 @@
[:> fill/fill-menu*
{:ids ids
:type type
- :values shape}]
+ :values shape
+ :shapes shapes
+ :applied-tokens applied-tokens}]
[:& stroke-menu {:ids ids
:type type
:show-caps true
- :values stroke-values}]
+ :values stroke-values
+ :shapes shapes
+ :applied-tokens applied-tokens}]
[:> shadow-menu* {:ids ids :values (get shape :shadow)}]
[:& blur-menu {:ids ids
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/circle.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/circle.cljs
index 89e9ad4f8c..b21f0f4c5c 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/circle.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/circle.cljs
@@ -30,6 +30,9 @@
ids (mf/with-memo [id] [id])
shapes (mf/with-memo [shape] [shape])
+ applied-tokens
+ (get shape :applied-tokens)
+
measure-values
(select-keys shape measure-attrs)
@@ -84,6 +87,7 @@
:values layer-values}]
[:> measures-menu* {:ids ids
+ :applied-tokens applied-tokens
:type type
:values measure-values
:shapes shapes}]
@@ -116,10 +120,15 @@
[:> fill/fill-menu*
{:ids ids
:type type
- :values shape}]
+ :values shape
+ :shapes shapes
+ :applied-tokens applied-tokens}]
+
[:& stroke-menu {:ids ids
:type type
- :values stroke-values}]
+ :values stroke-values
+ :shapes shapes
+ :applied-tokens applied-tokens}]
[:> shadow-menu* {:ids ids :values (get shape :shadow)}]
[:& blur-menu {:ids ids
:values (select-keys shape [:blur])}]
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/frame.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/frame.cljs
index f709b90999..e3103f2642 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/frame.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/frame.cljs
@@ -12,7 +12,7 @@
[app.main.refs :as refs]
[app.main.ui.workspace.sidebar.options.menus.blur :refer [blur-menu]]
[app.main.ui.workspace.sidebar.options.menus.color-selection :refer [color-selection-menu*]]
- [app.main.ui.workspace.sidebar.options.menus.component :refer [component-menu variant-menu*]]
+ [app.main.ui.workspace.sidebar.options.menus.component :refer [component-menu* component-variant-main*]]
[app.main.ui.workspace.sidebar.options.menus.constraints :refer [constraint-attrs constraints-menu]]
[app.main.ui.workspace.sidebar.options.menus.exports :refer [exports-menu* exports-attrs]]
[app.main.ui.workspace.sidebar.options.menus.fill :as fill]
@@ -33,6 +33,9 @@
ids (mf/with-memo [shape-id] [shape-id])
shapes (mf/with-memo [shape] [shape])
+ applied-tokens
+ (get shape :applied-tokens)
+
stroke-values
(select-keys shape stroke-attrs)
@@ -99,14 +102,15 @@
:type shape-type
:values layer-values}]
[:> measures-menu* {:ids ids
+ :applied-tokens applied-tokens
:values measure-values
:type shape-type
:shapes shapes}]
- [:& component-menu {:shapes shapes}]
+ [:> component-menu* {:shapes shapes}]
(when is-variant?
- [:> variant-menu* {:shapes shapes}])
+ [:> component-variant-main* {:shapes shapes}])
[:& layout-container-menu
{:type shape-type
@@ -139,11 +143,15 @@
[:> fill/fill-menu*
{:ids ids
:type shape-type
- :values shape}]
+ :values shape
+ :shapes shapes
+ :applied-tokens applied-tokens}]
[:& stroke-menu {:ids ids
:type shape-type
- :values stroke-values}]
+ :values stroke-values
+ :shapes shapes
+ :applied-tokens applied-tokens}]
[:> color-selection-menu* {:type shape-type
:shapes shapes-with-children
:file-id file-id
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/group.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/group.cljs
index 4ef159d6d5..e9d29affcc 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/group.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/group.cljs
@@ -37,6 +37,9 @@
ids (mf/with-memo [id] [id])
shapes (mf/with-memo [shape] [shape])
+ applied-tokens
+ (get shape :applied-tokens)
+
objects
(mf/with-memo [shapes-with-children]
(d/index-by :id shapes-with-children))
@@ -87,7 +90,7 @@
[constraint-ids constraint-values]
(get-attrs shapes objects :constraint)
- [fill-ids fill-values]
+ [fill-ids fill-values fill-tokens]
(get-attrs shapes objects :fill)
[shadow-ids]
@@ -96,7 +99,7 @@
[blur-ids blur-values]
(get-attrs shapes objects :blur)
- [stroke-ids stroke-values]
+ [stroke-ids stroke-values stroke-tokens]
(get-attrs shapes objects :stroke)
[text-ids text-values]
@@ -111,6 +114,7 @@
:values layer-values}]
[:> measures-menu* {:type type
:ids measure-ids
+ :applied-tokens applied-tokens
:values measure-values
:shapes shapes}]
@@ -139,10 +143,21 @@
[:& constraints-menu {:ids constraint-ids :values constraint-values}])
(when-not (empty? fill-ids)
- [:> fill/fill-menu* {:type type :ids fill-ids :values fill-values}])
+ [:> fill/fill-menu*
+ {:type type
+ :ids fill-ids
+ :values fill-values
+ :shapes shapes
+ :objects objects
+ :applied-tokens fill-tokens}])
(when-not (empty? stroke-ids)
- [:& stroke-menu {:type type :ids stroke-ids :values stroke-values}])
+ [:& stroke-menu {:type type
+ :ids stroke-ids
+ :values stroke-values
+ :shapes shapes
+ :objects objects
+ :applied-tokens stroke-tokens}])
[:> color-selection-menu*
{:type type
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/group.scss b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/group.scss
index 06669fb047..0ff9097344 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/group.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/group.scss
@@ -4,11 +4,11 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.options {
width: 100%;
display: flex;
flex-direction: column;
- gap: $s-16;
+ gap: deprecated.$s-16;
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/multiple.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/multiple.cljs
index b19523e0f7..4c4d72347c 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/multiple.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/multiple.cljs
@@ -17,11 +17,12 @@
[app.common.types.shape.attrs :refer [editable-attrs]]
[app.common.types.shape.layout :as ctl]
[app.common.types.text :as txt]
+ [app.common.types.token :as tt]
[app.common.weak :as weak]
[app.main.refs :as refs]
[app.main.ui.workspace.sidebar.options.menus.blur :refer [blur-attrs blur-menu]]
[app.main.ui.workspace.sidebar.options.menus.color-selection :refer [color-selection-menu*]]
- [app.main.ui.workspace.sidebar.options.menus.component :refer [component-menu]]
+ [app.main.ui.workspace.sidebar.options.menus.component :refer [component-menu*]]
[app.main.ui.workspace.sidebar.options.menus.constraints :refer [constraint-attrs constraints-menu]]
[app.main.ui.workspace.sidebar.options.menus.exports :refer [exports-attrs exports-menu*]]
[app.main.ui.workspace.sidebar.options.menus.fill :as fill]
@@ -211,18 +212,34 @@
(= attr-group :blur) (attrs/get-attrs-multi [v1 v2] attrs blur-eq blur-sel)
:else (attrs/get-attrs-multi [v1 v2] attrs)))
+ merge-attr
+ (fn [acc applied-tokens t-attr]
+ "Merges a single token attribute (`t-attr`) into the accumulator map.
+ - If the attribute is not present, associates it with the new value.
+ - If the existing value equals the new value, keeps the accumulator unchanged.
+ - If there is a conflict, sets the value to `:multiple`."
+ (let [new-val (get applied-tokens t-attr)
+ existing (get acc t-attr ::not-found)]
+ (cond
+ (= existing ::not-found) (assoc acc t-attr new-val)
+ (= existing new-val) acc
+ :else (assoc acc t-attr :multiple))))
+
+ merge-shape-attr
+ (fn [acc applied-tokens shape-attr]
+ "Merges all token attributes derived from a single shape attribute
+ into the accumulator map using `merge-attr`."
+ (let [token-attrs (tt/shape-attr->token-attrs shape-attr)]
+ (reduce #(merge-attr %1 applied-tokens %2) acc token-attrs)))
+
merge-token-values
- (fn [acc keys attrs]
- (reduce
- (fn [accum key]
- (let [new-val (get attrs key)
- existing (get accum key ::not-found)]
- (cond
- (= existing ::not-found) (assoc accum key new-val)
- (= existing new-val) accum
- :else (assoc accum key :multiple))))
- acc
- keys))
+ (fn [acc shape-attrs applied-tokens]
+ "Merges token values across all shape attributes.
+ For each shape attribute, its corresponding token attributes are merged
+ into the accumulator. If applied tokens are empty, the accumulator is returned unchanged."
+ (if (seq applied-tokens)
+ (reduce #(merge-shape-attr %1 applied-tokens %2) acc shape-attrs)
+ acc))
extract-attrs
(fn [[ids values token-acc] {:keys [id type applied-tokens] :as shape}]
@@ -263,8 +280,8 @@
:children
(let [children (->> (:shapes shape []) (map #(get objects %)))
- [new-ids new-values] (get-attrs* children objects attr-group)]
- [(d/concat-vec ids new-ids) (merge-attrs values new-values) {}])
+ [new-ids new-values tokens] (get-attrs* children objects attr-group)]
+ [(d/concat-vec ids new-ids) (merge-attrs values new-values) tokens])
[])))]
@@ -376,7 +393,7 @@
[constraint-ids constraint-values]
(get-attrs shapes objects :constraint)
- [fill-ids fill-values]
+ [fill-ids fill-values fill-tokens]
(get-attrs shapes objects :fill)
[shadow-ids shadow-values]
@@ -385,7 +402,7 @@
[blur-ids blur-values]
(get-attrs shapes objects :blur)
- [stroke-ids stroke-values]
+ [stroke-ids stroke-values stroke-tokens]
(get-attrs shapes objects :stroke)
[exports-ids exports-values]
@@ -420,7 +437,7 @@
;; also don't use the memoized version of get-attrs because it
;; makes no sense because the shapes object are changed on
;; each rerender.
- [measure-ids measure-values]
+ [measure-ids measure-values measure-tokens]
(get-attrs* shapes objects :measure)]
[:div {:class (stl/css :options)}
@@ -434,10 +451,11 @@
{:type type
:ids measure-ids
:values measure-values
+ :applied-tokens measure-tokens
:shapes shapes}])
(when (some? components)
- [:& component-menu {:shapes components}])
+ [:> component-menu* {:shapes components}])
[:& layout-container-menu
{:type type
@@ -462,20 +480,28 @@
[:& ot/text-menu {:type type :ids text-ids :values text-values}])
(when-not (empty? fill-ids)
- [:> fill/fill-menu* {:type type :ids fill-ids :values fill-values}])
+ [:> fill/fill-menu* {:type type
+ :ids fill-ids
+ :values fill-values
+ :shapes shapes
+ :objects objects
+ :applied-tokens fill-tokens}])
(when-not (empty? stroke-ids)
[:& stroke-menu {:type type
:ids stroke-ids
:show-caps show-caps?
:values stroke-values
- :disable-stroke-style has-text?}])
+ :shapes shapes
+ :objects objects
+ :disable-stroke-style has-text?
+ :applied-tokens stroke-tokens}])
(when-not (empty? shapes)
[:> color-selection-menu*
{:file-id file-id
:type type
- :shapes shapes
+ :shapes (vals objects)
:libraries libraries}])
(when-not (empty? shadow-ids)
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/multiple.scss b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/multiple.scss
index 06669fb047..0ff9097344 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/multiple.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/multiple.scss
@@ -4,11 +4,11 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.options {
width: 100%;
display: flex;
flex-direction: column;
- gap: $s-16;
+ gap: deprecated.$s-16;
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/path.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/path.cljs
index bba37db31a..c1ef859746 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/path.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/path.cljs
@@ -30,6 +30,9 @@
ids (mf/with-memo [id] [id])
shapes (mf/with-memo [shape] [shape])
+ applied-tokens
+ (get shape :applied-tokens)
+
measure-values
(select-keys shape measure-attrs)
@@ -85,6 +88,7 @@
:values layer-values}]
[:> measures-menu* {:ids ids
:type type
+ :applied-tokens applied-tokens
:values measure-values
:shapes shapes}]
@@ -116,12 +120,16 @@
[:> fill/fill-menu*
{:ids ids
:type type
- :values shape}]
+ :values shape
+ :shapes shapes
+ :applied-tokens applied-tokens}]
[:& stroke-menu {:ids ids
:type type
:show-caps true
- :values stroke-values}]
+ :values stroke-values
+ :shapes shapes
+ :applied-tokens applied-tokens}]
[:> shadow-menu* {:ids ids :values (get shape :shadow)}]
[:& blur-menu {:ids ids
:values (select-keys shape [:blur])}]
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/rect.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/rect.cljs
index da138d37a5..6019e37f7b 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/rect.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/rect.cljs
@@ -30,6 +30,9 @@
ids (mf/with-memo [id] [id])
shapes (mf/with-memo [shape] [shape])
+ applied-tokens
+ (get shape :applied-tokens)
+
measure-values
(select-keys shape measure-attrs)
@@ -86,6 +89,7 @@
[:> measures-menu* {:ids ids
:type type
:values measure-values
+ :applied-tokens applied-tokens
:shapes shapes}]
[:& layout-container-menu
@@ -116,11 +120,15 @@
[:> fill/fill-menu*
{:ids ids
:type type
- :values shape}]
+ :shapes shapes
+ :values shape
+ :applied-tokens applied-tokens}]
[:& stroke-menu {:ids ids
:type type
- :values stroke-values}]
+ :shapes shapes
+ :values stroke-values
+ :applied-tokens applied-tokens}]
[:> shadow-menu* {:ids ids :values (get shape :shadow)}]
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/svg_raw.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/svg_raw.cljs
index faba956f2b..0b85529c76 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/svg_raw.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/svg_raw.cljs
@@ -95,6 +95,9 @@
ids (mf/with-memo [id] [id])
shapes (mf/with-memo [shape] [shape])
+ applied-tokens
+ (get shape :applied-tokens)
+
{:keys [tag] :as content}
(get shape :content)
@@ -153,6 +156,7 @@
[:*
[:> measures-menu* {:ids ids
:type type
+ :applied-tokens applied-tokens
:values measure-values
:shapes shapes}]
@@ -184,11 +188,15 @@
[:> fill/fill-menu*
{:ids ids
:type type
- :values fill-values}]
+ :values fill-values
+ :shapes shapes
+ :applied-tokens applied-tokens}]
[:& stroke-menu {:ids ids
:type type
- :values stroke-values}]
+ :values stroke-values
+ :shapes shapes
+ :applied-tokens applied-tokens}]
[:> shadow-menu* {:ids ids :values (get shape :shadow)}]
diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/text.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/text.cljs
index 26b1c88e4e..e267f63ce5 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/options/shapes/text.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/options/shapes/text.cljs
@@ -35,6 +35,9 @@
ids (mf/with-memo [id] [id])
shapes (mf/with-memo [shape] [shape])
+ applied-tokens
+ (get shape :applied-tokens)
+
measure-values
(select-keys shape measure-attrs)
@@ -101,12 +104,6 @@
:shape shape
:attrs (conj txt/text-fill-attrs :fills)})
- fill-values
- (if (not (contains? fill-values :fills))
- ;; Old fill format
- {:fills [fill-values]}
- fill-values)
-
text-values
(merge
(select-keys shape [:grow-type])
@@ -132,6 +129,7 @@
[:> measures-menu*
{:ids ids
:type type
+ :applied-tokens applied-tokens
:values measure-values
:shapes shapes}]
@@ -169,12 +167,16 @@
[:> fill/fill-menu*
{:ids ids
:type type
- :values fill-values}]
+ :values fill-values
+ :shapes shapes
+ :applied-tokens applied-tokens}]
[:& stroke-menu {:ids ids
:type type
:values stroke-values
- :disable-stroke-style true}]
+ :shapes shapes
+ :disable-stroke-style true
+ :applied-tokens applied-tokens}]
(when (= :multiple (:fills fill-values))
[:> color-selection-menu*
diff --git a/frontend/src/app/main/ui/workspace/sidebar/shortcuts.scss b/frontend/src/app/main/ui/workspace/sidebar/shortcuts.scss
index 1df0af953c..23aef8f116 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/shortcuts.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/shortcuts.scss
@@ -4,32 +4,32 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.shortcuts {
display: grid;
grid-template-rows: auto auto 1fr;
// TODO: Fix this once we start implementing the DS.
// We should not be doign these hardcoded calc's.
- height: calc(100vh - #{$s-60});
+ height: calc(100vh - #{deprecated.$s-60});
}
.search-field {
- margin: $s-16 $s-12 $s-4 $s-12;
+ margin: deprecated.$s-16 deprecated.$s-12 deprecated.$s-4 deprecated.$s-12;
}
.shortcuts-header {
- @include flexCenter;
- @include uppercaseTitleTipography;
+ @include deprecated.flexCenter;
+ @include deprecated.uppercaseTitleTipography;
position: relative;
- height: $s-32;
- padding: $s-2 $s-2 $s-2 0;
- margin: $s-4 $s-4 0 $s-4;
- border-radius: $br-6;
+ height: deprecated.$s-32;
+ padding: deprecated.$s-2 deprecated.$s-2 deprecated.$s-2 0;
+ margin: deprecated.$s-4 deprecated.$s-4 0 deprecated.$s-4;
+ border-radius: deprecated.$br-6;
background-color: var(--panel-title-background-color);
.shortcuts-title {
- @include flexCenter;
+ @include deprecated.flexCenter;
flex-grow: 1;
color: var(--title-foreground-color-hover);
}
@@ -46,32 +46,32 @@
}
.not-found {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--empty-message-foreground-color);
- margin: $s-12;
+ margin: deprecated.$s-12;
}
.shortcuts-list {
display: flex;
flex-direction: column;
height: 100%;
- padding: $s-12;
+ padding: deprecated.$s-12;
overflow-y: auto;
- font-size: $fs-12;
+ font-size: deprecated.$fs-12;
color: var(--title-foreground-color);
.section-title,
.subsection-title {
- @include uppercaseTitleTipography;
+ @include deprecated.uppercaseTitleTipography;
display: flex;
align-items: center;
margin: 0;
- padding: $s-8 0;
+ padding: deprecated.$s-8 0;
cursor: pointer;
.subsection-name,
.section-name {
- padding-left: $s-4;
+ padding-left: deprecated.$s-4;
}
&:hover {
@@ -81,46 +81,46 @@
.subsection-title {
text-transform: none;
- padding-left: $s-12;
+ padding-left: deprecated.$s-12;
}
.subsection-menu {
- margin-bottom: $s-4;
+ margin-bottom: deprecated.$s-4;
}
.sub-menu {
- margin-bottom: $s-4;
+ margin-bottom: deprecated.$s-4;
.shortcuts-name {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
- min-height: $s-32;
- padding: $s-6;
- margin-bottom: $s-4;
- border-radius: $br-8;
+ min-height: deprecated.$s-32;
+ padding: deprecated.$s-6;
+ margin-bottom: deprecated.$s-4;
+ border-radius: deprecated.$br-8;
background-color: var(--pill-background-color);
.command-name {
- @include bodySmallTypography;
- margin-left: $s-2;
+ @include deprecated.bodySmallTypography;
+ margin-left: deprecated.$s-2;
color: var(--pill-foreground-color);
}
.keys {
- @include flexCenter;
- gap: $s-2;
+ @include deprecated.flexCenter;
+ gap: deprecated.$s-2;
color: var(--pill-foreground-color);
.key {
- @include bodySmallTypography;
- @include flexCenter;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.flexCenter;
text-transform: capitalize;
- height: $s-20;
- padding: $s-2 $s-6;
- border-radius: $s-6;
+ height: deprecated.$s-20;
+ padding: deprecated.$s-2 deprecated.$s-6;
+ border-radius: deprecated.$s-6;
background-color: var(--menu-shortcut-background-color);
}
.space {
- margin: 0 $s-2;
+ margin: 0 deprecated.$s-2;
}
}
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/sitemap.cljs b/frontend/src/app/main/ui/workspace/sidebar/sitemap.cljs
index 57d8fa007b..28fe1cee38 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/sitemap.cljs
+++ b/frontend/src/app/main/ui/workspace/sidebar/sitemap.cljs
@@ -113,7 +113,7 @@
:data {:id id
:index index
:name (:name page)}
- :draggable? (not read-only?))
+ :draggable? (and (not read-only?) (not editing?)))
on-context-menu
(mf/use-fn
@@ -202,7 +202,7 @@
editing-page-id (mf/deref refs/editing-page-item)
current-page-id (mf/use-ctx ctx/current-page-id)]
[:ul {:class (stl/css :page-list)}
- [:& hooks/sortable-container {}
+ [:> hooks/sortable-container* {}
(for [[index page-id] (d/enumerate pages)]
[:& page-item-wrapper
{:page-id page-id
diff --git a/frontend/src/app/main/ui/workspace/sidebar/sitemap.scss b/frontend/src/app/main/ui/workspace/sidebar/sitemap.scss
index 19ae17f79e..4817c90cd9 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/sitemap.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/sitemap.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.sitemap {
position: relative;
@@ -12,21 +12,21 @@
flex-direction: column;
flex: 1;
width: 100%;
- height: var(--height, $s-200);
+ height: var(--height, deprecated.$s-200);
}
.title {
- margin-left: $s-2;
+ margin-left: deprecated.$s-2;
color: var(--title-foreground-color-hover);
}
.resize-area {
position: absolute;
- bottom: calc(-1 * $s-8);
+ bottom: calc(-1 * deprecated.$s-8);
left: 0;
width: 100%;
- height: $s-12;
- border-top: $s-2 solid var(--resize-area-border-color);
+ height: deprecated.$s-12;
+ border-top: deprecated.$s-2 solid var(--resize-area-border-color);
background-color: var(--resize-area-background-color);
cursor: ns-resize;
&:hover {
@@ -37,7 +37,7 @@
.tool-window-content {
display: flex;
flex-direction: column;
- height: calc(-38px + var(--height, $s-200));
+ height: calc(-38px + var(--height, deprecated.$s-200));
width: var(--width);
overflow-x: hidden;
overflow-y: overlay;
@@ -50,63 +50,63 @@
.pages-list {
width: 100%;
- max-height: $s-152;
- margin-bottom: $s-12;
+ max-height: deprecated.$s-152;
+ margin-bottom: deprecated.$s-12;
}
.page-element {
- @include bodySmallTypography;
- min-height: $s-32;
+ @include deprecated.bodySmallTypography;
+ min-height: deprecated.$s-32;
width: 100%;
cursor: pointer;
&.dnd-over-top {
- border-top: $s-1 solid var(--layer-row-foreground-color-drag);
+ border-top: deprecated.$s-1 solid var(--layer-row-foreground-color-drag);
}
&.dnd-over-bot {
- border-bottom: $s-1 solid var(--layer-row-foreground-color-drag);
+ border-bottom: deprecated.$s-1 solid var(--layer-row-foreground-color-drag);
}
.dnd-over > .element-list-body {
- border: $s-1 solid var(--layer-row-foreground-color-drag);
+ border: deprecated.$s-1 solid var(--layer-row-foreground-color-drag);
}
.element-list-body {
display: flex;
align-items: center;
- height: $s-32;
+ height: deprecated.$s-32;
width: 100%;
- padding: 0 $s-12 0 0;
+ padding: 0 deprecated.$s-12 0 0;
transition: none;
color: var(--layer-row-foreground-color);
.page-name {
- @include textEllipsis;
+ @include deprecated.textEllipsis;
flex-grow: 1;
- padding-left: $s-2;
+ padding-left: deprecated.$s-2;
}
.page-icon {
- @include flexCenter;
- height: $s-32;
- width: $s-24;
- padding: 0 $s-4 0 $s-8;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-32;
+ width: deprecated.$s-24;
+ padding: 0 deprecated.$s-4 0 deprecated.$s-8;
svg {
@extend .button-icon-small;
- height: $s-12;
- width: $s-12;
+ height: deprecated.$s-12;
+ width: deprecated.$s-12;
color: transparent;
fill: none;
stroke: var(--icon-foreground);
}
}
.page-actions {
- height: $s-32;
+ height: deprecated.$s-32;
button {
- @include buttonStyle;
- @include flexCenter;
- width: $s-24;
+ @include deprecated.buttonStyle;
+ @include deprecated.flexCenter;
+ width: deprecated.$s-24;
height: 100%;
- opacity: $op-0;
+ opacity: deprecated.$op-0;
svg {
@extend .button-icon-small;
- height: $s-12;
- width: $s-12;
+ height: deprecated.$s-12;
+ width: deprecated.$s-12;
color: transparent;
fill: none;
stroke: var(--icon-foreground);
@@ -114,20 +114,20 @@
}
}
.element-name {
- @include textEllipsis;
+ @include deprecated.textEllipsis;
color: var(--layer-row-foreground-color-focus);
}
input.element-name {
- @include textEllipsis;
- @include bodySmallTypography;
- @include removeInputStyle;
+ @include deprecated.textEllipsis;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.removeInputStyle;
flex-grow: 1;
- height: $s-28;
+ height: deprecated.$s-28;
max-width: calc(var(--parent-size) - (var(--depth) * var(--layer-indentation-size)));
- padding-left: $s-6;
+ padding-left: deprecated.$s-6;
margin: 0;
- border-radius: $br-8;
- border: $s-1 solid var(--input-border-color-focus);
+ border-radius: deprecated.$br-8;
+ border: deprecated.$s-1 solid var(--input-border-color-focus);
color: var(--layer-row-foreground-color);
}
}
@@ -151,7 +151,8 @@
.element-list-body {
color: var(--layer-row-foreground-color-selected);
background-color: var(--layer-row-background-color-selected);
- box-shadow: $s-16 $s-0 $s-0 $s-0 var(--layer-row-background-color-selected);
+ box-shadow: deprecated.$s-16 deprecated.$s-0 deprecated.$s-0 deprecated.$s-0
+ var(--layer-row-background-color-selected);
.page-actions button {
svg {
stroke: var(--layer-row-foreground-color-selected);
@@ -167,9 +168,10 @@
.element-list-body {
color: var(--layer-row-foreground-color-hover);
background-color: var(--layer-row-background-color-hover);
- box-shadow: $s-16 $s-0 $s-0 $s-0 var(--layer-row-background-color-hover);
+ box-shadow: deprecated.$s-16 deprecated.$s-0 deprecated.$s-0 deprecated.$s-0
+ var(--layer-row-background-color-hover);
.page-actions button {
- opacity: $op-10;
+ opacity: deprecated.$op-10;
svg {
stroke: var(--layer-row-foreground-color-hover);
}
@@ -182,10 +184,10 @@
&:focus {
.element-list-body {
color: var(--layer-row-foreground-color-focus);
- border: $s-1 solid var(--layer-row-border-color-focus);
+ border: deprecated.$s-1 solid var(--layer-row-border-color-focus);
outline: none;
.page-actions button {
- opacity: $op-10;
+ opacity: deprecated.$op-10;
}
}
}
@@ -193,7 +195,7 @@
.element-list-body {
outline: none;
.page-actions button {
- opacity: $op-10;
+ opacity: deprecated.$op-10;
}
}
}
@@ -202,7 +204,7 @@
.element-list-body {
color: var(--layer-row-foreground-color-hidden);
background-color: var(--layer-row-background-color-hidden);
- opacity: $op-7;
+ opacity: deprecated.$op-7;
.page-actions button {
svg {
stroke: var(--layer-row-foreground-color-hidden);
@@ -216,7 +218,7 @@
}
.title-spacing-sitemap {
- padding-inline-start: $s-8;
- margin-block-start: $s-8;
- margin-block-end: $s-4;
+ padding-inline-start: deprecated.$s-8;
+ margin-block-start: deprecated.$s-8;
+ margin-block-end: deprecated.$s-4;
}
diff --git a/frontend/src/app/main/ui/workspace/sidebar/versions.scss b/frontend/src/app/main/ui/workspace/sidebar/versions.scss
index 62865de402..b602d07590 100644
--- a/frontend/src/app/main/ui/workspace/sidebar/versions.scss
+++ b/frontend/src/app/main/ui/workspace/sidebar/versions.scss
@@ -4,11 +4,11 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../ds/typography.scss" as t;
-@import "refactor/common-refactor.scss";
+@use "ds/typography.scss" as t;
+@use "refactor/common-refactor.scss" as deprecated;
.version-toolbox {
- padding: $s-8;
+ padding: deprecated.$s-8;
height: 100%;
display: grid;
overflow: hidden;
@@ -20,15 +20,15 @@
color: var(--color-foreground-secondary);
display: flex;
flex-direction: column;
- font-size: $fs-12;
- gap: $s-8;
- padding: $s-16;
+ font-size: deprecated.$fs-12;
+ gap: deprecated.$s-8;
+ padding: deprecated.$s-16;
}
.versions-entry-empty-icon {
background: var(--color-background-tertiary);
border-radius: 50%;
- padding: $s-8;
+ padding: deprecated.$s-8;
display: flex;
}
@@ -36,8 +36,8 @@
font-weight: 600;
text-transform: uppercase;
color: var(--color-foreground-secondary);
- font-size: $fs-12;
- padding: $s-16 0 $s-16 $s-16;
+ font-size: deprecated.$fs-12;
+ padding: deprecated.$s-16 0 deprecated.$s-16 deprecated.$s-16;
justify-content: space-between;
width: 100%;
display: flex;
@@ -53,7 +53,7 @@
.versions-entries {
display: flex;
flex-direction: column;
- gap: $s-6;
+ gap: deprecated.$s-6;
overflow: auto;
margin: 0;
}
@@ -75,8 +75,8 @@
.version-entry {
display: flex;
- padding: $s-4 $s-4 $s-4 $s-16;
- gap: $s-8;
+ padding: deprecated.$s-4 deprecated.$s-4 deprecated.$s-4 deprecated.$s-16;
+ gap: deprecated.$s-8;
border-radius: 8px;
align-items: center;
@@ -88,7 +88,7 @@
.version-entry.is-autosave {
flex-direction: column;
align-items: start;
- padding-left: $s-48;
+ padding-left: deprecated.$s-48;
gap: 0;
}
@@ -98,8 +98,8 @@
.version-entry-avatar {
border-radius: 50%;
- width: $s-24;
- height: $s-24;
+ width: deprecated.$s-24;
+ height: deprecated.$s-24;
}
.version-entry-data {
@@ -115,7 +115,7 @@
}
.version-entry-name-edit {
- font-size: $fs-12;
+ font-size: deprecated.$fs-12;
color: var(--color-foreground-primary);
background: none;
margin: 0;
@@ -135,15 +135,15 @@
cursor: pointer;
visibility: hidden;
padding: 0;
- height: $s-40;
- width: $s-32;
+ height: deprecated.$s-40;
+ width: deprecated.$s-32;
}
.version-options-dropdown {
@extend .dropdown-wrapper;
position: absolute;
width: fit-content;
- max-width: $s-200;
+ max-width: deprecated.$s-200;
right: 0;
left: unset;
top: var(--offset);
@@ -155,7 +155,7 @@
.version-entry-snapshots {
display: flex;
align-items: center;
- gap: $s-6;
+ gap: deprecated.$s-6;
color: var(--color-foreground-secondary);
background: none;
border: 0;
@@ -184,7 +184,7 @@
.version-snapshot-list {
display: none;
- margin-top: $s-8;
+ margin-top: deprecated.$s-8;
flex-direction: column;
width: 100%;
@@ -205,7 +205,7 @@
}
.version-snapshot-entry {
- font-size: $fs-12;
+ font-size: deprecated.$fs-12;
color: var(--color-foreground-secondary);
background: none;
border: none;
diff --git a/frontend/src/app/main/ui/workspace/text_palette.scss b/frontend/src/app/main/ui/workspace/text_palette.scss
index fcbea076fa..b8b438eb89 100644
--- a/frontend/src/app/main/ui/workspace/text_palette.scss
+++ b/frontend/src/app/main/ui/workspace/text_palette.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.text-palette {
height: 100%;
@@ -12,13 +12,13 @@
}
.left-arrow,
.right-arrow {
- @include buttonStyle;
- @include flexCenter;
+ @include deprecated.buttonStyle;
+ @include deprecated.flexCenter;
position: relative;
height: 100%;
- width: $s-24;
+ width: deprecated.$s-24;
padding: 0;
- z-index: $z-index-2;
+ z-index: deprecated.$z-index-2;
svg {
@extend .button-icon;
}
@@ -26,10 +26,10 @@
content: "";
position: absolute;
bottom: 0;
- left: calc(-1 * $s-80);
+ left: calc(-1 * deprecated.$s-80);
height: 100%;
- width: $s-80;
- z-index: $z-index-1;
+ width: deprecated.$s-80;
+ z-index: deprecated.$z-index-1;
background-image: linear-gradient(
to left,
var(--palette-button-shadow-initial) 0%,
@@ -53,7 +53,7 @@
}
.left-arrow {
&::after {
- left: $s-24;
+ left: deprecated.$s-24;
background-image: linear-gradient(
to right,
var(--palette-button-shadow-initial) 0%,
@@ -76,48 +76,48 @@
.text-palette-inside {
display: flex;
- gap: $s-8;
+ gap: deprecated.$s-8;
}
.typography-item {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
display: flex;
flex-direction: column;
justify-content: center;
align-items: flex-start;
height: 100%;
- width: $s-136;
- padding: $s-8;
- border-radius: $br-8;
+ width: deprecated.$s-136;
+ padding: deprecated.$s-8;
+ border-radius: deprecated.$br-8;
background-color: var(--palette-text-background-color);
&:first-child {
- margin-left: $s-8;
+ margin-left: deprecated.$s-8;
}
.typography-name {
- @include textEllipsis;
- height: $s-16;
- width: $s-120;
+ @include deprecated.textEllipsis;
+ height: deprecated.$s-16;
+ width: deprecated.$s-120;
color: var(--palette-text-color-selected);
}
.typography-font {
- @include textEllipsis;
- height: $s-16;
- width: $s-120;
+ @include deprecated.textEllipsis;
+ height: deprecated.$s-16;
+ width: deprecated.$s-120;
color: var(--palette-text-color);
}
.typography-data {
- @include textEllipsis;
- height: $s-16;
- width: $s-120;
+ @include deprecated.textEllipsis;
+ height: deprecated.$s-16;
+ width: deprecated.$s-120;
color: var(--palette-text-color);
}
&.mid-item {
.typography-name {
- height: $s-16;
+ height: deprecated.$s-16;
}
.typography-data {
display: none;
@@ -135,6 +135,6 @@
}
.text-palette-empty {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--palette-text-color);
}
diff --git a/frontend/src/app/main/ui/workspace/text_palette_ctx_menu.scss b/frontend/src/app/main/ui/workspace/text_palette_ctx_menu.scss
index 6647385623..fe450d0b1a 100644
--- a/frontend/src/app/main/ui/workspace/text_palette_ctx_menu.scss
+++ b/frontend/src/app/main/ui/workspace/text_palette_ctx_menu.scss
@@ -4,17 +4,17 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.text-context-menu {
position: absolute;
left: auto;
bottom: var(--height);
- max-width: $s-480;
- padding: $s-4;
- margin: 0 0 $s-4 0;
- z-index: $z-index-4;
- border-radius: $br-10;
+ max-width: deprecated.$s-480;
+ padding: deprecated.$s-4;
+ margin: 0 0 deprecated.$s-4 0;
+ z-index: deprecated.$z-index-4;
+ border-radius: deprecated.$br-10;
background-color: var(--context-menu-background-color);
.palette-library,
@@ -23,33 +23,33 @@
display: flex;
justify-content: space-between;
width: 100%;
- gap: $s-8;
- padding: $s-8;
- margin-bottom: $s-4;
- border-radius: $br-8;
+ gap: deprecated.$s-8;
+ padding: deprecated.$s-8;
+ margin-bottom: deprecated.$s-4;
+ border-radius: deprecated.$br-8;
&:last-child {
margin-bottom: 0;
}
.library-name {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
color: var(--context-menu-foreground-color);
display: grid;
- grid-template-columns: 1fr $s-24;
- max-width: $s-400;
+ grid-template-columns: 1fr deprecated.$s-24;
+ max-width: deprecated.$s-400;
.lib-name {
- @include textEllipsis;
- max-width: $s-380;
+ @include deprecated.textEllipsis;
+ max-width: deprecated.$s-380;
}
.lib-num {
- margin-left: $s-4;
+ margin-left: deprecated.$s-4;
}
}
.icon-wrapper {
- margin-left: $s-4;
- @include flexCenter;
+ margin-left: deprecated.$s-4;
+ @include deprecated.flexCenter;
svg {
- @include flexCenter;
+ @include deprecated.flexCenter;
@extend .button-icon-small;
stroke: var(--icon-foreground);
}
@@ -57,9 +57,9 @@
&.selected,
&:hover {
.icon-wrapper {
- @include flexCenter;
+ @include deprecated.flexCenter;
svg {
- @include flexCenter;
+ @include deprecated.flexCenter;
@extend .button-icon-small;
stroke: var(--context-menu-foreground-color-selected);
}
diff --git a/frontend/src/app/main/ui/workspace/tokens/export.scss b/frontend/src/app/main/ui/workspace/tokens/export.scss
index 0f0e21f66d..53f9be2209 100644
--- a/frontend/src/app/main/ui/workspace/tokens/export.scss
+++ b/frontend/src/app/main/ui/workspace/tokens/export.scss
@@ -4,10 +4,10 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../ds/typography.scss" as t;
-@use "../../ds/_sizes.scss" as *;
-@use "../../ds/_borders.scss" as *;
-@import "refactor/common-refactor.scss";
+@use "ds/typography.scss" as t;
+@use "ds/_sizes.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
diff --git a/frontend/src/app/main/ui/workspace/tokens/export/modal.scss b/frontend/src/app/main/ui/workspace/tokens/export/modal.scss
index 9242470261..81d4af36f8 100644
--- a/frontend/src/app/main/ui/workspace/tokens/export/modal.scss
+++ b/frontend/src/app/main/ui/workspace/tokens/export/modal.scss
@@ -4,10 +4,9 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../../ds/typography.scss" as t;
-@use "../../../ds/_sizes.scss" as *;
-@use "../../../ds/_borders.scss" as *;
-@import "refactor/common-refactor.scss";
+@use "ds/typography.scss" as t;
+@use "ds/_sizes.scss" as *;
+@use "ds/_borders.scss" as *;
.export-modal-wrapper {
display: flex;
@@ -51,7 +50,7 @@
width: 100%;
cursor: default;
color: var(--color-foreground-secondary);
- border: $br-2 solid transparent;
+ border: $b-2 solid transparent;
}
.file-icon {
@@ -61,7 +60,11 @@
}
.file-name {
- @include textEllipsis;
+ display: block;
+ max-width: 99%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
@include t.use-typography("body-medium");
flex-grow: 1;
overflow: hidden;
diff --git a/frontend/src/app/main/ui/workspace/tokens/import.scss b/frontend/src/app/main/ui/workspace/tokens/import.scss
index 75cfbe34ae..314edf94c8 100644
--- a/frontend/src/app/main/ui/workspace/tokens/import.scss
+++ b/frontend/src/app/main/ui/workspace/tokens/import.scss
@@ -4,10 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../ds/typography.scss" as t;
-@use "../../ds/_borders.scss" as *;
-@use "../../ds/_sizes.scss" as *;
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
diff --git a/frontend/src/app/main/ui/workspace/tokens/import/modal.scss b/frontend/src/app/main/ui/workspace/tokens/import/modal.scss
index e1864ba7aa..9d8671d48d 100644
--- a/frontend/src/app/main/ui/workspace/tokens/import/modal.scss
+++ b/frontend/src/app/main/ui/workspace/tokens/import/modal.scss
@@ -4,10 +4,9 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../../ds/typography.scss" as t;
-@use "../../../ds/_borders.scss" as *;
-@use "../../../ds/_sizes.scss" as *;
-@import "refactor/common-refactor.scss";
+@use "ds/typography.scss" as t;
+@use "ds/_borders.scss" as *;
+@use "ds/_sizes.scss" as *;
.import-modal-wrapper {
display: flex;
diff --git a/frontend/src/app/main/ui/workspace/tokens/management.cljs b/frontend/src/app/main/ui/workspace/tokens/management.cljs
index ba4fbea79e..21412342cd 100644
--- a/frontend/src/app/main/ui/workspace/tokens/management.cljs
+++ b/frontend/src/app/main/ui/workspace/tokens/management.cljs
@@ -69,20 +69,20 @@
(some #(ctsl/any-layout-immediate-child? objects %) selected-shapes))
;; This only checks for the currently explicitly selected set
- ;; name, it is ephimeral and can be nil
+ ;; id, it is ephimeral and can be nil
;; FIXME: this is a repeated deref for the same `:workspace-tokens` state
- selected-token-set-name
- (mf/deref refs/selected-token-set-name)
+ selected-token-set-id
+ (mf/deref refs/selected-token-set-id)
selected-token-set
- (when selected-token-set-name
- (some-> tokens-lib (ctob/get-set selected-token-set-name)))
+ (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
selected-token-set-tokens
- (when selected-token-set
- (ctob/get-tokens-map selected-token-set))
+ (when selected-token-set-id
+ (some-> tokens-lib (ctob/get-tokens selected-token-set-id)))
tokens
(mf/with-memo [active-tokens selected-token-set-tokens]
@@ -115,26 +115,26 @@
(mf/with-memo [tokens-by-type]
(get-sorted-token-groups tokens-by-type))]
- (mf/with-effect [tokens-lib selected-token-set-name]
+ (mf/with-effect [tokens-lib selected-token-set-id]
(when (and tokens-lib
- (or (nil? selected-token-set-name)
- (and selected-token-set-name
- (not (ctob/get-set tokens-lib selected-token-set-name)))))
+ (or (nil? selected-token-set-id)
+ (and selected-token-set-id
+ (not (ctob/get-set tokens-lib selected-token-set-id)))))
(let [match (->> (ctob/get-sets tokens-lib)
(first))]
(when match
- (st/emit! (dwtl/set-selected-token-set-name (ctob/get-name match)))))))
+ (st/emit! (dwtl/set-selected-token-set-id (ctob/get-id match)))))))
[:*
[:& token-context-menu]
[:div {:class (stl/css :sets-header-container)}
- [:> text* {:as "span" :typography "headline-small" :class (stl/css :sets-header)} (tr "workspace.tokens.tokens-section-title" selected-token-set-name)]
+ [:> 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-name
+ ;; 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-name` has a value
- (when (and (some? selected-token-set-name)
- (not (token-set-active? selected-token-set-name)))
+ ;; 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)}
diff --git a/frontend/src/app/main/ui/workspace/tokens/management.scss b/frontend/src/app/main/ui/workspace/tokens/management.scss
index 57e274fb37..135d3bcc76 100644
--- a/frontend/src/app/main/ui/workspace/tokens/management.scss
+++ b/frontend/src/app/main/ui/workspace/tokens/management.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../ds/typography.scss" as *;
+@use "ds/typography.scss" as *;
.sets-header-container {
@include use-typography("headline-small");
diff --git a/frontend/src/app/main/ui/workspace/tokens/management/context_menu.cljs b/frontend/src/app/main/ui/workspace/tokens/management/context_menu.cljs
index 08c1c77ff0..a16617b0fb 100644
--- a/frontend/src/app/main/ui/workspace/tokens/management/context_menu.cljs
+++ b/frontend/src/app/main/ui/workspace/tokens/management/context_menu.cljs
@@ -12,7 +12,6 @@
[app.common.files.tokens :as cft]
[app.common.types.shape.layout :as ctsl]
[app.common.types.token :as ctt]
- [app.common.types.tokens-lib :as ctob]
[app.main.data.modal :as modal]
[app.main.data.workspace.shape-layout :as dwsl]
[app.main.data.workspace.tokens.application :as dwta]
@@ -273,6 +272,7 @@
text-case (partial generic-attribute-actions #{:text-case} "Text Case")
text-decoration (partial generic-attribute-actions #{:text-decoration} "Text Decoration")
font-weight (partial generic-attribute-actions #{:font-weight} "Font Weight")
+ typography (partial generic-attribute-actions #{:typography} "Typography")
border-radius (partial all-or-separate-actions {:attribute-labels {:r1 "Top Left"
:r2 "Top Right"
:r4 "Bottom Left"
@@ -302,6 +302,7 @@
:text-case text-case
:text-decoration text-decoration
:font-weight font-weight
+ :typography typography
:dimensions (fn [context-data]
(-> (concat
(when (seq (sizing-attribute-actions context-data)) [{:title "Sizing" :submenu :sizing}])
@@ -316,7 +317,7 @@
(generic-attribute-actions #{:y} "Y" (assoc context-data :on-update-shape dwta/update-shape-position)))
(clean-separators)))}))
-(defn default-actions [{:keys [token selected-token-set-name]}]
+(defn default-actions [{:keys [token selected-token-set-id]}]
(let [{:keys [modal]} (dwta/get-token-properties token)]
[{:title (tr "workspace.tokens.edit")
:no-selectable true
@@ -329,7 +330,7 @@
:position :right
:fields fields
:action "edit"
- :selected-token-set-name selected-token-set-name
+ :selected-token-set-id selected-token-set-id
:token token}))))}
{:title (tr "workspace.tokens.duplicate")
:no-selectable true
@@ -337,7 +338,7 @@
{:title (tr "workspace.tokens.delete")
:no-selectable true
:action #(st/emit! (dwtl/delete-token
- (ctob/prefixed-set-path-string->set-name-string selected-token-set-name)
+ selected-token-set-id
(:id token)))}]))
(defn- allowed-shape-attributes [shapes]
@@ -471,7 +472,7 @@
token-id (:token-id mdata)
token (mf/deref (refs/workspace-token-in-selected-set token-id))
token-type (:type token)
- selected-token-set-name (mf/deref refs/selected-token-set-name)
+ selected-token-set-id (mf/deref refs/selected-token-set-id)
selected-shapes
(mf/with-memo [selected objects]
@@ -486,7 +487,7 @@
[:& menu-tree {:submenu-offset width
:token token
:errors errors
- :selected-token-set-name selected-token-set-name
+ :selected-token-set-id selected-token-set-id
:selected-shapes selected-shapes
:is-selected-inside-layout is-selected-inside-layout}]]))
diff --git a/frontend/src/app/main/ui/workspace/tokens/management/context_menu.scss b/frontend/src/app/main/ui/workspace/tokens/management/context_menu.scss
index edffbae1c9..207166d747 100644
--- a/frontend/src/app/main/ui/workspace/tokens/management/context_menu.scss
+++ b/frontend/src/app/main/ui/workspace/tokens/management/context_menu.scss
@@ -4,12 +4,12 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../../ds/typography.scss" as *;
-@import "refactor/common-refactor.scss";
+@use "ds/typography.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
.token-context-menu {
position: absolute;
- z-index: $z-index-4;
+ z-index: deprecated.$z-index-4;
}
.token-context-menu[data-direction="up"] {
@@ -22,12 +22,12 @@
.context-list,
.token-context-submenu {
- @include menuShadow;
+ @include deprecated.menuShadow;
display: grid;
- width: $s-240;
- padding: $s-4;
- border-radius: $br-8;
- border: $s-2 solid var(--color-background-quaternary);
+ width: deprecated.$s-240;
+ padding: deprecated.$s-4;
+ border-radius: deprecated.$br-8;
+ border: deprecated.$s-2 solid var(--color-background-quaternary);
background-color: var(--color-background-tertiary);
max-height: 100vh;
overflow-y: auto;
@@ -43,13 +43,13 @@
.token-context-submenu {
position: absolute;
- padding: $s-4;
- margin-left: $s-6;
+ padding: deprecated.$s-4;
+ margin-left: deprecated.$s-6;
}
.separator {
- margin: $s-6;
- border-block-start: $s-1 solid var(--panel-border-color);
+ margin: deprecated.$s-6;
+ border-block-start: deprecated.$s-1 solid var(--panel-border-color);
}
.context-menu-item {
@@ -59,13 +59,13 @@
@include use-typography("body-small");
display: flex;
align-items: center;
- height: $s-32;
+ height: deprecated.$s-32;
width: 100%;
- padding: $s-8;
- border-radius: $br-8;
+ padding: deprecated.$s-8;
+ border-radius: deprecated.$br-8;
color: var(--context-menu-item-fg-color);
background-color: var(--context-menu-item-bg-color);
- border: $s-1 solid var(--context-menu-item-border-color);
+ border: deprecated.$s-1 solid var(--context-menu-item-border-color);
cursor: pointer;
&:hover {
--context-menu-item-bg-color: var(--color-background-quaternary);
@@ -110,10 +110,10 @@
.context-menu-item-hint {
position: absolute;
background-color: var(--color-background-primary);
- border-radius: $br-6;
- padding: $s-4;
- inset-inline-end: $s-4;
- inset-block-start: $s-4;
+ border-radius: deprecated.$br-6;
+ padding: deprecated.$s-4;
+ inset-inline-end: deprecated.$s-4;
+ inset-block-start: deprecated.$s-4;
color: var(--color-foreground-secondary);
}
@@ -122,8 +122,8 @@
}
.item-with-icon-space {
- padding-left: $s-20;
+ padding-left: deprecated.$s-20;
}
.icon-wrapper {
- margin-right: $s-4;
+ margin-right: deprecated.$s-4;
}
diff --git a/frontend/src/app/main/ui/workspace/tokens/management/create/form.cljs b/frontend/src/app/main/ui/workspace/tokens/management/create/form.cljs
index 3fe6d36560..7069cfd292 100644
--- a/frontend/src/app/main/ui/workspace/tokens/management/create/form.cljs
+++ b/frontend/src/app/main/ui/workspace/tokens/management/create/form.cljs
@@ -12,7 +12,7 @@
[app.common.files.tokens :as cft]
[app.common.schema :as sm]
[app.common.types.color :as c]
- [app.common.types.token :as ctt]
+ [app.common.types.token :as cto]
[app.common.types.tokens-lib :as ctob]
[app.main.constants :refer [max-input-length]]
[app.main.data.modal :as modal]
@@ -25,18 +25,19 @@
[app.main.fonts :as fonts]
[app.main.refs :as refs]
[app.main.store :as st]
+ [app.main.ui.components.radio-buttons :refer [radio-button radio-buttons]]
[app.main.ui.ds.buttons.button :refer [button*]]
[app.main.ui.ds.buttons.icon-button :refer [icon-button*]]
[app.main.ui.ds.controls.input :refer [input*]]
- [app.main.ui.ds.controls.utilities.hint-message :refer [hint-message*]]
[app.main.ui.ds.foundations.assets.icon :as i]
[app.main.ui.ds.foundations.typography.heading :refer [heading*]]
[app.main.ui.ds.notifications.context-notification :refer [context-notification*]]
+ [app.main.ui.icons :as deprecated-icon]
[app.main.ui.workspace.colorpicker :as colorpicker]
[app.main.ui.workspace.colorpicker.ramp :refer [ramp-selector*]]
[app.main.ui.workspace.sidebar.options.menus.typography :refer [font-selector*]]
[app.main.ui.workspace.tokens.management.create.input-token-color-bullet :refer [input-token-color-bullet*]]
- [app.main.ui.workspace.tokens.management.create.input-tokens-value :refer [input-tokens-value*
+ [app.main.ui.workspace.tokens.management.create.input-tokens-value :refer [input-token*
token-value-hint*]]
[app.util.dom :as dom]
[app.util.functions :as uf]
@@ -49,41 +50,6 @@
[malli.error :as me]
[rumext.v2 :as mf]))
-;; Schemas ---------------------------------------------------------------------
-
-(def valid-token-name-regexp
- "Only allow letters and digits for token names.
- Also allow one `.` for a namespace separator.
-
- Caution: This will allow a trailing dot like `token-name.`,
- But we will trim that in the `finalize-name`,
- to not throw too many errors while the user is editing."
- #"(?!\$)([a-zA-Z0-9-$_]+\.?)*")
-
-(def valid-token-name-schema
- (m/-simple-schema
- {:type :token/invalid-token-name
- :pred #(re-matches valid-token-name-regexp %)
- :type-properties {:error/fn #(str (:value %) (tr "workspace.tokens.token-name-validation-error"))}}))
-
-(defn token-name-schema
- "Generate a dynamic schema validation to check if a token path derived from the name already exists at `tokens-tree`."
- [{:keys [tokens-tree]}]
- (let [path-exists-schema
- (m/-simple-schema
- {:type :token/name-exists
- :pred #(not (cft/token-name-path-exists? % tokens-tree))
- :type-properties {:error/fn #(str "A token already exists at the path: " (:value %))}})]
- (m/schema
- [:and
- [:string {:min 1 :max 255}]
- valid-token-name-schema
- path-exists-schema])))
-
-(def token-description-schema
- (m/schema
- [:string {:max 2048}]))
-
;; Helpers ---------------------------------------------------------------------
(defn finalize-name [name]
@@ -101,21 +67,67 @@
(defn valid-value? [value]
(seq (finalize-value value)))
-;; Validation ------------------------------------------------------------------
+;; Schemas ---------------------------------------------------------------------
-(defn invalidate-empty-value [token-value]
+(def ^:private well-formed-token-name-regexp
+ "Only allow letters and digits for token names.
+ Also allow one `.` for a namespace separator.
+
+ Caution: This will allow a trailing dot like `token-name.`,
+ But we will trim that in the `finalize-name`,
+ to not throw too many errors while the user is editing."
+ #"(?!\$)([a-zA-Z0-9-$_]+\.?)*")
+
+(def ^:private well-formed-token-name-schema
+ (m/-simple-schema
+ {:type :token/invalid-token-name
+ :pred #(re-matches well-formed-token-name-regexp %)
+ :type-properties {:error/fn #(str (:value %) (tr "workspace.tokens.token-name-validation-error"))}}))
+
+(defn- token-name-schema
+ "Generate a dynamic schema validation to check if a token path derived from the name already exists at `tokens-tree`."
+ [{:keys [tokens-tree]}]
+ (let [path-exists-schema
+ (m/-simple-schema
+ {:type :token/name-exists
+ :pred #(not (cft/token-name-path-exists? % tokens-tree))
+ :type-properties {:error/fn #(tr "workspace.tokens.token-name-duplication-validation-error" (:value %))}})]
+ (m/schema
+ [:and
+ [:string {:min 1 :max 255 :error/fn #(str (:value %) (tr "workspace.tokens.token-name-length-validation-error"))}]
+ well-formed-token-name-schema
+ path-exists-schema])))
+
+(defn- validate-token-name
+ [tokens-tree name]
+ (let [schema (token-name-schema {:tokens-tree tokens-tree})
+ validation (m/explain schema (finalize-name name))]
+ (me/humanize validation)))
+
+(def ^:private token-description-schema
+ (m/schema
+ [:string {:max 2048 :error/fn #(tr "errors.field-max-length" 2048)}]))
+
+(defn- validate-token-description
+ [description]
+ (let [validation (m/explain token-description-schema description)]
+ (me/humanize validation)))
+
+;; Value Validation -------------------------------------------------------------
+
+(defn check-empty-value [token-value]
(when (empty? (str/trim token-value))
(wte/get-error-code :error.token/empty-input)))
-(defn invalidate-token-empty-value [token]
- (invalidate-empty-value (:value token)))
+(defn check-token-empty-value [token]
+ (check-empty-value (:value token)))
-(defn invalidate-self-reference [token-name token-value]
- (when (ctob/token-value-self-reference? token-name token-value)
+(defn check-self-reference [token-name token-value]
+ (when (cto/token-value-self-reference? token-name token-value)
(wte/get-error-code :error.token/direct-self-reference)))
-(defn invalidate-token-self-reference [token]
- (invalidate-self-reference (:name token) (:value token)))
+(defn check-token-self-reference [token]
+ (check-self-reference (:name token) (:value token)))
(defn validate-resolve-token
[token prev-token tokens]
@@ -123,7 +135,7 @@
;; When creating a new token we dont have a name yet or invalid name,
;; but we still want to resolve the value to show in the form.
;; So we use a temporary token name that hopefully doesn't clash with any of the users token names
- (not (sm/valid? ctt/token-name-ref (:name token))) (assoc :name "__PENPOT__TOKEN__NAME__PLACEHOLDER__"))
+ (not (sm/valid? cto/token-name-ref (:name token))) (assoc :name "__PENPOT__TOKEN__NAME__PLACEHOLDER__"))
tokens' (cond-> tokens
;; Remove previous token when renaming a token
(not= (:name token) (:name prev-token))
@@ -147,7 +159,7 @@
(rx/of token)))
(def default-validators
- [invalidate-token-empty-value invalidate-token-self-reference])
+ [check-token-empty-value check-self-reference])
(defn default-validate-token
"Validates a token by confirming a list of `validator` predicates and resolving the token using `tokens` with StyleDictionary.
@@ -177,46 +189,58 @@
;; Resolving token via StyleDictionary
(rx/mapcat #(validate-resolve-token % prev-token tokens)))))
-(defn invalidate-coll-self-reference
+(defn check-coll-self-reference
"Invalidate a collection of `token-vals` for a self-refernce against `token-name`.,"
[token-name token-vals]
- (when (some #(ctob/token-value-self-reference? token-name %) token-vals)
+ (when (some #(cto/token-value-self-reference? token-name %) token-vals)
(wte/get-error-code :error.token/direct-self-reference)))
-(defn invalidate-font-family-token-self-reference [token]
- (invalidate-coll-self-reference (:name token) (:value token)))
+(defn check-font-family-token-self-reference [token]
+ (check-coll-self-reference (:name token) (:value token)))
(defn validate-font-family-token
[props]
(-> props
- (update :token-value ctt/split-font-family)
+ (update :token-value cto/split-font-family)
(assoc :validators [(fn [token]
(when (empty? (:value token))
(wte/get-error-code :error.token/empty-input)))
- invalidate-font-family-token-self-reference])
+ check-font-family-token-self-reference])
(default-validate-token)))
-(defn invalidate-typography-token-self-reference
- "Invalidate token when any of the attributes in token value have a self refernce."
+(defn check-typography-token-self-reference
+ "Check token when any of the attributes in token value have a self-reference."
[token]
(let [token-name (:name token)
token-values (:value token)]
(some (fn [[k v]]
(when-let [err (case k
- :font-family (invalidate-coll-self-reference token-name v)
- (invalidate-self-reference token-name v))]
+ :font-family (check-coll-self-reference token-name v)
+ (check-self-reference token-name v))]
(assoc err :typography-key k)))
token-values)))
+(defn check-empty-typography-token [token]
+ (when (empty? (:value token))
+ (wte/get-error-code :error.token/empty-input)))
+
(defn validate-typography-token
- [props]
- (-> props
- (update :token-value
- (fn [v]
- (-> (or v {})
- (d/update-when :font-family #(if (string? %) (ctt/split-font-family %) %)))))
- (assoc :validators [invalidate-typography-token-self-reference])
- (default-validate-token)))
+ [{:keys [token-value] :as props}]
+ (cond
+ ;; Entering form without a value - show no error just resolve nil
+ (nil? token-value) (rx/of nil)
+ ;; Validate refrence string
+ (cto/typography-composite-token-reference? token-value) (default-validate-token props)
+ ;; Validate composite token
+ :else
+ (-> props
+ (update :token-value
+ (fn [v]
+ (-> (or v {})
+ (d/update-when :font-family #(if (string? %) (cto/split-font-family %) %)))))
+ (assoc :validators [check-empty-typography-token
+ check-typography-token-self-reference])
+ (default-validate-token))))
(defn use-debonced-resolve-callback
"Resolves a token values using `StyleDictionary`.
@@ -247,25 +271,26 @@
(defonce form-token-cache-atom (atom nil))
-;; Component -------------------------------------------------------------------
+;; Form Component --------------------------------------------------------------
(mf/defc form*
"Form component to edit or create a token of any token type.
-Callback props:
-validate-token: Function to validate and resolve an editing token, see `default-validate-token`.
-on-value-resolve: Will be called when a token value is resolved
- Used to sync external state (like color picker)
-on-get-token-value: Custom function to get the input value from the dom
- (As there might be multiple inputs passed for `custom-input-token-value`)
- Can also be used to manipulate the value (E.g.: Auto-prepending # for hex colors)
+ Callback props:
+ validate-token: Function to validate and resolve an editing token, see `default-validate-token`.
+ on-value-resolve: Will be called when a token value is resolved
+ Used to sync external state (like color picker)
+ on-get-token-value: Custom function to get the input value from the dom
+ (As there might be multiple inputs passed for `custom-input-token-value`)
+ Can also be used to manipulate the value (E.g.: Auto-prepending # for hex colors)
-Custom component props:
-custom-input-token-value: Custom component for editing/displaying the token value
-custom-input-token-value-props: Custom props passed to the custom-input-token-value merged with the default props"
- [{:keys [token
+ Custom component props:
+ custom-input-token-value: Custom component for editing/displaying the token value
+ custom-input-token-value-props: Custom props passed to the custom-input-token-value merged with the default props"
+ [{:keys [is-create
+ token
token-type
- selected-token-set-name
+ selected-token-set-id
action
input-value-placeholder
@@ -278,8 +303,7 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
custom-input-token-value
custom-input-token-value-props]
:or {validate-token default-validate-token}}]
- (let [create? (not (instance? ctob/Token token))
- token (or token {:type token-type})
+ (let [token (or token {:type token-type})
token-properties (dwta/get-token-properties token)
tokens-in-selected-set (mf/deref refs/workspace-all-tokens-in-selected-set)
@@ -292,10 +316,10 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
;; Style dictionary resolver needs font families to be an array of strings
(= :font-family (or (:type token) token-type))
- (update-in [(:name token) :value] ctt/split-font-family)
+ (update-in [(:name token) :value] cto/split-font-family)
(= :typography (or (:type token) token-type))
- (d/update-in-when [(:name token) :font-family :value] ctt/split-font-family))
+ (d/update-in-when [(:name token) :font-family :value] cto/split-font-family))
resolved-tokens (sd/use-resolved-tokens active-theme-tokens {:cache-atom form-token-cache-atom
:interactive? true})
@@ -316,33 +340,26 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
warning-name-change? (deref warning-name-change*)
token-name-ref (mf/use-var (:name token))
name-ref (mf/use-ref nil)
- name-errors (mf/use-state nil)
-
- validate-name
- (mf/use-fn
- (mf/deps tokens-tree-in-selected-set)
- (fn [value]
- (let [schema (token-name-schema {:token token
- :tokens-tree tokens-tree-in-selected-set})]
- (m/explain schema (finalize-name value)))))
+ name-errors* (mf/use-state nil)
+ name-errors (deref name-errors*)
on-blur-name
(mf/use-fn
- (mf/deps touched-name? warning-name-change?)
+ (mf/deps touched-name? warning-name-change? tokens-tree-in-selected-set)
(fn [e]
(let [value (dom/get-target-val e)
- errors (validate-name value)]
+ errors (validate-token-name tokens-tree-in-selected-set value)]
(when touched-name?
(reset! warning-name-change* true))
- (reset! name-errors errors))))
+ (reset! name-errors* errors))))
on-update-name-debounced
(mf/use-fn
- (mf/deps touched-name? validate-name)
+ (mf/deps touched-name? tokens-tree-in-selected-set)
(uf/debounce (fn [token-name]
- (let [errors (validate-name token-name)]
+ (let [errors (validate-token-name tokens-tree-in-selected-set token-name)]
(when touched-name?
- (reset! name-errors errors))))
+ (reset! name-errors* errors))))
300))
on-update-name
@@ -356,7 +373,7 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
(on-update-name-debounced token-name))))
valid-name-field? (and
- (not @name-errors)
+ (not name-errors)
(valid-name? @token-name-ref))
;; Value
@@ -364,7 +381,12 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
value-ref (mf/use-ref (:value token))
token-resolve-result* (mf/use-state (get resolved-tokens (cft/token-identifier token)))
- token-resolve-result (deref token-resolve-result*)
+ token-resolve-result (deref token-resolve-result*)
+
+ clear-resolve-value
+ (mf/use-fn
+ (fn []
+ (reset! token-resolve-result* nil)))
set-resolve-value
(mf/use-fn
@@ -400,7 +422,6 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
(mf/use-fn
(mf/deps on-update-value-debounced)
(fn [next-value]
- (dom/set-value! (mf/ref-val value-input-ref) next-value)
(mf/set-ref-val! value-ref next-value)
(on-update-value-debounced next-value)))
@@ -412,19 +433,20 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
description-errors* (mf/use-state nil)
description-errors (deref description-errors*)
- validate-descripion (mf/use-fn #(m/explain token-description-schema %))
- on-update-description-debounced (mf/use-fn
- (uf/debounce (fn [e]
- (let [value (dom/get-target-val e)
- errors (validate-descripion value)]
- (reset! description-errors* errors)))))
+ on-update-description-debounced
+ (mf/use-fn
+ (uf/debounce (fn [e]
+ (let [value (dom/get-target-val e)
+ errors (validate-token-description value)]
+ (reset! description-errors* errors)))))
+
on-update-description
(mf/use-fn
(mf/deps on-update-description-debounced)
(fn [e]
(reset! description-ref (dom/get-target-val e))
(on-update-description-debounced e)))
- valid-description-field? (not description-errors)
+ valid-description-field? (empty? description-errors)
;; Form
disabled? (or (not valid-name-field?)
@@ -433,7 +455,7 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
on-submit
(mf/use-fn
- (mf/deps create? validate-name validate-descripion token active-theme-tokens validate-token)
+ (mf/deps is-create tokens-tree-in-selected-set token active-theme-tokens validate-token)
(fn [e]
(dom/prevent-default e)
;; We have to re-validate the current form values before submitting
@@ -442,13 +464,13 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
;; and press enter before the next validations could return.
(let [final-name (finalize-name @token-name-ref)
valid-name? (try
- (not (:errors (validate-name final-name)))
+ (empty? (:errors (validate-token-name tokens-tree-in-selected-set final-name)))
(catch js/Error _ nil))
value (mf/ref-val value-ref)
final-description @description-ref
valid-description? (if final-description
(try
- (not (:errors (validate-descripion final-description)))
+ (empty? (:errors (validate-token-description final-description)))
(catch js/Error _ nil))
true)]
(when (and valid-name? valid-description?)
@@ -460,7 +482,7 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
(rx/subs!
(fn [valid-token]
(st/emit!
- (if create?
+ (if is-create
(dwtl/create-token {:name final-name
:type token-type
:value (:value valid-token)
@@ -475,13 +497,11 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
on-delete-token
(mf/use-fn
- (mf/deps selected-token-set-name)
+ (mf/deps selected-token-set-id)
(fn [e]
(dom/prevent-default e)
(modal/hide!)
- (st/emit! (dwtl/delete-token
- (ctob/prefixed-set-path-string->set-name-string selected-token-set-name)
- (:id token)))))
+ (st/emit! (dwtl/delete-token selected-token-set-id (:id token)))))
on-cancel
(mf/use-fn
@@ -518,9 +538,10 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
;; Update the value when editing an existing token
;; so the user doesn't have to interact with the form to validate the token
(mf/use-effect
- (mf/deps create? resolved-tokens token token-resolve-result set-resolve-value)
+ (mf/deps is-create token resolved-tokens token-resolve-result set-resolve-value)
(fn []
- (when (and (not create?)
+ (when (and (not is-create)
+ (:value token) ;; Don't retrigger this effect when switching tabs on composite tokens
(not token-resolve-result)
resolved-tokens)
(-> (get resolved-tokens @token-name-ref)
@@ -531,7 +552,7 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
[:div {:class (stl/css :token-rows)}
[:> heading* {:level 2 :typography "headline-medium" :class (stl/css :form-modal-title)}
(if (= action "edit")
- (tr "workspace.tokens.edit-token")
+ (tr "workspace.tokens.edit-token" token-type)
(tr "workspace.tokens.create-token" token-type))]
[:div {:class (stl/css :input-row)}
@@ -543,21 +564,12 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
:variant "comfortable"
:auto-focus true
:default-value @token-name-ref
- :hint-type (when (seq (:errors @name-errors)) "error")
+ :hint-type (when-not (empty? name-errors) "error")
+ :hint-message (first name-errors)
:ref name-ref
:on-blur on-blur-name
:on-change on-update-name}])
- (for [error (->> (:errors @name-errors)
- (map #(-> (assoc @name-errors :errors [%])
- (me/humanize)))
- (map first))]
-
- [:> hint-message* {:key error
- :message error
- :type "error"
- :id "token-name-hint"}])
-
(when (and warning-name-change? (= action "edit"))
[:div {:class (stl/css :warning-name-change-notification-wrapper)}
[:> context-notification*
@@ -577,8 +589,9 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
:on-update-value on-update-value
:on-external-update-value on-external-update-value
:custom-input-token-value-props custom-input-token-value-props
- :token-resolve-result token-resolve-result}]
- [:> input-tokens-value*
+ :token-resolve-result token-resolve-result
+ :clear-resolve-value clear-resolve-value}]
+ [:> input-token*
{:placeholder placeholder
:label label
:default-value default-value
@@ -593,6 +606,8 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
:max-length max-input-length
:variant "comfortable"
:default-value @description-ref
+ :hint-type (when-not (empty? description-errors) "error")
+ :hint-message (first description-errors)
:on-blur on-update-description
:on-change on-update-description}]]
@@ -618,6 +633,132 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
:disabled disabled?}
(tr "labels.save")]]]]))
+;; Tabs Component --------------------------------------------------------------
+
+(mf/defc composite-reference-input*
+ [{:keys [default-value on-blur on-update-value token-resolve-result reference-label reference-icon is-reference-fn]}]
+ [:> input-token*
+ {:aria-label (tr "labels.reference")
+ :placeholder reference-label
+ :icon reference-icon
+ :default-value (when (is-reference-fn default-value) default-value)
+ :on-blur on-blur
+ :on-change on-update-value
+ :token-resolve-result (when (or
+ (:errors token-resolve-result)
+ (string? (:value token-resolve-result)))
+ token-resolve-result)}])
+
+(mf/defc composite-tabs*
+ [{:keys [default-value
+ on-update-value
+ on-external-update-value
+ on-value-resolve
+ clear-resolve-value
+ custom-input-token-value-props]
+ :rest props}]
+ (let [;; Active Tab State
+ {:keys [active-tab
+ composite-tab
+ is-reference-fn
+ reference-icon
+ reference-label
+ set-active-tab
+ title
+ update-composite-backup-value]} custom-input-token-value-props
+ reference-tab-active? (= :reference active-tab)
+ ;; Backup value ref
+ ;; Used to restore the previously entered value when switching tabs
+ ;; Uses ref to not trigger state updates during update
+ backup-state-ref (mf/use-var
+ (if reference-tab-active?
+ {:reference default-value}
+ {:composite default-value}))
+ default-value (get @backup-state-ref active-tab)
+
+ on-toggle-tab
+ (mf/use-fn
+ (mf/deps active-tab on-external-update-value on-value-resolve clear-resolve-value)
+ (fn []
+ (let [next-tab (if (= active-tab :composite) :reference :composite)]
+ ;; Clear the resolved value so it wont show up before the next-tab value has resolved
+ (clear-resolve-value)
+ ;; Restore the internal value from backup
+ (on-external-update-value (get @backup-state-ref next-tab))
+ (set-active-tab next-tab))))
+
+ ;; Store updated value in backup-state-ref
+ on-update-value'
+ (mf/use-fn
+ (mf/deps on-update-value reference-tab-active? update-composite-backup-value)
+ (fn [e]
+ (if reference-tab-active?
+ (swap! backup-state-ref assoc :reference (dom/get-target-val e))
+ (swap! backup-state-ref update :composite #(update-composite-backup-value % e)))
+ (on-update-value e)))]
+ [:div {:class (stl/css :typography-inputs-row)}
+ [:div {:class (stl/css :title-bar)}
+ [:div {:class (stl/css :title)} title]
+ [:& radio-buttons {:class (stl/css :listing-options)
+ :selected (if reference-tab-active? "reference" "composite")
+ :on-change on-toggle-tab
+ :name "reference-composite-tab"}
+ [:& radio-button {:icon deprecated-icon/layers
+ :value "composite"
+ :title (tr "workspace.tokens.individual-tokens")
+ :id "composite-opt"}]
+ [:& radio-button {:icon deprecated-icon/tokens
+ :value "reference"
+ :title (tr "workspace.tokens.use-reference")
+ :id "reference-opt"}]]]
+ [:div {:class (stl/css :typography-inputs)}
+ (if reference-tab-active?
+ [:> composite-reference-input*
+ (mf/spread-props props {:default-value default-value
+ :on-update-value on-update-value'
+ :reference-icon reference-icon
+ :reference-label reference-label
+ :is-reference-fn is-reference-fn})]
+ [:> composite-tab
+ (mf/spread-props props {:default-value default-value
+ :on-update-value on-update-value'})])]]))
+
+(mf/defc composite-form*
+ "Wrapper around form* that manages composite/reference tab state.
+ Takes the same props as form* plus a function to determine if a token value is a reference."
+ [{:keys [token is-reference-fn composite-tab reference-icon title update-composite-backup-value] :rest props}]
+ (let [active-tab* (mf/use-state (if (is-reference-fn (:value token)) :reference :composite))
+ active-tab (deref active-tab*)
+
+ custom-input-token-value-props
+ (mf/use-memo
+ (mf/deps active-tab composite-tab reference-icon title update-composite-backup-value is-reference-fn)
+ (fn []
+ {:active-tab active-tab
+ :set-active-tab #(reset! active-tab* %)
+ :composite-tab composite-tab
+ :reference-icon reference-icon
+ :reference-label (tr "workspace.tokens.reference-composite")
+ :title title
+ :update-composite-backup-value update-composite-backup-value
+ :is-reference-fn is-reference-fn}))
+
+ ;; Remove the value from a stored token when it doesn't match the tab type
+ ;; We need this to keep the form disabled when there's an existing value that doesn't match the tab type
+ token
+ (mf/use-memo
+ (mf/deps token active-tab is-reference-fn)
+ (fn []
+ (let [token-tab-type (if (is-reference-fn (:value token)) :reference :composite)]
+ (cond-> token
+ (not= token-tab-type active-tab) (dissoc :value token)))))]
+ [:> form*
+ (mf/spread-props props {:token token
+ :custom-input-token-value composite-tabs*
+ :custom-input-token-value-props custom-input-token-value-props})]))
+
+;; Token Type Forms ------------------------------------------------------------
+
;; FIXME: this function has confusing name
(defn- hex->value
[hex]
@@ -717,10 +858,11 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
color-value (-> (tinycolor/valid-color hex-value)
(tinycolor/set-alpha (or alpha 1))
(tinycolor/->string format))]
+ (dom/set-value! (mf/ref-val input-ref) color-value)
(on-external-update-value color-value))))]
[:*
- [:> input-tokens-value*
+ [:> input-token*
{:placeholder placeholder
:label label
:default-value default-value
@@ -773,7 +915,7 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
(let [current-font* (mf/use-state (or font
(some-> (mf/ref-val input-ref)
(dom/get-value)
- (ctt/split-font-family)
+ (cto/split-font-family)
(first)
(fonts/find-font-family))))
current-font (deref current-font*)]
@@ -783,8 +925,8 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
:on-close on-close-font-selector
:full-size true}]]))
-(mf/defc font-picker*
- [{:keys [default-value input-ref on-blur on-update-value on-external-update-value token-resolve-result]}]
+(mf/defc font-picker-combobox*
+ [{:keys [default-value label aria-label input-ref on-blur on-update-value on-external-update-value token-resolve-result placeholder]}]
(let [font* (mf/use-state (fonts/find-font-family default-value))
font (deref font*)
set-font (mf/use-fn
@@ -808,7 +950,7 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
on-select-font
(mf/use-fn
- (mf/deps on-external-update-value set-font)
+ (mf/deps on-external-update-value set-font font)
(fn [{:keys [family] :as font}]
(when font
(set-font font)
@@ -830,10 +972,11 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
:variant "action"
:type "button"}])]
[:*
- [:> input-tokens-value*
- {:placeholder (tr "workspace.tokens.token-font-family-value-enter")
- :label (tr "workspace.tokens.token-font-family-value")
- :default-value default-value
+ [:> input-token*
+ {:placeholder (or placeholder (tr "workspace.tokens.token-font-family-value-enter"))
+ :label label
+ :aria-label aria-label
+ :default-value (or (:name font) default-value)
:ref input-ref
:on-blur on-blur
:on-change on-update-value'
@@ -852,10 +995,10 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
(mf/use-fn
(fn [value]
(when value
- (ctt/join-font-family value))))]
+ (cto/join-font-family value))))]
[:> form*
- (mf/spread-props props {:token (when token (update token :value ctt/join-font-family))
- :custom-input-token-value font-picker*
+ (mf/spread-props props {:token (when token (update token :value cto/join-font-family))
+ :custom-input-token-value font-picker-combobox*
:on-value-resolve on-value-resolve
:validate-token validate-font-family-token})]))
@@ -879,37 +1022,54 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
(def ^:private typography-inputs
#(d/ordered-map
- :font-size
- {:label "Font Size"
- :placeholder (tr "workspace.tokens.token-value-enter")}
:font-family
{:label (tr "workspace.tokens.token-font-family-value")
+ :icon i/text-font-family
:placeholder (tr "workspace.tokens.token-font-family-value-enter")}
+ :font-size
+ {:label "Font Size"
+ :icon i/text-font-size
+ :placeholder (tr "workspace.tokens.font-size-value-enter")}
:font-weight
{:label "Font Weight"
+ :icon i/text-font-weight
:placeholder (tr "workspace.tokens.font-weight-value-enter")}
+ :line-height
+ {:label "Line Height"
+ :icon i/text-lineheight
+ :placeholder (tr "workspace.tokens.line-height-value-enter")}
:letter-spacing
{:label "Letter Spacing"
- :placeholder (tr "workspace.tokens.token-value-enter")}
+ :icon i/text-letterspacing
+ :placeholder (tr "workspace.tokens.letter-spacing-value-enter-composite")}
:text-case
{:label "Text Case"
+ :icon i/text-mixed
:placeholder (tr "workspace.tokens.text-case-value-enter")}
:text-decoration
{:label "Text Decoration"
+ :icon i/text-underlined
:placeholder (tr "workspace.tokens.text-decoration-value-enter")}))
-(mf/defc typography-inputs*
+(mf/defc typography-value-inputs*
[{:keys [default-value on-blur on-update-value token-resolve-result]}]
- (let [typography-inputs (mf/use-memo typography-inputs)
+ (let [composite-token? (not (cto/typography-composite-token-reference? (:value token-resolve-result)))
+ typography-inputs (mf/use-memo typography-inputs)
errors-by-key (sd/collect-typography-errors token-resolve-result)]
[:div {:class (stl/css :nested-input-row)}
- (for [[k {:keys [label placeholder]}] typography-inputs]
- (let [value (get default-value k)
- token-resolve-result
- (-> {:resolved-value (let [v (get-in token-resolve-result [:resolved-value k])]
- (when-not (str/empty? v) v))
- :errors (get errors-by-key k)}
- (d/without-nils))
+ (for [[token-type {:keys [label placeholder icon]}] typography-inputs]
+ (let [value (get default-value token-type)
+ resolved (get-in token-resolve-result [:resolved-value token-type])
+ errors (get errors-by-key token-type)
+
+ should-show? (or (and (some? resolved)
+ (not= value (str resolved)))
+ (seq errors))
+
+ token-prop (when (and composite-token? should-show?)
+ (d/without-nils
+ {:resolved-value (when-not (str/empty? resolved) resolved)
+ :errors errors}))
input-ref (mf/use-ref)
@@ -917,59 +1077,81 @@ custom-input-token-value-props: Custom props passed to the custom-input-token-va
(mf/use-fn
(mf/deps on-update-value)
(fn [next-value]
- (let [el (mf/ref-val input-ref)]
- (dom/set-value! el next-value)
- (on-update-value #js {:target el
+ (let [element (mf/ref-val input-ref)]
+ (dom/set-value! element next-value)
+ (on-update-value #js {:target element
:tokenType :font-family}))))
on-change
(mf/use-fn
+ (mf/deps token-type)
;; Passing token-type via event to prevent deep function adapting & passing of type
- (fn [e]
- (-> (obj/set! e "tokenType" k)
+ (fn [event]
+ (-> (obj/set! event "tokenType" token-type)
(on-update-value))))]
- [:div {:class (stl/css :input-row)}
- (case k
+ [:div {:key (str token-type)
+ :class (stl/css :input-row)}
+ (case token-type
:font-family
- [:> font-picker*
- {:key (str k)
- :label label
+ [:> font-picker-combobox*
+ {:aria-label label
:placeholder placeholder
:input-ref input-ref
- :default-value (when value (ctt/join-font-family value))
+ :default-value (when value (cto/join-font-family value))
:on-blur on-blur
:on-update-value on-change
:on-external-update-value on-external-update-value
- :token-resolve-result (when (seq token-resolve-result) token-resolve-result)}]
- [:> input-tokens-value*
- {:key (str k)
- :label label
+ :token-resolve-result token-prop}]
+ [:> input-token*
+ {:aria-label label
:placeholder placeholder
:default-value value
:on-blur on-blur
+ :icon icon
:on-change on-change
- :token-resolve-result (when (seq token-resolve-result) token-resolve-result)}])]))]))
+ :token-resolve-result token-prop}])]))]))
(mf/defc typography-form*
[{:keys [token] :rest props}]
(let [on-get-token-value
- (mf/use-callback
- (fn [e prev-value]
+ (mf/use-fn
+ (fn [e prev-composite-value]
(let [token-type (obj/get e "tokenType")
- input-value (dom/get-target-val e)]
- (if (empty? input-value)
- (dissoc prev-value token-type)
- (assoc prev-value token-type input-value)))))]
- [:> form*
+ input-value (dom/get-target-val e)
+ reference-value-input? (not token-type)]
+ (cond
+ reference-value-input? input-value
+
+ (empty? input-value) (dissoc prev-composite-value token-type)
+ :else (assoc prev-composite-value token-type input-value)))))
+
+ update-composite-backup-value
+ (mf/use-fn
+ (fn [prev-composite-value e]
+ (let [token-type (obj/get e "tokenType")
+ token-value (dom/get-target-val e)
+ token-value (cond-> token-value
+ (= :font-family token-type) (cto/split-font-family))]
+ (if (seq token-value)
+ (assoc prev-composite-value token-type token-value)
+ ;; Remove empty values so they don't retrigger validation when switching tabs
+ (dissoc prev-composite-value token-type)))))]
+ [:> composite-form*
(mf/spread-props props {:token token
- :custom-input-token-value typography-inputs*
+ :composite-tab typography-value-inputs*
+ :reference-icon i/text-typography
+ :is-reference-fn cto/typography-composite-token-reference?
+ :title (tr "labels.typography")
:validate-token validate-typography-token
- :on-get-token-value on-get-token-value})]))
+ :on-get-token-value on-get-token-value
+ :update-composite-backup-value update-composite-backup-value})]))
(mf/defc form-wrapper*
- [{:keys [token token-type] :as props}]
- (let [token-type' (or (:type token) token-type)]
+ [{:keys [token token-type] :rest props}]
+ (let [token-type' (or (:type token) token-type)
+ props (mf/spread-props props {:token-type token-type'
+ :token token})]
(case token-type'
:color [:> color-form* props]
:typography [:> typography-form* props]
diff --git a/frontend/src/app/main/ui/workspace/tokens/management/create/form.scss b/frontend/src/app/main/ui/workspace/tokens/management/create/form.scss
index 25d0d70198..08164ffa83 100644
--- a/frontend/src/app/main/ui/workspace/tokens/management/create/form.scss
+++ b/frontend/src/app/main/ui/workspace/tokens/management/create/form.scss
@@ -4,10 +4,12 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "ds/typography.scss" as t;
+@use "ds/_sizes.scss" as *;
+@use "ds/_borders.scss" as *;
.form-wrapper {
- width: $s-384;
+ width: $sz-384;
position: relative;
}
@@ -15,8 +17,8 @@
display: grid;
grid-template-columns: auto auto;
justify-content: end;
- gap: $s-12;
- padding-block-start: $s-8;
+ gap: var(--sp-m);
+ padding-block-start: var(--sp-s);
}
.with-delete {
@@ -30,28 +32,50 @@
.token-rows {
display: flex;
flex-direction: column;
- gap: $s-16;
+ gap: var(--sp-l);
}
.input-row {
display: flex;
flex-direction: column;
- gap: $s-4;
+ gap: var(--sp-xs);
}
.nested-input-row {
display: flex;
flex-direction: column;
- gap: $s-12;
+ gap: var(--sp-m);
+}
+
+.typography-inputs-row {
+ display: flex;
+ flex-direction: column;
+ gap: var(--sp-m);
+}
+
+.typography-inputs {
+ border-inline-start: $b-1 solid var(--color-accent-primary-muted);
+ padding-inline-start: var(--sp-m);
+}
+
+.title-bar {
+ display: grid;
+ grid-template-columns: 1fr auto;
+}
+.title {
+ @include t.use-typography("body-small");
+ color: var(--color-foreground-primary);
+ display: flex;
+ align-items: center;
}
.warning-name-change-notification-wrapper {
- margin-block-start: $s-16;
+ margin-block-start: var(--sp-l);
}
.error {
- padding: $s-4 $s-6;
- margin-bottom: 0;
+ padding: var(--sp-xs) $sz-6;
+ margin-block-end: 0;
color: var(--status-color-error-500);
}
@@ -77,5 +101,5 @@
inset: 0;
// This padding from the modal should be shared as a variable
// Need to set this or the font-select will cause scroll
- bottom: $s-32;
+ bottom: var(--sp-xxxl);
}
diff --git a/frontend/src/app/main/ui/workspace/tokens/management/create/input_token_color_bullet.scss b/frontend/src/app/main/ui/workspace/tokens/management/create/input_token_color_bullet.scss
index 855bbbd793..7ce04f34ca 100644
--- a/frontend/src/app/main/ui/workspace/tokens/management/create/input_token_color_bullet.scss
+++ b/frontend/src/app/main/ui/workspace/tokens/management/create/input_token_color_bullet.scss
@@ -4,8 +4,8 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../../../ds/_sizes.scss" as *;
-@use "../../../../ds/_borders.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/_borders.scss" as *;
.input-token-color-bullet {
--bullet-size: var(--sp-l);
diff --git a/frontend/src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs b/frontend/src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs
index def747e6f8..9ab8d6f4ab 100644
--- a/frontend/src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs
+++ b/frontend/src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs
@@ -9,6 +9,7 @@
(:require
[app.common.data.macros :as dm]
[app.main.data.workspace.tokens.errors :as wte]
+ [app.main.data.workspace.tokens.format :as dwtf]
[app.main.data.workspace.tokens.warnings :as wtw]
[app.main.ui.ds.controls.utilities.hint-message :refer [hint-message*]]
[app.main.ui.ds.controls.utilities.input-field :refer [input-field*]]
@@ -18,9 +19,10 @@
[cuerdas.core :as str]
[rumext.v2 :as mf]))
-(def ^:private schema::input-tokens-value
+(def ^:private schema::input-token
[:map
- [:label :string]
+ [:label {:optional true} [:maybe :string]]
+ [:aria-label {:optional true} [:maybe :string]]
[:placeholder {:optional true} :string]
[:value {:optional true} [:maybe :string]]
[:class {:optional true} :string]
@@ -41,7 +43,7 @@
(str/join "\n"))
errors (->> (wte/humanize-errors errors)
(str/join "\n"))
- :else (tr "workspace.tokens.resolved-value" (or resolved-value result)))
+ :else (tr "workspace.tokens.resolved-value" (dwtf/format-token-value (or resolved-value result))))
type (cond
empty-message? "hint"
errors "error"
@@ -53,28 +55,24 @@
:class (stl/css-case :resolved-value (not (or empty-message? (seq warnings) (seq errors))))
:type type}]))
-(mf/defc input-tokens-value*
- {::mf/props :obj
- ::mf/forward-ref true
- ::mf/schema schema::input-tokens-value}
- [{:keys [class label placeholder value icon slot-start token-resolve-result] :rest props} ref]
+(mf/defc input-token*
+ {::mf/forward-ref true
+ ::mf/schema schema::input-token}
+ [{:keys [class label token-resolve-result] :rest props} ref]
(let [error (not (nil? (:errors token-resolve-result)))
id (mf/use-id)
input-ref (mf/use-ref)
props (mf/spread-props props {:id id
:type "text"
:class (stl/css :input)
- :placeholder placeholder
- :value value
:variant "comfortable"
:hint-type (when error "error")
- :slot-start slot-start
- :icon icon
:ref (or ref input-ref)})]
[:*
[:div {:class (dm/str class " " (stl/css-case :wrapper true
:input-error error))}
- [:> label* {:for id} label]
+ (when label
+ [:> label* {:for id} label])
[:> input-field* props]]
(when token-resolve-result
[:> token-value-hint* {:result token-resolve-result}])]))
diff --git a/frontend/src/app/main/ui/workspace/tokens/management/create/input_tokens_value.scss b/frontend/src/app/main/ui/workspace/tokens/management/create/input_tokens_value.scss
index 3a097cddc9..8b47b91bdd 100644
--- a/frontend/src/app/main/ui/workspace/tokens/management/create/input_tokens_value.scss
+++ b/frontend/src/app/main/ui/workspace/tokens/management/create/input_tokens_value.scss
@@ -4,11 +4,10 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../../../ds/typography.scss" as *;
-@use "../../../../ds/_borders.scss" as *;
-@use "../../../../ds/_sizes.scss" as *;
+@use "ds/typography.scss" as *;
+@use "ds/_sizes.scss" as *;
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.wrapper {
--label-color: var(--color-foreground-primary);
@@ -28,6 +27,10 @@
.label {
@include use-typography("body-small");
- @include textEllipsis;
+ @include deprecated.textEllipsis;
color: var(--label-color);
}
+
+.resolved-value {
+ white-space: pre;
+}
diff --git a/frontend/src/app/main/ui/workspace/tokens/management/create/modals.cljs b/frontend/src/app/main/ui/workspace/tokens/management/create/modals.cljs
index 1ae3ba7c34..18c5ba0d57 100644
--- a/frontend/src/app/main/ui/workspace/tokens/management/create/modals.cljs
+++ b/frontend/src/app/main/ui/workspace/tokens/management/create/modals.cljs
@@ -8,6 +8,7 @@
(:require-macros [app.main.style :as stl])
(:require
[app.common.data.macros :as dm]
+ [app.common.types.tokens-lib :as ctob]
[app.main.data.modal :as modal]
[app.main.refs :as refs]
[app.main.ui.ds.buttons.icon-button :refer [icon-button*]]
@@ -68,7 +69,7 @@
(mf/defc token-update-create-modal
{::mf/wrap-props false}
- [{:keys [x y position token token-type action selected-token-set-name] :as _args}]
+ [{:keys [x y position token token-type action selected-token-set-id] :as _args}]
(let [wrapper-style (use-viewport-position-style x y position (= token-type :color))
modal-size-large* (mf/use-state (= token-type :typography))
modal-size-large? (deref modal-size-large*)
@@ -88,9 +89,10 @@
:icon i/close
:variant "action"
:aria-label (tr "labels.close")}]
- [:> form-wrapper* {:token token
+ [:> form-wrapper* {:is-create (not (ctob/token? token))
+ :token token
:action action
- :selected-token-set-name selected-token-set-name
+ :selected-token-set-id selected-token-set-id
:token-type token-type
:on-display-colorpicker update-modal-size}]]))
diff --git a/frontend/src/app/main/ui/workspace/tokens/management/create/modals.scss b/frontend/src/app/main/ui/workspace/tokens/management/create/modals.scss
index 770a503a4a..666bbab5f9 100644
--- a/frontend/src/app/main/ui/workspace/tokens/management/create/modals.scss
+++ b/frontend/src/app/main/ui/workspace/tokens/management/create/modals.scss
@@ -4,11 +4,11 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.token-modal-wrapper {
@extend .modal-container-base;
- @include menuShadow;
+ @include deprecated.menuShadow;
position: absolute;
width: auto;
min-width: auto;
@@ -16,12 +16,12 @@
overflow-y: auto;
overflow-x: hidden;
&.token-modal-large {
- min-block-size: 38rem;
+ max-block-size: 95vh;
}
}
.close-btn {
position: absolute;
- top: $s-6;
- right: $s-6;
+ top: deprecated.$s-6;
+ right: deprecated.$s-6;
}
diff --git a/frontend/src/app/main/ui/workspace/tokens/management/group.cljs b/frontend/src/app/main/ui/workspace/tokens/management/group.cljs
index dfdd2f202d..8bc0cd9b77 100644
--- a/frontend/src/app/main/ui/workspace/tokens/management/group.cljs
+++ b/frontend/src/app/main/ui/workspace/tokens/management/group.cljs
@@ -81,15 +81,15 @@
(fn [event]
(dom/stop-propagation event)
(st/emit! (dwtl/set-token-type-section-open type true)
- ;; FIXME: use dom/get-client-position
- (modal/show (:key modal)
- {:x (.-clientX ^js event)
- :y (.-clientY ^js event)
- :position :right
- :fields (:fields modal)
- :title title
- :action "create"
- :token-type type}))))
+ (let [pos (dom/get-client-position event)]
+ (modal/show (:key modal)
+ {:x (:x pos)
+ :y (:y pos)
+ :position :right
+ :fields (:fields modal)
+ :title title
+ :action "create"
+ :token-type type})))))
on-token-pill-click
(mf/use-fn
@@ -101,19 +101,20 @@
:shapes selected-shapes})))))]
[: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)
- :open? is-open}
- [:& cmm/asset-section-block {:role :title-button}
+ [:> 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}
+ [:> cmm/asset-section-block* {:role :content}
[:div {:class (stl/css :token-pills-wrapper)}
(for [token tokens]
[:> token-pill*
diff --git a/frontend/src/app/main/ui/workspace/tokens/management/token_pill.cljs b/frontend/src/app/main/ui/workspace/tokens/management/token_pill.cljs
index 561b4b17a8..e93a69c2aa 100644
--- a/frontend/src/app/main/ui/workspace/tokens/management/token_pill.cljs
+++ b/frontend/src/app/main/ui/workspace/tokens/management/token_pill.cljs
@@ -10,15 +10,16 @@
[app.main.style :as stl])
(:require
[app.common.data :as d]
- [app.common.files.helpers :as cfh]
[app.common.files.tokens :as cft]
+ [app.common.path-names :as cpn]
[app.common.types.token :as ctt]
[app.main.data.workspace.tokens.application :as dwta]
[app.main.data.workspace.tokens.color :as dwtc]
+ [app.main.data.workspace.tokens.format :as dwtf]
[app.main.refs :as refs]
- [app.main.ui.components.color-bullet :refer [color-bullet]]
[app.main.ui.ds.foundations.assets.icon :refer [icon*] :as i]
[app.main.ui.ds.foundations.utilities.token.token-status :refer [token-status-icon*]]
+ [app.main.ui.ds.utilities.swatch :refer [swatch*]]
[app.util.dom :as dom]
[app.util.i18n :refer [tr]]
[clojure.set :as set]
@@ -26,6 +27,7 @@
[rumext.v2 :as mf]))
;; Translation dictionaries
+
(def ^:private attribute-dictionary
{:rotation "Rotation"
:opacity "Opacity"
@@ -74,20 +76,6 @@
:x :x
:y :y})
-(def ^:private category-dictionary
- {:stroke-width "Stroke Width"
- :spacing "Spacing"
- :sizing "Sizing"
- :border-radius "Border Radius"
- :x "X"
- :y "Y"
- :font-size "Font Size"
- :font-family "Font Family"
- :font-weight "Font Weight"
- :letter-spacing "Letter Spacing"
- :text-case "Text Case"
- :text-decoration "Text Decoration"})
-
;; Helper functions
(defn partially-applied-attr
@@ -105,24 +93,11 @@
(str/join "\n"
(map (fn [[category values]]
(if (#{:x :y} category)
- (dm/str "- " (category-dictionary category))
- (dm/str "- " (category-dictionary category) ": "
+ (dm/str "- " (dwtf/category-dictionary category))
+ (dm/str "- " (dwtf/category-dictionary category) ": "
(str/join ", " (map attribute-dictionary values)) ".")))
grouped-values)))
-(defn format-token-value [token-value]
- (cond
- (map? token-value)
- (->> (map (fn [[k v]] (str "- " (category-dictionary k) ": " (format-token-value v))) token-value)
- (str/join "\n")
- (str "\n"))
-
- (sequential? token-value)
- (str/join "," token-value)
-
- :else
- (str token-value)))
-
(defn- generate-tooltip
"Generates a tooltip for a given token"
[is-viewer shape theme-token token half-applied no-valid-value ref-not-in-active-set]
@@ -142,8 +117,8 @@
grouped-values (group-by dimensions-dictionary app-token-keys)
base-title (dm/str "Token: " name "\n"
- (tr "workspace.tokens.original-value" (format-token-value value)) "\n"
- (tr "workspace.tokens.resolved-value" (format-token-value resolved-value))
+ (tr "workspace.tokens.original-value" (dwtf/format-token-value value)) "\n"
+ (tr "workspace.tokens.resolved-value" (dwtf/format-token-value resolved-value))
(when (= (:type token) :number)
(dm/str "\n" (tr "workspace.tokens.more-options"))))]
@@ -323,7 +298,8 @@
:class (stl/css :token-pill-icon)}]
color
- [:& color-bullet {:color color :mini true}]
+ [:> swatch* {:background color
+ :size "small"}]
status-icon?
[:> token-status-icon*
@@ -331,7 +307,7 @@
:class (stl/css :token-pill-icon)}])
(if contains-path?
- (let [[first-part last-part] (cfh/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]
diff --git a/frontend/src/app/main/ui/workspace/tokens/management/token_pill.scss b/frontend/src/app/main/ui/workspace/tokens/management/token_pill.scss
index f6e276ecf5..e6df6d482e 100644
--- a/frontend/src/app/main/ui/workspace/tokens/management/token_pill.scss
+++ b/frontend/src/app/main/ui/workspace/tokens/management/token_pill.scss
@@ -4,9 +4,9 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../../ds/typography.scss" as *;
-@use "../../../ds/borders.scss" as *;
-@import "refactor/common-refactor.scss";
+@use "ds/typography.scss" as *;
+@use "ds/_borders.scss" as *;
+@use "ds/_sizes.scss" as *;
.token-pill {
@include use-typography("code-font");
@@ -16,7 +16,7 @@
display: grid;
grid-template-columns: auto 1fr;
align-items: center;
- gap: $s-6;
+ gap: $sz-6;
border: $b-1 solid var(--token-pill-border);
outline: $b-2 solid var(--token-pill-outline);
height: var(--sp-xxl);
@@ -40,7 +40,7 @@
}
.divided-name-wrapper {
- height: $s-16;
+ height: var(--sp-l);
display: flex;
align-items: center;
white-space: nowrap;
diff --git a/frontend/src/app/main/ui/workspace/tokens/sets.cljs b/frontend/src/app/main/ui/workspace/tokens/sets.cljs
index be7ce5fbae..b46b9f0aba 100644
--- a/frontend/src/app/main/ui/workspace/tokens/sets.cljs
+++ b/frontend/src/app/main/ui/workspace/tokens/sets.cljs
@@ -15,8 +15,8 @@
[app.main.ui.workspace.tokens.sets.lists :refer [controlled-sets-list*]]
[rumext.v2 :as mf]))
-(defn- on-select-token-set-click [name]
- (st/emit! (dwtl/set-selected-token-set-name name)))
+(defn- on-select-token-set-click [id]
+ (st/emit! (dwtl/set-selected-token-set-id id)))
(defn- on-toggle-token-set-click [name]
(st/emit! (dwtl/toggle-token-set name)))
diff --git a/frontend/src/app/main/ui/workspace/tokens/sets.scss b/frontend/src/app/main/ui/workspace/tokens/sets.scss
index ca1e55d5b3..dee8bfe07b 100644
--- a/frontend/src/app/main/ui/workspace/tokens/sets.scss
+++ b/frontend/src/app/main/ui/workspace/tokens/sets.scss
@@ -4,8 +4,8 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../ds/typography.scss" as *;
-@import "refactor/common-refactor.scss";
+@use "ds/typography.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
.sets-list {
width: 100%;
@@ -14,8 +14,8 @@
}
.empty-sets-wrapper {
- padding: $s-12;
- padding-inline-start: $s-24;
+ padding: deprecated.$s-12;
+ padding-inline-start: deprecated.$s-24;
color: var(--color-foreground-secondary);
}
@@ -29,57 +29,57 @@
}
.set-item-container {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
display: flex;
align-items: center;
width: 100%;
- min-height: $s-32;
+ min-height: deprecated.$s-32;
cursor: pointer;
color: var(--layer-row-foreground-color);
- padding-left: calc($s-24 * var(--tree-depth, 0) + $s-8);
- border: $s-2 solid transparent;
- gap: $s-2;
+ padding-left: calc(deprecated.$s-24 * var(--tree-depth, 0) + deprecated.$s-8);
+ border: deprecated.$s-2 solid transparent;
+ gap: deprecated.$s-2;
&.dnd-over-bot {
- border-bottom: $s-2 solid var(--layer-row-foreground-color-hover);
+ border-bottom: deprecated.$s-2 solid var(--layer-row-foreground-color-hover);
}
&.dnd-over-top {
- border-top: $s-2 solid var(--layer-row-foreground-color-hover);
+ border-top: deprecated.$s-2 solid var(--layer-row-foreground-color-hover);
}
&.dnd-over {
- border: $s-2 solid var(--layer-row-foreground-color-hover);
+ border: deprecated.$s-2 solid var(--layer-row-foreground-color-hover);
}
}
.set-item-group {
cursor: unset;
- padding-left: calc($s-24 * var(--tree-depth, 0));
+ padding-left: calc(deprecated.$s-24 * var(--tree-depth, 0));
gap: 0;
}
.set-item-group-collapse-button {
cursor: pointer;
width: auto;
- height: $s-28;
+ height: deprecated.$s-28;
}
.set-name {
- @include textEllipsis;
+ @include deprecated.textEllipsis;
flex-grow: 1;
- padding-left: $s-2;
+ padding-left: deprecated.$s-2;
}
.icon {
flex-shrink: 0;
display: flex;
align-items: center;
- width: $s-20;
- height: $s-20;
- padding-right: $s-4;
+ width: deprecated.$s-20;
+ height: deprecated.$s-20;
+ padding-right: deprecated.$s-4;
}
.root-icon {
- margin-left: $s-8;
+ margin-left: deprecated.$s-8;
}
.checkbox-style {
@@ -87,12 +87,12 @@
display: flex;
justify-content: center;
align-items: center;
- width: $s-16;
- height: $s-16;
- margin-inline: $s-6;
+ width: deprecated.$s-16;
+ height: deprecated.$s-16;
+ margin-inline: deprecated.$s-6;
background-color: var(--input-checkbox-background-color-rest);
- border: $s-1 solid var(--input-checkbox-border-color-rest);
- border-radius: $s-4;
+ border: deprecated.$s-1 solid var(--input-checkbox-border-color-rest);
+ border-radius: deprecated.$s-4;
padding: 0;
}
@@ -102,7 +102,7 @@
}
.checkbox-disabled {
- border: $s-1 solid var(--color-background-quaternary);
+ border: deprecated.$s-1 solid var(--color-background-quaternary);
background-color: var(--color-background-tertiary);
}
@@ -126,7 +126,7 @@
justify-content: center;
align-items: center;
width: 100%;
- padding: $s-12;
+ padding: deprecated.$s-12;
color: var(--color-foreground-secondary);
}
.selected-set {
@@ -136,27 +136,27 @@
}
.collapsabled-icon {
- @include buttonStyle;
- @include flexCenter;
- height: $s-24;
- border-radius: $br-8;
+ @include deprecated.buttonStyle;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-24;
+ border-radius: deprecated.$br-8;
&:hover {
color: var(--title-foreground-color-hover);
}
}
.editing-node {
- @include textEllipsis;
- @include bodySmallTypography;
- @include removeInputStyle;
+ @include deprecated.textEllipsis;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.removeInputStyle;
- border: $s-1 solid var(--input-border-color-focus);
- border-radius: $br-8;
+ border: deprecated.$s-1 solid var(--input-border-color-focus);
+ border-radius: deprecated.$br-8;
color: var(--layer-row-foreground-color-focus);
flex-grow: 1;
- height: $s-28;
+ height: deprecated.$s-28;
margin: 0;
- padding-left: $s-6;
+ padding-left: deprecated.$s-6;
&::placeholder {
color: var(--layer-row-foreground-color-placeholder);
diff --git a/frontend/src/app/main/ui/workspace/tokens/sets/context_menu.cljs b/frontend/src/app/main/ui/workspace/tokens/sets/context_menu.cljs
index 00f0e47e86..b9cdb57e82 100644
--- a/frontend/src/app/main/ui/workspace/tokens/sets/context_menu.cljs
+++ b/frontend/src/app/main/ui/workspace/tokens/sets/context_menu.cljs
@@ -34,7 +34,7 @@
(mf/defc menu*
{::mf/private true}
- [{:keys [is-group id edition-id path]}]
+ [{:keys [is-group id path]}]
(let [create-set-at-path
(mf/use-fn (mf/deps path) #(st/emit! (dwtl/start-token-set-creation path)))
@@ -42,18 +42,20 @@
(mf/use-fn
(mf/deps id)
(fn []
- (st/emit! (dwtl/start-token-set-edition edition-id))))
+ (st/emit! (dwtl/start-token-set-edition id))))
on-duplicate
(mf/use-fn
(mf/deps is-group id)
(fn []
- (st/emit! (dwtl/duplicate-token-set id is-group))))
+ (st/emit! (dwtl/duplicate-token-set id))))
on-delete
(mf/use-fn
(mf/deps is-group path)
- #(st/emit! (dwtl/delete-token-set-path is-group path)))]
+ (if is-group
+ #(st/emit! (dwtl/delete-token-set-group path))
+ #(st/emit! (dwtl/delete-token-set id))))]
[:ul {:class (stl/css :context-list)}
(when is-group
@@ -65,7 +67,7 @@
(mf/defc token-set-context-menu*
[]
- (let [{:keys [position is-group id edition-id path]}
+ (let [{:keys [position is-group id path]}
(mf/deref ref:token-sets-context-menu)
position-top
@@ -86,5 +88,4 @@
:on-context-menu prevent-default}
[:> menu* {:is-group is-group
:id id
- :edition-id edition-id
:path path}]]]))
diff --git a/frontend/src/app/main/ui/workspace/tokens/sets/context_menu.scss b/frontend/src/app/main/ui/workspace/tokens/sets/context_menu.scss
index 12438545c8..1e36266233 100644
--- a/frontend/src/app/main/ui/workspace/tokens/sets/context_menu.scss
+++ b/frontend/src/app/main/ui/workspace/tokens/sets/context_menu.scss
@@ -4,21 +4,21 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../../ds/typography.scss" as t;
-@import "refactor/common-refactor.scss";
+@use "ds/typography.scss" as t;
+@use "refactor/common-refactor.scss" as deprecated;
.token-set-context-menu {
position: absolute;
- z-index: $z-index-4;
+ z-index: deprecated.$z-index-4;
}
.context-list {
- @include menuShadow;
+ @include deprecated.menuShadow;
display: grid;
- width: $s-240;
- padding: $s-4;
- border-radius: $br-8;
- border: $s-2 solid var(--panel-border-color);
+ width: deprecated.$s-240;
+ padding: deprecated.$s-4;
+ border-radius: deprecated.$br-8;
+ border: deprecated.$s-2 solid var(--panel-border-color);
background-color: var(--menu-background-color);
max-height: 100vh;
overflow-y: auto;
@@ -29,10 +29,10 @@
color: var(--menu-foreground-color);
display: flex;
align-items: center;
- height: $s-28;
+ height: deprecated.$s-28;
width: 100%;
- padding: $s-6;
- border-radius: $br-8;
+ padding: deprecated.$s-6;
+ border-radius: deprecated.$br-8;
cursor: pointer;
&:hover {
diff --git a/frontend/src/app/main/ui/workspace/tokens/sets/helpers.cljs b/frontend/src/app/main/ui/workspace/tokens/sets/helpers.cljs
index c05e2517ed..b4ad5e568f 100644
--- a/frontend/src/app/main/ui/workspace/tokens/sets/helpers.cljs
+++ b/frontend/src/app/main/ui/workspace/tokens/sets/helpers.cljs
@@ -32,5 +32,3 @@
(st/emit! (ptk/data-event ::ev/event {::ev/name "create-token-set" :name name})
(dwtl/create-token-set name))))
-
-
diff --git a/frontend/src/app/main/ui/workspace/tokens/sets/lists.cljs b/frontend/src/app/main/ui/workspace/tokens/sets/lists.cljs
index 3b772f2009..89d5fa4895 100644
--- a/frontend/src/app/main/ui/workspace/tokens/sets/lists.cljs
+++ b/frontend/src/app/main/ui/workspace/tokens/sets/lists.cljs
@@ -21,19 +21,15 @@
[app.util.dom :as dom]
[app.util.i18n :refer [tr]]
[app.util.keyboard :as kbd]
+ [beicon.v2.core :as rx]
[cuerdas.core :as str]
+ [potok.v2.core :as ptk]
[rumext.v2 :as mf]))
(defn- on-start-creation
[]
(st/emit! (dwtl/start-token-set-creation [])))
-(defn- group-edition-id
- "Prefix editing groups `edition-id` so it can be differentiated from sets with the same id."
- [edition-id]
- (str "group-" edition-id))
-
-
(mf/defc editing-label*
{::mf/private true}
[{:keys [default-value on-cancel on-submit]}]
@@ -111,8 +107,8 @@
(mf/defc sets-tree-set-group*
{::mf/private true}
- [{:keys [id label tree-depth tree-path is-active is-selected is-draggable is-collapsed tree-index on-drop
- on-toggle-collapse on-toggle is-editing on-start-edition on-reset-edition on-edit-submit]}]
+ [{:keys [id label is-editing is-active is-selected is-draggable is-collapsed path depth index
+ on-toggle on-drop on-start-edition on-reset-edition on-edit-submit on-toggle-collapse]}]
(let [can-edit?
(mf/use-ctx ctx/can-edit?)
@@ -122,7 +118,7 @@
on-context-menu
(mf/use-fn
- (mf/deps is-editing id tree-path can-edit?)
+ (mf/deps is-editing id path can-edit?)
(fn [event]
(dom/prevent-default event)
(dom/stop-propagation event)
@@ -131,47 +127,46 @@
{:position (dom/get-client-position event)
:is-group true
:id id
- :edition-id (group-edition-id id)
- :path tree-path})))))
+ :path path})))))
on-collapse-click
(mf/use-fn
(fn [event]
(dom/prevent-default event)
(dom/stop-propagation event)
- (on-toggle-collapse tree-path)))
+ (on-toggle-collapse path)))
on-double-click
- (mf/use-fn (mf/deps id) #(on-start-edition (group-edition-id id)))
+ (mf/use-fn (mf/deps id) #(on-start-edition id))
on-checkbox-click
(mf/use-fn
- (mf/deps on-toggle tree-path can-edit?)
- #(on-toggle tree-path))
+ (mf/deps on-toggle path can-edit?)
+ #(on-toggle path))
on-edit-submit'
(mf/use-fn
- (mf/deps tree-path on-edit-submit can-edit?)
- #(on-edit-submit tree-path %))
+ (mf/deps path on-edit-submit can-edit?)
+ #(on-edit-submit path %))
on-drop
(mf/use-fn
- (mf/deps tree-index on-drop)
+ (mf/deps index on-drop)
(fn [position data]
- (on-drop tree-index position data)))
+ (on-drop index position data)))
[dprops dref]
(h/use-sortable
:data-type "penpot/token-set"
:on-drop on-drop
- :data {:index tree-index
+ :data {:index index
:is-group true}
:detect-center? true
- :draggable? is-draggable)]
+ :draggable? (and is-draggable (not is-editing)))]
[:div {:ref dref
:data-testid "tokens-set-group-item"
- :style {"--tree-depth" tree-depth}
+ :style {"--tree-depth" depth}
:class (stl/css-case :set-item-container true
:set-item-group true
:selected-set is-selected
@@ -209,24 +204,23 @@
:arial-label (tr "workspace.tokens.select-set")}]])]))
(mf/defc sets-tree-set*
- [{:keys [id set label tree-depth tree-path tree-index is-selected is-active is-draggable is-editing
- on-select on-drop on-toggle on-start-edition on-reset-edition on-edit-submit is-new]}]
+ [{:keys [id set label is-editing is-active is-selected is-draggable is-new path depth index
+ on-select on-toggle on-drop on-start-edition on-reset-edition on-edit-submit]}]
- (let [set-name (ctob/get-name set)
- can-edit? (mf/use-ctx ctx/can-edit?)
+ (let [can-edit? (mf/use-ctx ctx/can-edit?)
on-click
(mf/use-fn
- (mf/deps is-editing tree-path)
+ (mf/deps is-editing on-select id)
(fn [event]
(dom/stop-propagation event)
(when-not is-editing
(when (fn? on-select)
- (on-select set-name)))))
+ (on-select id)))))
on-context-menu
(mf/use-fn
- (mf/deps is-editing id tree-path can-edit?)
+ (mf/deps is-editing id path can-edit?)
(fn [event]
(dom/prevent-default event)
(dom/stop-propagation event)
@@ -235,8 +229,7 @@
{:position (dom/get-client-position event)
:is-group false
:id id
- :edition-id id
- :path tree-path})))))
+ :path path})))))
on-double-click
(mf/use-fn
@@ -247,11 +240,11 @@
on-checkbox-click
(mf/use-fn
- (mf/deps set-name on-toggle)
+ (mf/deps id on-toggle)
(fn [event]
(dom/stop-propagation event)
(when (fn? on-toggle)
- (on-toggle set-name))))
+ (on-toggle (ctob/get-name set)))))
on-edit-submit'
(mf/use-fn
@@ -260,25 +253,25 @@
on-drag
(mf/use-fn
- (mf/deps tree-path)
+ (mf/deps path)
(fn [_]
(when-not is-selected
- (on-select tree-path))))
+ (on-select path))))
on-drop
(mf/use-fn
- (mf/deps tree-index on-drop)
+ (mf/deps index on-drop)
(fn [position data]
- (on-drop tree-index position data)))
+ (on-drop index position data)))
[dprops dref]
(h/use-sortable
:data-type "penpot/token-set"
:on-drag on-drag
:on-drop on-drop
- :data {:index tree-index
+ :data {:index index
:is-group false}
- :draggable? is-draggable)
+ :draggable? (and is-draggable (not is-editing)))
drop-over
(get dprops :over)]
@@ -286,7 +279,8 @@
[:div {:ref dref
:role "button"
:data-testid "tokens-set-item"
- :style {"--tree-depth" tree-depth}
+ :id (str "token-set-item-" (str/join "/" path))
+ :style {"--tree-depth" depth}
:class (stl/css-case :set-item-container true
:selected-set is-selected
:dnd-over (= drop-over :center)
@@ -300,7 +294,7 @@
[:> icon*
{:icon-id i/document
:class (stl/css-case :icon true
- :root-icon (not tree-depth))}]
+ :root-icon (not depth))}]
(if is-editing
[:> editing-label*
{:default-value label
@@ -342,9 +336,9 @@
on-drop
(mf/use-fn
(mf/deps collapsed-paths)
- (fn [tree-index position data]
+ (fn [index position data]
(let [params {:from-index (:index data)
- :to-index tree-index
+ :to-index index
:position position
:collapsed-paths collapsed-paths}]
(if (:is-group data)
@@ -358,79 +352,88 @@
(disj % path)
(conj % path)))))]
- (for [{:keys [id token-set index is-new is-group path parent-path depth] :as node}
+ (mf/with-effect []
+ (let [sub (rx/subs! (fn [paths']
+ (swap! collapsed-paths* (fn [paths] (apply disj paths paths'))))
+ (->> st/stream
+ (rx/filter (ptk/type? :expand-token-sets))
+ (rx/map deref)
+ (rx/map :paths)))]
+ (fn []
+ (rx/dispose! sub))))
+
+ (for [{:keys [token-set id index is-new is-group path depth] :as node}
(ctob/sets-tree-seq token-sets
{:skip-children-pred collapsed?
:new-at-path new-path})]
- (cond
- ^boolean is-group
- [:> sets-tree-set-group*
- {:key index
- :label (peek path)
- :id id
- :is-active (is-token-set-group-active path)
- :is-selected false
- :is-draggable is-draggable
- :is-editing (= edition-id (group-edition-id id))
- :is-collapsed (collapsed? path)
- :on-select on-select
+ (do
+ (cond
+ ^boolean is-group
+ [:> sets-tree-set-group*
+ {:key index
+ :id id
+ :label (peek path)
+ :is-editing (= edition-id id)
+ :is-active (is-token-set-group-active path)
+ :is-selected false
+ :is-draggable is-draggable
+ :is-collapsed (collapsed? path)
- :tree-path path
- :tree-depth depth
- :tree-index index
- :tree-parent-path parent-path
+ :path path
+ :depth depth
+ :index index
- :on-drop on-drop
- :on-start-edition on-start-edition
- :on-reset-edition on-reset-edition
- :on-edit-submit on-edit-submit-group
- :on-toggle-collapse on-toggle-collapse
- :on-toggle on-toggle-set-group}]
+ :on-toggle on-toggle-set-group
+ :on-drop on-drop
+ :on-start-edition on-start-edition
+ :on-reset-edition on-reset-edition
+ :on-edit-submit on-edit-submit-group
+ :on-toggle-collapse on-toggle-collapse}]
- ^boolean is-new
- [:> sets-tree-set*
- {:key index
- :set token-set
- :label ""
- :id id
- :is-editing true
- :is-active true
- :is-selected true
- :is-new true
- :tree-path path
- :tree-depth depth
- :tree-index index
- :tree-parent-path parent-path
+ ^boolean is-new
+ [:> sets-tree-set*
+ {:key index
+ :id id
+ :set token-set
+ :label ""
+ :is-editing true
+ :is-active true
+ :is-selected true
+ :is-draggable false
+ :is-new true
- :on-drop on-drop
- :on-reset-edition on-reset-edition
- :on-edit-submit sets-helpers/on-create-token-set}]
+ :path path
+ :depth depth
+ :index index
- :else
- [:> sets-tree-set*
- {:key index
- :set token-set
- :id id
- :label (peek path)
- :is-editing (= edition-id id)
- :is-active (is-token-set-active id)
- :is-selected (= selected id)
- :is-draggable is-draggable
- :on-select on-select
- :tree-path path
- :tree-depth depth
- :tree-index index
- :is-new false
- :tree-parent-path parent-path
- :on-toggle on-toggle-set
- :edition-id edition-id
- :on-start-edition on-start-edition
- :on-drop on-drop
- :on-reset-edition on-reset-edition
- :on-edit-submit on-edit-submit-set}]))))
+ :on-drop on-drop
+ :on-reset-edition on-reset-edition
+ :on-edit-submit sets-helpers/on-create-token-set}]
+
+ :else
+ [:> sets-tree-set*
+ {:key index
+ :id id
+ :set token-set
+ :label (peek path)
+ :is-editing (= edition-id id)
+ :is-active (is-token-set-active (ctob/get-name token-set))
+ :is-selected (= selected id)
+ :is-draggable is-draggable
+ :is-new false
+
+ :path path
+ :depth depth
+ :index index
+
+ :on-select on-select
+ :on-toggle on-toggle-set
+ :on-drop on-drop
+ :on-start-edition on-start-edition
+ :on-reset-edition on-reset-edition
+ :on-edit-submit on-edit-submit-set}])))))
(mf/defc controlled-sets-list*
- {::mf/props :obj}
[{:keys [token-sets
selected
on-update-token-set
diff --git a/frontend/src/app/main/ui/workspace/tokens/sets/lists.scss b/frontend/src/app/main/ui/workspace/tokens/sets/lists.scss
index f0ba86f54d..dee8bfe07b 100644
--- a/frontend/src/app/main/ui/workspace/tokens/sets/lists.scss
+++ b/frontend/src/app/main/ui/workspace/tokens/sets/lists.scss
@@ -4,8 +4,8 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../../ds/typography.scss" as *;
-@import "refactor/common-refactor.scss";
+@use "ds/typography.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
.sets-list {
width: 100%;
@@ -14,8 +14,8 @@
}
.empty-sets-wrapper {
- padding: $s-12;
- padding-inline-start: $s-24;
+ padding: deprecated.$s-12;
+ padding-inline-start: deprecated.$s-24;
color: var(--color-foreground-secondary);
}
@@ -29,57 +29,57 @@
}
.set-item-container {
- @include bodySmallTypography;
+ @include deprecated.bodySmallTypography;
display: flex;
align-items: center;
width: 100%;
- min-height: $s-32;
+ min-height: deprecated.$s-32;
cursor: pointer;
color: var(--layer-row-foreground-color);
- padding-left: calc($s-24 * var(--tree-depth, 0) + $s-8);
- border: $s-2 solid transparent;
- gap: $s-2;
+ padding-left: calc(deprecated.$s-24 * var(--tree-depth, 0) + deprecated.$s-8);
+ border: deprecated.$s-2 solid transparent;
+ gap: deprecated.$s-2;
&.dnd-over-bot {
- border-bottom: $s-2 solid var(--layer-row-foreground-color-hover);
+ border-bottom: deprecated.$s-2 solid var(--layer-row-foreground-color-hover);
}
&.dnd-over-top {
- border-top: $s-2 solid var(--layer-row-foreground-color-hover);
+ border-top: deprecated.$s-2 solid var(--layer-row-foreground-color-hover);
}
&.dnd-over {
- border: $s-2 solid var(--layer-row-foreground-color-hover);
+ border: deprecated.$s-2 solid var(--layer-row-foreground-color-hover);
}
}
.set-item-group {
cursor: unset;
- padding-left: calc($s-24 * var(--tree-depth, 0));
+ padding-left: calc(deprecated.$s-24 * var(--tree-depth, 0));
gap: 0;
}
.set-item-group-collapse-button {
cursor: pointer;
width: auto;
- height: $s-28;
+ height: deprecated.$s-28;
}
.set-name {
- @include textEllipsis;
+ @include deprecated.textEllipsis;
flex-grow: 1;
- padding-left: $s-2;
+ padding-left: deprecated.$s-2;
}
.icon {
flex-shrink: 0;
display: flex;
align-items: center;
- width: $s-20;
- height: $s-20;
- padding-right: $s-4;
+ width: deprecated.$s-20;
+ height: deprecated.$s-20;
+ padding-right: deprecated.$s-4;
}
.root-icon {
- margin-left: $s-8;
+ margin-left: deprecated.$s-8;
}
.checkbox-style {
@@ -87,12 +87,12 @@
display: flex;
justify-content: center;
align-items: center;
- width: $s-16;
- height: $s-16;
- margin-inline: $s-6;
+ width: deprecated.$s-16;
+ height: deprecated.$s-16;
+ margin-inline: deprecated.$s-6;
background-color: var(--input-checkbox-background-color-rest);
- border: $s-1 solid var(--input-checkbox-border-color-rest);
- border-radius: $s-4;
+ border: deprecated.$s-1 solid var(--input-checkbox-border-color-rest);
+ border-radius: deprecated.$s-4;
padding: 0;
}
@@ -102,7 +102,7 @@
}
.checkbox-disabled {
- border: $s-1 solid var(--color-background-quaternary);
+ border: deprecated.$s-1 solid var(--color-background-quaternary);
background-color: var(--color-background-tertiary);
}
@@ -126,7 +126,7 @@
justify-content: center;
align-items: center;
width: 100%;
- padding: $s-12;
+ padding: deprecated.$s-12;
color: var(--color-foreground-secondary);
}
.selected-set {
@@ -136,27 +136,27 @@
}
.collapsabled-icon {
- @include buttonStyle;
- @include flexCenter;
- height: $s-24;
- border-radius: $br-8;
+ @include deprecated.buttonStyle;
+ @include deprecated.flexCenter;
+ height: deprecated.$s-24;
+ border-radius: deprecated.$br-8;
&:hover {
color: var(--title-foreground-color-hover);
}
}
.editing-node {
- @include textEllipsis;
- @include bodySmallTypography;
- @include removeInputStyle;
+ @include deprecated.textEllipsis;
+ @include deprecated.bodySmallTypography;
+ @include deprecated.removeInputStyle;
- border: $s-1 solid var(--input-border-color-focus);
- border-radius: $br-8;
+ border: deprecated.$s-1 solid var(--input-border-color-focus);
+ border-radius: deprecated.$br-8;
color: var(--layer-row-foreground-color-focus);
flex-grow: 1;
- height: $s-28;
+ height: deprecated.$s-28;
margin: 0;
- padding-left: $s-6;
+ padding-left: deprecated.$s-6;
&::placeholder {
color: var(--layer-row-foreground-color-placeholder);
diff --git a/frontend/src/app/main/ui/workspace/tokens/settings/menu.scss b/frontend/src/app/main/ui/workspace/tokens/settings/menu.scss
index 40a297621c..ae5339a979 100644
--- a/frontend/src/app/main/ui/workspace/tokens/settings/menu.scss
+++ b/frontend/src/app/main/ui/workspace/tokens/settings/menu.scss
@@ -4,9 +4,9 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../../ds/spacing.scss" as *;
+@use "ds/spacing.scss" as *;
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.setting-modal-overlay {
@extend .modal-overlay-base;
diff --git a/frontend/src/app/main/ui/workspace/tokens/sidebar.cljs b/frontend/src/app/main/ui/workspace/tokens/sidebar.cljs
index 3e8efc67d6..750049166b 100644
--- a/frontend/src/app/main/ui/workspace/tokens/sidebar.cljs
+++ b/frontend/src/app/main/ui/workspace/tokens/sidebar.cljs
@@ -35,16 +35,11 @@
(mf/defc token-sets-list*
{::mf/private true}
[{:keys [tokens-lib]}]
- (let [;; FIXME: This is an inneficient operation just for being
- ;; ability to check if there are some sets and lookup the
- ;; first one when no set is selected, should be REFACTORED; is
- ;; inneficient because instead of return the sets as-is (tree)
- ;; it firstly makes it a plain seq from tree.
- token-sets
- (some-> tokens-lib (ctob/get-sets))
+ (let [token-sets
+ (some-> tokens-lib (ctob/get-set-tree))
- selected-token-set-name
- (mf/deref refs/selected-token-set-name)
+ selected-token-set-id
+ (mf/deref refs/selected-token-set-id)
{:keys [token-set-edition-id
token-set-new-path]}
@@ -56,12 +51,12 @@
(when-not token-set-new-path
[:> tsetslist/inline-add-button*])
- [:> h/sortable-container {}
+ [:> h/sortable-container* {}
[:> tsets/sets-list*
{:tokens-lib tokens-lib
:new-path token-set-new-path
:edition-id token-set-edition-id
- :selected selected-token-set-name}]])))
+ :selected selected-token-set-id}]])))
(mf/defc token-management-section*
{::mf/private true}
diff --git a/frontend/src/app/main/ui/workspace/tokens/sidebar.scss b/frontend/src/app/main/ui/workspace/tokens/sidebar.scss
index bd6bacfe1f..a48adee402 100644
--- a/frontend/src/app/main/ui/workspace/tokens/sidebar.scss
+++ b/frontend/src/app/main/ui/workspace/tokens/sidebar.scss
@@ -4,16 +4,16 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../ds/typography.scss" as *;
-@use "../../ds/spacing.scss" as *;
-@import "refactor/common-refactor.scss";
+@use "ds/typography.scss" as *;
+@use "ds/spacing.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
.sidebar-wrapper {
display: grid;
grid-template-rows: auto 1fr auto;
// Overflow on the bottom section can't be done without hardcoded values for the height
// This has to be changed from the wrapping sidebar styles
- height: calc(100vh - #{$s-92});
+ height: calc(100vh - #{deprecated.$s-92});
overflow: hidden;
}
@@ -46,7 +46,7 @@
}
.section-text-icon {
- font-size: $fs-12;
+ font-size: deprecated.$fs-12;
width: var(--sp-l);
height: var(--sp-l);
display: flex;
@@ -76,7 +76,7 @@
display: flex;
align-items: center;
justify-content: end;
- padding: $s-6 var(--sp-s);
+ padding: deprecated.$s-6 var(--sp-s);
text-transform: uppercase;
gap: var(--sp-s);
background-color: var(--color-background-primary);
@@ -86,10 +86,10 @@
.import-export-menu {
@extend .menu-dropdown;
- top: -#{$s-6};
+ top: -#{deprecated.$s-6};
right: 0;
translate: 0 -100%;
- width: $s-192;
+ width: deprecated.$s-192;
margin: 0;
}
@@ -119,13 +119,13 @@
position: absolute;
left: 0;
width: 100%;
- padding: $s-3 0 $s-1 0;
- height: $s-6;
+ padding: deprecated.$s-3 0 deprecated.$s-1 0;
+ height: deprecated.$s-6;
cursor: ns-resize;
z-index: 1;
}
.resize-handle-horiz {
- border-bottom: $s-2 solid var(--resize-area-border-color);
+ border-bottom: deprecated.$s-2 solid var(--resize-area-border-color);
cursor: ns-resize;
}
diff --git a/frontend/src/app/main/ui/workspace/tokens/themes.scss b/frontend/src/app/main/ui/workspace/tokens/themes.scss
index e15e14a908..a96f9f341a 100644
--- a/frontend/src/app/main/ui/workspace/tokens/themes.scss
+++ b/frontend/src/app/main/ui/workspace/tokens/themes.scss
@@ -4,9 +4,9 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../ds/typography.scss" as *;
-@use "../../ds/_sizes" as *;
-@use "../../ds/spacing.scss" as *;
+@use "ds/typography.scss" as *;
+@use "ds/_sizes" as *;
+@use "ds/spacing.scss" as *;
.themes-wrapper {
padding: var(--sp-m) 0 0 var(--sp-m);
diff --git a/frontend/src/app/main/ui/workspace/tokens/themes/create_modal.cljs b/frontend/src/app/main/ui/workspace/tokens/themes/create_modal.cljs
index 2c9ac18e42..7eb31aa15b 100644
--- a/frontend/src/app/main/ui/workspace/tokens/themes/create_modal.cljs
+++ b/frontend/src/app/main/ui/workspace/tokens/themes/create_modal.cljs
@@ -31,9 +31,34 @@
[app.util.i18n :refer [tr]]
[app.util.keyboard :as k]
[cuerdas.core :as str]
+ [malli.core :as m]
+ [malli.error :as me]
[potok.v2.core :as ptk]
[rumext.v2 :as mf]))
+;; Schemas ---------------------------------------------------------------------
+
+(defn- theme-name-schema
+ "Generate a dynamic schema validation to check if a theme path derived from the name already exists at `tokens-tree`."
+ [{:keys [group theme-id tokens-lib]}]
+ (m/-simple-schema
+ {:type :token/name-exists
+ :pred (fn [name]
+ (if tokens-lib
+ (let [theme (ctob/get-theme-by-name tokens-lib group name)]
+ (or (nil? theme)
+ (= (ctob/get-id theme) theme-id)))
+ true)) ;; if still no library exists, cannot be duplicate
+ :type-properties {:error/fn #(tr "workspace.tokens.theme-name-already-exists")}}))
+
+(defn- validate-theme-name
+ [tokens-lib group theme-id name]
+ (let [schema (theme-name-schema {:tokens-lib tokens-lib :theme-id theme-id :group group})
+ validation (m/explain schema (str/trim name))]
+ (me/humanize validation)))
+
+;; Form Component --------------------------------------------------------------
+
(mf/defc empty-themes
[{:keys [change-view]}]
(let [create-theme
@@ -78,7 +103,7 @@
(mf/defc themes-overview
[{:keys [change-view]}]
- (let [active-theme-ids (mf/deref refs/workspace-active-theme-paths)
+ (let [active-theme-paths (mf/deref refs/workspace-active-theme-paths)
themes-groups (mf/deref refs/workspace-token-theme-tree-no-hidden)
create-theme
@@ -105,20 +130,20 @@
[:> icon* {:icon-id i/group :class (stl/css :group-title-icon)}]
[:> text* {:as "span" :typography "body-medium" :class (stl/css :group-title-name)} group]]])
[:ul {:class (stl/css :theme-group-rows-wrapper)}
- (for [[_ {:keys [group name] :as theme}] themes
- :let [theme-id (ctob/theme-path theme)
- selected? (some? (get active-theme-ids theme-id))
+ (for [[_ {:keys [id name] :as theme}] themes
+ :let [theme-path (ctob/get-theme-path theme)
+ selected? (some? (get active-theme-paths theme-path))
delete-theme
(fn [e]
(dom/prevent-default e)
(dom/stop-propagation e)
- (st/emit! (dwtl/delete-token-theme group name)))
+ (st/emit! (dwtl/delete-token-theme id)))
on-edit-theme
(fn [e]
(dom/prevent-default e)
(dom/stop-propagation e)
- (change-view :edit-theme {:theme-path [(:id theme) (:group theme) (:name theme)]}))]]
- [:li {:key theme-id
+ (change-view :edit-theme {:theme-info [(:id theme) (:group theme) (:name theme)]}))]]
+ [:li {:key theme-path
:class (stl/css :theme-row)}
[:div {:class (stl/css :theme-switch-row)}
@@ -126,7 +151,7 @@
[:div {:on-click (fn [e]
(dom/prevent-default e)
(dom/stop-propagation e)
- (st/emit! (dwtl/toggle-token-theme-active? group name)))}
+ (st/emit! (dwtl/toggle-token-theme-active? id)))}
[:& switch {:name (tr "workspace.tokens.theme-name" name)
:on-change (constantly nil)
:selected? selected?}]]]
@@ -166,25 +191,36 @@
(mf/defc theme-inputs*
[{:keys [theme on-change-field]}]
- (let [theme-groups (mf/deref refs/workspace-token-theme-groups)
+ (let [tokens-lib (mf/deref refs/tokens-lib)
+ theme-groups (mf/deref refs/workspace-token-theme-groups)
theme-name-ref (mf/use-ref (:name theme))
- options (map (fn [group]
- {:label group
- :id group})
- theme-groups)
+ options (map (fn [group]
+ {:label group
+ :id group})
+ theme-groups)
+ current-group* (mf/use-state (:group theme))
+ current-group (deref current-group*)
+ name-errors* (mf/use-state nil)
+ name-errors (deref name-errors*)
on-update-group
(mf/use-fn
(mf/deps on-change-field)
- #(on-change-field :group %))
+ (fn [value]
+ (reset! current-group* value)
+ (on-change-field :group value)))
on-update-name
(mf/use-fn
- (mf/deps on-change-field)
+ (mf/deps on-change-field tokens-lib current-group)
(fn [event]
- (let [value (-> event dom/get-target dom/get-value)]
- (on-change-field :name value)
- (mf/set-ref-val! theme-name-ref value))))]
+ (let [value (-> event dom/get-target dom/get-value)
+ errors (validate-theme-name tokens-lib current-group (ctob/get-id theme) value)]
+ (reset! name-errors* errors)
+ (mf/set-ref-val! theme-name-ref value)
+ (if (empty? errors)
+ (on-change-field :name value)
+ (on-change-field :name "")))))]
[:div {:class (stl/css :edit-theme-inputs-wrapper)}
[:div {:class (stl/css :group-input-wrapper)}
@@ -202,6 +238,8 @@
:variant "comfortable"
:default-value (mf/ref-val theme-name-ref)
:auto-focus true
+ :hint-type (when-not (empty? name-errors) "error")
+ :hint-message (first name-errors)
:on-change on-update-name}]]]))
(mf/defc theme-modal-buttons*
@@ -238,7 +276,7 @@
(let [tlib (-> (ctob/make-tokens-lib)
(ctob/add-theme theme))
tlib (reduce ctob/add-set tlib sets)]
- (ctob/activate-theme tlib (:group theme) (:name theme))))
+ (ctob/activate-theme tlib (ctob/get-id theme))))
(mf/defc edit-create-theme*
[{:keys [change-view theme on-save is-editing has-prev-view]}]
@@ -285,7 +323,7 @@
(mf/use-fn
(mf/deps current-theme on-back)
(fn []
- (st/emit! (dwtl/delete-token-theme (:group current-theme) (:name current-theme)))
+ (st/emit! (dwtl/delete-token-theme (ctob/get-id current-theme)))
(on-back)))
;; Sets tree handlers
@@ -318,9 +356,9 @@
on-click-token-set
(mf/use-fn
(mf/deps on-toggle-token-set)
- (fn [prefixed-set-path-str]
- (let [set-name (ctob/prefixed-set-path-string->set-name-string prefixed-set-path-str)]
- (on-toggle-token-set set-name))))]
+ (fn [set-id]
+ (let [set (ctob/get-set lib set-id)]
+ (on-toggle-token-set (ctob/get-name set)))))]
[:div {:class (stl/css :themes-modal-wrapper)}
[:> heading* {:level 2 :typography "headline-medium" :class (stl/css :themes-modal-title)}
@@ -370,16 +408,16 @@
(mf/defc edit-theme
[{:keys [state change-view]}]
- (let [{:keys [theme-path]} state
- [_ theme-group theme-name] theme-path
- theme (mf/deref (refs/workspace-token-theme theme-group theme-name))
+ (let [{:keys [theme-info]} state
+ [theme-id _ _] theme-info
+ theme (mf/deref (refs/workspace-token-theme theme-id))
has-prev-view (has-prev-view (:prev-type state))
on-save
(mf/use-fn
(mf/deps theme)
(fn [theme']
- (st/emit! (dwtl/update-token-theme [(:group theme) (:name theme)] theme'))))]
+ (st/emit! (dwtl/update-token-theme (ctob/get-id theme) theme'))))]
[:> edit-create-theme*
{:change-view change-view
@@ -414,12 +452,12 @@
state (deref state*)
change-view (mf/use-fn
- (fn [type & {:keys [theme-path]}]
+ (fn [type & {:keys [theme-info]}]
(swap! state* (fn [current-state]
(cond-> current-state
:always (assoc :type type
:prev-type (:type current-state))
- :theme-path (assoc :theme-path theme-path))))))
+ :theme-info (assoc :theme-info theme-info))))))
component (case (:type state)
:empty-themes empty-themes
diff --git a/frontend/src/app/main/ui/workspace/tokens/themes/create_modal.scss b/frontend/src/app/main/ui/workspace/tokens/themes/create_modal.scss
index 240eba8c6d..c1cc8b59a4 100644
--- a/frontend/src/app/main/ui/workspace/tokens/themes/create_modal.scss
+++ b/frontend/src/app/main/ui/workspace/tokens/themes/create_modal.scss
@@ -4,9 +4,9 @@
//
// Copyright (c) KALEIDOS INC
-@use "../../../ds/_sizes.scss" as *;
+@use "ds/_sizes.scss" as *;
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.modal-overlay {
@extend .modal-overlay-base;
@@ -16,7 +16,7 @@
@extend .modal-container-base;
width: 100%;
- max-width: $s-512;
+ max-width: deprecated.$s-512;
max-height: unset;
user-select: none;
}
@@ -26,15 +26,14 @@
flex-direction: column;
justify-content: center;
align-items: center;
- gap: $s-12;
- padding: $s-72 0;
+ gap: deprecated.$s-12;
+ padding: deprecated.$s-72 0;
}
.themes-modal-wrapper {
display: flex;
flex-direction: column;
- gap: $s-16;
- max-height: $s-688;
+ gap: deprecated.$s-16;
}
.edit-theme-form {
@@ -57,7 +56,7 @@
width: fit-content;
display: grid;
grid-template-columns: auto auto;
- gap: $s-4;
+ gap: deprecated.$s-4;
align-items: center;
padding: 0;
&:hover {
@@ -69,7 +68,7 @@
display: flex;
margin-left: auto;
justify-content: flex-end;
- gap: $s-6;
+ gap: deprecated.$s-6;
}
.edit-theme-footer {
@@ -98,18 +97,18 @@
.create-theme-wrapper {
display: flex;
flex-direction: column;
- gap: $s-24;
+ gap: deprecated.$s-24;
}
.close-btn {
position: absolute;
- top: $s-8;
- right: $s-6;
+ top: deprecated.$s-8;
+ right: deprecated.$s-6;
}
.theme-group-label {
color: var(--color-foreground-secondary);
- margin: 0 0 $s-12 0;
+ margin: 0 0 deprecated.$s-12 0;
padding: 0;
}
@@ -117,7 +116,7 @@
display: flex;
align-items: center;
justify-content: flex-start;
- gap: $s-4;
+ gap: deprecated.$s-4;
}
.group-title-icon {
@@ -126,33 +125,33 @@
.group-title-name {
flex-grow: 1;
- @include textEllipsis;
+ @include deprecated.textEllipsis;
}
.theme-group-rows-wrapper {
display: flex;
flex-direction: column;
- gap: $s-6;
+ gap: deprecated.$s-6;
margin: 0;
}
.theme-group-wrapper {
display: flex;
flex-direction: column;
- margin-block-start: $s-6;
+ margin-block-start: deprecated.$s-6;
overflow-y: auto;
- gap: $s-32;
+ gap: deprecated.$s-32;
}
.theme-row {
align-items: center;
display: flex;
justify-content: space-between;
- gap: $s-16;
+ gap: deprecated.$s-16;
}
.theme-name-row {
- @include textEllipsis;
+ @include deprecated.textEllipsis;
flex-grow: 1;
}
@@ -163,13 +162,13 @@
.theme-actions-row {
align-items: center;
display: flex;
- gap: $s-6;
+ gap: deprecated.$s-6;
flex-shrink: 0;
}
.sets-count-button {
- padding: $s-6;
- padding-left: $s-12;
+ padding: deprecated.$s-6;
+ padding-left: deprecated.$s-12;
}
.label-wrapper {
@@ -182,32 +181,32 @@
.edit-theme-wrapper {
display: flex;
flex-direction: column;
- gap: $s-24;
+ gap: deprecated.$s-24;
inline-size: 100%;
}
.sets-list-wrapper {
- border: $s-1 solid color-mix(in hsl, var(--color-foreground-secondary) 30%, transparent);
- border-radius: $s-8;
+ border: deprecated.$s-1 solid color-mix(in hsl, var(--color-foreground-secondary) 30%, transparent);
+ border-radius: deprecated.$s-8;
overflow-y: auto;
- max-height: $s-452;
+ max-height: deprecated.$s-452;
}
.sets-count-empty-button {
text-transform: lowercase;
- padding: $s-6;
- padding-left: $s-12;
+ padding: deprecated.$s-6;
+ padding-left: deprecated.$s-12;
}
.group-input-wrapper {
position: relative;
display: flex;
flex-direction: column;
- gap: $s-4;
+ gap: deprecated.$s-4;
}
.edit-theme-inputs-wrapper {
display: grid;
grid-template-columns: 0.6fr 1fr;
- gap: $s-12;
+ gap: deprecated.$s-12;
}
diff --git a/frontend/src/app/main/ui/workspace/tokens/themes/theme_selector.cljs b/frontend/src/app/main/ui/workspace/tokens/themes/theme_selector.cljs
index bdd84cfed3..a4289545b1 100644
--- a/frontend/src/app/main/ui/workspace/tokens/themes/theme_selector.cljs
+++ b/frontend/src/app/main/ui/workspace/tokens/themes/theme_selector.cljs
@@ -26,12 +26,12 @@
[{:keys [themes active-theme-paths on-close grouped?]}]
(when (seq themes)
[:ul {:class (stl/css :theme-options)}
- (for [[_ {:keys [group name] :as theme}] themes
- :let [theme-id (ctob/theme-path theme)
+ (for [[_ {:keys [id name] :as theme}] themes
+ :let [theme-id (ctob/get-theme-path theme)
selected? (get active-theme-paths theme-id)
select-theme (fn [e]
(dom/stop-propagation e)
- (st/emit! (dwtl/toggle-token-theme-active? group name))
+ (st/emit! (dwtl/toggle-token-theme-active? id))
(on-close))]]
[:li {:key theme-id
:role "option"
diff --git a/frontend/src/app/main/ui/workspace/tokens/themes/theme_selector.scss b/frontend/src/app/main/ui/workspace/tokens/themes/theme_selector.scss
index 7819cfb620..867d65eafe 100644
--- a/frontend/src/app/main/ui/workspace/tokens/themes/theme_selector.scss
+++ b/frontend/src/app/main/ui/workspace/tokens/themes/theme_selector.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.custom-select {
--custom-select-border-color: var(--menu-background-color);
@@ -15,13 +15,13 @@
display: grid;
grid-template-columns: 1fr auto;
align-items: center;
- height: $s-32;
+ height: deprecated.$s-32;
width: 100%;
margin: 0;
- padding: $s-8;
- border-radius: $br-8;
+ padding: deprecated.$s-8;
+ border-radius: deprecated.$br-8;
background-color: var(--custom-select-bg-color);
- border: $s-1 solid var(--custom-select-border-color);
+ border: deprecated.$s-1 solid var(--custom-select-border-color);
color: var(--custom-select-text-color);
cursor: pointer;
&:hover {
@@ -41,9 +41,9 @@
}
.group {
- @include textEllipsis;
+ @include deprecated.textEllipsis;
display: block;
- padding: $s-8;
+ padding: deprecated.$s-8;
color: var(--color-foreground-secondary);
}
@@ -57,14 +57,14 @@
}
.dropdown-button {
- @include flexCenter;
+ @include deprecated.flexCenter;
color: var(--color-foreground-secondary);
}
.current-icon {
- @include flexCenter;
- width: $s-24;
- padding-right: $s-4;
+ @include deprecated.flexCenter;
+ width: deprecated.$s-24;
+ padding-right: deprecated.$s-4;
}
.custom-select-dropdown {
@@ -73,17 +73,18 @@
.separator {
margin: 0;
- height: $s-2;
- border-block-start: $s-1 solid color-mix(in hsl, var(--color-foreground-secondary) 20%, transparent);
+ height: deprecated.$s-2;
+ border-block-start: deprecated.$s-1 solid
+ color-mix(in hsl, var(--color-foreground-secondary) 20%, transparent);
}
.custom-select-dropdown[data-direction="up"] {
- bottom: $s-32;
+ bottom: deprecated.$s-32;
top: auto;
}
.sub-item {
- padding-left: $s-16;
+ padding-left: deprecated.$s-16;
}
.checked-element-button {
@@ -105,7 +106,7 @@
}
.check-icon {
- @include flexCenter;
+ @include deprecated.flexCenter;
color: var(--icon-foreground-primary);
visibility: hidden;
}
@@ -120,11 +121,11 @@
}
.current-label {
- @include textEllipsis;
+ @include deprecated.textEllipsis;
}
.dropdown-portal {
- --menu-max-height: #{$s-400};
+ --menu-max-height: #{deprecated.$s-400};
@extend .new-scrollbar;
position: absolute;
diff --git a/frontend/src/app/main/ui/workspace/top_toolbar.scss b/frontend/src/app/main/ui/workspace/top_toolbar.scss
index d9319525c3..53b534569e 100644
--- a/frontend/src/app/main/ui/workspace/top_toolbar.scss
+++ b/frontend/src/app/main/ui/workspace/top_toolbar.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.main-toolbar {
cursor: initial;
@@ -14,36 +14,36 @@
display: flex;
align-items: center;
flex-direction: column;
- height: $s-56;
- padding: $s-8 $s-16;
- border-radius: $s-8;
- border: $s-2 solid var(--panel-border-color);
- z-index: $z-index-3;
+ height: deprecated.$s-56;
+ padding: deprecated.$s-8 deprecated.$s-16;
+ border-radius: deprecated.$s-8;
+ border: deprecated.$s-2 solid var(--panel-border-color);
+ z-index: deprecated.$z-index-3;
background-color: var(--color-background-primary);
transition:
top 0.3s,
height 0.3s,
opacity 0.3s;
- --toolbar-position-y: #{$s-28};
+ --toolbar-position-y: #{deprecated.$s-28};
--toolbar-offset-y: 0px;
top: calc(var(--toolbar-position-y) + var(--toolbar-offset-y));
}
.main-toolbar-no-rulers {
--toolbar-position-y: 0px;
- --toolbar-offset-y: #{$s-8};
+ --toolbar-offset-y: #{deprecated.$s-8};
}
.main-toolbar-hidden {
- --toolbar-offset-y: -#{$s-4};
- height: $s-16;
- z-index: $z-index-1;
- border-radius: 0 0 $s-8 $s-8;
+ --toolbar-offset-y: -#{deprecated.$s-4};
+ height: deprecated.$s-16;
+ z-index: deprecated.$z-index-1;
+ border-radius: 0 0 deprecated.$s-8 deprecated.$s-8;
border-block-start: 0;
.main-toolbar-options {
- opacity: $op-0;
+ opacity: deprecated.$op-0;
visibility: hidden;
}
}
@@ -53,7 +53,7 @@
display: flex;
align-items: center;
margin: 0;
- opacity: $op-10;
+ opacity: deprecated.$op-10;
transition: opacity 0.3s ease;
li {
@@ -63,11 +63,11 @@
.main-toolbar-options-button {
@extend .button-tertiary;
- height: $s-36;
- width: $s-36;
+ height: deprecated.$s-36;
+ width: deprecated.$s-36;
flex-shrink: 0;
- border-radius: $s-8;
- margin: 0 $s-2;
+ border-radius: deprecated.$s-8;
+ margin: 0 deprecated.$s-2;
svg {
@extend .button-icon;
@@ -80,20 +80,20 @@
}
.toolbar-handler {
- @include flexCenter;
- @include buttonStyle;
+ @include deprecated.flexCenter;
+ @include deprecated.buttonStyle;
position: absolute;
left: 0;
bottom: 0;
- height: $s-12;
+ height: deprecated.$s-12;
width: 100%;
.toolbar-handler-btn {
- height: $s-4;
+ height: deprecated.$s-4;
width: 100%;
- max-width: $s-64;
+ max-width: deprecated.$s-64;
padding: 0;
- border-radius: $s-4;
+ border-radius: deprecated.$s-4;
background-color: var(--palette-handler-background-color);
}
}
diff --git a/frontend/src/app/main/ui/workspace/viewport.cljs b/frontend/src/app/main/ui/workspace/viewport.cljs
index f602191ac0..1837f32089 100644
--- a/frontend/src/app/main/ui/workspace/viewport.cljs
+++ b/frontend/src/app/main/ui/workspace/viewport.cljs
@@ -12,11 +12,13 @@
[app.common.files.helpers :as cfh]
[app.common.geom.shapes :as gsh]
[app.common.types.color :as clr]
+ [app.common.types.component :as ctk]
[app.common.types.path :as path]
[app.common.types.shape :as cts]
[app.common.types.shape-tree :as ctt]
[app.common.types.shape.layout :as ctl]
[app.main.data.workspace.modifiers :as dwm]
+ [app.main.data.workspace.variants :as dwv]
[app.main.features :as features]
[app.main.refs :as refs]
[app.main.store :as st]
@@ -51,7 +53,7 @@
[app.main.ui.workspace.viewport.selection :as selection]
[app.main.ui.workspace.viewport.snap-distances :as snap-distances]
[app.main.ui.workspace.viewport.snap-points :as snap-points]
- [app.main.ui.workspace.viewport.top-bar :refer [path-edition-bar* grid-edition-bar* view-only-bar*]]
+ [app.main.ui.workspace.viewport.top-bar :refer [grid-edition-bar* path-edition-bar* view-only-bar*]]
[app.main.ui.workspace.viewport.utils :as utils]
[app.main.ui.workspace.viewport.viewport-ref :refer [create-viewport-ref]]
[app.main.ui.workspace.viewport.widgets :as widgets]
@@ -261,7 +263,11 @@
single-select? (= (count selected-shapes) 1)
- first-shape (first selected-shapes)
+ first-shape (first selected-shapes)
+
+ show-add-variant? (and single-select?
+ (or (ctk/is-variant-container? first-shape)
+ (ctk/is-variant? first-shape)))
show-padding?
(and (nil? transform)
@@ -288,7 +294,13 @@
(:y first-shape)
(:y selected-frame))
- rule-area-size (/ rulers/ruler-area-size zoom)]
+ rule-area-size (/ rulers/ruler-area-size zoom)
+
+ add-variant
+ (mf/use-fn
+ (mf/deps first-shape)
+ #(st/emit!
+ (dwv/add-new-variant (:id first-shape))))]
(hooks/setup-dom-events zoom disable-paste in-viewport? read-only? drawing-tool path-drawing?)
(hooks/setup-viewport-size vport viewport-ref)
@@ -536,11 +548,11 @@
:alt? @alt?
:shift? @shift?}])
- [:& widgets/frame-titles
+ [:> widgets/frame-titles*
{:objects base-objects
:selected selected
:zoom zoom
- :show-artboard-names? show-artboard-names?
+ :is-show-artboard-names show-artboard-names?
:on-frame-enter on-frame-enter
:on-frame-leave on-frame-leave
:on-frame-select on-frame-select
@@ -571,9 +583,8 @@
:focus focus}])
(when show-pixel-grid?
- [:& widgets/pixel-grid
- {:vbox vbox
- :zoom zoom}])
+ [:> widgets/pixel-grid* {:vbox vbox
+ :zoom zoom}])
(when show-snap-points?
[:& snap-points/snap-points
@@ -596,13 +607,17 @@
:page-id page-id}])
(when show-cursor-tooltip?
- [:& widgets/cursor-tooltip
- {:zoom zoom
- :tooltip tooltip}])
+ [:> widgets/cursor-tooltip* {:zoom zoom
+ :tooltip tooltip}])
(when show-selrect?
- [:& widgets/selection-rect {:data selrect
- :zoom zoom}])
+ [:> widgets/selection-rect* {:data selrect
+ :zoom zoom}])
+
+ (when show-add-variant?
+ [:> widgets/button-add* {:shape first-shape
+ :zoom zoom
+ :on-click add-variant}])
(when show-presence?
[:& presence/active-cursors
diff --git a/frontend/src/app/main/ui/workspace/viewport.scss b/frontend/src/app/main/ui/workspace/viewport.scss
index aa6c1789fd..89ebd06403 100644
--- a/frontend/src/app/main/ui/workspace/viewport.scss
+++ b/frontend/src/app/main/ui/workspace/viewport.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@use "common/refactor/common-refactor.scss" as *;
+@use "refactor/common-refactor.scss" as deprecated;
.viewport {
cursor: none;
@@ -35,5 +35,5 @@
left: 0;
bottom: 0;
right: 0;
- z-index: $z-index-1;
+ z-index: deprecated.$z-index-1;
}
diff --git a/frontend/src/app/main/ui/workspace/viewport/comments.scss b/frontend/src/app/main/ui/workspace/viewport/comments.scss
index c1fc4cf573..2e6b283f86 100644
--- a/frontend/src/app/main/ui/workspace/viewport/comments.scss
+++ b/frontend/src/app/main/ui/workspace/viewport/comments.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.workspace-comments-container {
width: 100%;
diff --git a/frontend/src/app/main/ui/workspace/viewport/gradients.cljs b/frontend/src/app/main/ui/workspace/viewport/gradients.cljs
index 8de28cd740..9573efab01 100644
--- a/frontend/src/app/main/ui/workspace/viewport/gradients.cljs
+++ b/frontend/src/app/main/ui/workspace/viewport/gradients.cljs
@@ -16,7 +16,6 @@
[app.common.math :as mth]
[app.common.types.color :as cc]
[app.common.types.fills :as types.fills]
- [app.config :as cfg]
[app.main.data.workspace.colors :as dc]
[app.main.features :as features]
[app.main.refs :as refs]
@@ -134,8 +133,8 @@
handler-state (mf/use-state {:display? false :offset 0 :hover nil})
- cap-stops? (or (features/use-feature "render-wasm/v1") (contains? cfg/flags :frontend-binary-fills))
- can-add-stop? (if cap-stops? (< (count stops) types.fills/MAX-GRADIENT-STOPS) true)
+ render-wasm? (features/use-feature "render-wasm/v1")
+ can-add-stop? (if render-wasm? (< (count stops) types.fills/MAX-GRADIENT-STOPS) true)
endpoint-on-pointer-down
(fn [position event]
@@ -525,8 +524,8 @@
shape (mf/deref shape-ref)
state (mf/deref refs/colorpicker)
gradient (:gradient state)
- cap-stops? (or (features/use-feature "render-wasm/v1") (contains? cfg/flags :frontend-binary-fills))
- stops (if cap-stops?
+ render-wasm? (features/use-feature "render-wasm/v1")
+ stops (if render-wasm?
(vec (take types.fills/MAX-GRADIENT-STOPS (:stops state)))
(:stops state))
editing-stop (:editing-stop state)]
diff --git a/frontend/src/app/main/ui/workspace/viewport/grid_layout_editor.scss b/frontend/src/app/main/ui/workspace/viewport/grid_layout_editor.scss
index 5201ff7dfd..d0f1549cb1 100644
--- a/frontend/src/app/main/ui/workspace/viewport/grid_layout_editor.scss
+++ b/frontend/src/app/main/ui/workspace/viewport/grid_layout_editor.scss
@@ -4,7 +4,7 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.grid-track-marker {
.marker-shape {
@@ -12,7 +12,7 @@
}
.marker-text {
fill: var(--app-white);
- font-size: calc($s-12 / var(--zoom));
+ font-size: calc(deprecated.$s-12 / var(--zoom));
font-family: worksans;
}
}
@@ -37,12 +37,12 @@
border: 0;
color: var(--grid-editor-marker-text);
font-family: worksans;
- font-size: calc($fs-12 / var(--zoom));
+ font-size: calc(deprecated.$fs-12 / var(--zoom));
font-weight: 400;
margin: 0;
- max-width: calc($s-60 / var(--zoom));
+ max-width: calc(deprecated.$s-60 / var(--zoom));
padding: 0;
- padding: calc($s-4 / var(--zoom));
+ padding: calc(deprecated.$s-4 / var(--zoom));
text-align: center;
&:focus {
@@ -57,16 +57,16 @@
margin: 0;
padding: 0;
position: absolute;
- top: calc($s-6 / var(--zoom));
- right: calc($s-20 / var(--zoom));
- width: calc($s-20 / var(--zoom));
- height: calc($s-20 / var(--zoom));
+ top: calc(deprecated.$s-6 / var(--zoom));
+ right: calc(deprecated.$s-20 / var(--zoom));
+ width: calc(deprecated.$s-20 / var(--zoom));
+ height: calc(deprecated.$s-20 / var(--zoom));
svg {
position: absolute;
top: 0;
left: 0;
- width: calc($s-16 / var(--zoom));
+ width: calc(deprecated.$s-16 / var(--zoom));
height: auto;
stroke: var(--grid-editor-marker-color);
}
@@ -84,7 +84,7 @@
.grid-plus-shape {
fill: var(--grid-editor-plus-btn-background);
stroke: var(--grid-editor-plus-btn-background);
- stroke-width: calc($s-1 / var(--zoom));
+ stroke-width: calc(deprecated.$s-1 / var(--zoom));
}
.grid-plus-icon {
@@ -112,44 +112,44 @@
.grid-actions {
pointer-events: none;
position: absolute;
- top: $s-44;
+ top: deprecated.$s-44;
left: 50%;
- z-index: $z-index-20;
+ z-index: deprecated.$z-index-20;
}
.grid-actions-container {
- @include flexRow;
+ @include deprecated.flexRow;
background: var(--panel-background-color);
- border-radius: $br-12;
- box-shadow: 0px 0px $s-12 0px var(--menu-shadow-color);
- gap: $s-8;
- height: $s-48;
+ border-radius: deprecated.$br-12;
+ box-shadow: 0px 0px deprecated.$s-12 0px var(--menu-shadow-color);
+ gap: deprecated.$s-8;
+ height: deprecated.$s-48;
margin-left: -50%;
- padding: $s-8;
+ padding: deprecated.$s-8;
cursor: initial;
pointer-events: initial;
- width: $s-512;
+ width: deprecated.$s-512;
}
.grid-actions-title {
flex: 1;
- font-size: $fs-12;
+ font-size: deprecated.$fs-12;
color: var(--color-foreground-secondary);
- padding-left: $s-8;
+ padding-left: deprecated.$s-8;
}
.locate-btn {
@extend .button-secondary;
text-transform: uppercase;
- padding: $s-8 $s-20;
- font-size: $fs-11;
+ padding: deprecated.$s-8 deprecated.$s-20;
+ font-size: deprecated.$fs-11;
}
.done-btn {
@extend .button-primary;
text-transform: uppercase;
- padding: $s-8 $s-20;
- font-size: $fs-11;
+ padding: deprecated.$s-8 deprecated.$s-20;
+ font-size: deprecated.$fs-11;
}
.close-btn {
diff --git a/frontend/src/app/main/ui/workspace/viewport/path_actions.scss b/frontend/src/app/main/ui/workspace/viewport/path_actions.scss
index c5e5ecc1b2..94c86e6a8d 100644
--- a/frontend/src/app/main/ui/workspace/viewport/path_actions.scss
+++ b/frontend/src/app/main/ui/workspace/viewport/path_actions.scss
@@ -4,23 +4,23 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.sub-actions {
cursor: initial;
pointer-events: initial;
position: absolute;
- top: $s-12;
+ top: deprecated.$s-12;
left: 50%;
transform: translateX(-50%);
display: flex;
align-items: center;
- height: $s-56;
- padding: $s-8 $s-16;
- border-radius: $s-8;
- gap: $s-16;
- border: $s-2 solid var(--panel-border-color);
- z-index: $z-index-3;
+ height: deprecated.$s-56;
+ padding: deprecated.$s-8 deprecated.$s-16;
+ border-radius: deprecated.$s-8;
+ gap: deprecated.$s-16;
+ border: deprecated.$s-2 solid var(--panel-border-color);
+ z-index: deprecated.$z-index-3;
background-color: var(--color-background-primary);
transition:
top 0.3s,
@@ -33,20 +33,20 @@
display: flex;
align-items: center;
margin: 0;
- opacity: $op-10;
+ opacity: deprecated.$op-10;
transition: opacity 0.3s ease;
}
.topbar-btn {
--pathbar-icon-color: var(--color-foreground-secondary);
@extend .button-tertiary;
- height: $s-36;
- width: $s-36;
+ height: deprecated.$s-36;
+ width: deprecated.$s-36;
flex-shrink: 0;
background-color: transparent;
- border-radius: $s-8;
+ border-radius: deprecated.$s-8;
border: none;
- margin: 0 $s-2;
+ margin: 0 deprecated.$s-2;
&.is-toggled {
--pathbar-icon-color: var(--button-radio-foreground-color-active);
diff --git a/frontend/src/app/main/ui/workspace/viewport/presence.scss b/frontend/src/app/main/ui/workspace/viewport/presence.scss
index 26e607a995..d71cd38e21 100644
--- a/frontend/src/app/main/ui/workspace/viewport/presence.scss
+++ b/frontend/src/app/main/ui/workspace/viewport/presence.scss
@@ -1,15 +1,21 @@
-@use "refactor/common-refactor.scss" as *;
+// 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 "refactor/common-refactor.scss" as deprecated;
.profile-name {
width: fit-content;
font-family: worksans;
padding: 2px 12px;
- border-radius: $br-4;
+ border-radius: deprecated.$br-4;
display: flex;
align-items: center;
height: 20px;
- font-size: $fs-12;
- line-height: $lh-150;
+ font-size: deprecated.$fs-12;
+ line-height: deprecated.$lh-150;
}
.multiuser-cursor {
diff --git a/frontend/src/app/main/ui/workspace/viewport/top_bar.scss b/frontend/src/app/main/ui/workspace/viewport/top_bar.scss
index 9109d8e8ba..802dc32ab7 100644
--- a/frontend/src/app/main/ui/workspace/viewport/top_bar.scss
+++ b/frontend/src/app/main/ui/workspace/viewport/top_bar.scss
@@ -4,51 +4,51 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "refactor/common-refactor.scss" as deprecated;
.viewport-actions,
.viewport-actions-path {
pointer-events: none;
position: absolute;
- --actions-toolbar-position-y: #{$s-28};
- --actions-toolbar-offset-y: #{$s-6};
+ --actions-toolbar-position-y: #{deprecated.$s-28};
+ --actions-toolbar-offset-y: #{deprecated.$s-6};
top: calc(var(--actions-toolbar-position-y) + var(--actions-toolbar-offset-y));
left: 50%;
- z-index: $z-index-20;
+ z-index: deprecated.$z-index-20;
}
.viewport-actions-path {
- z-index: $z-index-3;
+ z-index: deprecated.$z-index-3;
}
.viewport-actions-container {
- @include flexRow;
+ @include deprecated.flexRow;
background: var(--panel-background-color);
- border-radius: $br-12;
- box-shadow: 0 0 $s-12 0 var(--menu-shadow-color);
- gap: $s-8;
- height: $s-48;
+ border-radius: deprecated.$br-12;
+ box-shadow: 0 0 deprecated.$s-12 0 var(--menu-shadow-color);
+ gap: deprecated.$s-8;
+ height: deprecated.$s-48;
margin-left: -50%;
- padding: $s-8;
+ padding: deprecated.$s-8;
cursor: initial;
pointer-events: initial;
- width: $s-400;
- border: $s-2 solid var(--panel-border-color);
+ width: deprecated.$s-400;
+ border: deprecated.$s-2 solid var(--panel-border-color);
}
.viewport-actions-title {
flex: 1;
- font-size: $fs-12;
+ font-size: deprecated.$fs-12;
color: var(--color-foreground-secondary);
- padding-left: $s-8;
+ padding-left: deprecated.$s-8;
}
.done-btn {
@extend .button-primary;
text-transform: uppercase;
- padding: $s-8 $s-20;
- font-size: $fs-11;
+ padding: deprecated.$s-8 deprecated.$s-20;
+ font-size: deprecated.$fs-11;
}
.viewport-actions-no-rulers {
diff --git a/frontend/src/app/main/ui/workspace/viewport/widgets.cljs b/frontend/src/app/main/ui/workspace/viewport/widgets.cljs
index b017e7bd78..e494af80ef 100644
--- a/frontend/src/app/main/ui/workspace/viewport/widgets.cljs
+++ b/frontend/src/app/main/ui/workspace/viewport/widgets.cljs
@@ -22,8 +22,8 @@
[app.main.store :as st]
[app.main.streams :as ms]
[app.main.ui.context :as ctx]
+ [app.main.ui.ds.foundations.assets.icon :as i :refer [icon*]]
[app.main.ui.hooks :as hooks]
- [app.main.ui.icons :as deprecated-icon]
[app.main.ui.workspace.viewport.utils :as vwu]
[app.util.debug :as dbg]
[app.util.dom :as dom]
@@ -32,7 +32,7 @@
[cuerdas.core :as str]
[rumext.v2 :as mf]))
-(mf/defc pixel-grid
+(mf/defc pixel-grid*
[{:keys [vbox zoom]}]
[:g.pixel-grid
[:defs
@@ -53,8 +53,8 @@
:fill (str "url(#pixel-grid)")
:style {:pointer-events "none"}}]])
-(mf/defc cursor-tooltip
- [{:keys [zoom tooltip] :as props}]
+(mf/defc cursor-tooltip*
+ [{:keys [zoom tooltip]}]
(let [coords (some-> (hooks/use-rxsub ms/mouse-position)
(gpt/divide (gpt/point zoom zoom)))
pos-x (- (:x coords) 100)
@@ -63,9 +63,9 @@
[:foreignObject {:width 200 :height 100 :style {:text-align "center"}}
[:span tooltip]]]))
-(mf/defc selection-rect
+(mf/defc selection-rect*
{:wrap [mf/memo]}
- [{:keys [data zoom] :as props}]
+ [{:keys [data zoom]}]
(when data
[:rect.selection-rect
{:x (:x data)
@@ -83,14 +83,14 @@
{::mf/wrap [mf/memo
#(mf/deferred % ts/raf)]
::mf/forward-ref true}
- [{:keys [frame selected? zoom show-artboard-names? show-id? on-frame-enter
- on-frame-leave on-frame-select grid-edition?]} external-ref]
+ [{:keys [frame zoom is-selected is-show-artboard-names is-show-id is-grid-edition
+ on-frame-enter on-frame-leave on-frame-select]} external-ref]
(let [workspace-read-only? (mf/use-ctx ctx/workspace-read-only?)
;; Note that we don't use mf/deref to avoid a repaint dependency here
objects (deref refs/workspace-page-objects)
- color (if selected?
+ color (if is-selected
(if (or (ctn/in-any-component? objects frame) (ctk/is-variant-container? frame))
"var(--assets-component-hightlight)"
"var(--color-accent-tertiary)")
@@ -134,7 +134,7 @@
is-variant? (:is-variant-container frame)
text-width (* (:width frame) zoom)
- show-icon? (and (or (:use-for-thumbnail frame) grid-edition? main-instance? is-variant?)
+ show-icon? (and (or (:use-for-thumbnail frame) is-grid-edition main-instance? is-variant?)
(not (<= text-width 15)))
text-pos-x (if show-icon? 15 0)
@@ -182,8 +182,8 @@
(when (not (:hidden frame))
[:g.frame-title {:id (dm/str "frame-title-" (:id frame))
- :data-edit-grid grid-edition?
- :transform (vwu/title-transform frame zoom grid-edition?)
+ :data-edit-grid is-grid-edition
+ :transform (vwu/title-transform frame zoom is-grid-edition)
:pointer-events (when (:blocked frame) "none")}
(when show-icon?
[:svg {:x 0
@@ -193,12 +193,12 @@
:class "workspace-frame-icon"
:style {:stroke color
:fill "none"}
- :visibility (if show-artboard-names? "visible" "hidden")}
+ :visibility (if is-show-artboard-names "visible" "hidden")}
(cond
(:use-for-thumbnail frame) [:use {:href "#icon-boards-thumbnail"}]
- grid-edition? [:use {:href "#icon-grid"}]
- main-instance? [:use {:href "#icon-component"}]
- is-variant? [:use {:href "#icon-component"}])])
+ is-grid-edition [:use {:href "#icon-grid"}]
+ main-instance? [:use {:href "#icon-component"}]
+ is-variant? [:use {:href "#icon-component"}])])
(if ^boolean edition?
;; Case when edition? is true
@@ -206,12 +206,12 @@
:y -15
:width (max 0 (- text-width text-pos-x))
:height 22
- :class (stl/css :workspace-frame-label-wrapper)
+ :class (stl/css :frame-title-wrapper)
:style {:fill color}
- :visibility (if show-artboard-names? "visible" "hidden")}
+ :visibility (if is-show-artboard-names "visible" "hidden")}
[:input {:type "text"
- :class (stl/css :workspace-frame-label
- :element-name-input)
+ :class (stl/css :frame-title-label
+ :frame-title-input)
:style {:color color}
:auto-focus true
:on-key-down on-key-down
@@ -223,10 +223,10 @@
:y -11
:width (max 0 (- text-width text-pos-x))
:height 20
- :class (stl/css :workspace-frame-label-wrapper)
+ :class (stl/css :frame-title-wrapper)
:style {:fill color}
- :visibility (if show-artboard-names? "visible" "hidden")}
- [:div {:class (stl/css :workspace-frame-label)
+ :visibility (if is-show-artboard-names "visible" "hidden")}
+ [:div {:class (stl/css :frame-title-label)
:style {:color color}
:ref ref
:on-pointer-down on-pointer-down
@@ -234,31 +234,24 @@
:on-context-menu on-context-menu
:on-pointer-enter on-pointer-enter
:on-pointer-leave on-pointer-leave}
- (if show-id?
+ (if is-show-id
(dm/str (:id frame) " - " (:name frame))
(:name frame))]])])))
-(mf/defc frame-titles
- {::mf/wrap-props false
- ::mf/wrap [mf/memo]}
- [props]
- (let [objects (unchecked-get props "objects")
- zoom (unchecked-get props "zoom")
- selected (or (unchecked-get props "selected") #{})
- show-artboard-names? (unchecked-get props "show-artboard-names?")
- on-frame-enter (unchecked-get props "on-frame-enter")
- on-frame-leave (unchecked-get props "on-frame-leave")
- on-frame-select (unchecked-get props "on-frame-select")
- shapes (ctt/get-frames objects {:skip-copies? true})
- shapes (if (dbg/enabled? :shape-titles)
- (into (set shapes)
- (map (d/getf objects))
- selected)
- shapes)
- focus (unchecked-get props "focus")
+(mf/defc frame-titles*
+ {::mf/wrap [mf/memo]}
+ [{:keys [objects zoom selected focus is-show-artboard-names
+ on-frame-enter on-frame-leave on-frame-select]}]
+ (let [selected (or selected #{})
+ shapes (ctt/get-frames objects {:skip-copies? true})
+ shapes (if (dbg/enabled? :shape-titles)
+ (into (set shapes)
+ (map (d/getf objects))
+ selected)
+ shapes)
- edition (mf/deref refs/selected-edition)
- grid-edition? (ctl/grid-layout? objects edition)]
+ edition (mf/deref refs/selected-edition)
+ grid-edition? (ctl/grid-layout? objects edition)]
[:g.frame-titles
(for [{:keys [id parent-id] :as shape} shapes]
@@ -268,17 +261,16 @@
(or (empty? focus) (contains? focus id)))
[:& frame-title {:key (dm/str "frame-title-" id)
:frame shape
- :selected? (contains? selected id)
:zoom zoom
- :show-artboard-names? show-artboard-names?
- :show-id? (dbg/enabled? :shape-titles)
+ :is-selected (contains? selected id)
+ :is-show-artboard-names is-show-artboard-names
+ :is-show-id (dbg/enabled? :shape-titles)
+ :is-grid-edition (and (= id edition) grid-edition?)
:on-frame-enter on-frame-enter
:on-frame-leave on-frame-leave
- :on-frame-select on-frame-select
- :grid-edition? (and (= id edition) grid-edition?)}]))]))
+ :on-frame-select on-frame-select}]))]))
(mf/defc frame-flow*
- {::mf/props :obj}
[{:keys [flow frame is-selected zoom on-frame-enter on-frame-leave on-frame-select]}]
(let [x (dm/get-prop frame :x)
y (dm/get-prop frame :y)
@@ -323,18 +315,18 @@
:width 100000
:height 24
:transform (vwu/text-transform pos zoom)}
- [:div {:class (stl/css-case :flow-badge true
- :selected is-selected)}
- [:div {:class (stl/css :content)
+ [:div {:class (stl/css :frame-flow-badge-wrapper)}
+ [:div {:class (stl/css-case :frame-flow-badge-content true
+ :selected is-selected)
:on-pointer-down on-pointer-down
:on-double-click on-double-click
:on-pointer-enter on-pointer-enter
:on-pointer-leave on-pointer-leave}
- deprecated-icon/play
+ [:> icon* {:icon-id i/play
+ :size "s"}]
[:span flow-name]]]]))
(mf/defc frame-flows*
- {::mf/props :obj}
[{:keys [flows objects zoom selected on-frame-enter on-frame-leave on-frame-select]}]
[:g.frame-flows
(for [[flow-id flow] flows]
@@ -349,3 +341,39 @@
:on-frame-leave on-frame-leave
:on-frame-select on-frame-select}]))])
+(mf/defc button-add*
+ [{:keys [shape zoom on-click]}]
+ (let [{:keys [x2 y2 height]} (:selrect shape)
+
+ center-x (+ x2 (/ 22 zoom))
+ center-y (- y2 (/ height 2))
+
+ rect-x (- center-x (/ 16 zoom))
+ rect-y (- center-y (/ 16 zoom))
+ rect-sz (/ 32 zoom)
+ rect-r (/ 8 zoom)
+
+ icon-x (- center-x (/ 8 zoom))
+ icon-y (- center-y (/ 8 zoom))
+ icon-sz (/ 16 zoom)
+
+ handle-click
+ (mf/use-fn
+ (mf/deps on-click)
+ #(when (fn? on-click)
+ (on-click)))]
+
+ [:g {:class (stl/css :button-add-wrapper)
+ :on-click handle-click}
+ [:rect {:x rect-x
+ :y rect-y
+ :width rect-sz
+ :height rect-sz
+ :rx rect-r
+ :ry rect-r}]
+ [:use {:class (stl/css :button-add-icon)
+ :x icon-x
+ :y icon-y
+ :width icon-sz
+ :height icon-sz
+ :href "#icon-add"}]]))
diff --git a/frontend/src/app/main/ui/workspace/viewport/widgets.scss b/frontend/src/app/main/ui/workspace/viewport/widgets.scss
index 6df8e7a7d4..319888776c 100644
--- a/frontend/src/app/main/ui/workspace/viewport/widgets.scss
+++ b/frontend/src/app/main/ui/workspace/viewport/widgets.scss
@@ -4,72 +4,49 @@
//
// Copyright (c) KALEIDOS INC
-@import "refactor/common-refactor.scss";
+@use "ds/_borders.scss" as *;
+@use "ds/_sizes.scss" as *;
+@use "ds/colors.scss" as *;
+@use "ds/typography.scss" as t;
-.flow-element {
- display: flex;
- align-items: center;
+.frame-flow-badge-wrapper {
+ --frame-flow-badge-background-color: var(--color-background-tertiary);
+ --frame-flow-badge-background-color-hover: var(--color-background-quaternary);
+ --frame-flow-badge-foreground-color: var(--color-foreground-secondary);
+ --frame-flow-badge-foreground-color-hover: var(--color-accent-primary);
- .element-label {
- }
-
- .flow-name {
- cursor: pointer;
- }
-
- & input.element-name {
- background: transparent;
- }
-}
-
-.flow-badge {
cursor: pointer;
display: flex;
- .content {
- @include bodySmallTypography;
- display: flex;
- align-items: center;
- height: $s-24;
- border-radius: $br-6;
- background-color: var(--flow-tag-background-color);
- svg {
- @extend .button-icon;
- height: $s-24;
- width: $s-12;
- stroke: var(--icon-foreground);
- margin: 0 $s-8;
- }
+}
- span {
- height: 100%;
- display: flex;
- align-items: center;
- justify-content: center;
- margin-right: $s-8;
- color: var(--flow-tag-foreground-color);
- }
- }
+.frame-flow-badge-content {
+ @include t.use-typography("body-small");
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: var(--sp-xs);
+ border-radius: $br-6;
+ padding-inline-start: var(--sp-xs);
+ padding-inline-end: var(--sp-s);
+ height: var(--sp-xxl);
+ background-color: var(--frame-flow-badge-background-color);
+ color: var(--frame-flow-badge-foreground-color);
- &.selected .content,
- &:hover .content {
- background-color: var(--flow-tag-background-color-hover);
- svg {
- stroke: var(--flow-tag-foreground-color-hover);
- }
-
- span {
- color: var(--flow-tag-foreground-color-hover);
- }
+ &:hover,
+ &.selected {
+ --frame-flow-badge-foreground-color: var(--frame-flow-badge-foreground-color-hover);
+ --frame-flow-badge-background-color: var(--frame-flow-badge-background-color-hover);
}
}
-.workspace-frame-label-wrapper {
+.frame-title-wrapper {
+ --frame-title-input-border-color-focus: var(--color-accent-primary);
+
pointer-events: none;
}
-.workspace-frame-label {
- font-size: $fs-12;
- color: black;
+.frame-title-label {
+ @include t.use-typography("body-small");
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
@@ -77,16 +54,30 @@
pointer-events: all;
}
-.element-name-input {
- @include removeInputStyle;
- @include bodySmallTypography;
- @include removeInputStyle;
+.frame-title-input {
+ @include t.use-typography("body-small");
flex-grow: 1;
- height: 20px;
- margin: 0;
- padding-left: $s-6;
- border: $s-1 solid var(--input-border-color-focus);
- color: var(--layer-row-foreground-color);
width: 100%;
max-width: initial;
+ background: none;
+ outline: none;
+ height: var(--sp-xl);
+ padding-inline-start: var(--sp-s);
+ border: $b-1 solid var(--frame-title-input-border-color-focus);
+}
+
+.button-add-wrapper {
+ --button-add-background-color: var(--color-accent-action);
+ --button-add-background-color-hover: var(--color-accent-action-hover);
+ --button-add-icon-color: var(--color-static-white);
+
+ cursor: pointer;
+ fill: var(--button-add-background-color);
+ &:hover {
+ --button-add-background-color: var(--button-add-background-color-hover);
+ }
+}
+
+.button-add-icon {
+ stroke: var(--button-add-icon-color);
}
diff --git a/frontend/src/app/main/ui/workspace/viewport_wasm.cljs b/frontend/src/app/main/ui/workspace/viewport_wasm.cljs
index 3ebfd80860..67e4a1d9cc 100644
--- a/frontend/src/app/main/ui/workspace/viewport_wasm.cljs
+++ b/frontend/src/app/main/ui/workspace/viewport_wasm.cljs
@@ -516,11 +516,11 @@
:alt? @alt?
:shift? @shift?}])
- [:& widgets/frame-titles
+ [:> widgets/frame-titles*
{:objects (with-meta objects-modified nil)
:selected selected
:zoom zoom
- :show-artboard-names? show-artboard-names?
+ :is-show-artboard-names show-artboard-names?
:on-frame-enter on-frame-enter
:on-frame-leave on-frame-leave
:on-frame-select on-frame-select
@@ -551,9 +551,8 @@
:focus focus}])
(when show-pixel-grid?
- [:& widgets/pixel-grid
- {:vbox vbox
- :zoom zoom}])
+ [:> widgets/pixel-grid* {:vbox vbox
+ :zoom zoom}])
(when show-snap-points?
[:& snap-points/snap-points
@@ -576,13 +575,12 @@
:page-id page-id}])
(when show-cursor-tooltip?
- [:& widgets/cursor-tooltip
- {:zoom zoom
- :tooltip tooltip}])
+ [:> widgets/cursor-tooltip* {:zoom zoom
+ :tooltip tooltip}])
(when show-selrect?
- [:& widgets/selection-rect {:data selrect
- :zoom zoom}])
+ [:> widgets/selection-rect* {:data selrect
+ :zoom zoom}])
(when show-presence?
[:& presence/active-cursors
diff --git a/frontend/src/app/main/worker.cljs b/frontend/src/app/main/worker.cljs
index a310f566e8..aae9000556 100644
--- a/frontend/src/app/main/worker.cljs
+++ b/frontend/src/app/main/worker.cljs
@@ -21,7 +21,6 @@
:config {:public-uri cf/public-uri
:build-data cf/build-date
:version cf/version}})
-
(set! instance worker)))
(defn ask!
@@ -34,6 +33,16 @@
(uw/ask! instance message transfer)
(rx/empty))))
+(defn emit!
+ ([message]
+ (if instance
+ (uw/emit! instance message)
+ (rx/empty)))
+ ([message transfer]
+ (if instance
+ (uw/emit! instance message transfer)
+ (rx/empty))))
+
(defn ask-buffered!
([message]
(if instance
diff --git a/frontend/src/app/plugins/shape.cljs b/frontend/src/app/plugins/shape.cljs
index 73384ea344..4d1b71038e 100644
--- a/frontend/src/app/plugins/shape.cljs
+++ b/frontend/src/app/plugins/shape.cljs
@@ -11,6 +11,7 @@
[app.common.files.helpers :as cfh]
[app.common.geom.rect :as grc]
[app.common.geom.shapes :as gsh]
+ [app.common.path-names :as cpn]
[app.common.record :as crc]
[app.common.schema :as sm]
[app.common.spec :as us]
@@ -200,7 +201,7 @@
:set
(fn [self value]
(let [id (obj/get self "$id")
- value (when (string? value) (-> value str/trim cfh/clean-path))
+ value (when (string? value) (-> value str/trim cpn/clean-path))
valid? (and (some? value)
(not (str/ends-with? value "/"))
(not (str/blank? value)))]
diff --git a/frontend/src/app/render_wasm/api.cljs b/frontend/src/app/render_wasm/api.cljs
index f256350064..38326e410e 100644
--- a/frontend/src/app/render_wasm/api.cljs
+++ b/frontend/src/app/render_wasm/api.cljs
@@ -10,6 +10,7 @@
["react-dom/server" :as rds]
[app.common.data :as d :refer [not-empty?]]
[app.common.data.macros :as dm]
+ [app.common.math :as mth]
[app.common.types.fills :as types.fills]
[app.common.types.fills.impl :as types.fills.impl]
[app.common.types.path :as path]
@@ -47,9 +48,11 @@
(def ^:const MODIFIER-U32-SIZE (/ MODIFIER-U8-SIZE 4))
(def ^:const MODIFIER-TRANSFORM-U8-OFFSET-SIZE 16)
-(def ^:const GRID-LAYOUT-ROW-U8-SIZE 5)
-(def ^:const GRID-LAYOUT-COLUMN-U8-SIZE 5)
-(def ^:const GRID-LAYOUT-CELL-U8-SIZE 37)
+(def ^:const GRID-LAYOUT-ROW-U8-SIZE 8)
+(def ^:const GRID-LAYOUT-COLUMN-U8-SIZE 8)
+(def ^:const GRID-LAYOUT-CELL-U8-SIZE 36)
+
+(def ^:const MAX_BUFFER_CHUNK_SIZE (* 256 1024))
(def dpr
(if use-dpr? (if (exists? js/window) js/window.devicePixelRatio 1.0) 1.0))
@@ -170,11 +173,10 @@
[string]
(+ (count string) 1))
+
(defn- fetch-image
[shape-id image-id]
- (let [buffer-shape-id (uuid/get-u32 shape-id)
- buffer-image-id (uuid/get-u32 image-id)
- url (cf/resolve-file-media {:id image-id})]
+ (let [url (cf/resolve-file-media {:id image-id})]
{:key url
:callback #(->> (http/send! {:method :get
:uri url
@@ -182,23 +184,32 @@
(rx/map :body)
(rx/mapcat wapi/read-file-as-array-buffer)
(rx/map (fn [image]
- ;; FIXME use bigger heap ptr size if it
- ;; is possible (if image size modulo
- ;; permits it)
- (let [size (.-byteLength image)
- offset (mem/alloc size)
- heap (mem/get-heap-u8)
- data (js/Uint8Array. image)]
- (.set heap data offset)
- (h/call wasm/internal-module "_store_image"
- (aget buffer-shape-id 0)
- (aget buffer-shape-id 1)
- (aget buffer-shape-id 2)
- (aget buffer-shape-id 3)
- (aget buffer-image-id 0)
- (aget buffer-image-id 1)
- (aget buffer-image-id 2)
- (aget buffer-image-id 3))
+ (let [size (.-byteLength image)
+ padded-size (if (zero? (mod size 4)) size (+ size (- 4 (mod size 4))))
+ total-bytes (+ 32 padded-size) ; UUID size + padded size
+ offset (mem/alloc->offset-32 total-bytes)
+ heap32 (mem/get-heap-u32)
+ data (js/Uint8Array. image)
+ padded (js/Uint8Array. padded-size)]
+
+ ;; 1. Set shape id
+ (mem.h32/write-uuid offset heap32 shape-id)
+
+ ;; 2. Set image id
+ (mem.h32/write-uuid (+ offset 4) heap32 image-id)
+
+ ;; 3. Adjust padding on image data
+ (.set padded data)
+ (when (< size padded-size)
+ (dotimes [i (- padded-size size)]
+ (aset padded (+ size i) 0)))
+
+ ;; 4. Set image data
+ (let [u32view (js/Uint32Array. (.-buffer padded))
+ image-u32-offset (+ offset 8)]
+ (.set heap32 u32view image-u32-offset))
+
+ (h/call wasm/internal-module "_store_image")
true))))}))
(defn- get-fill-images
@@ -309,15 +320,27 @@
(h/call wasm/internal-module "stringToUTF8" str offset size)
(h/call wasm/internal-module "_set_shape_path_attrs" (count attrs))))
-;; FIXME: revisit on heap refactor is merged to use u32 instead u8
(defn set-shape-path-content
+ "Upload path content in chunks to WASM."
[content]
- (let [pdata (path/content content)
- size (path/get-byte-size content)
- offset (mem/alloc size)
- heap (mem/get-heap-u8)]
- (path/write-to pdata (.-buffer heap) offset)
- (h/call wasm/internal-module "_set_shape_path_content")))
+ (let [chunk-size (quot MAX_BUFFER_CHUNK_SIZE 4)
+ buffer-size (path/get-byte-size content)
+ padded-size (* 4 (mth/ceil (/ buffer-size 4)))
+ buffer (js/Uint8Array. padded-size)]
+ (path/write-to content (.-buffer buffer) 0)
+ (h/call wasm/internal-module "_start_shape_path_buffer")
+ (let [heapu32 (mem/get-heap-u32)]
+ (loop [offset 0]
+ (when (< offset padded-size)
+ (let [end (min padded-size (+ offset (* chunk-size 4)))
+ chunk (.subarray buffer offset end)
+ chunk-u32 (js/Uint32Array. chunk.buffer chunk.byteOffset (quot (.-length chunk) 4))
+ offset-size (.-length chunk-u32)
+ heap-offset (mem/alloc->offset-32 (* 4 offset-size))]
+ (.set heapu32 chunk-u32 heap-offset)
+ (h/call wasm/internal-module "_set_shape_path_chunk_buffer")
+ (recur end)))))
+ (h/call wasm/internal-module "_set_shape_path_buffer")))
(defn set-shape-svg-raw-content
[content]
@@ -364,30 +387,19 @@
[bool-type]
(h/call wasm/internal-module "_set_shape_bool_type" (sr/translate-bool-type bool-type)))
-(defn- translate-blur-type
- [blur-type]
- (case blur-type
- :layer-blur 1
- 0))
-
(defn set-shape-blur
[blur]
- (let [type (-> blur :type sr/translate-blur-type)
- hidden (:hidden blur)
- value (:value blur)]
- (h/call wasm/internal-module "_set_shape_blur" type hidden value)))
+ (if (some? blur)
+ (let [type (-> blur :type sr/translate-blur-type)
+ hidden (:hidden blur)
+ value (:value blur)]
+ (h/call wasm/internal-module "_set_shape_blur" type hidden value))
+ (h/call wasm/internal-module "_clear_shape_blur")))
(defn set-shape-corners
- [shape]
- (let [r1 (get shape :r1)
- r2 (get shape :r2)
- r3 (get shape :r3)
- r4 (get shape :r4)]
- (h/call wasm/internal-module "_set_shape_corners"
- (d/nilv r1 0)
- (d/nilv r2 0)
- (d/nilv r3 0)
- (d/nilv r4 0))))
+ [corners]
+ (let [[r1 r2 r3 r4] (map #(d/nilv % 0) corners)]
+ (h/call wasm/internal-module "_set_shape_corners" r1 r2 r3 r4)))
(defn set-flex-layout
[shape]
@@ -464,13 +476,9 @@
dview (mem/get-data-view)]
(reduce (fn [offset {:keys [type value]}]
- ;; NOTE: because of the nature of the grid row data
- ;; structure memory layout we can't use fully 32 bits
- ;; alligned writes, so for heteregeneus writes we use
- ;; the buffer abstraction (DataView) for perform
- ;; surgical writes.
(-> offset
(mem/write-u8 dview (sr/translate-grid-track-type type))
+ (+ 3) ;; padding
(mem/write-f32 dview value)
(mem/assert-written offset GRID-LAYOUT-ROW-U8-SIZE)))
@@ -486,17 +494,11 @@
dview (mem/get-data-view)]
(reduce (fn [offset {:keys [type value]}]
- ;; NOTE: because of the nature of the grid column data
- ;; structure memory layout we can't use fully 32 bits
- ;; alligned writes, so for heteregeneus writes we use
- ;; the buffer abstraction (DataView) for perform
- ;; surgical writes.
(-> offset
(mem/write-u8 dview (sr/translate-grid-track-type type))
+ (+ 3) ;; padding
(mem/write-f32 dview value)
(mem/assert-written offset GRID-LAYOUT-COLUMN-U8-SIZE)))
-
-
offset
entries)
@@ -511,38 +513,17 @@
(reduce-kv (fn [offset _ cell]
(let [shape-id (-> (get cell :shapes) first)]
(-> offset
- ;; row: [u8; 4],
(mem/write-i32 dview (get cell :row))
-
- ;; row_span: [u8; 4],
(mem/write-i32 dview (get cell :row-span))
-
- ;; column: [u8; 4],
(mem/write-i32 dview (get cell :column))
-
- ;; column_span: [u8; 4],
(mem/write-i32 dview (get cell :column-span))
- ;; has_align_self: u8,
- (mem/write-bool dview (some? (get cell :align-self)))
-
- ;; align_self: u8,
- (mem/write-u8 dview (get cell :align-self))
-
- ;; has_justify_self: u8,
- (mem/write-bool dview (get cell :justify-self))
-
- ;; justify_self: u8,
+ (mem/write-u8 dview (sr/translate-align-self (get cell :align-self)))
(mem/write-u8 dview (sr/translate-justify-self (get cell :justify-self)))
- ;; has_shape_id: u8,
- ;; (.set heap (sr/bool->u8 (d/not-empty? (:shapes cell))) (+ current-offset 20))
- (mem/write-u8 dview (some? shape-id))
+ ;; padding
+ (+ 2)
- ;; shape_id_a: [u8; 4],
- ;; shape_id_b: [u8; 4],
- ;; shape_id_c: [u8; 4],
- ;; shape_id_d: [u8; 4],
(mem/write-uuid dview (d/nilv shape-id uuid/zero))
(mem/assert-written offset GRID-LAYOUT-CELL-U8-SIZE))))
@@ -596,7 +577,7 @@
(d/nilv max-w 0)
has-min-w
(d/nilv min-w 0)
- (some? align-self)
+
(d/nilv align-self 0)
is-absolute
(d/nilv z-index))))
@@ -644,8 +625,11 @@
shadows))
(defn set-shape-text-content
+ "This function sets shape text content and returns a stream that loads the needed fonts asynchronously"
[shape-id content]
+
(h/call wasm/internal-module "_clear_shape_text")
+
(set-shape-vertical-align (get content :vertical-align))
(let [paragraph-set (first (get content :children))
@@ -677,8 +661,12 @@
(let [updated-fonts
(-> fonts
(cond-> ^boolean emoji? (f/add-emoji-font))
- (f/add-noto-fonts langs))]
- (f/store-fonts shape-id updated-fonts))))))
+ (f/add-noto-fonts langs))
+ result (f/store-fonts shape-id updated-fonts)]
+
+ (h/call wasm/internal-module "_update_shape_text_layout")
+
+ result)))))
(defn set-shape-text
[shape-id content]
@@ -747,7 +735,8 @@
grow-type (get shape :grow-type)
blur (get shape :blur)
svg-attrs (get shape :svg-attrs)
- shadows (get shape :shadow)]
+ shadows (get shape :shadow)
+ corners (map #(get shape %) [:r1 :r2 :r3 :r4])]
(use-shape id)
(set-parent-id parent-id)
@@ -761,11 +750,10 @@
(set-shape-opacity opacity)
(set-shape-hidden hidden)
(set-shape-children children)
- (set-shape-corners shape)
+ (set-shape-corners corners)
+ (set-shape-blur blur)
(when (and (= type :group) masked)
(set-masked masked))
- (when (some? blur)
- (set-shape-blur blur))
(when (= type :bool)
(set-shape-bool-type bool-type))
(when (and (some? content)
@@ -803,6 +791,7 @@
(rx/subs! (fn [_]
(clear-drawing-cache)
(request-render "pending-finished")
+ (h/call wasm/internal-module "_update_shape_text_layout_for_all")
(.dispatchEvent ^js js/document event))))
(do
(clear-drawing-cache)
@@ -1078,10 +1067,40 @@
(let [uri (cf/resolve-static-asset "js/render_wasm.js")]
(->> (js/dynamicImport (str uri))
(p/mcat (fn [module]
- (let [default (unchecked-get module "default")]
+ (let [default (unchecked-get module "default")
+ serializers #js{:blur-type (unchecked-get module "RawBlurType")
+ :blend-mode (unchecked-get module "RawBlendMode")
+ :bool-type (unchecked-get module "RawBoolType")
+ :font-style (unchecked-get module "RawFontStyle")
+ :flex-direction (unchecked-get module "RawFlexDirection")
+ :grid-direction (unchecked-get module "RawGridDirection")
+ :grow-type (unchecked-get module "RawGrowType")
+ :align-items (unchecked-get module "RawAlignItems")
+ :align-self (unchecked-get module "RawAlignSelf")
+ :align-content (unchecked-get module "RawAlignContent")
+ :justify-items (unchecked-get module "RawJustifyItems")
+ :justify-content (unchecked-get module "RawJustifyContent")
+ :justify-self (unchecked-get module "RawJustifySelf")
+ :wrap-type (unchecked-get module "RawWrapType")
+ :grid-track-type (unchecked-get module "RawGridTrackType")
+ :shadow-style (unchecked-get module "RawShadowStyle")
+ :stroke-style (unchecked-get module "RawStrokeStyle")
+ :stroke-cap (unchecked-get module "RawStrokeCap")
+ :shape-type (unchecked-get module "RawShapeType")
+ :constraint-h (unchecked-get module "RawConstraintH")
+ :constraint-v (unchecked-get module "RawConstraintV")
+ :sizing (unchecked-get module "RawSizing")
+ :vertical-align (unchecked-get module "RawVerticalAlign")
+ :fill-data (unchecked-get module "RawFillData")
+ :text-align (unchecked-get module "RawTextAlign")
+ :text-direction (unchecked-get module "RawTextDirection")
+ :text-decoration (unchecked-get module "RawTextDecoration")
+ :text-transform (unchecked-get module "RawTextTransform")
+ :segment-data (unchecked-get module "RawSegmentData")}]
+ (set! wasm/serializers serializers)
(default))))
- (p/fmap (fn [module]
- (set! wasm/internal-module module)
+ (p/fmap (fn [default]
+ (set! wasm/internal-module default)
true))
(p/merr (fn [cause]
(js/console.error cause)
diff --git a/frontend/src/app/render_wasm/api/fonts.cljs b/frontend/src/app/render_wasm/api/fonts.cljs
index 7bcb176d06..c6e1f668d8 100644
--- a/frontend/src/app/render_wasm/api/fonts.cljs
+++ b/frontend/src/app/render_wasm/api/fonts.cljs
@@ -8,6 +8,7 @@
(:require
[app.common.data :as d]
[app.common.data.macros :as dm]
+ [app.common.logging :as log]
[app.common.uuid :as uuid]
[app.config :as cf]
[app.main.fonts :as fonts]
@@ -98,6 +99,13 @@
(:style font-data)
emoji?
fallback?)
+
+ (h/call wasm/internal-module "_update_shape_text_layout_for"
+ (aget shape-id-buffer 0)
+ (aget shape-id-buffer 1)
+ (aget shape-id-buffer 2)
+ (aget shape-id-buffer 3))
+
true))
(defn- fetch-font
@@ -107,7 +115,12 @@
:uri font-url
:response-type :buffer})
(rx/map (fn [{:keys [body]}]
- (store-font-buffer shape-id font-data body emoji? fallback?))))})
+ (store-font-buffer shape-id font-data body emoji? fallback?)))
+ (rx/catch (fn [cause]
+ (log/error :hint "Could not fetch font"
+ :font-url font-url
+ :cause cause)
+ (rx/empty))))})
(defn- google-font-ttf-url
[font-id font-variant-id]
@@ -217,7 +230,6 @@
[shape-id fonts]
(keep (fn [font] (store-font shape-id font)) fonts))
-
(defn add-emoji-font
[fonts]
(conj fonts {:font-id "gfont-noto-color-emoji"
@@ -275,7 +287,6 @@
:symbols-2 {:font-id "gfont-noto-sans-symbols-2" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true}
:music {:font-id "gfont-noto-music" :font-variant-id "regular" :style 0 :weight 400 :is-fallback true}})
-
(defn add-noto-fonts [fonts languages]
(reduce (fn [acc lang]
(if-let [font (get noto-fonts lang)]
diff --git a/frontend/src/app/render_wasm/serializers.cljs b/frontend/src/app/render_wasm/serializers.cljs
index cd5feb080f..306a768f8e 100644
--- a/frontend/src/app/render_wasm/serializers.cljs
+++ b/frontend/src/app/render_wasm/serializers.cljs
@@ -4,10 +4,12 @@
;;
;; Copyright (c) KALEIDOS INC
-(ns app.render-wasm.serializers
- (:require
- [app.common.uuid :as uuid]
- [cuerdas.core :as str]))
+ (ns app.render-wasm.serializers
+ (:require
+ [app.common.data :as d]
+ [app.common.uuid :as uuid]
+ [app.render-wasm.wasm :as wasm]
+ [cuerdas.core :as str]))
(defn u8
[value]
@@ -56,37 +58,21 @@
(defn translate-shape-type
[type]
- (case type
- :frame 0
- :group 1
- :bool 2
- :rect 3
- :path 4
- :text 5
- :circle 6
- :svg-raw 7
- :image 8))
+ (let [values (unchecked-get wasm/serializers "shape-type")
+ default (unchecked-get values "rect")]
+ (d/nilv (unchecked-get values (d/name type)) default)))
(defn translate-stroke-style
[stroke-style]
- (case stroke-style
- :dotted 1
- :dashed 2
- :mixed 3
- 0))
+ (let [values (unchecked-get wasm/serializers "stroke-style")
+ default (unchecked-get values "solid")]
+ (d/nilv (unchecked-get values (d/name stroke-style)) default)))
(defn translate-stroke-cap
[stroke-cap]
- (case stroke-cap
- :line-arrow 1
- :triangle-arrow 2
- :square-marker 3
- :circle-marker 4
- :diamond-marker 5
- :round 6
- :square 7
- 0))
-
+ (let [values (unchecked-get wasm/serializers "stroke-cap")
+ default (unchecked-get values "none")]
+ (d/nilv (unchecked-get values (d/name stroke-cap)) default)))
(defn serialize-path-attrs
[svg-attrs]
@@ -99,164 +85,107 @@
(defn translate-blend-mode
[blend-mode]
- (case blend-mode
- :normal 3
- :darken 16
- :multiply 24
- :color-burn 19
- :lighten 17
- :screen 14
- :color-dodge 18
- :overlay 15
- :soft-light 21
- :hard-light 20
- :difference 22
- :exclusion 23
- :hue 25
- :saturation 26
- :color 27
- :luminosity 28
- 3))
+ (let [values (unchecked-get wasm/serializers "blend-mode")
+ default (unchecked-get values "normal")]
+ (d/nilv (unchecked-get values (d/name blend-mode)) default)))
(defn translate-constraint-h
[type]
- (case type
- :left 0
- :right 1
- :leftright 2
- :center 3
- :scale 4))
+ (let [values (unchecked-get wasm/serializers "constraint-h")
+ default 5] ;; TODO: fix code in rust so we have a proper None variant
+ (d/nilv (unchecked-get values (d/name type)) default)))
(defn translate-constraint-v
[type]
- (case type
- :top 0
- :bottom 1
- :topbottom 2
- :center 3
- :scale 4))
+ (let [values (unchecked-get wasm/serializers "constraint-v")
+ default 5] ;; TODO: fix code in rust so we have a proper None variant
+ (d/nilv (unchecked-get values (d/name type)) default)))
(defn translate-bool-type
[bool-type]
- (case bool-type
- :union 0
- :difference 1
- :intersection 2
- :exclude 3
- 0))
+ (let [values (unchecked-get wasm/serializers "bool-type")
+ default (unchecked-get values "union")]
+ (d/nilv (unchecked-get values (d/name bool-type)) default)))
+
(defn translate-blur-type
[blur-type]
- (case blur-type
- :layer-blur 1
- 0))
+ (let [values (unchecked-get wasm/serializers "blur-type")
+ default (unchecked-get values "layer-blur")]
+ (d/nilv (unchecked-get values (d/name blur-type)) default)))
(defn translate-layout-flex-dir
[flex-dir]
- (case flex-dir
- :row 0
- :row-reverse 1
- :column 2
- :column-reverse 3))
+ (let [values (unchecked-get wasm/serializers "flex-direction")]
+ (unchecked-get values (d/name flex-dir))))
+
(defn translate-layout-grid-dir
- [flex-dir]
- (case flex-dir
- :row 0
- :column 1))
+ [grid-dir]
+ (let [values (unchecked-get wasm/serializers "grid-direction")]
+ (unchecked-get values (d/name grid-dir))))
(defn translate-layout-align-items
[align-items]
- (case align-items
- :start 0
- :end 1
- :center 2
- :stretch 3
- 0))
+ (let [values (unchecked-get wasm/serializers "align-items")
+ default (unchecked-get values "start")]
+ (d/nilv (unchecked-get values (d/name align-items)) default)))
(defn translate-layout-align-content
[align-content]
- (case align-content
- :start 0
- :end 1
- :center 2
- :space-between 3
- :space-around 4
- :space-evenly 5
- :stretch 6
- 6))
+ (let [values (unchecked-get wasm/serializers "align-content")
+ default (unchecked-get values "stretch")]
+ (d/nilv (unchecked-get values (d/name align-content)) default)))
(defn translate-layout-justify-items
[justify-items]
- (case justify-items
- :start 0
- :end 1
- :center 2
- :stretch 3
- 0))
+ (let [values (unchecked-get wasm/serializers "justify-items")
+ default (unchecked-get values "start")]
+ (d/nilv (unchecked-get values (d/name justify-items)) default)))
(defn translate-layout-justify-content
[justify-content]
- (case justify-content
- :start 0
- :end 1
- :center 2
- :space-between 3
- :space-around 4
- :space-evenly 5
- :stretch 6
- 6))
+ (let [values (unchecked-get wasm/serializers "justify-content")
+ default (unchecked-get values "stretch")]
+ (d/nilv (unchecked-get values (d/name justify-content)) default)))
(defn translate-layout-wrap-type
[wrap-type]
- (case wrap-type
- :wrap 0
- :nowrap 1
- 1))
+ (let [values (unchecked-get wasm/serializers "wrap-type")
+ default (unchecked-get values "nowrap")]
+ (d/nilv (unchecked-get values (d/name wrap-type)) default)))
+
(defn translate-grid-track-type
[type]
- (case type
- :percent 0
- :flex 1
- :auto 2
- :fixed 3))
+ (let [values (unchecked-get wasm/serializers "grid-track-type")]
+ (unchecked-get values (d/name type))))
(defn translate-layout-sizing
- [value]
- (case value
- :fill 0
- :fix 1
- :auto 2
- 1))
+ [sizing]
+ (let [values (unchecked-get wasm/serializers "sizing")
+ default (unchecked-get values "fix")]
+ (d/nilv (unchecked-get values (d/name sizing)) default)))
(defn translate-align-self
- [value]
- (when value
- (case value
- :auto 0
- :start 1
- :end 2
- :center 3
- :stretch 4)))
+ [align-self]
+ (let [values (unchecked-get wasm/serializers "align-self")
+ default (unchecked-get values "none")]
+ (d/nilv (unchecked-get values (d/name align-self)) default)))
(defn translate-justify-self
- [value]
- (when value
- (case value
- :auto 0
- :start 1
- :end 2
- :center 3
- :stretch 4)))
+ [justify-self]
+ (let [values (unchecked-get wasm/serializers "justify-self")
+ default (unchecked-get values "none")]
+ (d/nilv (unchecked-get values (d/name justify-self)) default)))
(defn translate-shadow-style
[style]
- (case style
- :drop-shadow 0
- :inner-shadow 1
- 0))
+ (let [values (unchecked-get wasm/serializers "shadow-style")
+ default (unchecked-get values "drop-shadow")]
+ (d/nilv (unchecked-get values (d/name style)) default)))
+;; TODO: Find/Create a Rust enum for this
(defn translate-structure-modifier-type
[type]
(case type
@@ -266,60 +195,52 @@
(defn translate-grow-type
[grow-type]
- (case grow-type
- :auto-width 1
- :auto-height 2
- 0))
+ (let [values (unchecked-get wasm/serializers "grow-type")
+ default (unchecked-get values "fixed")]
+ (d/nilv (unchecked-get values (d/name grow-type)) default)))
(defn translate-vertical-align
[vertical-align]
- (case vertical-align
- "top" 0
- "center" 1
- "bottom" 2
- 0))
+ (let [values (unchecked-get wasm/serializers "vertical-align")
+ default (unchecked-get values "top")]
+ (d/nilv (unchecked-get values (d/name vertical-align)) default)))
(defn translate-text-align
[text-align]
- (case text-align
- "left" 0
- "center" 1
- "right" 2
- "justify" 3
- 0))
+ (let [values (unchecked-get wasm/serializers "text-align")
+ default (unchecked-get values "left")]
+ (d/nilv (unchecked-get values (d/name text-align)) default)))
+
+;; TODO: Find/Create a Rust enum for this
(defn translate-text-transform
[text-transform]
- (case text-transform
- "none" 0
- "uppercase" 1
- "lowercase" 2
- "capitalize" 3
- nil 0
- 0))
+ (let [values (unchecked-get wasm/serializers "text-transform")
+ default (unchecked-get values "none")]
+ (d/nilv (unchecked-get values (d/name text-transform)) default)))
+
(defn translate-text-decoration
[text-decoration]
- (case text-decoration
- "none" 0
- "underline" 1
- "line-through" 2
- "overline" 3
- nil 0
- 0))
+ (let [values (unchecked-get wasm/serializers "text-decoration")
+ default (unchecked-get values "none")]
+ (d/nilv (unchecked-get values (d/name text-decoration)) default)))
(defn translate-text-direction
[text-direction]
- (case text-direction
- "ltr" 0
- "rtl" 1
- nil 0
- 0))
+ (let [values (unchecked-get wasm/serializers "text-direction")
+ default (unchecked-get values "ltr")]
+ (d/nilv (unchecked-get values (d/name text-direction)) default)))
+
(defn translate-font-style
[font-style]
- (case font-style
- "normal" 0
- "regular" 0
- "italic" 1
- 0))
+ (let [values (unchecked-get wasm/serializers "font-style")
+ default (unchecked-get values "normal")]
+ (case font-style
+ ;; NOTE: normal == regular!
+ ;; is it OK to keep those two values in our cljs model?
+ "normal" (unchecked-get values "normal")
+ "regular" (unchecked-get values "normal")
+ "italic" (unchecked-get values "italic")
+ default)))
diff --git a/frontend/src/app/render_wasm/shape.cljs b/frontend/src/app/render_wasm/shape.cljs
index c3ccefbec4..001a16842a 100644
--- a/frontend/src/app/render_wasm/shape.cljs
+++ b/frontend/src/app/render_wasm/shape.cljs
@@ -53,6 +53,10 @@
(-conj [coll entry]
(impl-conj coll entry))
+ c/IEmptyableCollection
+ (-empty [_]
+ (ShapeProxy. nil nil nil))
+
c/IEquiv
(-equiv [coll other]
(c/equiv-map coll other))
@@ -62,7 +66,6 @@
(hash (into {} coll)))
c/ISequential
-
c/ISeqable
(-seq [_]
(cons (map-entry :id id)
@@ -146,11 +149,17 @@
:constraints-h (api/set-constraints-h v)
:constraints-v (api/set-constraints-v v)
- (:r1 :r2 :r3 :r4)
- (api/set-shape-corners [(dm/get-prop shape :r1)
- (dm/get-prop shape :r2)
- (dm/get-prop shape :r3)
- (dm/get-prop shape :r4)])
+ :r1
+ (api/set-shape-corners [v (dm/get-prop shape :r2) (dm/get-prop shape :r3) (dm/get-prop shape :r4)])
+
+ :r2
+ (api/set-shape-corners [(dm/get-prop shape :r1) v (dm/get-prop shape :r3) (dm/get-prop shape :r4)])
+
+ :r3
+ (api/set-shape-corners [(dm/get-prop shape :r1) (dm/get-prop shape :r2) v (dm/get-prop shape :r4)])
+
+ :r4
+ (api/set-shape-corners [(dm/get-prop shape :r1) (dm/get-prop shape :r2) (dm/get-prop shape :r3) v])
:svg-attrs
(when (= (:type shape) :path)
diff --git a/frontend/src/app/render_wasm/wasm.cljs b/frontend/src/app/render_wasm/wasm.cljs
index 542d4c49a1..7d7511d9ab 100644
--- a/frontend/src/app/render_wasm/wasm.cljs
+++ b/frontend/src/app/render_wasm/wasm.cljs
@@ -1,4 +1,5 @@
(ns app.render-wasm.wasm)
(defonce internal-frame-id nil)
-(defonce internal-module #js {})
\ No newline at end of file
+(defonce internal-module #js {})
+(defonce serializers #js {})
\ No newline at end of file
diff --git a/frontend/src/app/util/code_gen/style_css.cljs b/frontend/src/app/util/code_gen/style_css.cljs
index 2e47e882ed..00d6ae7a94 100644
--- a/frontend/src/app/util/code_gen/style_css.cljs
+++ b/frontend/src/app/util/code_gen/style_css.cljs
@@ -17,7 +17,7 @@
[app.common.types.text :as types.text]
[app.main.ui.shapes.text.styles :as sts]
[app.util.code-gen.common :as cgc]
- [app.util.code-gen.style-css-formats :refer [format-value format-shadow]]
+ [app.util.code-gen.style-css-formats :refer [format-value format-shadow->css]]
[app.util.code-gen.style-css-values :refer [get-value]]
[cuerdas.core :as str]))
@@ -73,7 +73,10 @@ body {
:transform
:background
:border
- :border-radius
+ :border-start-start-radius
+ :border-start-end-radius
+ :border-end-start-radius
+ :border-end-end-radius
:box-shadow
:filter
:opacity
@@ -89,7 +92,10 @@ body {
:gap
:column-gap
:row-gap
- :padding
+ :padding-inline-start
+ :padding-inline-end
+ :padding-block-start
+ :padding-block-end
:z-index
;; Flex related properties
@@ -107,10 +113,18 @@ body {
;; Flex/grid self properties
:flex-shrink
:margin
+ :margin-block-start
+ :margin-block-end
+ :margin-inline-start
+ :margin-inline-end
:max-height
+ :max-block-size
:min-height
+ :min-block-size
:max-width
+ :max-inline-size
:min-width
+ :min-inline-size
:align-self
:justify-self
@@ -318,4 +332,4 @@ body {
(defn shadow->css
[shadow]
- (dm/str "box-shadow: " (format-shadow shadow {})))
+ (dm/str "box-shadow: " (format-shadow->css shadow {})))
diff --git a/frontend/src/app/util/code_gen/style_css_formats.cljs b/frontend/src/app/util/code_gen/style_css_formats.cljs
index 66e5d3b726..b2de3e7664 100644
--- a/frontend/src/app/util/code_gen/style_css_formats.cljs
+++ b/frontend/src/app/util/code_gen/style_css_formats.cljs
@@ -14,47 +14,47 @@
[cuerdas.core :as str]))
(def css-formatters
- {:left :position
- :top :position
- :width :size
- :height :size
- :min-width :size
- :min-height :size
- :max-width :size
- :max-height :size
- :background :color
- :border :border
- :border-radius :string-or-size-array
- :border-width :border-width
- :border-style :border-style
- :box-shadow :shadows
- :filter :blur
- :gap :size-array
- :row-gap :size-array
- :column-gap :size-array
- :padding :size-array
- :margin :size-array
- :grid-template-rows :tracks
- :grid-template-columns :tracks})
+ {:left :position
+ :top :position
+ :width :size
+ :height :size
+ :max-height :size
+ :max-block-size :size
+ :min-height :size
+ :min-block-size :size
+ :max-width :size
+ :max-inline-size :size
+ :min-width :size
+ :min-inline-size :size
+ :background :color
+ :border :border
+ :border-radius :string-or-size-array
+ :border-start-start-radius :string-or-size-array
+ :border-start-end-radius :string-or-size-array
+ :border-end-start-radius :string-or-size-array
+ :border-end-end-radius :string-or-size-array
+ :border-width :border-width
+ :border-style :border-style
+ :border-color :border-color
+ :box-shadow :shadows
+ :filter :blur
+ :gap :size-array
+ :row-gap :size-array
+ :column-gap :size-array
+ :padding :size-array
+ :padding-inline-start :size-array
+ :padding-inline-end :size-array
+ :padding-block-start :size-array
+ :padding-block-end :size-array
+ :margin :size-array
+ :margin-block-start :size-array
+ :margin-block-end :size-array
+ :margin-inline-start :size-array
+ :margin-inline-end :size-array
+ :grid-template-rows :tracks
+ :grid-template-columns :tracks})
-(defmulti format-value
- (fn [property _value _options] (css-formatters property)))
-
-(defmethod format-value :position
- [_ value _options]
- (cond
- (number? value) (fmt/format-pixels value)
- :else value))
-
-(defmethod format-value :size
- [_ value _options]
- (cond
- (= value :fill) "100%"
- (= value :auto) "auto"
- (number? value) (fmt/format-pixels value)
- :else value))
-
-(defn format-color
+(defn format-color-value
"Format a color value to a CSS compatible string based on the given format."
[value options]
(let [format (get options :format :hex)]
@@ -76,34 +76,59 @@
:else
(uc/color->format->background value format))))
-(defmethod format-value :color
- [_ value options]
- (let [format (get options :format :hex)]
- (format-color value (assoc options :format format))))
+(defn format-shadow->css
+ [{:keys [style offset-x offset-y blur spread color]} options]
+ (let [css-color (format-color-value color options)]
+ (dm/str
+ (if (= style :inner-shadow) "inset " "")
+ (str/fmt "%spx %spx %spx %spx %s" offset-x offset-y blur spread css-color))))
-(defmethod format-value :color-array
- [_ value options]
+(defn- format-position
+ [value]
+ (cond
+ (number? value) (fmt/format-pixels value)
+ :else value))
+
+(defn- format-size
+ [value]
+ (cond
+ (= value :fill) "100%"
+ (= value :auto) "auto"
+ (number? value) (fmt/format-pixels value)
+ :else value))
+
+(defn- format-color
+ [value options]
+ (let [format (get options :format :hex)]
+ (format-color-value value (assoc options :format format))))
+
+(defn- format-color-array
+ [value options]
(->> value
- (map #(format-color % options))
+ (map #(format-color-value % options))
(str/join ", ")))
-(defmethod format-value :border
- [_ {:keys [color style width]} options]
+(defn- format-border
+ [{:keys [color style width]} options]
(dm/fmt "% % %"
(fmt/format-pixels width)
(d/name style)
- (format-color color options)))
+ (format-color-value color options)))
-(defmethod format-value :border-style
- [_ value _options]
+(defn- format-border-style
+ [value]
(d/name (:style value)))
-(defmethod format-value :border-width
- [_ value _options]
+(defn- format-border-width
+ [value]
(fmt/format-pixels (:width value)))
-(defmethod format-value :size-array
- [_ value _options]
+(defn- format-border-color
+ [value options]
+ (format-color (:color value) options))
+
+(defn- format-size-array
+ [value]
(cond
(and (coll? value) (d/not-empty? value))
(->> value
@@ -113,8 +138,8 @@
(some? value)
value))
-(defmethod format-value :string-or-size-array
- [_ value _]
+(defn format-string-or-size-array
+ [value]
(cond
(string? value)
value
@@ -127,12 +152,12 @@
(some? value)
value))
-(defmethod format-value :keyword
- [_ value _options]
+(defn- format-keyword
+ [value]
(d/name value))
-(defmethod format-value :tracks
- [_ value _options]
+(defn- format-tracks
+ [value]
(->> value
(map (fn [{:keys [type value]}]
(case type
@@ -142,29 +167,39 @@
(fmt/format-pixels value))))
(str/join " ")))
-(defn format-shadow
- [{:keys [style offset-x offset-y blur spread color]} options]
- (let [css-color (format-color color options)]
- (dm/str
- (if (= style :inner-shadow) "inset " "")
- (str/fmt "%spx %spx %spx %spx %s" offset-x offset-y blur spread css-color))))
-
-(defmethod format-value :shadows
- [_ value options]
+(defn- format-shadow
+ [value options]
(->> value
- (map #(format-shadow % options))
+ (map #(format-shadow->css % options))
(str/join ", ")))
-(defmethod format-value :blur
- [_ value _options]
+(defn- format-blur
+ [value]
(dm/fmt "blur(%)" (fmt/format-pixels value)))
-(defmethod format-value :matrix
- [_ value _options]
+(defn- format-matrix
+ [value]
(fmt/format-matrix value))
-(defmethod format-value :default
- [_ value _options]
- (if (keyword? value)
- (d/name value)
- value))
+
+(defn format-value
+ "Get the appropriate value formatter function for a given CSS property."
+ [property value options]
+ (let [property (get css-formatters property)]
+ (case property
+ :position (format-position value)
+ :size (format-size value)
+ :color (format-color value options)
+ :color-array (format-color-array value options)
+ :border (format-border value options)
+ :border-style (format-border-style value)
+ :border-width (format-border-width value)
+ :border-color (format-border-color value options)
+ :size-array (format-size-array value)
+ :string-or-size-array (format-string-or-size-array value)
+ :keyword (format-keyword value)
+ :tracks (format-tracks value)
+ :shadow (format-shadow value options)
+ :blur (format-blur value)
+ :matrix (format-matrix value)
+ (if (keyword? value) (d/name value) value))))
diff --git a/frontend/src/app/util/code_gen/style_css_values.cljs b/frontend/src/app/util/code_gen/style_css_values.cljs
index 13ee25bc83..cba1991599 100644
--- a/frontend/src/app/util/code_gen/style_css_values.cljs
+++ b/frontend/src/app/util/code_gen/style_css_values.cljs
@@ -24,27 +24,6 @@
:gradient fill-color-gradient
:image fill-image})
-(defmulti get-value
- (fn [property _shape _objects _options] property))
-
-(defmethod get-value :position
- [_ shape objects _]
- (cond
- (or (and (ctl/any-layout-immediate-child? objects shape)
- (not (ctl/position-absolute? shape))
- (or (cfh/group-like-shape? shape)
- (cfh/frame-shape? shape)
- (cgc/svg-markup? shape)))
- (cfh/root-frame? shape))
- :relative
-
- (and (ctl/any-layout-immediate-child? objects shape)
- (not (ctl/position-absolute? shape)))
- nil
-
- :else
- :absolute))
-
(defn get-shape-position
[shape objects coord]
@@ -64,24 +43,6 @@
shape-value (get selrect coord)]
(- shape-value parent-value))))
-(defmethod get-value :left
- [_ shape objects _]
- (get-shape-position shape objects :x))
-
-(defmethod get-value :top
- [_ shape objects _]
- (get-shape-position shape objects :y))
-
-(defmethod get-value :flex
- [_ shape objects _]
- (let [parent (cfh/get-parent objects (:id shape))]
- (when (and (ctl/flex-layout-immediate-child? objects shape)
- (or (and (contains? #{:row :row-reverse} (:layout-flex-dir parent))
- (= :fill (:layout-item-h-sizing shape)))
- (and (contains? #{:column :column-reverse} (:layout-flex-dir parent))
- (= :fill (:layout-item-v-sizing shape)))))
- 1)))
-
(defn get-shape-size
[shape objects type]
(let [parent (cfh/get-parent objects (:id shape))
@@ -111,8 +72,78 @@
(some? (get shape type))
(get shape type))))
-(defmethod get-value :width
- [_ shape objects options]
+(defn get-stroke-data
+ [stroke]
+ (let [width (:stroke-width stroke)
+ style (:stroke-style stroke)
+ color {:color (:stroke-color stroke)
+ :opacity (:stroke-opacity stroke)
+ :gradient (:stroke-color-gradient stroke)}]
+
+ (when (and (some? stroke) (not= :none (:stroke-style stroke)))
+ {:color color
+ :style style
+ :width width})))
+
+(defn area-cell?
+ [{:keys [position area-name]}]
+ (and (= position :area) (d/not-empty? area-name)))
+
+(defn get-grid-coord
+ [shape objects prop span-prop]
+ (when (and (ctl/grid-layout-immediate-child? objects shape)
+ (not (ctl/position-absolute? shape)))
+ (let [parent (get objects (:parent-id shape))
+ cell (ctl/get-cell-by-shape-id parent (:id shape))]
+ (when (and
+ (not (and (= (:position cell) :area) (d/not-empty? (:area-name cell))))
+ (or (= (:position cell) :manual)
+ (> (:row-span cell) 1)
+ (> (:column-span cell) 1)))
+ (if (> (get cell span-prop) 1)
+ (dm/str (get cell prop) " / " (+ (get cell prop) (get cell span-prop)))
+ (get cell prop))))))
+
+;; SHAPE VALUES
+
+(defn- get-position
+ [shape objects]
+ (cond
+ (or (and (ctl/any-layout-immediate-child? objects shape)
+ (not (ctl/position-absolute? shape))
+ (or (cfh/group-like-shape? shape)
+ (cfh/frame-shape? shape)
+ (cgc/svg-markup? shape)))
+ (cfh/root-frame? shape))
+ :relative
+
+ (and (ctl/any-layout-immediate-child? objects shape)
+ (not (ctl/position-absolute? shape)))
+ nil
+
+ :else
+ :absolute))
+
+(defn- get-left-position
+ [shape objects]
+ (get-shape-position shape objects :x))
+
+(defn- get-top-position
+ [shape objects]
+ (get-shape-position shape objects :y))
+
+(defn- get-flex
+ [shape objects]
+ (let [parent (cfh/get-parent objects (:id shape))]
+ (when (and (ctl/flex-layout-immediate-child? objects shape)
+ (or (and (contains? #{:row :row-reverse} (:layout-flex-dir parent))
+ (= :fill (:layout-item-h-sizing shape)))
+ (and (contains? #{:column :column-reverse} (:layout-flex-dir parent))
+ (= :fill (:layout-item-v-sizing shape)))))
+ 1)))
+
+(defn- get-width
+ [shape objects options]
(let [root? (contains? (:root-shapes options) (:id shape))]
(if (and root? (ctl/any-layout? shape))
:fill
@@ -120,22 +151,22 @@
(when-not (and (cfh/text-shape? shape) (= (:grow-type shape) :auto-width))
(get-shape-size shape objects :width)))))
-(defmethod get-value :height
- [_ shape objects options]
+(defn- get-height
+ [shape objects options]
(let [root? (contains? (:root-shapes options) (:id shape))]
(when-not (and root? (ctl/any-layout? shape))
;; Don't set fixed height for auto-height text shapes
(when-not (and (cfh/text-shape? shape) (= (:grow-type shape) :auto-height))
(get-shape-size shape objects :height)))))
-(defmethod get-value :flex-grow
- [_ shape _ options]
+(defn- get-flex-grow
+ [shape options]
(let [root? (contains? (:root-shapes options) (:id shape))]
(when (and root? (ctl/any-layout? shape))
1)))
-(defmethod get-value :transform
- [_ shape objects _]
+(defn- get-transform
+ [shape objects]
(if (cgc/svg-markup? shape)
(let [parent (get objects (:parent-id shape))
transform
@@ -159,32 +190,19 @@
(dm/str "translate(-50%, -50%) " (d/nilv transform-str ""))
transform-str))))
-(defmethod get-value :background
- [_ {:keys [fills] :as shape} _ _]
+(defn- get-background
+ [{:keys [fills] :as shape}]
(let [single-fill? (= (count fills) 1)]
(when (and (not (cgc/svg-markup? shape)) (not (cfh/group-shape? shape)) single-fill?)
(fill->color (first fills)))))
-(defn get-stroke-data
- [stroke]
- (let [width (:stroke-width stroke)
- style (:stroke-style stroke)
- color {:color (:stroke-color stroke)
- :opacity (:stroke-opacity stroke)
- :gradient (:stroke-color-gradient stroke)}]
-
- (when (and (some? stroke) (not= :none (:stroke-style stroke)))
- {:color color
- :style style
- :width width})))
-
-(defmethod get-value :border
- [_ shape _ _]
+(defn- get-border
+ [shape]
(when-not (cgc/svg-markup? shape)
(get-stroke-data (first (:strokes shape)))))
-(defmethod get-value :border-radius
- [_ {:keys [rx r1 r2 r3 r4] :as shape} _ _]
+(defn- get-border-radius
+ [{:keys [rx r1 r2 r3 r4] :as shape}]
(cond
(cfh/circle-shape? shape)
"50%"
@@ -195,107 +213,148 @@
(every? some? [r1 r2 r3 r4])
[r1 r2 r3 r4]))
-(defmethod get-value :border-style
- [_ stroke _ _]
+(defn- get-border-start-start-radius
+ [{:keys [_ r1 _ _ _] :as shape}]
+ (when (and r1 (not= r1 0))
+ [r1]))
+
+(defn- get-border-start-end-radius
+ [{:keys [_ _ r2 _ _] :as shape}]
+ (when (and r2 (not= r2 0))
+ [r2]))
+
+(defn- get-border-end-start-radius
+ [{:keys [_ _ _ r3 _] :as shape}]
+ (when (and r3 (not= r3 0))
+ [r3]))
+
+(defn- get-border-end-end-radius
+ [{:keys [_ _ _ _ r4] :as shape}]
+ (when (and r4 (not= r4 0))
+ [r4]))
+
+(defn- get-border-style
+ [stroke]
(when-not (cgc/svg-markup? stroke)
(get-stroke-data stroke)))
-(defmethod get-value :border-width
- [_ stroke _ _]
+(defn- get-border-width
+ [stroke]
(when-not (cgc/svg-markup? stroke)
(get-stroke-data stroke)))
-(defmethod get-value :box-shadow
- [_ shape _ _]
+(defn- get-border-color
+ [stroke]
+ (when-not (cgc/svg-markup? stroke)
+ (get-stroke-data stroke)))
+
+(defn- get-box-shadow
+ [shape]
(when-not (cgc/svg-markup? shape)
(:shadow shape)))
-(defmethod get-value :filter
- [_ shape _ _]
+(defn- get-filter
+ [shape]
(when-not (cgc/svg-markup? shape)
(get-in shape [:blur :value])))
-(defmethod get-value :display
- [_ shape _ _]
+(defn- get-display
+ [shape]
(cond
(:hidden shape) "none"
(ctl/flex-layout? shape) "flex"
(ctl/grid-layout? shape) "grid"))
-(defmethod get-value :opacity
- [_ shape _ _]
+(defn- get-opacity
+ [shape]
(when (< (:opacity shape) 1)
(:opacity shape)))
-(defmethod get-value :overflow
- [_ shape _ _]
+(defn- get-overflow
+ [shape]
(when (and (cfh/frame-shape? shape)
(not (cgc/svg-markup? shape))
(not (:show-content shape)))
"hidden"))
-(defmethod get-value :flex-direction
- [_ shape _ _]
+(defn- get-flex-direction
+ [shape]
(:layout-flex-dir shape))
-(defmethod get-value :align-items
- [_ shape _ _]
+(defn- get-align-items
+ [shape]
(:layout-align-items shape))
-(defmethod get-value :align-content
- [_ shape _ _]
+(defn- get-align-content
+ [shape]
(:layout-align-content shape))
-(defmethod get-value :justify-items
- [_ shape _ _]
+(defn- get-justify-items
+ [shape]
(:layout-justify-items shape))
-(defmethod get-value :justify-content
- [_ shape _ _]
+(defn- get-justify-content
+ [shape]
(:layout-justify-content shape))
-(defmethod get-value :flex-wrap
- [_ shape _ _]
+(defn- get-flex-wrap
+ [shape]
(:layout-wrap-type shape))
-(defmethod get-value :gap
- [_ shape _ _]
+(defn- get-gap
+ [shape]
(let [[g1 g2] (ctl/gaps shape)]
(when (and (= g1 g2) (or (not= g1 0) (not= g2 0)))
[g1])))
-(defmethod get-value :row-gap
- [_ shape _ _]
+(defn- get-row-gap
+ [shape]
(let [[g1 g2] (ctl/gaps shape)]
(when (and (not= g1 g2) (not= g1 0)) [g1])))
-(defmethod get-value :column-gap
- [_ shape _ _]
+(defn- get-column-gap
+ [shape]
(let [[g1 g2] (ctl/gaps shape)]
(when (and (not= g1 g2) (not= g2 0)) [g2])))
-(defmethod get-value :padding
- [_ {:keys [layout-padding]} _ _]
+(defn- get-padding
+ [{:keys [layout-padding]}]
(when (some? layout-padding)
(let [default-padding {:p1 0 :p2 0 :p3 0 :p4 0}
{:keys [p1 p2 p3 p4]} (merge default-padding layout-padding)]
(when (or (not= p1 0) (not= p2 0) (not= p3 0) (not= p4 0))
[p1 p2 p3 p4]))))
-(defmethod get-value :grid-template-rows
- [_ shape _ _]
+(defn- get-padding-block-start
+ [{:keys [layout-padding]}]
+ (when (and (:p1 layout-padding) (not= (:p1 layout-padding) 0))
+ [(:p1 layout-padding)]))
+
+(defn- get-padding-inline-end
+ [{:keys [layout-padding]}]
+ (when (and (:p2 layout-padding) (not= (:p2 layout-padding) 0))
+ [(:p2 layout-padding)]))
+
+(defn- get-padding-block-end
+ [{:keys [layout-padding]}]
+ (when (and (:p3 layout-padding) (not= (:p3 layout-padding) 0))
+ [(:p3 layout-padding)]))
+
+(defn- get-padding-inline-start
+ [{:keys [layout-padding]}]
+ (when (and (:p4 layout-padding) (not= (:p4 layout-padding) 0))
+ [(:p4 layout-padding)]))
+
+(defn- get-grid-template-rows
+ [shape]
(:layout-grid-rows shape))
-(defmethod get-value :grid-template-columns
- [_ shape _ _]
+(defn- get-grid-template-columns
+ [shape]
(:layout-grid-columns shape))
-(defn area-cell?
- [{:keys [position area-name]}]
- (and (= position :area) (d/not-empty? area-name)))
-
-(defmethod get-value :grid-template-areas
- [_ shape _ _]
+(defn- get-grid-template-areas
+ [shape]
(when (and (ctl/grid-layout? shape)
(some area-cell? (vals (:layout-grid-cells shape))))
(let [result
@@ -313,31 +372,16 @@
(str/join "\n"))]
result)))
-(defn get-grid-coord
- [shape objects prop span-prop]
- (when (and (ctl/grid-layout-immediate-child? objects shape)
- (not (ctl/position-absolute? shape)))
- (let [parent (get objects (:parent-id shape))
- cell (ctl/get-cell-by-shape-id parent (:id shape))]
- (when (and
- (not (and (= (:position cell) :area) (d/not-empty? (:area-name cell))))
- (or (= (:position cell) :manual)
- (> (:row-span cell) 1)
- (> (:column-span cell) 1)))
- (if (> (get cell span-prop) 1)
- (dm/str (get cell prop) " / " (+ (get cell prop) (get cell span-prop)))
- (get cell prop))))))
-
-(defmethod get-value :grid-column
- [_ shape objects _]
+(defn- get-grid-column
+ [shape objects]
(get-grid-coord shape objects :column :column-span))
-(defmethod get-value :grid-row
- [_ shape objects _]
+(defn- get-grid-row
+ [shape objects]
(get-grid-coord shape objects :row :row-span))
-(defmethod get-value :grid-area
- [_ shape objects _]
+(defn- get-grid-area
+ [shape objects]
(when (and (ctl/grid-layout-immediate-child? objects shape)
(not (ctl/position-absolute? shape)))
(let [parent (get objects (:parent-id shape))
@@ -345,8 +389,8 @@
(when (and (= (:position cell) :area) (d/not-empty? (:area-name cell)))
(str/replace (:area-name cell) " " "-")))))
-(defmethod get-value :flex-shrink
- [_ shape objects _]
+(defn- get-flex-shrink
+ [shape objects]
(when (and (ctl/flex-layout-immediate-child? objects shape)
(not (and (contains? #{:row :reverse-row} (:layout-flex-dir shape))
@@ -361,8 +405,8 @@
(not= :auto (:layout-item-v-sizing shape)))
0))
-(defmethod get-value :margin
- [_ {:keys [layout-item-margin] :as shape} objects _]
+(defn- get-margin
+ [{:keys [layout-item-margin] :as shape} objects]
(when (ctl/any-layout-immediate-child? objects shape)
(let [default-margin {:m1 0 :m2 0 :m3 0 :m4 0}
@@ -370,8 +414,29 @@
(when (or (not= m1 0) (not= m2 0) (not= m3 0) (not= m4 0))
[m1 m2 m3 m4]))))
-(defmethod get-value :z-index
- [_ {:keys [layout-item-z-index] :as shape} objects _]
+(defn- get-margin-block-start
+ [{:keys [layout-item-margin] :as shape} objects]
+ (when (and (ctl/any-layout-immediate-child? objects shape) (:m1 layout-item-margin) (not= (:m1 layout-item-margin) 0))
+ [(:m1 layout-item-margin)]))
+
+(defn- get-margin-inline-end
+ [{:keys [layout-item-margin] :as shape} objects]
+ (when (and (ctl/any-layout-immediate-child? objects shape) (:m2 layout-item-margin) (not= (:m2 layout-item-margin) 0))
+ [(:m2 layout-item-margin)]))
+
+(defn- get-margin-block-end
+ [{:keys [layout-item-margin] :as shape} objects]
+ (when (and (ctl/any-layout-immediate-child? objects shape) (:m3 layout-item-margin) (not= (:m3 layout-item-margin) 0))
+ [(:m3 layout-item-margin)]))
+
+(defn- get-margin-inline-start
+ [{:keys [layout-item-margin] :as shape} objects]
+ (when (and (ctl/any-layout-immediate-child? objects shape) (:m4 layout-item-margin) (not= (:m4 layout-item-margin) 0))
+ [(:m4 layout-item-margin)]))
+
+
+(defn- get-z-index
+ [{:keys [layout-item-z-index] :as shape} objects]
(cond
(cfh/root-frame? shape)
0
@@ -379,29 +444,28 @@
(ctl/any-layout-immediate-child? objects shape)
layout-item-z-index))
-(defmethod get-value :max-height
- [_ shape objects _]
+(defn- get-max-height
+ [shape objects]
(cond
(ctl/any-layout-immediate-child? objects shape)
(:layout-item-max-h shape)))
-(defmethod get-value :min-height
- [_ shape objects _]
+(defn- get-min-height
+ [shape objects]
(cond
(and (ctl/any-layout-immediate-child? objects shape) (some? (:layout-item-min-h shape)))
(:layout-item-min-h shape)
-
(and (ctl/auto-height? shape) (cfh/frame-shape? shape) (not (:show-content shape)))
(-> shape :selrect :height)))
-(defmethod get-value :max-width
- [_ shape objects _]
+(defn- get-max-width
+ [shape objects]
(cond
(ctl/any-layout-immediate-child? objects shape)
(:layout-item-max-w shape)))
-(defmethod get-value :min-width
- [_ shape objects _]
+(defn- get-min-width
+ [shape objects]
(cond
(and (ctl/any-layout-immediate-child? objects shape) (some? (:layout-item-min-w shape)))
(:layout-item-min-w shape)
@@ -409,8 +473,8 @@
(and (ctl/auto-width? shape) (cfh/frame-shape? shape) (not (:show-content shape)))
(-> shape :selrect :width)))
-(defmethod get-value :align-self
- [_ shape objects _]
+(defn- get-align-self
+ [shape objects]
(cond
(ctl/flex-layout-immediate-child? objects shape)
(:layout-item-align-self shape)
@@ -421,8 +485,8 @@
align-self (:align-self cell)]
(when (not= align-self :auto) align-self))))
-(defmethod get-value :justify-self
- [_ shape objects _]
+(defn- get-justify-self
+ [shape objects]
(cond
(ctl/grid-layout-immediate-child? objects shape)
(let [parent (get objects (:parent-id shape))
@@ -430,11 +494,89 @@
justify-self (:justify-self cell)]
(when (not= justify-self :auto) justify-self))))
-(defmethod get-value :grid-auto-flow
- [_ shape _ _]
+(defn- get-grid-auto-flow
+ [shape]
(when (and (ctl/grid-layout? shape) (= (:layout-grid-dir shape) :column))
"column"))
-(defmethod get-value :default
- [property shape _ _]
- (get shape property))
+(defn get-value
+ "Get the value for a given CSS property from a shape"
+ [property shape objects options]
+ (case property
+ ;; Positioning
+ :position (get-position shape objects)
+ :left (get-left-position shape objects)
+ :top (get-top-position shape objects)
+ :z-index (get-z-index shape objects)
+ :transform (get-transform shape objects)
+
+ ;; Size
+ :width (get-width shape objects options)
+ :height (get-height shape objects options)
+ (:max-width :max-inline-size) (get-max-width shape objects)
+ (:min-width :min-inline-size) (get-min-width shape objects)
+ (:max-height :max-block-size) (get-max-height shape objects)
+ (:min-height :min-block-size) (get-min-height shape objects)
+
+ ;; Spacing
+ :margin (get-margin shape objects)
+ :margin-block-start (get-margin-block-start shape objects)
+ :margin-inline-end (get-margin-inline-end shape objects)
+ :margin-block-end (get-margin-block-end shape objects)
+ :margin-inline-start (get-margin-inline-start shape objects)
+ :padding (get-padding shape)
+ :padding-block-start (get-padding-block-start shape)
+ :padding-inline-end (get-padding-inline-end shape)
+ :padding-block-end (get-padding-block-end shape)
+ :padding-inline-start (get-padding-inline-start shape)
+
+ ;; Border & Background
+ :border (get-border shape)
+ :border-style (get-border-style shape)
+ :border-width (get-border-width shape)
+ :border-color (get-border-color shape)
+ :border-radius (get-border-radius shape)
+ :border-start-start-radius (get-border-start-start-radius shape)
+ :border-start-end-radius (get-border-start-end-radius shape)
+ :border-end-start-radius (get-border-end-start-radius shape)
+ :border-end-end-radius (get-border-end-end-radius shape)
+ :background (get-background shape)
+
+ ;; Visual Effects
+ :opacity (get-opacity shape)
+ :box-shadow (get-box-shadow shape)
+ :filter (get-filter shape)
+ :overflow (get-overflow shape)
+
+ ;; Display
+ :display (get-display shape)
+
+ ;; Flexbox
+ :flex (get-flex shape objects)
+ :flex-grow (get-flex-grow shape options)
+ :flex-shrink (get-flex-shrink shape objects)
+ :flex-direction (get-flex-direction shape)
+ :flex-wrap (get-flex-wrap shape)
+ :align-items (get-align-items shape)
+ :align-content (get-align-content shape)
+ :align-self (get-align-self shape objects)
+ :justify-content (get-justify-content shape)
+ :justify-items (get-justify-items shape)
+ :justify-self (get-justify-self shape objects)
+
+ ;; Grid
+ :grid-template-rows (get-grid-template-rows shape)
+ :grid-template-columns (get-grid-template-columns shape)
+ :grid-template-areas (get-grid-template-areas shape)
+ :grid-column (get-grid-column shape objects)
+ :grid-row (get-grid-row shape objects)
+ :grid-area (get-grid-area shape objects)
+ :grid-auto-flow (get-grid-auto-flow shape)
+
+ ;; Spacing (Flex/Grid)
+ :gap (get-gap shape)
+ :row-gap (get-row-gap shape)
+ :column-gap (get-column-gap shape)
+
+ ;; Default
+ (get shape property)))
diff --git a/frontend/src/app/util/debug.cljs b/frontend/src/app/util/debug.cljs
index d14f0793cf..3c449fd39f 100644
--- a/frontend/src/app/util/debug.cljs
+++ b/frontend/src/app/util/debug.cljs
@@ -4,7 +4,9 @@
;;
;; Copyright (c) KALEIDOS INC
-(ns app.util.debug)
+(ns app.util.debug
+ (:require
+ [app.main.store :as st]))
(defonce state (atom #{#_:events}))
@@ -95,7 +97,19 @@
:gl-context
;; Show viewbox
- :wasm-viewbox})
+ :wasm-viewbox
+
+ ;; Event times
+ :events-times})
+
+(defn handle-change
+ []
+ (set! st/*debug-events* (contains? @state :events))
+ (set! st/*debug-events-time* (contains? @state :events-times)))
+
+(when *assert*
+ (handle-change)
+ (add-watch state :watcher handle-change))
(defn enable!
[option]
diff --git a/frontend/src/app/util/http.cljs b/frontend/src/app/util/http.cljs
index aa7635c212..bf35ce96fd 100644
--- a/frontend/src/app/util/http.cljs
+++ b/frontend/src/app/util/http.cljs
@@ -13,6 +13,7 @@
[app.config :as cfg]
[app.util.cache :as c]
[app.util.globals :as globals]
+ [app.util.perf :as perf]
[app.util.webapi :as wapi]
[beicon.v2.core :as rx]
[cuerdas.core :as str]
@@ -51,7 +52,12 @@
(defn default-headers
[]
- {"x-frontend-version" (:full cfg/version)})
+ {"x-frontend-version" (:full cfg/version)
+ "x-client" (str "penpot-frontend/" (:full cfg/version))})
+
+;; Storage to save the average time of the requests
+(defonce network-averages
+ (atom {}))
(defn fetch
[{:keys [method uri query headers body mode omit-default-headers credentials]
@@ -87,17 +93,29 @@
:redirect "follow"
:credentials credentials
:referrerPolicy "no-referrer"
- :signal signal}]
+ :signal signal}
+
+ start (perf/timestamp)]
(-> (js/fetch (str uri) params)
- (p/then (fn [response]
- (vreset! abortable? false)
- (.next ^js subscriber response)
- (.complete ^js subscriber)))
- (p/catch (fn [err]
- (vreset! abortable? false)
- (when-not @unsubscribed?
- (.error ^js subscriber err)))))
+ (p/then
+ (fn [response]
+ (vreset! abortable? false)
+ (.next ^js subscriber response)
+ (.complete ^js subscriber)))
+ (p/catch
+ (fn [err]
+ (vreset! abortable? false)
+ (when-not @unsubscribed?
+ (.error ^js subscriber err))))
+ (p/finally
+ (fn []
+ (let [{:keys [count average] :or {count 0 average 0}} (get @network-averages (:path uri))
+ current-time (- (perf/timestamp) start)
+ average (+ (* average (/ count (inc count)))
+ (/ current-time (inc count)))
+ count (inc count)]
+ (swap! network-averages assoc (:path uri) {:count count :average average})))))
(fn []
(vreset! unsubscribed? true)
(when @abortable?
diff --git a/frontend/src/app/util/perf.cljs b/frontend/src/app/util/perf.cljs
index f958ba34f5..868f2eb2b4 100644
--- a/frontend/src/app/util/perf.cljs
+++ b/frontend/src/app/util/perf.cljs
@@ -157,3 +157,15 @@
(let [p1 (now)]
#(js/Math.floor (- (now) p1))))
+(defn measure-time-to-render [event]
+ (if (and (exists? js/globalThis)
+ (exists? (.-requestAnimationFrame js/globalThis))
+ (exists? (.-scheduler js/globalThis))
+ (exists? (.-postTask (.-scheduler js/globalThis))))
+ (let [start (timestamp)]
+ (js/requestAnimationFrame
+ #(js/scheduler.postTask
+ (fn []
+ (let [end (timestamp)]
+ (println (str "[" event "]" (- end start)))))
+ #js {"priority" "user-blocking"})))))
diff --git a/frontend/src/app/util/worker.cljs b/frontend/src/app/util/worker.cljs
index f1b27cc7c6..bf1b44c30b 100644
--- a/frontend/src/app/util/worker.cljs
+++ b/frontend/src/app/util/worker.cljs
@@ -19,7 +19,7 @@
([worker message]
(send-message! worker message nil))
- ([worker {sender-id :sender-id :as message} {:keys [many?] :or {many? false}}]
+ ([worker {sender-id :sender-id :as message} {:keys [many? ignore-response?] :or {many? false ignore-response? false}}]
(let [take-messages
(fn [ob]
(if many?
@@ -34,11 +34,13 @@
(if (some? instance)
(do (.postMessage instance data transfer)
- (->> (:stream worker)
- (rx/filter #(= (:reply-to %) sender-id))
- (take-messages)
- (rx/filter (complement :dropped))
- (rx/map handle-response)))
+ (if (not ignore-response?)
+ (->> (:stream worker)
+ (rx/filter #(= (:reply-to %) sender-id))
+ (take-messages)
+ (rx/filter (complement :dropped))
+ (rx/map handle-response))
+ (rx/empty)))
(rx/empty)))))
(defn ask!
@@ -51,6 +53,17 @@
:payload message
:transfer transfer})))
+(defn emit!
+ ([worker message]
+ (emit! worker message nil))
+ ([worker message transfer]
+ (send-message!
+ worker
+ {:sender-id (uuid/next)
+ :payload message
+ :transfer transfer}
+ {:ignore-response? true})))
+
(defn ask-many!
([worker message]
(ask-many! worker message nil))
diff --git a/frontend/src/debug.cljs b/frontend/src/debug.cljs
index aa3e4d09cb..b87b4220ca 100644
--- a/frontend/src/debug.cljs
+++ b/frontend/src/debug.cljs
@@ -32,6 +32,7 @@
[app.main.store :as st]
[app.util.debug :as dbg]
[app.util.dom :as dom]
+ [app.util.http :as http]
[app.util.object :as obj]
[app.util.timers :as timers]
[beicon.v2.core :as rx]
@@ -58,15 +59,27 @@
(defn enable!
[option]
(dbg/enable! option)
- (when (= :events option)
- (set! st/*debug-events* true))
+ (case option
+ :events
+ (set! st/*debug-events* true)
+
+ :events-times
+ (set! st/*debug-events-time* true)
+
+ nil)
(js* "app.main.reinit()"))
(defn disable!
[option]
(dbg/disable! option)
- (when (= :events option)
- (set! st/*debug-events* false))
+ (case option
+ :events
+ (set! st/*debug-events* false)
+
+ :events-times
+ (set! st/*debug-events-time* false)
+
+ nil)
(js* "app.main.reinit()"))
(defn ^:export toggle-debug
@@ -278,14 +291,6 @@
([shape-id show-ids show-touched] (dump-subtree' @st/state shape-id show-ids show-touched false))
([shape-id show-ids show-touched show-modified] (dump-subtree' @st/state shape-id show-ids show-touched show-modified)))
-(when *assert*
- (defonce debug-subscription
- (->> st/stream
- (rx/filter ptk/event?)
- (rx/filter (fn [s] (and (dbg/enabled? :events)
- (not (debug-exclude-events (ptk/type s))))))
- (rx/subs! #(println "[stream]: " (ptk/repr-event %))))))
-
(defn ^:export apply-changes
"Takes a Transit JSON changes"
[^string changes*]
@@ -447,3 +452,7 @@
(defn ^:export set-shape-ref
[id shape-ref]
(st/emit! (set-shape-ref* id shape-ref)))
+
+(defn ^:export network-averages
+ []
+ (.log js/console (clj->js @http/network-averages)))
diff --git a/frontend/test/frontend_tests/logic/components_and_tokens.cljs b/frontend/test/frontend_tests/logic/components_and_tokens.cljs
index 5afb4c902b..cdfb94a220 100644
--- a/frontend/test/frontend_tests/logic/components_and_tokens.cljs
+++ b/frontend/test/frontend_tests/logic/components_and_tokens.cljs
@@ -34,25 +34,26 @@
(-> (cthf/sample-file :file1)
(ctht/add-tokens-lib)
(ctht/update-tokens-lib #(-> %
- (ctob/add-set (ctob/make-token-set :name "test-token-set"))
+ (ctob/add-set (ctob/make-token-set :id (cthi/new-id! :test-token-set)
+ :name "test-token-set"))
(ctob/add-theme (ctob/make-token-theme :name "test-theme"
:sets #{"test-token-set"}))
(ctob/set-active-themes #{"/test-theme"})
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (cthi/new-id! :test-token-1)
- :name "test-token-1"
- :type :border-radius
- :value 25))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (cthi/new-id! :test-token-2)
- :name "test-token-2"
- :type :border-radius
- :value 50))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (cthi/new-id! :test-token-3)
- :name "test-token-3"
- :type :border-radius
- :value 75))))
+ (ctob/add-token (cthi/id :test-token-set)
+ (ctob/make-token :id (cthi/new-id! :test-token-1)
+ :name "test-token-1"
+ :type :border-radius
+ :value 25))
+ (ctob/add-token (cthi/id :test-token-set)
+ (ctob/make-token :id (cthi/new-id! :test-token-2)
+ :name "test-token-2"
+ :type :border-radius
+ :value 50))
+ (ctob/add-token (cthi/id :test-token-set)
+ (ctob/make-token :id (cthi/new-id! :test-token-3)
+ :name "test-token-3"
+ :type :border-radius
+ :value 75))))
(ctho/add-frame :frame1)
(ctht/apply-token-to-shape :frame1 "test-token-1" [:r1 :r2 :r3 :r4] [:r1 :r2 :r3 :r4] 25)))
@@ -206,7 +207,7 @@
store (ths/setup-store file)
;; ==== Action
- events [(dwtl/set-selected-token-set-name "test-token-set")
+ events [(dwtl/set-selected-token-set-id (cthi/id :test-token-set))
(dwtl/update-token (cthi/id :test-token-1)
{:name "test-token-1"
:type :border-radius
@@ -321,40 +322,41 @@
file (-> (cthf/sample-file :file1)
(ctht/add-tokens-lib)
(ctht/update-tokens-lib #(-> %
- (ctob/add-set (ctob/make-token-set :name "test-token-set"))
+ (ctob/add-set (ctob/make-token-set :id (cthi/new-id! :test-token-set)
+ :name "test-token-set"))
(ctob/add-theme (ctob/make-token-theme :name "test-theme"
:sets #{"test-token-set"}))
(ctob/set-active-themes #{"/test-theme"})
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (cthi/new-id! :token-radius)
- :name "token-radius"
- :type :border-radius
- :value 10))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (cthi/new-id! :token-rotation)
- :name "token-rotation"
- :type :rotation
- :value 30))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (cthi/new-id! :token-opacity)
- :name "token-opacity"
- :type :opacity
- :value 0.7))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (cthi/new-id! :token-stroke-width)
- :name "token-stroke-width"
- :type :stroke-width
- :value 2))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (cthi/new-id! :token-color)
- :name "token-color"
- :type :color
- :value "#00ff00"))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :id (cthi/new-id! :token-dimensions)
- :name "token-dimensions"
- :type :dimensions
- :value 100))))
+ (ctob/add-token (cthi/id :test-token-set)
+ (ctob/make-token :id (cthi/new-id! :token-radius)
+ :name "token-radius"
+ :type :border-radius
+ :value 10))
+ (ctob/add-token (cthi/id :test-token-set)
+ (ctob/make-token :id (cthi/new-id! :token-rotation)
+ :name "token-rotation"
+ :type :rotation
+ :value 30))
+ (ctob/add-token (cthi/id :test-token-set)
+ (ctob/make-token :id (cthi/new-id! :token-opacity)
+ :name "token-opacity"
+ :type :opacity
+ :value 0.7))
+ (ctob/add-token (cthi/id :test-token-set)
+ (ctob/make-token :id (cthi/new-id! :token-stroke-width)
+ :name "token-stroke-width"
+ :type :stroke-width
+ :value 2))
+ (ctob/add-token (cthi/id :test-token-set)
+ (ctob/make-token :id (cthi/new-id! :token-color)
+ :name "token-color"
+ :type :color
+ :value "#00ff00"))
+ (ctob/add-token (cthi/id :test-token-set)
+ (ctob/make-token :id (cthi/new-id! :token-dimensions)
+ :name "token-dimensions"
+ :type :dimensions
+ :value 100))))
(ctho/add-frame :frame1)
(ctht/apply-token-to-shape :frame1 "token-radius" [:r1 :r2 :r3 :r4] [:r1 :r2 :r3 :r4] 10)
(ctht/apply-token-to-shape :frame1 "token-rotation" [:rotation] [:rotation] 30)
@@ -368,7 +370,7 @@
store (ths/setup-store file)
;; ==== Action
- events [(dwtl/set-selected-token-set-name "test-token-set")
+ events [(dwtl/set-selected-token-set-id (cthi/id :test-token-set))
(dwtl/update-token (cthi/id :token-radius)
{:name "token-radius"
:value 30})
@@ -396,7 +398,6 @@
(fn [new-state]
(let [;; ==== Get
file' (ths/get-file-from-state new-state)
- frame1' (cths/get-shape file' :frame1)
c-frame1' (cths/get-shape file' :c-frame1)
tokens-frame1' (:applied-tokens c-frame1')]
diff --git a/frontend/test/frontend_tests/logic/pasting_in_containers_test.cljs b/frontend/test/frontend_tests/logic/pasting_in_containers_test.cljs
new file mode 100644
index 0000000000..ac69e1cafd
--- /dev/null
+++ b/frontend/test/frontend_tests/logic/pasting_in_containers_test.cljs
@@ -0,0 +1,669 @@
+;; 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 frontend-tests.logic.pasting-in-containers-test
+ (:require
+ [app.common.test-helpers.components :as cthc]
+ [app.common.test-helpers.compositions :as ctho]
+ [app.common.test-helpers.files :as cthf]
+ [app.common.test-helpers.ids-map :as cthi]
+ [app.common.test-helpers.shapes :as cths]
+ [app.common.test-helpers.variants :as thv]
+ [app.common.types.component :as ctk]
+ [app.common.uuid :as uuid]
+ [app.main.data.workspace :as dw]
+ [app.main.data.workspace.selection :as dws]
+ [cljs.test :as t :include-macros true]
+ [cuerdas.core :as str]
+ [frontend-tests.helpers.pages :as thp]
+ [frontend-tests.helpers.state :as ths]))
+
+(t/use-fixtures :each
+ {:before thp/reset-idmap!})
+
+;; Related .penpot file: common/test/cases/remove-swap-slots.penpot
+(defn- setup-file
+ []
+ ;; {:frame-red} [:name Frame1] # [Component :red]
+ ;; {:frame-blue} [:name Frame1] # [Component :blue]
+ ;; {:frame-green} [:name Frame1] # [Component :green]
+ ;; :red-copy-green [:name Frame1] @--> :frame-red
+ ;; {:frame-b1} [:name Frame1] # [Component :b1]
+ ;; :blue1 [:name Frame1, :swap-slot-label :red-copy] @--> :frame-blue
+ ;; :frame-yellow [:name Frame1]
+ ;; :green-copy [:name Frame1] @--> :frame-green
+ ;; :blue-copy-in-green-copy [:name Frame1, :swap-slot-label :red-copy-green] @--> :frame-blue
+ ;; {:frame-b2} [:name Frame1] # [Component :b2]
+ (-> (cthf/sample-file :file1)
+ (ctho/add-frame :frame-red {:name "frame-red"})
+ (ctho/add-frame :frame-red {:name "frame-red"})
+ (ctho/add-frame :frame-blue :name "frame-blue")
+ (cthc/make-component :blue :frame-blue)
+ (ctho/add-frame :frame-green :name "frame-green")
+ (cthc/make-component :green :frame-green)
+ (cthc/instantiate-component :red :red-copy-green :parent-label :frame-green)
+ (ctho/add-frame :frame-b1)
+ (cthc/make-component :b1 :frame-b1)
+ (ctho/add-frame :frame-yellow :parent-label :frame-b1 :name "frame-yellow")
+ (cthc/instantiate-component :red :red-copy :parent-label :frame-b1)
+ (cthc/component-swap :red-copy :blue :blue1)
+ (cthc/instantiate-component :green :green-copy :parent-label :frame-b1 :children-labels [:red-copy-in-green-copy])
+ (cthc/component-swap :red-copy-in-green-copy :blue :blue-copy-in-green-copy)
+ (ctho/add-frame :frame-b2)
+ (cthc/make-component :b2 :frame-b2)))
+
+(defn- find-copied-shape
+ ([original-shape page parent-id]
+ (find-copied-shape original-shape page parent-id false))
+ ([original-shape page parent-id ignore-label?]
+ ;; copied shape has the same name, is in the specified parent, and doesn't have a label
+ ;; for restored components we can ignore the label part
+ (->> (vals (:objects page))
+ (filter #(and (= (:name %) (:name original-shape))
+ (= (:parent-id %) parent-id)
+ (or ignore-label? (str/starts-with? (cthi/label (:id %)) " (cthf/sample-file :file1)
+ (ctho/add-frame :frame-red {:name "frame-red"})
+ (ctho/add-frame :frame-blue {:name "frame-blue"}))
+ store (ths/setup-store file)
+
+ ;; ==== Action
+ page (cthf/current-page file)
+ frame-red (cths/get-shape file :frame-red)
+ frame-blue (cths/get-shape file :frame-blue)
+ features #{}
+ version 67
+
+ pdata (thp/simulate-copy-shape #{(:id frame-blue)} (:objects page) {(:id file) file} page file features version)
+
+ events
+ [(dws/select-shape (:id frame-red))
+ (dw/paste-shapes pdata)]]
+
+ (ths/run-store
+ store done events
+ (fn [new-state]
+ (let [;; ==== Get
+ file' (ths/get-file-from-state new-state)
+ page' (cthf/current-page file')
+ frame-red' (cths/get-shape file' :frame-red)
+ frame-blue' (cths/get-shape file' :frame-blue)
+ copied-blue1' (find-copied-shape frame-blue' page' (:id frame-red'))]
+
+ ;; ==== Check
+ (t/is (= (:parent-id copied-blue1') (:id frame-red')))))))))
+
+(t/deftest copy-shape-to-component
+ "Coping a rect into a component results in a copy of the rect inside the component"
+ (t/async
+ done
+ (let [;; ==== Setup
+ file (-> (cthf/sample-file :file1)
+ (ctho/add-frame :frame-red {:name "frame-red"})
+ (cthc/make-component :red :frame-red)
+ (ctho/add-frame :frame-blue {:name "frame-blue"}))
+ store (ths/setup-store file)
+
+ ;; ==== Action
+ page (cthf/current-page file)
+ frame-red (cths/get-shape file :frame-red)
+ frame-blue (cths/get-shape file :frame-blue)
+ features #{}
+ version 67
+
+ pdata (thp/simulate-copy-shape #{(:id frame-blue)} (:objects page) {(:id file) file} page file features version)
+
+ events
+ [(dws/select-shape (:id frame-red))
+ (dw/paste-shapes pdata)]]
+
+ (ths/run-store
+ store done events
+ (fn [new-state]
+ (let [;; ==== Get
+ file' (ths/get-file-from-state new-state)
+ page' (cthf/current-page file')
+ frame-red' (cths/get-shape file' :frame-red)
+ frame-blue' (cths/get-shape file' :frame-blue)
+ copied-blue1' (find-copied-shape frame-blue' page' (:id frame-red'))]
+
+ ;; ==== Check
+ (t/is (= (:parent-id copied-blue1') (:id frame-red')))))))))
+
+(t/deftest copy-component-to-frame
+ "Coping a component c1 into a frame results in a copy of c1 inside the frame"
+ (t/async
+ done
+ (let [;; ==== Setup
+ file (-> (cthf/sample-file :file1)
+ (ctho/add-frame :frame-red {:name "frame-red"})
+ (ctho/add-frame :frame-blue {:name "frame-blue"})
+ (cthc/make-component :blue :frame-blue))
+ store (ths/setup-store file)
+
+ ;; ==== Action
+ page (cthf/current-page file)
+ frame-red (cths/get-shape file :frame-red)
+ frame-blue (cths/get-shape file :frame-blue)
+ features #{}
+ version 67
+
+ pdata (thp/simulate-copy-shape #{(:id frame-blue)} (:objects page) {(:id file) file} page file features version)
+
+ events
+ [(dws/select-shape (:id frame-red))
+ (dw/paste-shapes pdata)]]
+
+ (ths/run-store
+ store done events
+ (fn [new-state]
+ (let [;; ==== Get
+ file' (ths/get-file-from-state new-state)
+ page' (cthf/current-page file')
+ frame-red' (cths/get-shape file' :frame-red)
+ frame-blue' (cths/get-shape file' :frame-blue)
+ copied-blue1' (find-copied-shape frame-blue' page' (:id frame-red'))]
+
+ ;; ==== Check
+ (t/is (= (:parent-id copied-blue1') (:id frame-red')))))))))
+
+(t/deftest copy-component-to-component
+ "Coping a component c1 into the main of a component c2 results in a copy of c1 inside c2"
+ (t/async
+ done
+ (let [;; ==== Setup
+ file (-> (cthf/sample-file :file1)
+ (ctho/add-frame :frame-red {:name "frame-red"})
+ (cthc/make-component :red :frame-red)
+ (ctho/add-frame :frame-blue {:name "frame-blue"})
+ (cthc/make-component :blue :frame-blue))
+ store (ths/setup-store file)
+
+ ;; ==== Action
+ page (cthf/current-page file)
+ frame-red (cths/get-shape file :frame-red)
+ frame-blue (cths/get-shape file :frame-blue)
+ features #{}
+ version 67
+
+ pdata (thp/simulate-copy-shape #{(:id frame-blue)} (:objects page) {(:id file) file} page file features version)
+
+ events
+ [(dws/select-shape (:id frame-red))
+ (dw/paste-shapes pdata)]]
+
+ (ths/run-store
+ store done events
+ (fn [new-state]
+ (let [;; ==== Get
+ file' (ths/get-file-from-state new-state)
+ page' (cthf/current-page file')
+ frame-red' (cths/get-shape file' :frame-red)
+ frame-blue' (cths/get-shape file' :frame-blue)
+ copied-blue1' (find-copied-shape frame-blue' page' (:id frame-red'))]
+
+ ;; ==== Check
+ (t/is (not (ctk/main-instance? copied-blue1')))
+ (t/is (= (:parent-id copied-blue1') (:id frame-red')))))))))
+
+(t/deftest cut-paste-component-to-component
+ "Cutting a component c1 and pasting it into the main of a component c2 results in a restored main of C1 on root,
+ because its not allowed to have a main inside a main"
+ (t/async
+ done
+ (let [;; ==== Setup
+ file (-> (cthf/sample-file :file1)
+ (ctho/add-frame :frame-red {:name "frame-red"})
+ (cthc/make-component :red :frame-red)
+ (ctho/add-frame :frame-blue {:name "frame-blue"})
+ (cthc/make-component :blue :frame-blue))
+ store (ths/setup-store file)
+
+ ;; ==== Action
+ page (cthf/current-page file)
+ frame-red (cths/get-shape file :frame-red)
+ frame-blue (cths/get-shape file :frame-blue)
+ features #{}
+ version 67
+
+ pdata (thp/simulate-copy-shape #{(:id frame-blue)} (:objects page) {(:id file) file} page file features version)
+
+ events
+ [(dws/select-shape (:id frame-blue))
+ (dw/delete-selected)
+ (dws/select-shape (:id frame-red))
+ (dw/paste-shapes pdata)]]
+
+ (ths/run-store
+ store done events
+ (fn [new-state]
+ (let [;; ==== Get
+ file' (ths/get-file-from-state new-state)
+ page' (cthf/current-page file')
+ frame-red' (cths/get-shape file' :frame-red)
+ frame-blue' (cths/get-shape file' :frame-blue)
+ copied-blue1' (find-copied-shape frame-blue' page' (:id frame-red'))
+ copied-blue2' (find-copied-shape frame-blue' page' uuid/zero true)]
+
+ ;; ==== Check
+ (t/is (nil? copied-blue1'))
+ (t/is (ctk/main-instance? copied-blue2'))
+ (t/is (= (:parent-id copied-blue2') uuid/zero))))))))
+
+(t/deftest copy-variant-container-into-component
+ "Coping a variant container into the main of a component results in a new variant-container on root,
+ because its not allowed to have a variant container inside a main"
+ (t/async
+ done
+ (let [;; ==== Setup
+ file (-> (cthf/sample-file :file1)
+ (ctho/add-frame :frame-red {:name "frame-red"})
+ (cthc/make-component :red :frame-red)
+ (thv/add-variant :v01 :c01 :m01 :c02 :m02))
+
+ store (ths/setup-store file)
+
+ ;; ==== Action
+ page (cthf/current-page file)
+ root (cths/get-shape-by-id file uuid/zero)
+ frame-red (cths/get-shape file :frame-red)
+ v01 (cths/get-shape file :v01)
+
+ features #{}
+ version 67
+
+ pdata (thp/simulate-copy-shape #{(:id v01)} (:objects page) {(:id file) file} page file features version)
+
+ events
+ [(dws/select-shape (:id frame-red))
+ (dw/paste-shapes pdata)]]
+
+ (ths/run-store
+ store done events
+ (fn [new-state]
+ (let [;; ==== Get
+ file' (ths/get-file-from-state new-state)
+ root' (cths/get-shape-by-id file' uuid/zero)
+ frame-red' (cths/get-shape file' :frame-red)
+ root-children' (->> (:shapes root')
+ (map #(cths/get-shape-by-id file' %)))]
+
+ ;; ==== Check
+ ;; The main shape of the component have no children
+ (t/is (= 0 (count (:shapes frame-red'))))
+ ;; Root had two children, now have 3
+ (t/is (= 2 (count (:shapes root))))
+ (t/is (= 3 (count (:shapes root'))))
+ ;; Two of the children of root are variant-containers
+ (t/is (= 2 (count (filter ctk/is-variant-container? root-children'))))))))))
+
+(t/deftest cut-paste-variant-container-into-component
+ "Cuting and pasting a variant container into the main of a component results in a new variant-container on root,
+ because its not allowed to have a variant container inside a main"
+ (t/async
+ done
+ (let [;; ==== Setup
+ file (-> (cthf/sample-file :file1)
+ (ctho/add-frame :frame-red {:name "frame-red"})
+ (cthc/make-component :red :frame-red)
+ (thv/add-variant :v01 :c01 :m01 :c02 :m02))
+
+ store (ths/setup-store file)
+
+ ;; ==== Action
+ page (cthf/current-page file)
+ root (cths/get-shape-by-id file uuid/zero)
+ frame-red (cths/get-shape file :frame-red)
+ v01 (cths/get-shape file :v01)
+
+ features #{}
+ version 67
+
+ pdata (thp/simulate-copy-shape #{(:id v01)} (:objects page) {(:id file) file} page file features version)
+
+ events
+ [(dws/select-shape (:id v01))
+ (dw/delete-selected)
+ (dws/select-shape (:id frame-red))
+ (dw/paste-shapes pdata)]]
+
+ (ths/run-store
+ store done events
+ (fn [new-state]
+ (let [;; ==== Get
+ file' (ths/get-file-from-state new-state)
+ root' (cths/get-shape-by-id file' uuid/zero)
+ frame-red' (cths/get-shape file' :frame-red)
+ root-children' (->> (:shapes root')
+ (map #(cths/get-shape-by-id file' %)))]
+
+ ;; ==== Check
+ ;; The main shape of the component have no children
+ (t/is (= 0 (count (:shapes frame-red'))))
+ ;; Root had two children, now it still have two (because we have cutted one of them, and then created a new one)
+ (t/is (= 2 (count (:shapes root))))
+ (t/is (= 2 (count (:shapes root'))))
+ ;; One of the children of root is a variant-container
+ (t/is (= 1 (count (filter ctk/is-variant-container? root-children'))))))))))
+
+(t/deftest copy-variant-into-different-variant-container
+ "Coping a variant into a different variant-container creates a new variant inside that container"
+ (t/async
+ done
+ (let [;; ==== Setup
+ file (-> (cthf/sample-file :file1)
+ (thv/add-variant :v01 :c01 :m01 :c02 :m02)
+ (thv/add-variant :v02 :c03 :m03 :c04 :m04))
+
+ store (ths/setup-store file)
+
+ ;; ==== Action
+ page (cthf/current-page file)
+ m01 (cths/get-shape file :m01)
+ v02 (cths/get-shape file :v02)
+ components (cthc/get-components file)
+
+ features #{}
+ version 67
+
+ pdata (thp/simulate-copy-shape #{(:id m01)} (:objects page) {(:id file) file} page file features version)
+
+ events
+ [(dws/select-shape (:id v02))
+ (dw/paste-shapes pdata)]]
+
+ (ths/run-store
+ store done events
+ (fn [new-state]
+ (let [;; ==== Get
+ file' (ths/get-file-from-state new-state)
+ v02' (cths/get-shape file' :v02)
+ components' (cthc/get-components file')]
+
+ ;; ==== Check
+ ;; v02 had two children, now it have 3
+ (t/is (= 2 (count (:shapes v02))))
+ (t/is (= 3 (count (:shapes v02'))))
+
+ ;;There was 4 components, now there are 5
+ (t/is (= 4 (count components)))
+ (t/is (= 5 (count components')))))))))
+
+(t/deftest copy-variant-into-variant-another-container
+ "Coping a variant into a variant of a different variant-container creates a copy of the variant inside"
+ (t/async
+ done
+ (let [;; ==== Setup
+ file (-> (cthf/sample-file :file1)
+ (thv/add-variant :v01 :c01 :m01 :c02 :m02)
+ (thv/add-variant :v02 :c03 :m03 :c04 :m04))
+
+ store (ths/setup-store file)
+
+ ;; ==== Action
+ page (cthf/current-page file)
+ m01 (cths/get-shape file :m01)
+ v02 (cths/get-shape file :v02)
+ m03 (cths/get-shape file :m03)
+ components (cthc/get-components file)
+
+ features #{}
+ version 67
+
+ pdata (thp/simulate-copy-shape #{(:id m01)} (:objects page) {(:id file) file} page file features version)
+
+ events
+ [(dws/select-shape (:id m03))
+ (dw/paste-shapes pdata)]]
+
+ (ths/run-store
+ store done events
+ (fn [new-state]
+ (let [;; ==== Get
+ file' (ths/get-file-from-state new-state)
+ v02' (cths/get-shape file' :v02)
+ m03' (cths/get-shape file' :m03)
+ components' (cthc/get-components file')]
+
+ ;; ==== Check
+ ;; v02 had two children, now it have still 2
+ (t/is (= 2 (count (:shapes v02))))
+ (t/is (= 2 (count (:shapes v02'))))
+
+ ;; m03 had no children, now it have 1
+ (t/is (= 0 (count (:shapes m03))))
+ (t/is (= 1 (count (:shapes m03'))))
+
+ ;;There was 4 components, now there is still 4
+ (t/is (= 4 (count components)))
+ (t/is (= 4 (count components')))))))))
+
+(t/deftest copy-variant-into-its-variant-container
+ "Coping a variant into its own variant-container creates a new variant inside that container"
+ (t/async
+ done
+ (let [;; ==== Setup
+ file (-> (cthf/sample-file :file1)
+ (thv/add-variant :v01 :c01 :m01 :c02 :m02))
+
+ store (ths/setup-store file)
+
+ ;; ==== Action
+ page (cthf/current-page file)
+ m01 (cths/get-shape file :m01)
+ v01 (cths/get-shape file :v01)
+ components (cthc/get-components file)
+
+ features #{}
+ version 67
+
+ pdata (thp/simulate-copy-shape #{(:id m01)} (:objects page) {(:id file) file} page file features version)
+
+ events
+ [(dws/select-shape (:id v01))
+ (dw/paste-shapes pdata)]]
+
+ (ths/run-store
+ store done events
+ (fn [new-state]
+ (let [;; ==== Get
+ file' (ths/get-file-from-state new-state)
+ v01' (cths/get-shape file' :v01)
+ components' (cthc/get-components file')]
+
+ ;; ==== Check
+ ;; v01 had two children, now it have 3
+ (t/is (= 2 (count (:shapes v01))))
+ (t/is (= 3 (count (:shapes v01'))))
+
+ ;;There was 2 components, now there are 3
+ (t/is (= 2 (count components)))
+ (t/is (= 3 (count components')))))))))
+
+(t/deftest copy-variant-into-itself
+ "Coping a variant into itself creates a new variant inside its container"
+ (t/async
+ done
+ (let [;; ==== Setup
+ file (-> (cthf/sample-file :file1)
+ (thv/add-variant :v01 :c01 :m01 :c02 :m02))
+
+ store (ths/setup-store file)
+
+ ;; ==== Action
+ page (cthf/current-page file)
+ m01 (cths/get-shape file :m01)
+ v01 (cths/get-shape file :v01)
+ components (cthc/get-components file)
+
+ features #{}
+ version 67
+
+ pdata (thp/simulate-copy-shape #{(:id m01)} (:objects page) {(:id file) file} page file features version)
+
+ events
+ [(dws/select-shape (:id m01))
+ (dw/paste-shapes pdata)]]
+
+ (ths/run-store
+ store done events
+ (fn [new-state]
+ (let [;; ==== Get
+ file' (ths/get-file-from-state new-state)
+ v01' (cths/get-shape file' :v01)
+ components' (cthc/get-components file')]
+
+ ;; ==== Check
+ ;; v01 had two children, now it have 3
+ (t/is (= 2 (count (:shapes v01))))
+ (t/is (= 3 (count (:shapes v01'))))
+
+ ;;There was 2 components, now there are 3
+ (t/is (= 2 (count components)))
+ (t/is (= 3 (count components')))))))))
+
+(t/deftest copy-variant-into-a-brother
+ "Coping a variant into a brother variant creates a new variant inside its container"
+ (t/async
+ done
+ (let [;; ==== Setup
+ file (-> (cthf/sample-file :file1)
+ (thv/add-variant :v01 :c01 :m01 :c02 :m02))
+
+ store (ths/setup-store file)
+
+ ;; ==== Action
+ page (cthf/current-page file)
+ m01 (cths/get-shape file :m01)
+ m02 (cths/get-shape file :m02)
+ v01 (cths/get-shape file :v01)
+ components (cthc/get-components file)
+
+ features #{}
+ version 67
+
+ pdata (thp/simulate-copy-shape #{(:id m01)} (:objects page) {(:id file) file} page file features version)
+
+ events
+ [(dws/select-shape (:id m02))
+ (dw/paste-shapes pdata)]]
+
+ (ths/run-store
+ store done events
+ (fn [new-state]
+ (let [;; ==== Get
+ file' (ths/get-file-from-state new-state)
+ v01' (cths/get-shape file' :v01)
+ components' (cthc/get-components file')]
+
+ ;; ==== Check
+ ;; v01 had two children, now it have 3
+ (t/is (= 2 (count (:shapes v01))))
+ (t/is (= 3 (count (:shapes v01'))))
+
+ ;;There was 2 components, now there are 3
+ (t/is (= 2 (count components)))
+ (t/is (= 3 (count components')))))))))
+
+(t/deftest copy-component-into-a-variant-container
+ "Coping a component into a variant-container creates a new variant inside that container"
+ (t/async
+ done
+ (let [;; ==== Setup
+ file (-> (cthf/sample-file :file1)
+ (ctho/add-frame :frame-red {:name "frame-red"})
+ (cthc/make-component :red :frame-red)
+ (thv/add-variant :v01 :c01 :m01 :c02 :m02))
+
+ store (ths/setup-store file)
+
+ ;; ==== Action
+ page (cthf/current-page file)
+ frame-red (cths/get-shape file :frame-red)
+ v01 (cths/get-shape file :v01)
+ components (cthc/get-components file)
+
+ features #{}
+ version 67
+
+ pdata (thp/simulate-copy-shape #{(:id frame-red)} (:objects page) {(:id file) file} page file features version)
+
+ events
+ [(dws/select-shape (:id v01))
+ (dw/paste-shapes pdata)]]
+
+ (ths/run-store
+ store done events
+ (fn [new-state]
+ (let [;; ==== Get
+ file' (ths/get-file-from-state new-state)
+ v01' (cths/get-shape file' :v01)
+ components' (cthc/get-components file')]
+
+ ;; ==== Check
+ ;; v01 had two children, now it have 3
+ (t/is (= 2 (count (:shapes v01))))
+ (t/is (= 3 (count (:shapes v01'))))
+
+ ;;There was 3 components, now there are 4
+ (t/is (= 3 (count components)))
+ (t/is (= 4 (count components')))))))))
+
+(t/deftest copy-component-into-a-variant
+ "Coping a component into a variant creates a copy of the component inside the variant"
+ (t/async
+ done
+ (let [;; ==== Setup
+ file (-> (cthf/sample-file :file1)
+ (ctho/add-frame :frame-red {:name "frame-red"})
+ (cthc/make-component :red :frame-red)
+ (thv/add-variant :v01 :c01 :m01 :c02 :m02))
+
+ store (ths/setup-store file)
+
+ ;; ==== Action
+ page (cthf/current-page file)
+ frame-red (cths/get-shape file :frame-red)
+ v01 (cths/get-shape file :v01)
+ m01 (cths/get-shape file :m01)
+ components (cthc/get-components file)
+
+ features #{}
+ version 67
+
+ pdata (thp/simulate-copy-shape #{(:id frame-red)} (:objects page) {(:id file) file} page file features version)
+
+ events
+ [(dws/select-shape (:id m01))
+ (dw/paste-shapes pdata)]]
+
+ (ths/run-store
+ store done events
+ (fn [new-state]
+ (let [;; ==== Get
+ file' (ths/get-file-from-state new-state)
+ v01' (cths/get-shape file' :v01)
+ m01' (cths/get-shape file' :m01)
+ components' (cthc/get-components file')]
+
+ ;; ==== Check
+ ;; v01 had two children, now it have still 2
+ (t/is (= 2 (count (:shapes v01))))
+ (t/is (= 2 (count (:shapes v01'))))
+
+ ;; m01 had no children, now it have 1
+ (t/is (= 0 (count (:shapes m01))))
+ (t/is (= 1 (count (:shapes m01'))))
+
+ ;;There was 3 components, now there are still 3
+ (t/is (= 3 (count components)))
+ (t/is (= 3 (count components')))))))))
\ No newline at end of file
diff --git a/frontend/test/frontend_tests/runner.cljs b/frontend/test/frontend_tests/runner.cljs
index 9c8db535e6..11dc224dfa 100644
--- a/frontend/test/frontend_tests/runner.cljs
+++ b/frontend/test/frontend_tests/runner.cljs
@@ -9,6 +9,7 @@
[frontend-tests.logic.copying-and-duplicating-test]
[frontend-tests.logic.frame-guides-test]
[frontend-tests.logic.groups-test]
+ [frontend-tests.logic.pasting-in-containers-test]
[frontend-tests.plugins.context-shapes-test]
[frontend-tests.tokens.import-export-test]
[frontend-tests.tokens.logic.token-actions-test]
@@ -37,6 +38,7 @@
'frontend-tests.logic.copying-and-duplicating-test
'frontend-tests.logic.frame-guides-test
'frontend-tests.logic.groups-test
+ 'frontend-tests.logic.pasting-in-containers-test
'frontend-tests.plugins.context-shapes-test
'frontend-tests.tokens.import-export-test
'frontend-tests.tokens.logic.token-actions-test
diff --git a/frontend/test/frontend_tests/tokens/context_menu_test.cljs b/frontend/test/frontend_tests/tokens/context_menu_test.cljs
index 5341bf52b8..5037b69043 100644
--- a/frontend/test/frontend_tests/tokens/context_menu_test.cljs
+++ b/frontend/test/frontend_tests/tokens/context_menu_test.cljs
@@ -2,6 +2,7 @@
(:require
[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.test-helpers.tokens :as tht]
[app.common.types.tokens-lib :as ctob]
@@ -16,38 +17,38 @@
(ctob/add-theme (ctob/make-token-theme :name "test-theme"
:sets #{"test-token-set"}))
(ctob/set-active-themes #{"/test-theme"})
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :name "token-radius"
- :type :border-radius
- :value 10))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :name "token-color"
- :type :color
- :value "red"))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :name "token-spacing"
- :type :spacing
- :value 10))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :name "token-sizing"
- :type :sizing
- :value 10))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :name "token-rotation"
- :type :rotation
- :value 10))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :name "token-opacity"
- :type :opacity
- :value 10))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :name "token-dimensions"
- :type :dimensions
- :value 10))
- (ctob/add-token-in-set "test-token-set"
- (ctob/make-token :name "token-number"
- :type :number
- :value 10))))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :name "token-radius"
+ :type :border-radius
+ :value 10))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :name "token-color"
+ :type :color
+ :value "red"))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :name "token-spacing"
+ :type :spacing
+ :value 10))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :name "token-sizing"
+ :type :sizing
+ :value 10))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :name "token-rotation"
+ :type :rotation
+ :value 10))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :name "token-opacity"
+ :type :opacity
+ :value 10))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :name "token-dimensions"
+ :type :dimensions
+ :value 10))
+ (ctob/add-token (thi/id :test-token-set)
+ (ctob/make-token :name "token-number"
+ :type :number
+ :value 10))))
;; app.main.data.workspace.tokens.application/generic-attributes
(tho/add-group :group1)
;; app.main.data.workspace.tokens.application/rect-attributes
diff --git a/frontend/test/frontend_tests/tokens/import_export_test.cljs b/frontend/test/frontend_tests/tokens/import_export_test.cljs
index c0482d43f7..362b92e5ae 100644
--- a/frontend/test/frontend_tests/tokens/import_export_test.cljs
+++ b/frontend/test/frontend_tests/tokens/import_export_test.cljs
@@ -24,8 +24,8 @@
(dwti/import-file-stream "core")
(rx/subs! (fn [tokens-lib]
(t/is (instance? ctob/TokensLib tokens-lib))
- (t/is (= "red" (-> (ctob/get-set tokens-lib "core")
- (ctob/token-by-name "color")
+ (t/is (= "red" (-> tokens-lib
+ (ctob/get-token-by-name "core" "color")
(:value))))
(done))))))))
diff --git a/frontend/test/frontend_tests/tokens/logic/token_actions_test.cljs b/frontend/test/frontend_tests/tokens/logic/token_actions_test.cljs
index 9a694dd33c..3f7c83007d 100644
--- a/frontend/test/frontend_tests/tokens/logic/token_actions_test.cljs
+++ b/frontend/test/frontend_tests/tokens/logic/token_actions_test.cljs
@@ -47,9 +47,12 @@
(-> (ctob/make-tokens-lib)
(ctob/add-theme (ctob/make-token-theme :name "Theme A" :sets #{"Set A"}))
(ctob/set-active-themes #{"/Theme A"})
- (ctob/add-set (ctob/make-token-set :name "Set A"))
- (ctob/add-token-in-set "Set A" (ctob/make-token border-radius-token))
- (ctob/add-token-in-set "Set A" (ctob/make-token reference-border-radius-token))))))
+ (ctob/add-set (ctob/make-token-set :id (cthi/new-id! :set-a)
+ :name "Set A"))
+ (ctob/add-token (cthi/id :set-a)
+ (ctob/make-token border-radius-token))
+ (ctob/add-token (cthi/id :set-a)
+ (ctob/make-token reference-border-radius-token))))))
(t/deftest test-apply-token
(t/testing "applies token to shape and updates shape attributes to resolved value"
@@ -190,8 +193,10 @@
file (-> (setup-file-with-tokens)
(update-in [:data :tokens-lib]
#(-> %
- (ctob/add-token-in-set "Set A" (ctob/make-token color-token))
- (ctob/add-token-in-set "Set A" (ctob/make-token color-alpha-token)))))
+ (ctob/add-token (cthi/id :set-a)
+ (ctob/make-token color-token))
+ (ctob/add-token (cthi/id :set-a)
+ (ctob/make-token color-alpha-token)))))
store (ths/setup-store file)
rect-1 (cths/get-shape file :rect-1)
rect-2 (cths/get-shape file :rect-2)
@@ -248,7 +253,8 @@
:type :dimensions}
file (-> (setup-file-with-tokens)
(update-in [:data :tokens-lib]
- #(ctob/add-token-in-set % "Set A" (ctob/make-token dimensions-token))))
+ #(ctob/add-token % (cthi/id :set-a)
+ (ctob/make-token dimensions-token))))
store (ths/setup-store file)
rect-1 (cths/get-shape file :rect-1)
events [(dwta/apply-token {:shape-ids [(:id rect-1)]
@@ -280,7 +286,8 @@
(ctho/add-frame :frame-1)
(ctho/add-frame :frame-2 {:layout :grid})
(update-in [:data :tokens-lib]
- #(ctob/add-token-in-set % "Set A" (ctob/make-token spacing-token))))
+ #(ctob/add-token % (cthi/id :set-a)
+ (ctob/make-token spacing-token))))
store (ths/setup-store file)
frame-1 (cths/get-shape file :frame-1)
frame-2 (cths/get-shape file :frame-2)
@@ -319,7 +326,8 @@
:type :sizing}
file (-> (setup-file-with-tokens)
(update-in [:data :tokens-lib]
- #(ctob/add-token-in-set % "Set A" (ctob/make-token sizing-token))))
+ #(ctob/add-token % (cthi/id :set-a)
+ (ctob/make-token sizing-token))))
store (ths/setup-store file)
rect-1 (cths/get-shape file :rect-1)
events [(dwta/apply-token {:shape-ids [(:id rect-1)]
@@ -356,9 +364,12 @@
file (-> (setup-file-with-tokens)
(update-in [:data :tokens-lib]
#(-> %
- (ctob/add-token-in-set "Set A" (ctob/make-token opacity-float))
- (ctob/add-token-in-set "Set A" (ctob/make-token opacity-percent))
- (ctob/add-token-in-set "Set A" (ctob/make-token opacity-invalid)))))
+ (ctob/add-token (cthi/id :set-a)
+ (ctob/make-token opacity-float))
+ (ctob/add-token (cthi/id :set-a)
+ (ctob/make-token opacity-percent))
+ (ctob/add-token (cthi/id :set-a)
+ (ctob/make-token opacity-invalid)))))
store (ths/setup-store file)
rect-1 (cths/get-shape file :rect-1)
rect-2 (cths/get-shape file :rect-2)
@@ -404,7 +415,8 @@
:type :rotation}
file (-> (setup-file-with-tokens)
(update-in [:data :tokens-lib]
- #(ctob/add-token-in-set % "Set A" (ctob/make-token rotation-token))))
+ #(ctob/add-token % (cthi/id :set-a)
+ (ctob/make-token rotation-token))))
store (ths/setup-store file)
rect-1 (cths/get-shape file :rect-1)
events [(dwta/apply-token {:shape-ids [(:id rect-1)]
@@ -434,7 +446,8 @@
:stroke-opacity 1,
:stroke-width 5}]}})
(update-in [:data :tokens-lib]
- #(ctob/add-token-in-set % "Set A" (ctob/make-token stroke-width-token))))
+ #(ctob/add-token % (cthi/id :set-a)
+ (ctob/make-token stroke-width-token))))
store (ths/setup-store file)
rect-with-stroke (cths/get-shape file :rect-1)
rect-without-stroke (cths/get-shape file :rect-2)
@@ -465,7 +478,8 @@
:type :font-size}
file (-> (setup-file-with-tokens)
(update-in [:data :tokens-lib]
- #(ctob/add-token-in-set % "Set A" (ctob/make-token font-size-token))))
+ #(ctob/add-token % (cthi/id :set-a)
+ (ctob/make-token font-size-token))))
store (ths/setup-store file)
text-1 (cths/get-shape file :text-1)
events [(dwta/apply-token {:shape-ids [(:id text-1)]
@@ -499,7 +513,8 @@
:type :number}
file (-> (setup-file-with-tokens)
(update-in [:data :tokens-lib]
- #(ctob/add-token-in-set % "Set A" (ctob/make-token line-height-token))))
+ #(ctob/add-token % (cthi/id :set-a)
+ (ctob/make-token line-height-token))))
store (ths/setup-store file)
text-1 (cths/get-shape file :text-1)
events [(dwta/apply-token {:shape-ids [(:id text-1)]
@@ -533,7 +548,8 @@
:type :letter-spacing}
file (-> (setup-file-with-tokens)
(update-in [:data :tokens-lib]
- #(ctob/add-token-in-set % "Set A" (ctob/make-token letter-spacing-token))))
+ #(ctob/add-token % (cthi/id :set-a)
+ (ctob/make-token letter-spacing-token))))
store (ths/setup-store file)
text-1 (cths/get-shape file :text-1)
events [(dwta/apply-token {:shape-ids [(:id text-1)]
@@ -567,7 +583,8 @@
:type :font-family}
file (-> (setup-file-with-tokens)
(update-in [:data :tokens-lib]
- #(ctob/add-token-in-set % "Set A" (ctob/make-token font-family-token))))
+ #(ctob/add-token % (cthi/id :set-a)
+ (ctob/make-token font-family-token))))
store (ths/setup-store file)
text-1 (cths/get-shape file :text-1)
events [(dwta/apply-token {:shape-ids [(:id text-1)]
@@ -601,7 +618,8 @@
:type :text-case}
file (-> (setup-file-with-tokens)
(update-in [:data :tokens-lib]
- #(ctob/add-token-in-set % "Set A" (ctob/make-token text-case-token))))
+ #(ctob/add-token % (cthi/id :set-a)
+ (ctob/make-token text-case-token))))
store (ths/setup-store file)
text-1 (cths/get-shape file :text-1)
events [(dwta/apply-token {:shape-ids [(:id text-1)]
@@ -635,7 +653,8 @@
:type :text-decoration}
file (-> (setup-file-with-tokens)
(update-in [:data :tokens-lib]
- #(ctob/add-token-in-set % "Set A" (ctob/make-token text-decoration-token))))
+ #(ctob/add-token % (cthi/id :set-a)
+ (ctob/make-token text-decoration-token))))
store (ths/setup-store file)
text-1 (cths/get-shape file :text-1)
events [(dwta/apply-token {:shape-ids [(:id text-1)]
@@ -669,7 +688,8 @@
:type :font-weight}
file (-> (setup-file-with-tokens)
(update-in [:data :tokens-lib]
- #(ctob/add-token-in-set % "Set A" (ctob/make-token font-weight-token))))
+ #(ctob/add-token % (cthi/id :set-a)
+ (ctob/make-token font-weight-token))))
store (ths/setup-store file)
text-1 (cths/get-shape file :text-1)
events [(dwta/apply-token {:shape-ids [(:id text-1)]
@@ -795,7 +815,8 @@
{:frame-params {:layout :grid}})
(ctho/add-rect :rect-regular)
(update-in [:data :tokens-lib]
- #(ctob/add-token-in-set % "Set A" (ctob/make-token spacing-token))))
+ #(ctob/add-token % (cthi/id :set-a)
+ (ctob/make-token spacing-token))))
store (ths/setup-store file)
frame-layout (cths/get-shape file :frame-layout)
rect-in-layout (cths/get-shape file :rect-in-layout)
@@ -838,7 +859,8 @@
file (setup-file-with-tokens)
file (-> file
(update-in [:data :tokens-lib]
- #(ctob/add-token-in-set % "Set A" (ctob/make-token color-token)))
+ #(ctob/add-token % (cthi/id :set-a)
+ (ctob/make-token color-token)))
(cths/add-sample-library-color :color1 {:name "Test color"
:color "#abcdef"})
(cths/update-shape :rect-1 :fills
@@ -874,6 +896,7 @@
:value {:font-size "24px"
:font-weight "bold"
:font-family [(:font-id txt/default-text-attrs) "Arial" "sans-serif"]
+ :line-height "24px"
:letter-spacing "2"
:text-case "uppercase"
:text-decoration "underline"}
@@ -881,9 +904,9 @@
file (-> (setup-file-with-tokens)
(update-in [:data :tokens-lib]
#(-> %
- (ctob/add-token-in-set "Set A" (ctob/make-token font-size-token))
- (ctob/add-token-in-set "Set A" (ctob/make-token font-family-token))
- (ctob/add-token-in-set "Set A" (ctob/make-token typography-token)))))
+ (ctob/add-token (cthi/id :set-a) (ctob/make-token font-size-token))
+ (ctob/add-token (cthi/id :set-a) (ctob/make-token font-family-token))
+ (ctob/add-token (cthi/id :set-a) (ctob/make-token typography-token)))))
store (ths/setup-store file)
text-1 (cths/get-shape file :text-1)
events [(dwta/apply-token {:shape-ids [(:id text-1)]
@@ -895,7 +918,6 @@
(fn [new-state]
(let [file' (ths/get-file-from-state new-state)
text-1' (cths/get-shape file' :text-1)
- text-1' (def text-1' text-1')
style-text-blocks (->> (:content text-1')
(txt/content->text+styles)
(remove (fn [[_ text]] (str/empty? (str/trim text))))
@@ -909,6 +931,7 @@
(t/is (= (:font-size style-text-blocks) "24"))
(t/is (= (:font-weight style-text-blocks) "700"))
+ (t/is (= (:line-height style-text-blocks) 1))
(t/is (= (:font-family style-text-blocks) "sourcesanspro"))
(t/is (= (:letter-spacing style-text-blocks) "2"))
(t/is (= (:text-transform style-text-blocks) "uppercase"))
@@ -931,9 +954,9 @@
file (-> (setup-file-with-tokens)
(update-in [:data :tokens-lib]
#(-> %
- (ctob/add-token-in-set "Set A" (ctob/make-token font-size-token))
- (ctob/add-token-in-set "Set A" (ctob/make-token font-family-token))
- (ctob/add-token-in-set "Set A" (ctob/make-token typography-token)))))
+ (ctob/add-token (cthi/id :set-a) (ctob/make-token font-size-token))
+ (ctob/add-token (cthi/id :set-a) (ctob/make-token font-family-token))
+ (ctob/add-token (cthi/id :set-a) (ctob/make-token typography-token)))))
store (ths/setup-store file)
text-1 (cths/get-shape file :text-1)
events [(dwta/apply-token {:shape-ids [(:id text-1)]
@@ -972,8 +995,8 @@
file (-> (setup-file-with-tokens)
(update-in [:data :tokens-lib]
#(-> %
- (ctob/add-token-in-set "Set A" (ctob/make-token font-size-token))
- (ctob/add-token-in-set "Set A" (ctob/make-token typography-token)))))
+ (ctob/add-token (cthi/id :set-a) (ctob/make-token font-size-token))
+ (ctob/add-token (cthi/id :set-a) (ctob/make-token typography-token)))))
store (ths/setup-store file)
text-1 (cths/get-shape file :text-1)
events [(dwta/apply-token {:shape-ids [(:id text-1)]
@@ -1006,8 +1029,8 @@
file (-> (setup-file-with-tokens)
(update-in [:data :tokens-lib]
#(-> %
- (ctob/add-token-in-set "Set A" (ctob/make-token font-size-token))
- (ctob/add-token-in-set "Set A" (ctob/make-token typography-token)))))
+ (ctob/add-token (cthi/id :set-a) (ctob/make-token font-size-token))
+ (ctob/add-token (cthi/id :set-a) (ctob/make-token typography-token)))))
store (ths/setup-store file)
text-1 (cths/get-shape file :text-1)
events [(dwta/apply-token {:shape-ids [(:id text-1)]
@@ -1043,9 +1066,12 @@
file (-> (setup-file-with-tokens)
(update-in [:data :tokens-lib]
#(-> %
- (ctob/add-token-in-set "Set A" (ctob/make-token font-size-token))
- (ctob/add-token-in-set "Set A" (ctob/make-token line-height-token))
- (ctob/add-token-in-set "Set A" (ctob/make-token letter-spacing-token))))
+ (ctob/add-token (cthi/id :set-a)
+ (ctob/make-token font-size-token))
+ (ctob/add-token (cthi/id :set-a)
+ (ctob/make-token line-height-token))
+ (ctob/add-token (cthi/id :set-a)
+ (ctob/make-token letter-spacing-token))))
(cths/add-sample-typography :typography1 {:name "Test typography"}))
content {:type "root"
:children [{:type "paragraph-set"
diff --git a/frontend/test/frontend_tests/tokens/logic/token_data_test.cljs b/frontend/test/frontend_tests/tokens/logic/token_data_test.cljs
index 0329d05f1f..3314d88d7c 100644
--- a/frontend/test/frontend_tests/tokens/logic/token_data_test.cljs
+++ b/frontend/test/frontend_tests/tokens/logic/token_data_test.cljs
@@ -7,7 +7,9 @@
(ns frontend-tests.tokens.logic.token-data-test
(:require
[app.common.test-helpers.files :as cthf]
+ [app.common.test-helpers.ids-map :as cthi]
[app.common.types.tokens-lib :as ctob]
+ [app.common.uuid :as uuid]
[app.main.data.workspace.tokens.library-edit :as dwtl]
[cljs.test :as t :include-macros true]
[frontend-tests.helpers.pages :as thp]
@@ -26,42 +28,97 @@
(-> (setup-file)
(assoc-in [:data :tokens-lib]
(-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "Set A"))))))
+ (ctob/add-set (ctob/make-token-set :id (cthi/new-id! :test-token-set)
+ :name "Set A"))))))
+
+(t/deftest add-set
+ (t/async
+ done
+ (let [file (setup-file-with-token-lib)
+ store (ths/setup-store file)
+ events [(dwtl/create-token-set "Set B")]]
+
+ (tohs/run-store-async
+ store done events
+ (fn [new-state]
+ (let [file' (ths/get-file-from-state new-state)
+ tokens-lib' (toht/get-tokens-lib file')
+ sets' (ctob/get-sets tokens-lib')
+ set-b' (ctob/get-set-by-name tokens-lib' "Set B")]
+
+ (t/testing "Token lib contains two sets"
+ (t/is (= (count sets') 2))
+ (t/is (some? set-b')))))))))
+
+(t/deftest rename-set
+ (t/async
+ done
+ (let [file (setup-file-with-token-lib)
+ store (ths/setup-store file)
+ tokens-lib (toht/get-tokens-lib file)
+ set-a (ctob/get-set-by-name tokens-lib "Set A")
+ events [(dwtl/update-token-set (ctob/rename set-a "Set A updated")
+ "Set A updated")]]
+
+ (tohs/run-store-async
+ store done events
+ (fn [new-state]
+ (let [file' (ths/get-file-from-state new-state)
+ tokens-lib' (toht/get-tokens-lib file')
+ sets' (ctob/get-sets tokens-lib')
+ set-a' (ctob/get-set-by-name tokens-lib' "Set A updated")]
+
+ (t/testing "Set has been renamed"
+ (t/is (= (count sets') 1))
+ (t/is (some? set-a')))))))))
(t/deftest duplicate-set
(t/async
done
(let [file (setup-file-with-token-lib)
store (ths/setup-store file)
- events [(dwtl/duplicate-token-set "Set A" false)]]
+ events [(dwtl/duplicate-token-set (cthi/id :test-token-set))]]
(tohs/run-store-async
store done events
(fn [new-state]
(let [file' (ths/get-file-from-state new-state)
token-lib (toht/get-tokens-lib file')
- sets (ctob/get-sets token-lib)
- set (ctob/get-set token-lib "Set A")]
+ sets (ctob/get-sets token-lib)]
(t/testing "Token lib contains two sets"
- (t/is (= (count sets) 2))
- (t/is (some? set)))))))))
+ (t/is (= (count sets) 2)))))))))
(t/deftest duplicate-non-exist-set
(t/async
done
(let [file (setup-file-with-token-lib)
store (ths/setup-store file)
- events [(dwtl/duplicate-token-set "Set B" false)]]
+ events [(dwtl/duplicate-token-set (uuid/next))]]
(tohs/run-store-async
store done events
(fn [new-state]
(let [file' (ths/get-file-from-state new-state)
token-lib (toht/get-tokens-lib file')
- sets (ctob/get-sets token-lib)
- set (ctob/get-set token-lib "Set B")]
+ sets (ctob/get-sets token-lib)]
(t/testing "Token lib contains one set"
- (t/is (= (count sets) 1))
- (t/is (nil? set)))))))))
\ No newline at end of file
+ (t/is (= (count sets) 1))))))))
+
+ (t/deftest delete-set
+ (t/async
+ done
+ (let [file (setup-file-with-token-lib)
+ store (ths/setup-store file)
+ events [(dwtl/delete-token-set (cthi/id :test-token-set))]]
+
+ (tohs/run-store-async
+ store done events
+ (fn [new-state]
+ (let [file' (ths/get-file-from-state new-state)
+ tokens-lib' (toht/get-tokens-lib file')
+ sets' (ctob/get-sets tokens-lib')]
+
+ (t/testing "Set has been deleted"
+ (t/is (= (count sets') 0))))))))))
\ No newline at end of file
diff --git a/frontend/test/frontend_tests/tokens/style_dictionary_test.cljs b/frontend/test/frontend_tests/tokens/style_dictionary_test.cljs
index 745321d79c..2341d7baf6 100644
--- a/frontend/test/frontend_tests/tokens/style_dictionary_test.cljs
+++ b/frontend/test/frontend_tests/tokens/style_dictionary_test.cljs
@@ -6,6 +6,7 @@
(ns frontend-tests.tokens.style-dictionary-test
(:require
+ [app.common.test-helpers.ids-map :as cthi]
[app.common.types.tokens-lib :as ctob]
[app.main.data.style-dictionary :as sd]
[beicon.v2.core :as rx]
@@ -16,22 +17,28 @@
done
(t/testing "resolves tokens using style-dictionary from a ids map"
(let [tokens (-> (ctob/make-tokens-lib)
- (ctob/add-set (ctob/make-token-set :name "core"))
- (ctob/add-token-in-set "core" (ctob/make-token {:name "borderRadius.sm"
- :value "12px"
- :type :border-radius}))
- (ctob/add-token-in-set "core" (ctob/make-token {:value "{borderRadius.sm} * 2"
- :name "borderRadius.md-with-dashes"
- :type :border-radius}))
- (ctob/add-token-in-set "core" (ctob/make-token {:name "borderRadius.large"
- :value "123456789012345"
- :type :border-radius}))
- (ctob/add-token-in-set "core" (ctob/make-token {:name "borderRadius.largePx"
- :value "123456789012345px"
- :type :border-radius}))
- (ctob/add-token-in-set "core" (ctob/make-token {:name "borderRadius.largeFn"
- :value "{borderRadius.sm} * 200000000"
- :type :border-radius}))
+ (ctob/add-set (ctob/make-token-set :id (cthi/new-id! :core-set)
+ :name "core"))
+ (ctob/add-token (cthi/id :core-set)
+ (ctob/make-token {:name "borderRadius.sm"
+ :value "12px"
+ :type :border-radius}))
+ (ctob/add-token (cthi/id :core-set)
+ (ctob/make-token {:value "{borderRadius.sm} * 2"
+ :name "borderRadius.md-with-dashes"
+ :type :border-radius}))
+ (ctob/add-token (cthi/id :core-set)
+ (ctob/make-token {:name "borderRadius.large"
+ :value "123456789012345"
+ :type :border-radius}))
+ (ctob/add-token (cthi/id :core-set)
+ (ctob/make-token {:name "borderRadius.largePx"
+ :value "123456789012345px"
+ :type :border-radius}))
+ (ctob/add-token (cthi/id :core-set)
+ (ctob/make-token {:name "borderRadius.largeFn"
+ :value "{borderRadius.sm} * 200000000"
+ :type :border-radius}))
(ctob/get-all-tokens))]
(-> (sd/resolve-tokens tokens)
(rx/sub!
diff --git a/frontend/test/frontend_tests/tokens/token_form_test.cljs b/frontend/test/frontend_tests/tokens/token_form_test.cljs
index d42a325b0f..61ac67d934 100644
--- a/frontend/test/frontend_tests/tokens/token_form_test.cljs
+++ b/frontend/test/frontend_tests/tokens/token_form_test.cljs
@@ -12,15 +12,15 @@
(t/deftest test-valid-token-name-schema
;; Allow regular namespace token names
- (t/is (some? (m/validate wtf/valid-token-name-schema "Foo")))
- (t/is (some? (m/validate wtf/valid-token-name-schema "foo")))
- (t/is (some? (m/validate wtf/valid-token-name-schema "FOO")))
- (t/is (some? (m/validate wtf/valid-token-name-schema "Foo.Bar.Baz")))
+ (t/is (some? (m/validate wtf/well-formed-token-name-schema "Foo")))
+ (t/is (some? (m/validate wtf/well-formed-token-name-schema "foo")))
+ (t/is (some? (m/validate wtf/well-formed-token-name-schema "FOO")))
+ (t/is (some? (m/validate wtf/well-formed-token-name-schema "Foo.Bar.Baz")))
;; Allow trailing tokens
- (t/is (nil? (m/validate wtf/valid-token-name-schema "Foo.Bar.Baz....")))
+ (t/is (nil? (m/validate wtf/well-formed-token-name-schema "Foo.Bar.Baz....")))
;; Disallow multiple separator dots
- (t/is (nil? (m/validate wtf/valid-token-name-schema "Foo..Bar.Baz")))
+ (t/is (nil? (m/validate wtf/well-formed-token-name-schema "Foo..Bar.Baz")))
;; Disallow any special characters
- (t/is (nil? (m/validate wtf/valid-token-name-schema "Hey Foo.Bar")))
- (t/is (nil? (m/validate wtf/valid-token-name-schema "Hey😈Foo.Bar")))
- (t/is (nil? (m/validate wtf/valid-token-name-schema "Hey%Foo.Bar"))))
+ (t/is (nil? (m/validate wtf/well-formed-token-name-schema "Hey Foo.Bar")))
+ (t/is (nil? (m/validate wtf/well-formed-token-name-schema "Hey😈Foo.Bar")))
+ (t/is (nil? (m/validate wtf/well-formed-token-name-schema "Hey%Foo.Bar"))))
diff --git a/frontend/text-editor/src/index.html b/frontend/text-editor/src/index.html
index b53cd0a7d5..0dd8d4bbd8 100644
--- a/frontend/text-editor/src/index.html
+++ b/frontend/text-editor/src/index.html
@@ -528,8 +528,16 @@
Module._init_shapes_pool(1);
setupInteraction(canvas);
+ canvas.addEventListener('click', (e) => {
+ console.log('click', e.type, e);
+ useShape(uuid);
+ const caretPosition = Module._get_caret_position_at(e.offsetX, e.offsetY);
+ console.log('caretPosition', caretPosition);
+ })
+
storeFonts(fonts)
+ console.log("text shape", uuid);
useShape(uuid);
Module._set_parent(0, 0, 0, 0);
Module._set_shape_type(5);
diff --git a/frontend/text-editor/src/wasm/lib.js b/frontend/text-editor/src/wasm/lib.js
index 76289e1c78..dc64c5951a 100644
--- a/frontend/text-editor/src/wasm/lib.js
+++ b/frontend/text-editor/src/wasm/lib.js
@@ -471,6 +471,7 @@ export function updateTextShape(root, fonts) {
Module._set_shape_text_content();
}
+ Module._update_shape_text_layout();
}
export function addTextShape(text, fonts) {
diff --git a/frontend/text-editor/vite.config.js b/frontend/text-editor/vite.config.js
index a6e7b4daf4..34d8e7cdfc 100644
--- a/frontend/text-editor/vite.config.js
+++ b/frontend/text-editor/vite.config.js
@@ -1,12 +1,61 @@
-import { resolve } from "node:path";
+import path from "node:path";
+import fs from 'node:fs/promises';
import { defineConfig } from "vite";
-import { coverageConfigDefaults } from "vitest/config"
+import { coverageConfigDefaults } from "vitest/config";
+
+async function waitFor(timeInMillis) {
+ return new Promise(resolve =>
+ setTimeout(_ => resolve(), timeInMillis)
+ );
+}
+
+const wasmWatcherPlugin = (options = {}) => {
+ return {
+ name: "vite-wasm-watcher-plugin",
+ configureServer(server) {
+ server.watcher.add("../resources/public/js/render_wasm.wasm")
+ server.watcher.add("../resources/public/js/render_wasm.js")
+ server.watcher.on("change", async (file) => {
+ if (file.includes("../resources/")) {
+ // If we copy the files immediately, we end
+ // up with an empty .js file (I don't know why).
+ await waitFor(100)
+ // copy files.
+ await fs.copyFile(
+ path.resolve(file),
+ path.resolve('./src/wasm/', path.basename(file))
+ )
+ console.log(`${file} changed`);
+ }
+ });
+
+ server.watcher.on("add", async (file) => {
+ if (file.includes("../resources/")) {
+ await fs.copyFile(
+ path.resolve(file),
+ path.resolve("./src/wasm/", path.basename(file)),
+ );
+ console.log(`${file} added`);
+ }
+ });
+
+ server.watcher.on("unlink", (file) => {
+ if (file.includes("../resources/")) {
+ console.log(`${file} removed`);
+ }
+ });
+ },
+ };
+};
export default defineConfig({
+ plugins: [
+ wasmWatcherPlugin()
+ ],
root: "./src",
resolve: {
alias: {
- "~": resolve("./src"),
+ "~": path.resolve("./src"),
},
},
build: {
diff --git a/frontend/translations/af.po b/frontend/translations/af.po
index 95e25b1f3f..045c5e0b00 100644
--- a/frontend/translations/af.po
+++ b/frontend/translations/af.po
@@ -144,7 +144,7 @@ msgstr "Skep 'n rekening"
msgid "auth.sidebar-tagline"
msgstr "Die oopbron-oplossing vir ontwerp en prototipering."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Diensbepalings"
@@ -163,7 +163,7 @@ msgstr "Ons het 'n verifikasie-e-pos aan gestuur"
msgid "branding-illustrations-marketing-pieces"
msgstr "...handelsmerk, illustrasies, bemarkingsstukke, ens."
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Publiseer"
@@ -235,7 +235,7 @@ msgstr "Deel prototipes"
msgid "common.share-link.view-all"
msgstr "Kies Alles"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Depubliseer"
@@ -349,7 +349,7 @@ msgstr "Die token sal verval op %s"
msgid "dashboard.access-tokens.token-will-not-expire"
msgstr "Die token het nie 'n verval datum nie"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Voeg by as Gedeelde Biblioteek"
@@ -357,27 +357,27 @@ msgstr "Voeg by as Gedeelde Biblioteek"
msgid "dashboard.change-email"
msgstr "Verander e-pos"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(kopieer)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Skep 'n nuwe span"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Jou Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Verwyder span"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Laai Penpot-lêer (.penpot) af"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Laai standaardlêer af (.svg + .json)"
@@ -393,7 +393,7 @@ msgstr "Dupliseer %s lêers"
msgid "dashboard.export-binary-multi"
msgstr "Laai %s Penpot lêers (.penpot) af"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Voer borde as PDF uit"
diff --git a/frontend/translations/ar.po b/frontend/translations/ar.po
index bf4dcdc00d..3b865e6a30 100644
--- a/frontend/translations/ar.po
+++ b/frontend/translations/ar.po
@@ -1,16 +1,16 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-11 07:21+0000\n"
-"Last-Translator: \"Mahmoud A. Rabo\" \n"
-"Language-Team: Arabic "
-" \n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
+"Last-Translator: Alejandro Alonso \n"
+"Language-Team: Arabic \n"
"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
-"X-Generator: Weblate 5.13-dev\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -147,7 +147,7 @@ msgstr "إنشاء حساب"
msgid "auth.sidebar-tagline"
msgstr "الحل (مفتوح المصدر) للتصميم والنمذجة."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "شروط الخدمة"
@@ -164,7 +164,7 @@ msgstr "لقد أرسلنا رسالة تحقق إلى بريدك الالكتر
msgid "branding-illustrations-marketing-pieces"
msgstr "...علامة تجارية، رسوم توضيحية، قطع تسويقية، إلخ."
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "أنشر"
@@ -240,7 +240,7 @@ msgstr "مشاركة النماذج"
msgid "common.share-link.view-all"
msgstr "اختر الكل"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "إلغاء النشر"
@@ -302,7 +302,7 @@ msgstr "تم إنشاء رمز الوصول بنجاح."
msgid "dashboard.access-tokens.empty.add-one"
msgstr "اضغط على الزر \"إنشاء رمز جديد\" لإنشاء واحد."
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "أضف كمكتبة مشتركة"
@@ -310,27 +310,27 @@ msgstr "أضف كمكتبة مشتركة"
msgid "dashboard.change-email"
msgstr "تغيير البريد الإلكتروني"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(نسخة)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "إنشاء فريق جديد"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Penpot الخاص بك"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "حذف الفريق"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "تنزيل ملف Penpot (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "تنزيل ملف قياسي (.svg + .json)"
@@ -346,7 +346,7 @@ msgstr "تكرير %s الملفات"
msgid "dashboard.export-binary-multi"
msgstr "تنزيل ملفات ٪s Penpot (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "صدر اللوحة الفنية الى ملف PDF…"
@@ -362,7 +362,7 @@ msgstr "تصدير %s الملفات"
msgid "dashboard.export-multiple.selected"
msgstr "%s من %s عناصر مختارة"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "استخراج"
@@ -530,11 +530,11 @@ msgstr "تحميل البيانات للخادم (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "تحميل الملف: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "قم بدعوة للفريق"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "ترك الفريق"
@@ -546,7 +546,7 @@ msgstr "المكتبات & القوالب"
msgid "dashboard.libraries-and-templates.explore"
msgstr "استعرض المزيد منهم وتعلم كيف تساهم"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "حدثت مشكلة في استيراد النموذج. لم يتم استيراد النموذج."
@@ -578,7 +578,7 @@ msgstr "الانتقال إلى فريق آخر"
msgid "dashboard.new-file"
msgstr "+ ملف جديد"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "ملف جديد"
@@ -586,7 +586,7 @@ msgstr "ملف جديد"
msgid "dashboard.new-project"
msgstr "+ مشروع جديد"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "مشروع جديد"
@@ -594,7 +594,7 @@ msgstr "مشروع جديد"
msgid "dashboard.no-matches-for"
msgstr "لم يتم العثور على مطابقات ل \"%s\""
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "ستظهر المشاريع المثبتة هنا"
@@ -610,7 +610,7 @@ msgstr "تم التحقق من عنوان بريدك الإلكتروني بنج
msgid "dashboard.notifications.password-saved"
msgstr "تم حفظ كلمة المرور بنجاح!"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s الأعضاء"
@@ -626,7 +626,7 @@ msgstr "الخيارات"
msgid "dashboard.password-change"
msgstr "تغيير كلمة المرور"
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "تثبيت / إلغاء التثبيت"
@@ -647,7 +647,7 @@ msgstr "إزالة كمكتبة مشتركة"
msgid "dashboard.save-settings"
msgstr "حفظ الإعدادات"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "بحث…"
@@ -683,7 +683,7 @@ msgstr "تم تكرار ملفك بنجاح"
msgid "dashboard.success-duplicate-project"
msgstr "تم نسخ مشروعك بنجاح"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "تم نقل ملفك بنجاح"
@@ -695,15 +695,15 @@ msgstr "تم نقل الملفات بنجاح"
msgid "dashboard.success-move-project"
msgstr "تم نقل مشروعك بنجاح"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "معلومات الفريق"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "أعضاء الفريق"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "مشاريع الفريق"
@@ -719,7 +719,7 @@ msgstr "نتائج البحث"
msgid "dashboard.type-something"
msgstr "اكتب لإظهار نتائج البحث"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "الغاء نشر المكتبة"
@@ -727,19 +727,19 @@ msgstr "الغاء نشر المكتبة"
msgid "dashboard.update-settings"
msgstr "تحديث الإعدادات"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "نشط"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "عندما يتم تشغيل هذا الخطاف ، سيتم تسليم تفاصيل الحدث"
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "نوع المحتوى"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "إنشاء الرد التلقائي على الويب"
@@ -755,7 +755,7 @@ msgstr "البريد الالكتروني"
msgid "dashboard.your-name"
msgstr "اسمك"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Penpot الخاص بك"
@@ -771,11 +771,11 @@ msgstr "إنتباه"
msgid "ds.component-subtitle"
msgstr "عناصر سيتم تحديثها:"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "إلغاء الأمر"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "حسنا"
@@ -815,11 +815,11 @@ msgstr "متم التحقق من صحة البريد الإلكتروني"
msgid "errors.email-as-password"
msgstr "لا يمكنك استخدام بريدك الإلكتروني ككلمة مرور"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "يحتوي البريد الإلكتروني «%s» على العديد من تقارير الارتداد الدائم."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "تم الإبلاغ عن البريد الإلكتروني «٪ s» كبريد عشوائي أو مرتد بشكل دائم."
@@ -833,7 +833,7 @@ msgstr ""
msgid "errors.feature-not-supported"
msgstr "الميزة '٪ s' غير مدعومة."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "حدث خطأ ما."
@@ -878,7 +878,7 @@ msgstr "يبدو أن محتويات الصورة لا تتطابق مع امت
msgid "errors.media-type-not-allowed"
msgstr "يبدو أن هذه ليست صورة صالحة."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"يحتوي الملف الشخصي الذي تدعوه على رسائل بريد إلكتروني مكتومة (تقارير البريد "
@@ -898,7 +898,7 @@ msgstr "يجب ألا تقل كلمة المرور عن 8 أحرف"
msgid "errors.profile-blocked"
msgstr "هذا الملف الشخصي محظور"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr ""
"يحتوي ملفك الشخصي على رسائل بريد إلكتروني مكتومة (تقارير البريد المزعجة أو "
@@ -908,15 +908,15 @@ msgstr ""
msgid "errors.registration-disabled"
msgstr "التسجيل معطل حاليا."
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr "أعضاء غير كافيين لمغادرة الفريق ، ربما تريد حذفه."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "العضو الذي تحاول تعيينه غير موجود."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr "لا يمكن للمالك مغادرة الفريق ، يجب إعادة تعيين دور المالك."
@@ -928,23 +928,23 @@ msgstr "حدث خطأ غير متوقع."
msgid "errors.unexpected-token"
msgstr "رمز غير معروف"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "خطأ في الاتصال ، عنوان إلكتروني لا يمكن الوصول إليه"
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "آخر تسليم لم يكن ناجحًا."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "نفذ الوقت"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "خطأ غير متوقع في التحقق"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "حالة غير متوقعة٪ s"
@@ -1006,19 +1006,19 @@ msgstr "حدث خطأ"
msgid "inspect.attributes.blur"
msgstr "الضبابية"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "تفتيش قيمة الطمس"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "تفتيش صفات اللون"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLAتتفتيش صفات اللون"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBAفتش اللون"
@@ -1026,7 +1026,7 @@ msgstr "RGBAفتش اللون"
msgid "inspect.attributes.fill"
msgstr "املأ"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "تحميل صورة المصدر"
@@ -1116,67 +1116,70 @@ msgstr "صلب"
msgid "inspect.attributes.stroke.width"
msgstr "عرض"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "صياغة الحروف"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "عائلة الخط"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "حجم الخط"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "نوع الخط"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "وزن الخط"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "تباعد الحروف"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "ارتفاع الخط"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "زخرفة النص"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "لا شئ"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "مسطر"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "تغيير النص"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "حالة العنوان"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "أحرف صغيرة"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "لا شئ"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "الأحرف الكبيرة"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr "إذا كنت تريد معرفة المزيد عن فحص التصميم ، فتفضل بزيارة مركز مساعدة لPenpot"
@@ -1236,7 +1239,7 @@ msgstr "نص"
msgid "inspect.tabs.info"
msgstr "معلومات"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "الاختصارات"
@@ -1248,11 +1251,11 @@ msgstr "إقبل"
msgid "labels.add-custom-font"
msgstr "إضافة خط مخصص"
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "مشرف"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "الكل"
@@ -1275,19 +1278,19 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "مدخل خاطأ"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "الغاء"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "غلق"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "تعليقات"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "مجتمع"
@@ -1295,7 +1298,7 @@ msgstr "مجتمع"
msgid "labels.confirm-password"
msgstr "تأكيد كلمة المرور"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "استمر"
@@ -1307,7 +1310,7 @@ msgstr "تابع مع"
msgid "labels.continue-with-penpot"
msgstr "يمكنك المتابعة مع حساب Penpot"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "انشاء"
@@ -1327,7 +1330,7 @@ msgstr "خطوط مخصصة"
msgid "labels.dashboard"
msgstr "لوحة التحكم"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "حذف"
@@ -1339,7 +1342,7 @@ msgstr "حذف التعليق"
msgid "labels.delete-comment-thread"
msgstr "حذف موضوع"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "حذف الدعوة"
@@ -1347,11 +1350,11 @@ msgstr "حذف الدعوة"
msgid "labels.delete-multi-files"
msgstr "حذف %s ملفات"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "المسودات"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "تعديل"
@@ -1359,15 +1362,15 @@ msgstr "تعديل"
msgid "labels.edit-file"
msgstr "تعديل ملف"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "محرر"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "منتهي الصلاحية"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "استخراج"
@@ -1391,15 +1394,15 @@ msgstr "موفري الخط"
msgid "labels.font-variants"
msgstr "الأنماط"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "الخطوط"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "مستودع Github"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "إعطاء ملاحظات"
@@ -1407,11 +1410,11 @@ msgstr "إعطاء ملاحظات"
msgid "labels.go-back"
msgstr "الرجوع للخلف"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "مركز المساعدة"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "إخفاء التعليقات التي تم حلها"
@@ -1427,7 +1430,7 @@ msgstr "شيء سيء حدث الرجاء إعادة محاولة العملية
msgid "labels.internal-error.main-message"
msgstr "خطأ داخلي"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "الدعوات"
@@ -1435,7 +1438,7 @@ msgstr "الدعوات"
msgid "labels.language"
msgstr "اللغة"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "المكتبات والقوالب"
@@ -1443,15 +1446,15 @@ msgstr "المكتبات والقوالب"
msgid "labels.log-or-sign"
msgstr "تسجيل الدخول أو الاشتراك"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "تسجيل خروج"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "عضو"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "الأعضاء"
@@ -1459,11 +1462,11 @@ msgstr "الأعضاء"
msgid "labels.new-password"
msgstr "كلمة مرور جديدة"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "ليس لديك أي إشعارات تعليق معلقة"
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "لا توجد دعوات."
@@ -1476,7 +1479,7 @@ msgstr "قد لا تكون هذه الصفحة موجودة أو ليس لديك
msgid "labels.not-found.main-message"
msgstr "عفواً!"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "0 ملف"
@@ -1496,7 +1499,7 @@ msgstr[3] "بعض"
msgstr[4] "العديد"
msgstr[5] "غير ذلك"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "0"
@@ -1519,7 +1522,7 @@ msgstr "خاصة بك"
msgid "labels.or"
msgstr "أو"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "مالك"
@@ -1527,7 +1530,7 @@ msgstr "مالك"
msgid "labels.password"
msgstr "كلمة المرور"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "قيد الانتظار"
@@ -1535,11 +1538,11 @@ msgstr "قيد الانتظار"
msgid "labels.profile"
msgstr "الملف الشخصي"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "المشاريع"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "ملاحظات الإصدار"
@@ -1548,11 +1551,11 @@ msgstr "ملاحظات الإصدار"
msgid "labels.remove"
msgstr "إزالة"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "إزالة العضو"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "اعاده تسميه"
@@ -1560,7 +1563,7 @@ msgstr "اعاده تسميه"
msgid "labels.rename-team"
msgstr "إعادة تسمية الفريق"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "إعادة إرسال الدعوة"
@@ -1568,11 +1571,11 @@ msgstr "إعادة إرسال الدعوة"
msgid "labels.retry"
msgstr "أعد المحاولة"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "دور"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "حفظ"
@@ -1596,7 +1599,7 @@ msgstr "نحن في صيانة مبرمجة لأنظمتنا."
msgid "labels.service-unavailable.main-message"
msgstr "الخدمة غير متوفرة"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "إعدادات"
@@ -1604,11 +1607,11 @@ msgstr "إعدادات"
msgid "labels.share-prototype"
msgstr "مشاركة النموذج الأولي"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "المكتبات المشتركة"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "إظهار كافة التعليقات"
@@ -1616,15 +1619,15 @@ msgstr "إظهار كافة التعليقات"
msgid "labels.show-comments-list"
msgstr "قائمة التعليقات"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "إظهار تعليقاتك فقط"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "الحالة"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "الدروس"
@@ -1648,7 +1651,7 @@ msgstr "تحميل الخطوط المخصصة"
msgid "labels.uploading"
msgstr "جارٍ الرفع …"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "مشاهد"
@@ -1656,11 +1659,11 @@ msgstr "مشاهد"
msgid "labels.write-new-comment"
msgstr "كتابة تعليق جديد"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(أنت)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "حسابك"
@@ -1778,11 +1781,11 @@ msgstr "هل أنت متأكد أنك تريد حذف هذا الخط؟ لن ي
msgid "modals.delete-font.title"
msgstr "حذف الخط"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "هل أنت متأكد أنك تريد حذف هذه الصفحة؟"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "حذف الصفحة"
@@ -1798,49 +1801,49 @@ msgstr "هل أنت متأكد أنك تريد حذف هذا المشروع؟"
msgid "modals.delete-project-confirm.title"
msgstr "حذف المشروع"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "حذف الفريق"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"هل أنت متأكد أنك تريد حذف هذا الفريق؟ سيتم حذف جميع المشاريع والملفات "
"المرتبطة بالفريق نهائيًا."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "حذف الفريق"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "حذف عضو"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "هل أنت متأكد أنك تريد حذف هذا العضو من الفريق؟"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "حذف العضو"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "إرسال دعوة"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "رسائل البريد الإلكتروني، مفصولة بفواصل"
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "ادعُ الأعضاء إلى الفريق"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr "نظرًا لأنك العضو الوحيد في هذا الفريق ، فسيتم حذف الفريق مع مشاريعه وملفاته."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "هل أنت متأكد أنك تريد مغادرة فريق %s ؟"
@@ -1866,37 +1869,37 @@ msgstr "حدد عضوا للترقية"
msgid "modals.leave-and-reassign.title"
msgstr "حدد عضوا للترقية"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "ترك الفريق"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "هل أنت متأكد أنك تريد مغادرة هذا الفريق؟"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "مغادرة الفريق"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "كمية الدفع"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "رقى"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"إذا قمت بنقل الملكية ، فسوف تقوم بتغيير دورك إلى المسؤول ، وستفقد بعض "
"الأذونات على هذا الفريق. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr "هل أنت متأكد أنك تريد ترقية هذا المستخدم إلى مالك؟"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "الترقية إلى مالك"
@@ -1937,25 +1940,25 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "تحديث المكونات في مكتبة مشتركة"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "تحديث المكون"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "إلغاﺀ"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"أنت على وشك تحديث مكون في مكتبة مشتركة. قد يؤثر هذا على الملفات الأخرى التي "
"تستخدمها."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "تحديث المكون في المكتبة المشتركة"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "تم إرسال الدعوة بنجاح"
@@ -2045,7 +2048,7 @@ msgstr "دعوة أعضاء"
msgid "onboarding.choice.team-up.invite-members-info"
msgstr "تذكر أن تشمل الجميع. المطورين والمصممين والمديرين ... التنوع يضيف :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "دعوة مع الدور:"
@@ -2111,445 +2114,445 @@ msgstr "Penpotأهلا بك في"
msgid "profile.recovery.go-to-login"
msgstr "اذهب إلى تسجيل الدخول"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "مكرر"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "الأساسيات"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "لوحة القيادة"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "مشاهد"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "مساحة العمل"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "محاذاة"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "تعديل"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "عام"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "عام"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "القائمة الرئيسية"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "تعديل الطبقات"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "التنقل"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "التنقل"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "التنقل"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "اللوحات"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "مسارات"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "الأشكال"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "أدوات"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "تكبير"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "تكبير"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "تعليقات"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "إضافة عقدة"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "محاذاة لأسفل"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "محاذاة المركز أفقيًا"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "محاذاة اليسار"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "محاذاة اليمين"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "محاذاة الأعلى"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "محاذاة المركز عموديًا"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "إنشاء لوحة من الاختيار"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "فرق منطقي"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "استبعاد منطقي"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "تقاطع منطقي"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "الاتحاد المنطقي"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "أرسل إلى الخلف"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "إرسال إلى الوراء"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "ثابر للأمام"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "أحضر إلى الأمام"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "مسح التراجع"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "إنسخ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "أضف جديد"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "إقطع"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "تصغير"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "حذف"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "حذف العقدة"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "إفصل المكون"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "منحنى"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "الشكل البيضاوي"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "لوحة"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "أرسم المسار"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "المسار"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "مستطيل"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "نص"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "كرر"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "إلغي"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "تصدير الأشكال"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "تكبير لتناسب الجميع"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "قلب أفقيًا"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "قلب عموديًا"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "إنتقل إلى المسودات"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "إذهب إلى المكتبات المشتركة"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "بحث"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "مجموعة"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "وزع أفقيًا"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "إظهار / إخفاء واجهة المستخدم"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "تكبير"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "إدراج صورة"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "ربط العقد"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "إصنع زاوية"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "إصنع منحنى"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "قناع"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "دمج العقد"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "تحرك"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "تحرك بسرعة لأسفل"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "تحرك يسارا بسرعة"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "تحرك يميناً بسرعة"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "تحرك للأعلى بسرعة"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "نقل العقدة"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "تحرك لأسفل"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "تحرك يساراً"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "تحرك يميناً"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "تحرك للأعلى"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "اللوحة التالية"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "لا يوجد إختصارات"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "ضبط التعتيم على 100٪"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "اضبط التعتيم على 10٪"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "اضبط التعتيم على 20٪"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "اضبط التعتيم على 30%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "اضبط التعتيم على 40%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "اضبط التعتيم على 50%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "اضبط التعتيم على 60%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "اضبط التعتيم على 70%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "اضبط التعتيم على 80%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "اضبط التعتيم على 90%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "أداة انتقاء اللون"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "إذهب إلى لوحة المعلومات"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "تبديل الطبقات"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "أضف\\أزل ثني التخطيط"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "قفل\\فتح"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "قفل النسب"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "تبديل لوحة النص"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "أظهر\\أخف"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "تبديل أسلوب التكبير"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "الخط التحتي"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "الغاء"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "فك التجميع"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "كشف القناع"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "النشر عموديا"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "تنقيص عدسة التكبير"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "زيادة عدسة التكبير"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "كبر المحدد"
@@ -2601,19 +2604,19 @@ msgstr "كلمة المرور - Penpot"
msgid "title.settings.profile"
msgstr "واجهة الحساب - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "الدعوات - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "أعضاء الفريق - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "إعدادات - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "خطافات الويب - %s - Penpot"
@@ -2686,39 +2689,39 @@ msgstr "أطهر التفاعلات بالنقر"
msgid "viewer.header.sitemap"
msgstr "خريطة الموقع"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "محاذاة المركز الأفقي"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "محاذاة المركز الأفقي (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "توزيع المسافات الأفقية (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "محاذاة لليسار (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "محاذاة لليمين (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "محاذاة للأسفل (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "محاذاة للمركز العمودي (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "توزيع التباعد الرئسي (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "محاذاة أعلى (%s)"
@@ -2727,31 +2730,31 @@ msgstr "محاذاة أعلى (%s)"
msgid "workspace.assets.assets"
msgstr "أصول"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "كل الأصول"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "الألوان"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "عناصر"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "إيجاد مجموعة"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr "\"ستسمى عناصرك تلقائيا ك\"اسم مجموعة\" \"اسم عنصر"
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "امسح"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "انسخ"
@@ -2759,7 +2762,7 @@ msgstr "انسخ"
msgid "workspace.assets.duplicate-main"
msgstr "انسخ الأصل"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "التحرير"
@@ -2768,15 +2771,15 @@ msgstr "التحرير"
msgid "workspace.assets.graphics"
msgstr "رسومات"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "مجموعة"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "اسم المجموعة"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "المكتبة المحلية"
@@ -2788,15 +2791,15 @@ msgstr "الأصل غير موجود"
msgid "workspace.assets.open-library"
msgstr "افتح ملف المكتب"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "إعادة تسمية"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "إعادة تسمية المجموعة"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "الخث عن أصل"
@@ -2816,7 +2819,7 @@ msgstr[5] ""
msgid "workspace.assets.shared-library"
msgstr "مكتبة مشتركة"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "الطباعة"
@@ -2841,7 +2844,7 @@ msgstr "تباعد الحروف"
msgid "workspace.assets.typography.line-height"
msgstr "طول الخط"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "أسلوب خط النص"
@@ -2853,7 +2856,7 @@ msgstr "أسلوب خط النص"
msgid "workspace.assets.typography.text-transform"
msgstr "تحويل النص"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "فك التجميع"
@@ -2861,7 +2864,7 @@ msgstr "فك التجميع"
msgid "workspace.focus.focus-mode"
msgstr "وضع التركيز"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "تعطيل التركيز"
@@ -2881,11 +2884,11 @@ msgstr "الانحدار الخطي"
msgid "workspace.gradients.radial"
msgstr "الانحدار الشعاعي"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "إبطال المحاذاة الدينماكية"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "Disable proportional scale"
@@ -2894,19 +2897,19 @@ msgstr "Disable proportional scale"
msgid "workspace.header.menu.disable-scale-text"
msgstr "إبطال المقياس النسبي"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "إبطال الفرقعة للخ\\وط الإرشادية"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "إبطال الفرقعة للبكسل"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "تككين المحاذاة الدينماكية"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "تمكين المقياس النسبي"
@@ -2915,87 +2918,87 @@ msgstr "تمكين المقياس النسبي"
msgid "workspace.header.menu.enable-scale-text"
msgstr "تمكين نص المقياس"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "الفرقعة للخطوط الإرشادية"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "تمكين الفرقعة للبكسل"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "إخفاء أسماء البورد"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "إخفاء لون اللوحة"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "إخفاء تشبيك اللوحة"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "إخفاء المسطرات"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "إخفاء لوحة أسلوب خط"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "التحرير"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "الملف"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "المساعدة و المعلومة"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "التفضيلات"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "المنظر"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "إعادة"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "حدد الجميع"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "أظهر أسماء البورد"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "أظهر لون اللوحة"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "Show pixel grid"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "أظهر المسطرات"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "أظهر لوخة أسلوب الخط"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "الإلغاء"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "إعادة ضبط"
@@ -3016,11 +3019,11 @@ msgstr "حفظ الملف"
msgid "workspace.header.unsaved"
msgstr "تغييرات غير محفوظة"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "وضع العرض (%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "تكبير"
@@ -3032,7 +3035,7 @@ msgstr "مقياس الملأ"
msgid "workspace.header.zoom-fit"
msgstr "تقليص المقياس للتناسب"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "التكبير لتناسب الجميع"
@@ -3040,7 +3043,7 @@ msgstr "التكبير لتناسب الجميع"
msgid "workspace.header.zoom-full-screen"
msgstr "تكبير الشاشة"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "تكبير"
@@ -3053,10 +3056,6 @@ msgstr "تحرير التشبيك"
msgid "workspace.libraries.add"
msgstr "الإضافة"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s الألوان"
-
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
msgstr "لا يوجد أنماط اللون في مكتبتك"
@@ -3083,31 +3082,23 @@ msgstr "الألوان المؤخرة"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "RGB مكملات"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "حفظ أسلوب اللون"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s العناصر"
-
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "مكتبة الملف"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s الرسومات"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "المكتبات في هذا الملف"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "المكتبات"
@@ -3116,63 +3107,59 @@ msgstr "المكتبات"
msgid "workspace.libraries.library"
msgstr "المكتبة"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "تحديث المكتبة"
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "لا يوجد مكتبات مشتركة تحتاج إلى تحديث"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "لا يوجد ما يطابق هذا “%s“"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "البحث في المكتبات المشتركة"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "مكتبات مشتركة"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "كتابات عديدة"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "إلغاء روابط كل الكتابات"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s الكتابات"
-
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "التحديث"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "رؤية جميع التغييرات"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "التحديثات"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "انقر على زر +لإضافة التفاعلات"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "الطمس"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "تطميس المجموعة"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "تطميس المحدد"
@@ -3180,31 +3167,31 @@ msgstr "تطميس المحدد"
msgid "workspace.options.canvas-background"
msgstr "خلفية اللوحة القماشية"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "محتوى المقطع"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "العنصر"
-#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:193
+#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:196
msgid "workspace.options.component.annotation"
msgstr "حاشية"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "النسخ"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:185
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:188
msgid "workspace.options.component.create-annotation"
msgstr "إنشاء حاشية"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "تحرير حاشية"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "أصل"
@@ -3248,7 +3235,7 @@ msgstr "أعلى"
msgid "workspace.options.constraints.topbottom"
msgstr "أعلى و أسفل"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "تصميم"
@@ -3261,7 +3248,7 @@ msgstr "تصدير"
msgid "workspace.options.export-multiple"
msgstr "تحديد المصدر"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "لاحقة"
@@ -3269,7 +3256,7 @@ msgstr "لاحقة"
msgid "workspace.options.exporting-complete"
msgstr "تم التصدير"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "جاري التصدير…"
@@ -3281,11 +3268,11 @@ msgstr "Export failed"
msgid "workspace.options.exporting-object-slow"
msgstr "التصدير بطيء بشكل غير متوقع"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "الملأ"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "إضافة المخطط"
@@ -3294,15 +3281,15 @@ msgstr "إضافة المخطط"
msgid "workspace.options.flows.flow-start"
msgstr "إضافة المخطط"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "جاري التخطيط"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "تلقائي"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "أعمدة"
@@ -3311,7 +3298,7 @@ msgstr "أعمدة"
msgid "workspace.options.grid.grid-title"
msgstr "تشبيك"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "لون"
@@ -3320,15 +3307,15 @@ msgstr "لون"
msgid "workspace.options.grid.params.columns"
msgstr "أعمدة"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "مزراب"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "طول"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "هامش"
@@ -3337,7 +3324,7 @@ msgstr "هامش"
msgid "workspace.options.grid.params.rows"
msgstr "صفوف"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "تعيين كافتراضي"
@@ -3351,143 +3338,143 @@ msgstr "حجم"
msgid "workspace.options.grid.params.type"
msgstr "نوع"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "أسفل"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "وسط"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "شمال"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "يمين"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "تمديد"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "أعلى"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "استعمل الإفتراضي"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "عرض"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "صفوف"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "مربع"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "ملأ المجموعة"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "ضرب المجموعة"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "طول"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "Inspectفحص"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "فعل"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "بعد التأخير"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "الرسومات المتحركة"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "تذوب"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "لا شيء"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "دفع"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "انزلاق"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "تلقائي"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "إضافة تراكب الخلفية"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "عطل إذا نقر في الخارج"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "إغلاق التراكب"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "إغلاق التراكب: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "تأخير"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "وجهة"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "مدة"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "تخفيف"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "خفف"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "خفف داخل"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "خفف داخل و خارج"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "خفف خارج"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "خطي"
@@ -3496,47 +3483,47 @@ msgstr "خطي"
msgid "workspace.options.interaction-in"
msgstr "داخل"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "إدخال الفأرة"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "إخراج الفأرة"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "القوائم"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "الإنتقال الى"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "انتقال الى: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(غير مهيء)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "تأثير الإزاحة"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "بعد النقر"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "فتح التراكب"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "فتح التراكب: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "رابط مفتوح"
@@ -3545,147 +3532,147 @@ msgstr "رابط مفتوح"
msgid "workspace.options.interaction-out"
msgstr "خارج"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "المركز السفلي"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "اأسفل اليسار"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "أسفل اليمين"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "مركز"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "يدوي"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "المركز العلوي"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "أعلى اليسار"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "أعلى اليمين"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "موضع"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "حفظ موضع التمرير"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "الشاشة السابقة"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "بالنسبة الى"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "الذات"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "تبديل التراكب"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "تبديل التراكب: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "مشغل"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "الرابط المفتوح"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "حين التحوم"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "حين الضغط"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "التفاعلات"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "اللون"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "احتراق اللون"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "انقاص كثافة اللون"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "أغمق"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "الفارق"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "الإستبعاد"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "ضوء الثابت"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "مسحة"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "تفتيح"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "لمعان"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "تضاعف"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "عادي"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "تراكب"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "التشبع"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "شاشة"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "ضوء خافت"
@@ -3709,19 +3696,19 @@ msgstr "الطبقات المحددة"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "خيارات متقدمة"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "أقصى ارتفاع"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "أقصى عرض"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "الحد الأدنو للارتفاع"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "الحد الأدنى للعرض"
@@ -3835,15 +3822,15 @@ msgstr "التباعد بين"
msgid "workspace.options.layout.top"
msgstr "أعلى"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "المزيد من الألوان"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "المزيد من ألوان المكتبة"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "العتامة"
@@ -3852,27 +3839,27 @@ msgstr "العتامة"
msgid "workspace.options.position"
msgstr "الموضع"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "النموذج المبدئي"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "نصف القطر"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "أسفل اليسار"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "أسفل اليمين"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "أعلى الشمال"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "أعلى اليمين"
@@ -3884,7 +3871,7 @@ msgstr "مؤخر"
msgid "workspace.options.retry"
msgstr "أعد المحاولة"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "دوران"
@@ -3892,27 +3879,27 @@ msgstr "دوران"
msgid "workspace.options.search-font"
msgstr "البخث عن نوع الخط"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr "اختر الشكل أو اللوحة لجر الإتصال الى لوحة أو شكل آخر"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "الألوان المختارة"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "اختر نوع الملأ"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "ضرب الإختيار"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "تطميس"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "لون الظل"
@@ -3924,47 +3911,48 @@ msgstr "إسقاط الظل"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "التظليل الداخلي"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "الانتشار"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "الظل"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "ظل المجموعة"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "ظلال الإختيار"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "أظهر في المصدر"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "أظهر في وضع العرض"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "مقاس"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "الإعدادات المسبقة للحجم"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "ضرب"
@@ -3973,7 +3961,7 @@ msgstr "ضرب"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "معلم الدائرة"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "الدائرة"
@@ -3982,7 +3970,7 @@ msgstr "الدائرة"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "معلم الماس"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "الماس"
@@ -3991,19 +3979,19 @@ msgstr "الماس"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "سهم الخط"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "سهم"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "لا شيء"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "دائري"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "مربع"
@@ -4012,7 +4000,7 @@ msgstr "مربع"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "معلم المربع"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "مستطيل"
@@ -4021,75 +4009,75 @@ msgstr "مستطيل"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "سهم المثلث"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "المثلث"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "لون الضرب"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "عرض الضرب"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "مركز"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "متقطع"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "منقط"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "داخل"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "مختلط"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "خارج"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "صلب"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "محاذاة الأسفل"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "محاذاة الوسط"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "محاذاة أعلى"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "LTR"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "RTL"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "الإرتفاع التلقائي"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "العرض التلقائي"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "مثبت"
@@ -4111,35 +4099,35 @@ msgstr "أحرف صغيرة"
msgid "workspace.options.text-options.none"
msgstr "لا شيء"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "الإضراب من خلال(%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "محاذاة المركز"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "تعديل"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "محاذاة"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "محاذاة اليمين"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "نص"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "نص للمجموعة"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "نص الإختيار"
@@ -4148,7 +4136,7 @@ msgstr "نص الإختيار"
msgid "workspace.options.text-options.titlecase"
msgstr "Title case"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "تسطير (%s)"
@@ -4157,19 +4145,19 @@ msgstr "تسطير (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "الأحرف الكبيرة"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr "استعمل زر التشغيل أعلاه لتشغيل منظر النموذج المبدئي."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "عرض"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "X محور"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Y محور"
@@ -4233,7 +4221,7 @@ msgstr "أرسل الى الخلف"
msgid "workspace.shape.menu.copy"
msgstr "انسخ"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "إنشاء تعليق توضيحي"
@@ -4241,11 +4229,11 @@ msgstr "إنشاء تعليق توضيحي"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "تحديد محتوى اللوحة"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "إنشاء نعصر"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "إنشاء عناصر جديدة"
@@ -4253,7 +4241,7 @@ msgstr "إنشاء عناصر جديدة"
msgid "workspace.shape.menu.cut"
msgstr "قطع"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "حذف"
@@ -4261,15 +4249,15 @@ msgstr "حذف"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "حذف المخطط"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "فصل المثال"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "فصل الامثلة"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "الفارق"
@@ -4281,11 +4269,11 @@ msgstr "ينسخ"
msgid "workspace.shape.menu.edit"
msgstr "تحرير"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "استبعاد"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "تسطيح"
@@ -4318,19 +4306,19 @@ msgstr "انتقل الى ملف العنصر الأصلي"
msgid "workspace.shape.menu.group"
msgstr "مجموعة"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "إخفاء"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "أظهر أو إخف UI"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "التفاعلات"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "إغلاق"
@@ -4338,7 +4326,7 @@ msgstr "إغلاق"
msgid "workspace.shape.menu.mask"
msgstr "قناع"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "معجون"
@@ -4350,11 +4338,11 @@ msgstr "طريق"
msgid "workspace.shape.menu.remove-flex"
msgstr "إزالة تخطيط المنحنى"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "إعادة ضبط التجاوزات"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "استعادة العنصر الرئيسي"
@@ -4362,15 +4350,15 @@ msgstr "استعادة العنصر الرئيسي"
msgid "workspace.shape.menu.select-layer"
msgstr "اختيار الطبقة"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "العرض"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "العرض في لوحة الاصول"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "أظهر المكون الرئيسي"
@@ -4383,6 +4371,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "تعيين كصورة مصغرة"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "تحويل الى المسار"
@@ -4390,11 +4379,11 @@ msgstr "تحويل الى المسار"
msgid "workspace.shape.menu.ungroup"
msgstr "فك التجميع"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "اتحاد"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "الغاء القفل"
@@ -4407,7 +4396,7 @@ msgstr "كشف القناع"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "تحديث العناصر الرئيسية"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "تحديث العنصر الرئيسي"
@@ -4419,11 +4408,11 @@ msgstr "انهيار الشريط الجانبي"
msgid "workspace.sidebar.expand"
msgstr "توسيع الشريط الجانبي"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "التاريخ"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "الطبقات"
@@ -4459,7 +4448,7 @@ msgstr "نصوص"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "السمات المستوردةSVG"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "صفحات"
@@ -4467,7 +4456,7 @@ msgstr "صفحات"
msgid "workspace.sitemap"
msgstr "خريطة الموقع"
-#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "أصول"
@@ -4475,7 +4464,7 @@ msgstr "أصول"
msgid "workspace.toolbar.color-palette"
msgstr "لوحة اللون (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "تعليقات (%s)"
@@ -4669,19 +4658,19 @@ msgstr "انتهت العملية %s"
msgid "workspace.undo.title"
msgstr "تاريخ"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "رفض"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "مزيد من المعلومات"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "يوجد تحديثات في المكتبة المشتركة"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "تحديث"
diff --git a/frontend/translations/ca.po b/frontend/translations/ca.po
index bbcc2db2cd..5e891992c6 100644
--- a/frontend/translations/ca.po
+++ b/frontend/translations/ca.po
@@ -1,15 +1,15 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-11 07:21+0000\n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
"Last-Translator: Aryiu \n"
-"Language-Team: Catalan "
-" \n"
+"Language-Team: Catalan \n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.13-dev\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -146,7 +146,7 @@ msgstr "Crea un compte"
msgid "auth.sidebar-tagline"
msgstr "La solució de codi obert per a dissenyar i prototipar."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Condicions del servei"
@@ -154,7 +154,7 @@ msgstr "Condicions del servei"
msgid "auth.verification-email-sent"
msgstr "S'ha enviat un correu de verificació a"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Publica"
@@ -226,7 +226,7 @@ msgstr "Compartiu prototips"
msgid "common.share-link.view-all"
msgstr "Selecciona-ho tot"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Despublica"
@@ -292,7 +292,7 @@ msgstr "90 dies"
msgid "dashboard.access-tokens.expiration-never"
msgstr "Mai"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Afegeix a la biblioteca compartida"
@@ -300,27 +300,27 @@ msgstr "Afegeix a la biblioteca compartida"
msgid "dashboard.change-email"
msgstr "Canvia el correu"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(còpia)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Crea un equip nou"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "El meu Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Elimina l'equip"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Baixa el fitxer Penpot (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Baixa fitxer estàndard (.svg + .json)"
@@ -336,7 +336,7 @@ msgstr "Duplica %s fitxers"
msgid "dashboard.export-binary-multi"
msgstr "Baixa %s fitxers Penpot (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Exporta els taulers a PDF"
@@ -352,7 +352,7 @@ msgstr "Exporta %s fitxers de Penpot"
msgid "dashboard.export-multiple.selected"
msgstr "%s de %s elements seleccionats"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Exporta"
@@ -515,11 +515,11 @@ msgstr "S'estan penjant les dades al servidor (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "S'està pujant el fitxer: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Convida a l'equip"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Abandona l'equip"
@@ -531,7 +531,7 @@ msgstr "Biblioteques i plantilles"
msgid "dashboard.libraries-and-templates.explore"
msgstr "Explora'n més i coneix com contribuir-hi"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr ""
"Hi ha hagut un problema en importar la plantilla. La plantilla no s'ha "
@@ -565,7 +565,7 @@ msgstr "Mou a un altre equip"
msgid "dashboard.new-file"
msgstr "+ Fitxer nou"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Fitxer nou"
@@ -573,7 +573,7 @@ msgstr "Fitxer nou"
msgid "dashboard.new-project"
msgstr "+ Crea un projecte"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Crea un projecte"
@@ -581,7 +581,7 @@ msgstr "Crea un projecte"
msgid "dashboard.no-matches-for"
msgstr "No s'ha trobat cap coincidència amb “%s“"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Els projectes fixats apareixeran aquí"
@@ -597,7 +597,7 @@ msgstr "S'ha verificat l'adreça de correu"
msgid "dashboard.notifications.password-saved"
msgstr "La contrasenya s'ha desat correctament!"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s membres"
@@ -613,7 +613,7 @@ msgstr "Opcions"
msgid "dashboard.password-change"
msgstr "Canvia la contrasenya"
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Fixa/Deixa de fixar"
@@ -634,7 +634,7 @@ msgstr "Elimina de les biblioteques compartides"
msgid "dashboard.save-settings"
msgstr "Desa la configuració"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Cerca…"
@@ -670,7 +670,7 @@ msgstr "S'ha duplicat el fitxer"
msgid "dashboard.success-duplicate-project"
msgstr "S'ha eliminat el projecte"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "S'ha mogut el fitxer"
@@ -682,15 +682,15 @@ msgstr "S'han mogut els fitxers"
msgid "dashboard.success-move-project"
msgstr "S'ha mogut el projecte"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Informació de l'equip"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Membres de l'equip"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Projectes de l'equip"
@@ -706,7 +706,7 @@ msgstr "Resultats de la cerca"
msgid "dashboard.type-something"
msgstr "Escriviu per cercar resultats"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Despublica la biblioteca"
@@ -726,7 +726,7 @@ msgstr "Correu electrònic"
msgid "dashboard.your-name"
msgstr "Nom"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "El meu Penpot"
@@ -742,11 +742,11 @@ msgstr "Atenció"
msgid "ds.component-subtitle"
msgstr "Components a actualitzar:"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Cancel·la"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "D'acord"
@@ -778,15 +778,15 @@ msgstr "Aquest correu ja està validat."
msgid "errors.email-as-password"
msgstr "No podeu fer servir l'adreça de correu com a contrasenya"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "El correu «%s» té molts informes de retorn permanents."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "El correu «%s» s'ha marcat com a brossa o rebot permanent."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Alguna cosa ha anat malament."
@@ -828,7 +828,7 @@ msgstr ""
msgid "errors.media-type-not-allowed"
msgstr "Sembla que la imatge no és vàlida."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"El perfil que estàs convidant té els missatges de correu silenciats (per "
@@ -848,7 +848,7 @@ msgstr "La contrasenya ha de tenir 8 caràcters com a mínim"
msgid "errors.profile-blocked"
msgstr "El perfil està bloquejat"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr ""
"El teu perfil té els missatges de correu silenciats (per informes de correu "
@@ -858,17 +858,17 @@ msgstr ""
msgid "errors.registration-disabled"
msgstr "El registre està desactivat."
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr ""
"No hi ha suficients membres com per a abandonar l'equip, potser voleu "
"eliminar-lo."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "El membre que intenteu assignar no existeix."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr ""
"El propietari no pot abandonar l'equip, heu de reassignar el rol de "
@@ -941,19 +941,19 @@ msgstr "S'ha produït un error"
msgid "inspect.attributes.blur"
msgstr "Difuminat"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Valor"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -961,7 +961,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Emplenat"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Baixa la imatge original"
@@ -1051,59 +1051,61 @@ msgstr "Sòlid"
msgid "inspect.attributes.stroke.width"
msgstr "Amplada"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Tipografia"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Família tipogràfica"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Mida de la lletra"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Estil de la lletra"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Espaiat de la lletra"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Alçada de la línia"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Decoració del text"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Cap"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Subratllat"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Transformació del text"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "Inicials en majúscules"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "Minúscules"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Cap"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "Majúscules"
@@ -1163,7 +1165,7 @@ msgstr "Text"
msgid "inspect.tabs.info"
msgstr "Informació"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Dreceres"
@@ -1175,11 +1177,11 @@ msgstr "Acceptar"
msgid "labels.add-custom-font"
msgstr "Afegeix tipografia"
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Administració"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Tots"
@@ -1202,19 +1204,19 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "Error del servidor (Bad Gateway)"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Cancel·la"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Tanca"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Comentaris"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Comunitat"
@@ -1222,7 +1224,7 @@ msgstr "Comunitat"
msgid "labels.confirm-password"
msgstr "Confirmeu la contrasenya"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Continua"
@@ -1234,11 +1236,11 @@ msgstr "Continua amb"
msgid "labels.continue-with-penpot"
msgstr "Podeu continuar amb un compte de Penpot"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "Copia l'enllaç"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Crea"
@@ -1258,7 +1260,7 @@ msgstr "Tipografies personalitzades"
msgid "labels.dashboard"
msgstr "Tauler"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Elimina"
@@ -1270,7 +1272,7 @@ msgstr "Elimina el comentari"
msgid "labels.delete-comment-thread"
msgstr "Elimina el fil"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Esborra invitació"
@@ -1278,11 +1280,11 @@ msgstr "Esborra invitació"
msgid "labels.delete-multi-files"
msgstr "Elimina %s fitxers"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Esborranys"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Edita"
@@ -1290,15 +1292,15 @@ msgstr "Edita"
msgid "labels.edit-file"
msgstr "Edita'l"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Editor"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Ha caducat"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Exporta"
@@ -1322,15 +1324,15 @@ msgstr "Proveïdors de tipografies"
msgid "labels.font-variants"
msgstr "Estils"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Tipografies"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "Repositori Github"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Envia opinions"
@@ -1338,11 +1340,11 @@ msgstr "Envia opinions"
msgid "labels.go-back"
msgstr "Enrere"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Centre d'ajuda"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Amaga els comentaris resolts"
@@ -1360,7 +1362,7 @@ msgstr ""
msgid "labels.internal-error.main-message"
msgstr "Error intern"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Invitacions"
@@ -1368,7 +1370,7 @@ msgstr "Invitacions"
msgid "labels.language"
msgstr "Llengua"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Biblioteques i plantilles"
@@ -1376,15 +1378,15 @@ msgstr "Biblioteques i plantilles"
msgid "labels.log-or-sign"
msgstr "Inicia sessió o registra'm"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Tanca la sessió"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Membre"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Membres"
@@ -1392,11 +1394,11 @@ msgstr "Membres"
msgid "labels.new-password"
msgstr "Contrasenya nova"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "No teniu notificacions de comentaris pendents"
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "No hi ha invitacions."
@@ -1411,7 +1413,7 @@ msgstr ""
msgid "labels.not-found.main-message"
msgstr "Vaja!"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "1 fitxer"
@@ -1423,7 +1425,7 @@ msgid_plural "labels.num-of-frames"
msgstr[0] "1 tauler"
msgstr[1] "%s taulers"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "1 projecte"
@@ -1442,7 +1444,7 @@ msgstr "Només els meus"
msgid "labels.or"
msgstr "o"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Propietari"
@@ -1450,7 +1452,7 @@ msgstr "Propietari"
msgid "labels.password"
msgstr "Contrasenya"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "Pendent"
@@ -1458,11 +1460,11 @@ msgstr "Pendent"
msgid "labels.profile"
msgstr "Perfil"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Projectes"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Notes de la versió"
@@ -1476,11 +1478,11 @@ msgstr "Recarrega el fitxer"
msgid "labels.remove"
msgstr "Elimina"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Elimina membre"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Canvia el nom"
@@ -1488,7 +1490,7 @@ msgstr "Canvia el nom"
msgid "labels.rename-team"
msgstr "Canvia el nom de l’equip"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "Reenvia invitació"
@@ -1496,15 +1498,15 @@ msgstr "Reenvia invitació"
msgid "labels.retry"
msgstr "Tornar a intentar-ho"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Rol"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Desa"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:715
+#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:730
msgid "labels.search"
msgstr "Cerca"
@@ -1528,7 +1530,7 @@ msgstr "Estem de manteniment programat dels nostres sistemes."
msgid "labels.service-unavailable.main-message"
msgstr "Servei no disponible"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Configuració"
@@ -1540,11 +1542,11 @@ msgstr "Comparteix"
msgid "labels.share-prototype"
msgstr "Comparteix prototip"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Biblioteques compartides"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Mostra tots els comentaris"
@@ -1552,15 +1554,15 @@ msgstr "Mostra tots els comentaris"
msgid "labels.show-comments-list"
msgstr "Mostra la llista de comentaris"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Mostra només els meus comentaris"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Estat"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Tutorials"
@@ -1584,11 +1586,11 @@ msgstr "Pugeu tipografies personalitzades"
msgid "labels.uploading"
msgstr "S'està pujant…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "Només lectura"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Visor"
@@ -1596,15 +1598,15 @@ msgstr "Visor"
msgid "labels.write-new-comment"
msgstr "Escriu un comentari nou"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(jo)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "El meu compte"
-#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:44, src/app/main/ui/ds/utilities/swatch.cljs:57, src/app/main/ui/inspect/attributes/common.cljs:63, src/app/main/ui/workspace/colorpicker.cljs:246, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:251
+#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:45, src/app/main/ui/ds/utilities/swatch.cljs:58, src/app/main/ui/inspect/attributes/common.cljs:44, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:65, src/app/main/ui/workspace/colorpicker.cljs:258, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:395
msgid "media.image"
msgstr "Imatge"
@@ -1731,11 +1733,11 @@ msgstr ""
msgid "modals.delete-font.title"
msgstr "S'està eliminant la tipografia"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Segur que voleu eliminar la pàgina?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Elimina la pàgina"
@@ -1763,51 +1765,51 @@ msgid_plural "modals.delete-shared-confirm.message"
msgstr[0] "Esteu segur que voleu suprimir aquest fitxer?"
msgstr[1] "Esteu segur que voleu suprimir aquests fitxers?"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Elimina l'equip"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Segur que voleu eliminar l'equip? Tots els projectes i fitxers associats a "
"l'equip s'eliminaran permanentment."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "S'està eliminant l'equip"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Elimina el membre"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Segur que voleu eliminar aquest membre de l'equip?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Elimina el membre de l'equip"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Envia una invitació"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "Correus electrònics, separats per una coma"
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "Convida membres a l'equip"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"Com que no hi ha ningú més a aquest equip, s'eliminarà l'equip amb els seus "
"arxius i projectes."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "Segur que vols deixar l'equip %s?"
@@ -1833,15 +1835,15 @@ msgstr "Seleccioneu un membre per a ascendir"
msgid "modals.leave-and-reassign.title"
msgstr "Seleccioneu un membre per a ascendir"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Abandona l'equip"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Segur que voleu deixar l'equip?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "S'està abandonant l'equip"
@@ -1851,31 +1853,31 @@ msgid_plural "modals.move-shared-confirm.accept"
msgstr[0] "Mou"
msgstr[1] "Mou"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "Quantitat d'atracció"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Ascendeix"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"Si transferiu la propietat, canviareu el vostre rol a admin, perdent alguns "
"permisos sobre l'equip. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr ""
"Actualment sou el propietari de l'equip. Segur que voleu ascendir aquest "
"usuari a propietari?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Ascendeix a propietari"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "Publica"
@@ -1912,25 +1914,25 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Actualitza els components en una biblioteca compartida"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Actualitza"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Cancel·la"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"Esteu a punt d'actualitzar un component d'una biblioteca compartida. Això "
"pot afectar altres fitxers que l'usen."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Actualitza un component en una biblioteca compartida"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "La invitació s'ha enviat correctament"
@@ -2006,541 +2008,541 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "Vés a l'inici de sessió"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "Mixt"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Bàsics"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "Panell de control"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Visor"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Espai de treball"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Alineació"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Edició"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "Genèric"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "Genèric"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Menú principal"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "Modifica les capes"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Navegació"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Navegació"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Navegació"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Panells"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Camins"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Formes"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Eines"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Comentaris"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "Afegeix node"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "Alinea a baix"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "Alinea al centre horitzontalment"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "Alinea a l'esquerra"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "Alinea a la dreta"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "Alinea a dalt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "Alinea al centre verticalment"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "Crea un tauler a partir de selecció"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "Diferència booleana"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "Exclusió booleana"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "Intersecció booleana"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "Unió booleana"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "Envia-ho al fons"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Envia-ho cap avall"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "Envia-ho cap amunt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "Envia-ho a dalt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "Esborra desfer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Copia"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "Crea nou"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Retalla"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "Disminueix el zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Elimina"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "Elimina el node"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "Separa el component"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Corba"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "El·lipse"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Tauler"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "Dibuixa el camí"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Camí"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Rectangle"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Text"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Duplica"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "Cancel·la"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "Exporta formes"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "Amplia per encabir-ho tot"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "Gira horitzontalment"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "Gira verticalment"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "Ves als esborranys"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "Ves a les biblioteques compartides"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Cerca"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Agrupa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "Distribueix horitzontalment"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "Mostra/Amaga la interfície"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "Amplia"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "Insereix imatge"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "Uneix nodes"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "Fes cantonada"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "Fes corba"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "Màscara"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "Fusiona nodes"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "Mou"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "Mou avall ràpidament"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "Mou a l'esquerra ràpidament"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "Mou a la dreta ràpidament"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "Mou amunt ràpidament"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "Mou node"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "Mou avall"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "Mou a l'esquerra"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "Mou a la dreta"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "Mou amunt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "Següent tauler"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "No s'han trobat dreceres"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "Fixa l'opacitat al 100%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "Fixa l'opacitat al 10%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "Fixa l'opacitat al 20%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "Fixa l'opacitat al 30%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "Fixa l'opacitat al 40%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "Fixa l'opacitat al 50%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "Fixa l'opacitat al 60%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "Fixa l'opacitat al 70%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "Fixa l'opacitat al 80%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "Fixa l'opacitat al 90%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "Selector de color"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "Ves als comentaris del visor"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "Ves al panell de control"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "Ves a les interaccions del visor"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "Ves a les interaccions del visor"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "Ves a l'espai de treball"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " o "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Enganxa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "Tauler anterior"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "Refés"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "Restableix el zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "Cerca dreceres"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "Selecciona-ho tot"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "Separa els nodes"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "Mostra/Amaga graella de píxels"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "Mostra/Amaga dreceres"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "Ajusta als nodes"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "Ajusta a la graella de píxels"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "Comença a editar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "Comença a mesurar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "Deixa de mesurar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "Estableix miniatures"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "Dreceres de teclat"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "Commuta l'alineació dinàmica"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "Commuta els recursos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "Commuta paleta de colors"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "Activa/desactiva el mode de concentració"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "Activa/desactiva la pantalla completa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
msgid "shortcuts.toggle-guides"
msgstr "Mostra / Amaga les guies"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "Mostra/Amaga l'historial"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "Commutales capes"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "Bloqueja la selecció"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "Bloqueja les proporcions"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "Mostra/amaga la paleta de text"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "Mostra/amaga l'element"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "Commuta l'estil de zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Desfés"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Desagrupa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Desemmascara"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "Distribueix verticalment"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "Amplia a la selecció"
@@ -2588,15 +2590,15 @@ msgstr "Contrasenya - Penpot"
msgid "title.settings.profile"
msgstr "Perfil - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "Invitacions - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "Membres - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Configuració - %s - Penpot"
@@ -2664,35 +2666,35 @@ msgstr "Mostra les interaccions en fer clic"
msgid "viewer.header.sitemap"
msgstr "Mapa del lloc"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Alinea el centre horitzontal (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "Distribueix l'espaiat horitzontal (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Alinea a l'esquerra (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Alinea a la dreta (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Alinea la part inferior (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Alinea el centre vertical (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "Distribueix l'espaiat vertical (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Alinea la part superior (%s)"
@@ -2701,37 +2703,37 @@ msgstr "Alinea la part superior (%s)"
msgid "workspace.assets.assets"
msgstr "Recursos"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "Tots els recursos"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Colors"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Components"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "Crea un grup"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr ""
"Els elements s'anomenaran automàticament com a \"nom del grup / nom de "
"l'element\""
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Elimina"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "Duplica"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Edita"
@@ -2740,15 +2742,15 @@ msgstr "Edita"
msgid "workspace.assets.graphics"
msgstr "Gràfics"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Agrupa"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "Nom del grup"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "llibreria local"
@@ -2756,15 +2758,15 @@ msgstr "llibreria local"
msgid "workspace.assets.not-found"
msgstr "No s'han trobat recursos"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Canvia el nom"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "Canvia el nom del grup"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "Cerca recursos"
@@ -2775,7 +2777,7 @@ msgid_plural "workspace.assets.selected-count"
msgstr[0] "%s element seleccionat"
msgstr[1] "%s elements seleccionats"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Tipografies"
@@ -2800,7 +2802,7 @@ msgstr "Espaiat de la lletra"
msgid "workspace.assets.typography.line-height"
msgstr "Alçada de la línia"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -2808,7 +2810,7 @@ msgstr "Ag"
msgid "workspace.assets.typography.text-transform"
msgstr "Transforma el text"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "Desagrupa"
@@ -2816,7 +2818,7 @@ msgstr "Desagrupa"
msgid "workspace.focus.focus-mode"
msgstr "Mode d'enfocament"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "Enfocament apagat"
@@ -2836,7 +2838,7 @@ msgstr "Degradat lineal"
msgid "workspace.gradients.radial"
msgstr "Degradat radial"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "Desactiva l'alineació dinàmica"
@@ -2845,15 +2847,15 @@ msgstr "Desactiva l'alineació dinàmica"
msgid "workspace.header.menu.disable-scale-text"
msgstr "Desactiva l'escalat del text"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "No ajustis a les guies"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "No ajustis als píxels"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "Activa l'alineació dinàmica"
@@ -2862,99 +2864,99 @@ msgstr "Activa l'alineació dinàmica"
msgid "workspace.header.menu.enable-scale-text"
msgstr "Activa l'escalat del text"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "Ajusta a les guies"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "Ajusta als píxels"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "Amaga els noms dels taulers"
-#: src/app/main/ui/workspace/main_menu.cljs:348
+#: src/app/main/ui/workspace/main_menu.cljs:376
msgid "workspace.header.menu.hide-guides"
msgstr "Amaga les guies"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "Amaga la paleta de colors"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "Amaga la graella de píxels"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "Amaga les regles"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "Amaga la paleta de tipografies"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Edita"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "Fixer"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "Ajuda i informació"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "Preferències"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "Mostra"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "Refés"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "Selecciona-ho tot"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "Mostra els noms dels taulers"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "Mostra la paleta de colors"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "Mostra graella de píxels"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Mostra les regles"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "Mostra la paleta de tipografies"
-#: src/app/main/ui/workspace/main_menu.cljs:288
+#: src/app/main/ui/workspace/main_menu.cljs:316
msgid "workspace.header.menu.toggle-dark-theme"
msgstr "Canvia al mode fosc"
-#: src/app/main/ui/workspace/main_menu.cljs:286, src/app/main/ui/workspace/main_menu.cljs:289
+#: src/app/main/ui/workspace/main_menu.cljs:314, src/app/main/ui/workspace/main_menu.cljs:317
msgid "workspace.header.menu.toggle-light-theme"
msgstr "Canvia al mode clar"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "Desfés"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Restableix"
@@ -2975,7 +2977,7 @@ msgstr "S'està desant"
msgid "workspace.header.unsaved"
msgstr "Canvis sense desar"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "Visor (%s)"
@@ -2987,7 +2989,7 @@ msgstr "Emplena - Amplia per a omplir"
msgid "workspace.header.zoom-fit"
msgstr "Ajusta - Redueix per a encaixar"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "Apropa per a omplir-ho tot"
@@ -2995,7 +2997,7 @@ msgstr "Apropa per a omplir-ho tot"
msgid "workspace.header.zoom-full-screen"
msgstr "Pantalla completa"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "Apropa la selecció"
@@ -3008,10 +3010,6 @@ msgstr "Fet"
msgid "workspace.libraries.add"
msgstr "Afegeix"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s colors"
-
#: src/app/main/ui/workspace/color_palette_ctx_menu.cljs:88, src/app/main/ui/workspace/colorpicker/libraries.cljs:48, src/app/main/ui/workspace/text_palette_ctx_menu.cljs:49
msgid "workspace.libraries.colors.file-library"
msgstr "Biblioteca del fitxer"
@@ -3030,31 +3028,23 @@ msgstr "Colors recents"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "Complementari d'RGB"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Desa l'estil de color"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s components"
-
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Biblioteca del fitxer"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s gràfics"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "BIBLIOTEQUES EN AQUEST FITXER"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "BIBLIOTEQUES"
@@ -3063,55 +3053,51 @@ msgstr "BIBLIOTEQUES"
msgid "workspace.libraries.library"
msgstr "BIBLIOTECA"
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "No hi ha biblioteques compartides pendents d'actualitzar"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "No s'ha trobat cap coincidència per a “%s“"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "Cerca biblioteques compartides"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "BIBLIOTEQUES COMPARTIDES"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Diverses tipografies"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Desvincula totes les tipografies"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s tipografies"
-
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Actualitza"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "ACTUALITZACIONS"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "Feu clic en el botó de + per a afegir interaccions."
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Difuminat"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "Difuminat del grup"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "Difuminat de selecció"
@@ -3119,11 +3105,11 @@ msgstr "Difuminat de selecció"
msgid "workspace.options.canvas-background"
msgstr "Fons del llenç"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "Trunca el contingut"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Component"
@@ -3167,7 +3153,7 @@ msgstr "Superior"
msgid "workspace.options.constraints.topbottom"
msgstr "Superior i inferior"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Disseny"
@@ -3180,11 +3166,11 @@ msgstr "Exporta"
msgid "workspace.options.export-multiple"
msgstr "Exporta la selecció"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgstr "Exporta 1 element"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Sufix"
@@ -3192,7 +3178,7 @@ msgstr "Sufix"
msgid "workspace.options.exporting-complete"
msgstr "Exportació completa"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "S'està exportant…"
@@ -3204,11 +3190,11 @@ msgstr "Exportació fallida"
msgid "workspace.options.exporting-object-slow"
msgstr "Exportació inesperadament lenta"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Emplenat"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "Afegeix l'inici del flux"
@@ -3217,15 +3203,15 @@ msgstr "Afegeix l'inici del flux"
msgid "workspace.options.flows.flow-start"
msgstr "Inici del flux"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "S'inicia el flux"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Automàtic"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "Columnes"
@@ -3234,7 +3220,7 @@ msgstr "Columnes"
msgid "workspace.options.grid.grid-title"
msgstr "Graella"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Color"
@@ -3243,15 +3229,15 @@ msgstr "Color"
msgid "workspace.options.grid.params.columns"
msgstr "Columnes"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "Espaiat"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Alçada"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Marge"
@@ -3260,7 +3246,7 @@ msgstr "Marge"
msgid "workspace.options.grid.params.rows"
msgstr "Files"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "Estableix com a predeterminat"
@@ -3274,139 +3260,139 @@ msgstr "Mida"
msgid "workspace.options.grid.params.type"
msgstr "Tipus"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Inferior"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Centre"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Esquerra"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Dreta"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "Estira"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "Superior"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "Usa valors predeterminats"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Ample"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Files"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "Quadrat"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Emplenament del grup"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Traç del grup"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "Altura"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "Inspecciona"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "Acció"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "Després de"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "Animació"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "Dissol"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "Cap"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "Empenta"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "Lliscament"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "Afegeix una superposició de fons"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "Tanca en fer clic fora"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "Tanca la superposició"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "Tanca la superposició: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "Retard"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "Destinació"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "Durada"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "Suavització"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "Suau"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "Entrada suau"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "Entrada/sortida suau"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "Sortida suau"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "Lineal"
@@ -3415,47 +3401,47 @@ msgstr "Lineal"
msgid "workspace.options.interaction-in"
msgstr "Entrada"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "El ratolí entra"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "El ratolí abandona"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "ms"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "Navega a"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "Navega a: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(sense definir)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "Efecte de desplaçament"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "En fer clic"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "Obre la superposició"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "Obre la superposició: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "Obre una URL"
@@ -3464,143 +3450,143 @@ msgstr "Obre una URL"
msgid "workspace.options.interaction-out"
msgstr "Sortida"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "Inferior centrat"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "Inferior esquerra"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "Inferior dreta"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "Centre"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "Manual"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "Centre superior"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "Superior esquerra"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "Superior dreta"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "Posició"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "Conserva la posició del desplaçament"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "Pantalla anterior"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "a si mateix"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "Commuta la superposició"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "Commuta la superposició: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "Activador"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "Mentre el cursor està damunt"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "Mentre es prem"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "Interaccions"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "Color"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "Crema el color"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "Aclareix el color"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "Enfosqueix"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "Resta"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "Exclusió"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Llum forta"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "To"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Il·lumina"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "Lluminositat"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "Multiplica"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "Llum normal"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "Superposa"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "Saturació"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Pantalla"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "Llum suau"
@@ -3704,15 +3690,15 @@ msgstr "espaiat"
msgid "workspace.options.layout.top"
msgstr "Dalt"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "Més colors"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "Més llibreries de colors"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "Opacitat"
@@ -3721,27 +3707,27 @@ msgstr "Opacitat"
msgid "workspace.options.position"
msgstr "Posició"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "Prototip"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "Radi"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "Inferior esquerra"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "Inferior dreta"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "Superior esquerra"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "Superior dreta"
@@ -3753,7 +3739,7 @@ msgstr "Recent"
msgid "workspace.options.retry"
msgstr "Torna-ho a provar"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "Rotació"
@@ -3761,29 +3747,29 @@ msgstr "Rotació"
msgid "workspace.options.search-font"
msgstr "Cerca tipografia"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr ""
"Seleccioneu una forma, un tauler o un grup per a arrossegar una connexió a "
"un altre tauler."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "Colors seleccionats"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "Emplenament de selecció"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "Traç de la selecció"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "Difuminat"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "Color de l'ombra"
@@ -3795,47 +3781,48 @@ msgstr "Ombra caiguda"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "Ombra interior"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "Difusió"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "Ombra"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "Ombra del grup"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "Ombres de selecció"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "Mostra en l'exportació"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "Mostra al visor"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "Mida"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "Mides predefinides"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "Traç"
@@ -3854,15 +3841,15 @@ msgstr "Marcador de diamant"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "Fletxa de línia"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "Cap"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "Redó"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "Quadrat"
@@ -3876,71 +3863,71 @@ msgstr "Marcador quadrat"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "Fletxa triangular"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "Color del traç"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "Ample del traç"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "Centrat"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "A ratlles"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "Puntejat"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "Interior"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "Mixte"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "Exterior"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "Sòlid"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "Alinea a baix"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "Alinea al centre"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "Alinea a dalt"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "LTR"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "RTL"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "Alt automàtic"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "Ample automàtic"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "Fix"
@@ -3962,35 +3949,35 @@ msgstr "Minúscules"
msgid "workspace.options.text-options.none"
msgstr "Cap"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "Ratllat (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "Alinea el centre"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "Justifica"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "Alinea a l'esquerra"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "Alinea a la dreta"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "Text"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "Text del grup"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "Text de la selecció"
@@ -3999,7 +3986,7 @@ msgstr "Text de la selecció"
msgid "workspace.options.text-options.titlecase"
msgstr "Inicials en majúscules"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "Subratllat (%s)"
@@ -4008,21 +3995,21 @@ msgstr "Subratllat (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "Majúscules"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr ""
"Utilitzeu el botó de «play» de la capçalera per a executar la vista de "
"prototip."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "Ample"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "X"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Y"
@@ -4066,11 +4053,11 @@ msgstr "Separa els nodes (%s)"
msgid "workspace.path.actions.snap-nodes"
msgstr "Alinea els nodes (%s)"
-#: src/app/main/ui/workspace/plugins.cljs:83
+#: src/app/main/ui/workspace/plugins.cljs:84
msgid "workspace.plugins.button-open"
msgstr "Obre"
-#: src/app/main/ui/workspace/plugins.cljs:183
+#: src/app/main/ui/workspace/plugins.cljs:184
msgid "workspace.plugins.install"
msgstr "Instal·la"
@@ -4090,11 +4077,11 @@ msgstr "Copia"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "Selecciona al tauler"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "Crea un component"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "Crea components múltiples"
@@ -4102,7 +4089,7 @@ msgstr "Crea components múltiples"
msgid "workspace.shape.menu.cut"
msgstr "Retalla"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "Elimina"
@@ -4110,15 +4097,15 @@ msgstr "Elimina"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "Elimina l'inici del flux"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "Desconnecta la instància"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "Desenganxa les instàncies"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "Diferència"
@@ -4130,11 +4117,11 @@ msgstr "Duplica"
msgid "workspace.shape.menu.edit"
msgstr "Edita"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "Exclou"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "Aplana"
@@ -4167,19 +4154,19 @@ msgstr "Vés al fitxer del component principal"
msgid "workspace.shape.menu.group"
msgstr "Agrupa"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "Amaga"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "Mostra/Amaga la interfície"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "Intersecció"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "Bloca"
@@ -4187,7 +4174,7 @@ msgstr "Bloca"
msgid "workspace.shape.menu.mask"
msgstr "Màscara"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "Enganxa"
@@ -4195,7 +4182,7 @@ msgstr "Enganxa"
msgid "workspace.shape.menu.path"
msgstr "Camí"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "Desfés les modificacions"
@@ -4203,11 +4190,11 @@ msgstr "Desfés les modificacions"
msgid "workspace.shape.menu.select-layer"
msgstr "Selecciona la capa"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "Mostra"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "Vés al component principal"
@@ -4220,6 +4207,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "Estableix com a miniatura"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "Transforma en camí"
@@ -4227,11 +4215,11 @@ msgstr "Transforma en camí"
msgid "workspace.shape.menu.ungroup"
msgstr "Desagrupa"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "Unió"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "Desbloca"
@@ -4244,15 +4232,15 @@ msgstr "Desemmascara"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "Actualitza els components principals"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "Actualitza el component principal"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "Historial"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "Capes"
@@ -4292,7 +4280,7 @@ msgstr "Textos"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "Atributs SVG importats"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "Pàgines"
@@ -4300,7 +4288,7 @@ msgstr "Pàgines"
msgid "workspace.sitemap"
msgstr "Mapa del lloc"
-#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "Recursos"
@@ -4308,7 +4296,7 @@ msgstr "Recursos"
msgid "workspace.toolbar.color-palette"
msgstr "Paleta de colors (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "Comentaris (%s)"
@@ -4507,15 +4495,15 @@ msgstr "Operació sobre %s"
msgid "workspace.undo.title"
msgstr "Historial"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "Descarta"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "Hi ha actualitzacions a les biblioteques compartides"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "Actualitza"
diff --git a/frontend/translations/cs.po b/frontend/translations/cs.po
index 56dcc07b4a..32335a57f1 100644
--- a/frontend/translations/cs.po
+++ b/frontend/translations/cs.po
@@ -1,15 +1,15 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-11 07:21+0000\n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
"Last-Translator: \"Amerey.eu\" \n"
-"Language-Team: Czech "
-" \n"
+"Language-Team: Czech \n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
-"X-Generator: Weblate 5.13-dev\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -177,7 +177,7 @@ msgstr "Open source řešení pro design a prototypování."
msgid "auth.terms-and-privacy-agreement"
msgstr "Souhlasím se [smluvními podmínkami](%s) a [zásadami ochrany soukromí](%s)."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Všeobecné podmínky poskytování služeb"
@@ -204,7 +204,7 @@ msgstr "...branding, ilustrace, marketing atd."
msgid "comments.mentions.not-found"
msgstr "Pro @%s nebyli nalezeni žádní lidé"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Zveřejnit"
@@ -277,7 +277,7 @@ msgstr "Sdílet prototypy"
msgid "common.share-link.view-all"
msgstr "Vybrat vše"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Zrušit zveřejnění"
@@ -400,7 +400,7 @@ msgstr "Token nemá žádné datum vypršení platnosti"
msgid "dashboard.add-file"
msgstr "Přidat soubor"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Přidat jako sdílenou knihovnu"
@@ -408,31 +408,31 @@ msgstr "Přidat jako sdílenou knihovnu"
msgid "dashboard.change-email"
msgstr "Změnit e-mail"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(zkopírovat)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Vytvořit nový tým"
-#: src/app/main/ui/workspace/main_menu.cljs:631
+#: src/app/main/ui/workspace/main_menu.cljs:659
msgid "dashboard.create-version-menu"
msgstr "Připnout tuto verzi"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Váš Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Smazat tým"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Stáhnout soubor Penpot (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Stáhnout standardní soubor (.svg + .json)"
@@ -486,7 +486,7 @@ msgstr "Zatím žádné knihovny."
msgid "dashboard.export-binary-multi"
msgstr "Stáhnout soubory %s Penpot (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Exportovat tabule do PDF"
@@ -502,7 +502,7 @@ msgstr "Exportovat soubory Penpot %s"
msgid "dashboard.export-multiple.selected"
msgstr "%s z %s prvků vybráno"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Exportovat"
@@ -702,11 +702,11 @@ msgstr "Nahrávání dat na server (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Nahrávání souboru: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Pozvat do týmu"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Odejít z týmu"
@@ -718,7 +718,7 @@ msgstr "Knihovny a šablony"
msgid "dashboard.libraries-and-templates.explore"
msgstr "Prozkoumejte je víc a zjistěte, jak přispět"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "Při importu šablony došlo k problému. Šablona nebyla importována."
@@ -750,7 +750,7 @@ msgstr "Přesunout do jiného týmu"
msgid "dashboard.new-file"
msgstr "+ Nový soubor"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Nový soubor"
@@ -758,7 +758,7 @@ msgstr "Nový soubor"
msgid "dashboard.new-project"
msgstr "+ Nový projekt"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Nový projekt"
@@ -766,11 +766,11 @@ msgstr "Nový projekt"
msgid "dashboard.no-matches-for"
msgstr "Nebyly nalezeny žádné shody pro “%s“"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Připnuté projekty se zobrazí zde"
-#: src/app/main/ui/dashboard/comments.cljs:90
+#: src/app/main/ui/dashboard/comments.cljs:91
msgid "dashboard.notifications"
msgstr "Oznámení"
@@ -782,7 +782,7 @@ msgstr "Vaše e-mailová adresa byla úspěšně aktualizována"
msgid "dashboard.notifications.email-verified-successfully"
msgstr "Vaše e-mailová adresa byla úspěšně ověřena"
-#: src/app/main/data/profile.cljs:272
+#: src/app/main/data/profile.cljs:273
msgid "dashboard.notifications.notifications-saved"
msgstr "Nastavení oznámení bylo aktualizováno"
@@ -790,11 +790,11 @@ msgstr "Nastavení oznámení bylo aktualizováno"
msgid "dashboard.notifications.password-saved"
msgstr "Heslo bylo úspěšně uloženo!"
-#: src/app/main/ui/dashboard/comments.cljs:44
+#: src/app/main/ui/dashboard/comments.cljs:45
msgid "dashboard.notifications.view"
msgstr "Zobrazit oznámení"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "Počet členů: %s"
@@ -826,7 +826,7 @@ msgstr "Nyní jste vlastníkem tohoto týmu."
msgid "dashboard.permissions-change.viewer"
msgstr "Nyní jste v tomto týmu divákem."
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Připnout/Odepnout"
@@ -863,7 +863,7 @@ msgstr "Již nejste součástí týmu „%s“."
msgid "dashboard.save-settings"
msgstr "Uložit nastavení"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Vyhledat…"
@@ -943,7 +943,7 @@ msgstr "Oznámení"
msgid "dashboard.show-all-files"
msgstr "Zobrazit všechny soubory"
-#: src/app/main/ui/workspace/main_menu.cljs:638
+#: src/app/main/ui/workspace/main_menu.cljs:666
msgid "dashboard.show-version-history"
msgstr "Historie verze"
@@ -969,7 +969,7 @@ msgstr[2] "Vaše soubory byly úspěšně duplikovány"
msgid "dashboard.success-duplicate-project"
msgstr "Váš projekt byl úspěšně duplikován"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Váš soubor byl úspěšně přesunut"
@@ -981,15 +981,15 @@ msgstr "Vaše soubory byly úspěšně přesunuty"
msgid "dashboard.success-move-project"
msgstr "Váš projekt byl úspěšně přesunut"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Informace o týmu"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Členové týmu"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Projekty týmu"
@@ -1005,7 +1005,7 @@ msgstr "Výsledky vyhledávání"
msgid "dashboard.type-something"
msgstr "Zadejte výraz pro hledání"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Zrušit zveřejnění knihovny"
@@ -1013,50 +1013,50 @@ msgstr "Zrušit zveřejnění knihovny"
msgid "dashboard.update-settings"
msgstr "Aktualizovat nastavení"
-#: src/app/main/ui/dashboard/sidebar.cljs:856
+#: src/app/main/ui/dashboard/sidebar.cljs:976
msgid "dashboard.upgrade-plan.no-limits"
msgstr "Kreativitě se meze nekladou"
-#: src/app/main/ui/dashboard/sidebar.cljs:854
+#: src/app/main/ui/dashboard/sidebar.cljs:974
msgid "dashboard.upgrade-plan.penpot-free"
msgstr "Penpot Free"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "Je aktivní"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "Když je tento webhook spuštěn, budou doručeny podrobnosti o události"
-#: src/app/main/ui/dashboard/team.cljs:982
+#: src/app/main/ui/dashboard/team.cljs:1160
msgid "dashboard.webhooks.cant-edit"
msgstr "Smazat nebo upravit můžete pouze vámi vytvořené webhooky."
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "Typ obsahu"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "Vytvořit webhook"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "Webhook byl úspěšně vytvořen."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"Webhooky jsou jednoduchým způsobem, jak umožnit jiným webům a aplikacím, "
"aby byly upozorňovány na určité události v Penpotu. Na každou z vámi "
"poskytnutých adres URL odešleme požadavek POST."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "Chcete-li webhook přidat, stiskněte tlačítko „Přidat webhook“."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "Dosud nebyly vytvořeny žádné webhooky."
@@ -1076,7 +1076,7 @@ msgstr "E-mail"
msgid "dashboard.your-name"
msgstr "Vaše jméno"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Váš Penpot"
@@ -1092,15 +1092,15 @@ msgstr "Pozor"
msgid "ds.component-subtitle"
msgstr "Komponenty k aktualizaci:"
-#: src/app/main/ui/workspace/plugins.cljs:338, src/app/main/ui/workspace/plugins.cljs:392
+#: src/app/main/ui/workspace/plugins.cljs:339, src/app/main/ui/workspace/plugins.cljs:393
msgid "ds.confirm-allow"
msgstr "Povolit"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Zrušit"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "OK"
@@ -1152,11 +1152,11 @@ msgstr "Jako heslo nelze použít váš e-mail"
msgid "errors.email-domain-not-allowed"
msgstr "Doména není povolena"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "E-mail «%s» má mnoho trvalých zpráv o nedoručitelnosti."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "E-mail «%s» byl nahlášen jako spam nebo byl trvale nedostupný."
@@ -1170,11 +1170,6 @@ msgstr ""
msgid "errors.feature-not-supported"
msgstr "Funkce '%s' není podporována."
-#: src/app/main/ui/auth/register.cljs, src/app/main/ui/dashboard/team_form.cljs, src/app/main/ui/onboarding/team_choice.cljs, src/app/main/ui/setti ngs/access_tokens.cljs, src/app/main/ui/settings/feedback.cljs, src/app/main/ui/settings/profile.cljs, src/app/main/ui/workspace/sidebar/assets.cljs
-#, unused
-msgid "errors.field-max-length"
-msgstr "Musí obsahovat maximálně 1 znak."
-
#, unused
msgid "errors.field-min-length"
msgstr "Musí obsahovat alespoň 1 znak."
@@ -1191,7 +1186,7 @@ msgstr ""
"který se pokoušíte otevřít. Před otevřením souboru je třeba provést migraci "
"pro '%s'."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Něco se pokazilo."
@@ -1224,11 +1219,11 @@ msgstr "Tato pozvánka byla pravděpodobně zrušena nebo vypršela její platno
msgid "errors.ldap-disabled"
msgstr "Ověřování LDAP je vypnuto."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "Dosáhli jste '%s' kvóty. Kontaktujte podporu."
-#: src/app/main/ui/dashboard/team.cljs:185, src/app/main/ui/onboarding/team_choice.cljs:101
+#: src/app/main/ui/dashboard/team.cljs:187, src/app/main/ui/dashboard/team.cljs:849, src/app/main/ui/onboarding/team_choice.cljs:101
msgid "errors.maximum-invitations-by-request-reached"
msgstr ""
"Bylo dosaženo maximálního (%s) počtu e-mailů, které lze pozvat v jedné "
@@ -1246,7 +1241,7 @@ msgstr "Zdá se, že obsah obrázku neodpovídá příponě souboru."
msgid "errors.media-type-not-allowed"
msgstr "Zdá se, že toto není platný obrázek."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"Profil, který zvete, má ztlumené e-maily (zprávy o spamu nebo vysoké "
@@ -1274,7 +1269,7 @@ msgstr "Neplatná data ve schránce"
msgid "errors.profile-blocked"
msgstr "Profil je zablokován"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr "Váš profil má ztlumené e-maily (zprávy o spamu nebo vysoká nedoručitelnost)."
@@ -1286,17 +1281,17 @@ msgstr "Registrace je momentálně zakázána."
msgid "errors.team-feature-mismatch"
msgstr "Zjištěna nekompatibilní funkce '%s'"
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr ""
"Nedostatečný počet členů pro opuštění týmu, pravděpodobně jste chtěli tým "
"smazat."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "Člen, kterého se pokoušíte přiřadit, neexistuje."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr "Vlastník nemůže opustit tým, musíte přeřadit roli vlastníka."
@@ -1316,31 +1311,31 @@ msgstr "Chyba ověření"
msgid "errors.version-not-supported"
msgstr "Soubor má nekompatibilní číslo verze"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "Chyba připojení, adresa URL není dostupná"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "Adresa URL neprošla ověřením."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "Poslední dodávka nebyla úspěšná."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "Chyba při ověřování SSL."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "Timeout"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "Při ověřování došlo k neočekávané chybě"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "Neočekávaný stav %s"
@@ -1404,19 +1399,19 @@ msgstr "Došlo k chybě"
msgid "inspect.attributes.blur"
msgstr "Rozostření"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Hodnota"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1424,7 +1419,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Výplň"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Stáhnout zdrojový obrázek"
@@ -1518,81 +1513,84 @@ msgstr "Plná"
msgid "inspect.attributes.stroke.width"
msgstr "Šířka"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Typografie"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Rodina písem"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Velikost písma"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Styl písma"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "Tloušťka písma"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Mezery mezi písmeny"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Výška řádku"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Dekorace textu"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Žádná"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Podtržení"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Transformace textu"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "První písmena velká"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "Malá písmena"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Žádná"
-#: src/app/main/ui/inspect/attributes/text.cljs:159
+#: src/app/main/ui/inspect/attributes/text.cljs:152
msgid "inspect.attributes.typography.text-transform.unset"
msgstr "Nenastaveno"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "Velká písmena"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr ""
"Pokud se chcete dozvědět více o inspektorovi designu, navštivte centrum "
"nápovědy společnosti Penpot"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "Více informací o inspektorovi"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr ""
"Vyberte tvar, tabuli nebo skupinu, abyste mohli zkontrolovat jejich "
@@ -1654,7 +1652,7 @@ msgstr "Text"
msgid "inspect.tabs.info"
msgstr "Informace"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Zkratky"
@@ -1666,11 +1664,11 @@ msgstr "Přijmout"
msgid "labels.access-tokens"
msgstr "Přístupové tokeny"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "Aktivní"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.add"
msgstr "Přidat"
@@ -1678,11 +1676,11 @@ msgstr "Přidat"
msgid "labels.add-custom-font"
msgstr "Přidat vlastní písmo"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.adding"
msgstr "Přidávání..."
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Správce"
@@ -1690,7 +1688,7 @@ msgstr "Správce"
msgid "labels.adobe-xd"
msgstr "Adobe XD"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Vše"
@@ -1713,7 +1711,7 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "Špatná brána"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Zrušit"
@@ -1721,11 +1719,11 @@ msgstr "Zrušit"
msgid "labels.canva"
msgstr "Canva"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Zavřít"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:186
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:181
msgid "labels.collapse"
msgstr "Sbalit"
@@ -1737,11 +1735,11 @@ msgstr "Komentář"
msgid "labels.comment.mark-as-solved"
msgstr "Označit jako vyřešené"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Komentáře"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Komunita"
@@ -1749,7 +1747,7 @@ msgstr "Komunita"
msgid "labels.confirm-password"
msgstr "Potvrďte heslo"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Pokračovat"
@@ -1761,7 +1759,7 @@ msgstr "Pokračovat s"
msgid "labels.continue-with-penpot"
msgstr "Můžete pokračovat s účtem Penpot"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "Kopírovat odkaz"
@@ -1769,7 +1767,7 @@ msgstr "Kopírovat odkaz"
msgid "labels.copyright"
msgstr "Kaleidos @2024"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Vytvořit"
@@ -1789,7 +1787,7 @@ msgstr "Vlastní písma"
msgid "labels.dashboard"
msgstr "Menu"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Smazat"
@@ -1801,7 +1799,7 @@ msgstr "Smazat komentář"
msgid "labels.delete-comment-thread"
msgstr "Smazat vlákno"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Smazat pozvánku"
@@ -1818,15 +1816,15 @@ msgstr "Vývojář"
msgid "labels.director"
msgstr "Ředitel"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "Zahodit"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Pracovní verze"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Upravit"
@@ -1834,7 +1832,7 @@ msgstr "Upravit"
msgid "labels.edit-file"
msgstr "Upravit soubor"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Editor"
@@ -1843,11 +1841,11 @@ msgstr "Editor"
msgid "labels.event"
msgstr "Událost"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Platnost vypršela"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Exportovat"
@@ -1875,7 +1873,7 @@ msgstr "Poskytovatelé písem"
msgid "labels.font-variants"
msgstr "Styly"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Písma"
@@ -1889,11 +1887,11 @@ msgstr "Zakladatel / viceprezident"
msgid "labels.freelancer"
msgstr "Jsem freelancer"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "Úložiště Github"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Poslat zpětnou vazbu"
@@ -1905,19 +1903,19 @@ msgstr "Jít zpět"
msgid "labels.graphic-design"
msgstr "Grafický design"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Centrum nápovědy"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Skrýt vyřešené komentáře"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:134
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:130
msgid "labels.import"
msgstr "Import"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "Neaktivní"
@@ -1939,7 +1937,7 @@ msgstr "Interní chyba"
msgid "labels.invision"
msgstr "InVision"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Pozvánky"
@@ -1947,7 +1945,7 @@ msgstr "Pozvánky"
msgid "labels.language"
msgstr "Jazyk"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Knihovny a šablony"
@@ -1963,7 +1961,7 @@ msgstr "Přihlásit se ne registrovat"
msgid "labels.login"
msgstr "Přihlášení"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Odhlásit se"
@@ -1971,11 +1969,11 @@ msgstr "Odhlásit se"
msgid "labels.marketing"
msgstr "Marketing"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Člen"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Členové"
@@ -1983,15 +1981,15 @@ msgstr "Členové"
msgid "labels.new-password"
msgstr "Nové heslo"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "Další"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "Vše je aktuální! Zde se zobrazí upozornění na nové komentáře."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "Nejsou žádné pozvánky."
@@ -2008,7 +2006,7 @@ msgstr "Ups!"
msgid "labels.notifications"
msgstr "Oznámení"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "1 soubor"
@@ -2022,7 +2020,7 @@ msgstr[0] "1 tabule"
msgstr[1] "%s tabule"
msgstr[2] "%s tabulí"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "1 projekt"
@@ -2042,7 +2040,7 @@ msgstr "Staré heslo"
msgid "labels.only-yours"
msgstr "Jen vaše"
-#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:309, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:338
+#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:310, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:339
msgid "labels.options"
msgstr "Možnosti"
@@ -2058,7 +2056,7 @@ msgstr "Jiné (upřesněte)"
msgid "labels.other-short"
msgstr "Ostatní"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Majitel"
@@ -2066,7 +2064,7 @@ msgstr "Majitel"
msgid "labels.password"
msgstr "Heslo"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "Nevyřízený"
@@ -2090,11 +2088,11 @@ msgstr "Produktový nebo projektový manažer"
msgid "labels.profile"
msgstr "Profil"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Projekty"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Poznámky k verzi"
@@ -2108,11 +2106,11 @@ msgstr "Znovu načíst soubor"
msgid "labels.remove"
msgstr "Odstranit"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Odebrat člena"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Přejmenovat"
@@ -2140,7 +2138,7 @@ msgstr "nová odpověď"
msgid "labels.reply.thread"
msgstr "Odpověď"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "Znovu poslat pozvánku"
@@ -2152,15 +2150,15 @@ msgstr "Obnovit"
msgid "labels.retry"
msgstr "Zkusit znovu"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Role"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Uložit"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:715
+#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:730
msgid "labels.search"
msgstr "Hledat"
@@ -2188,11 +2186,11 @@ msgstr "Provádíme plánovanou údržbu našich systémů."
msgid "labels.service-unavailable.main-message"
msgstr "Služba je nedostupná"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:79
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:75
msgid "labels.sets"
msgstr "Sady"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Nastavení"
@@ -2204,11 +2202,11 @@ msgstr "Sdílet"
msgid "labels.share-prototype"
msgstr "Sdílet prototyp"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Knihovny"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Zobrazit všechny komentáře"
@@ -2216,11 +2214,11 @@ msgstr "Zobrazit všechny komentáře"
msgid "labels.show-comments-list"
msgstr "Zobrazit seznam komentářů"
-#: src/app/main/ui/workspace/comments.cljs:67, src/app/main/ui/workspace/comments.cljs:139
+#: src/app/main/ui/workspace/comments.cljs:68, src/app/main/ui/workspace/comments.cljs:140
msgid "labels.show-mentions"
msgstr "Zobrazit pouze vaše zmínky"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Zobrazit pouze vaše komentáře"
@@ -2232,7 +2230,7 @@ msgstr "Sketch"
msgid "labels.start"
msgstr "Start"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Status"
@@ -2254,7 +2252,7 @@ msgstr "Člen týmu"
msgid "labels.themes"
msgstr "Motivy"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Tutoriály"
@@ -2282,15 +2280,15 @@ msgstr "Nahrát vlastní písma"
msgid "labels.uploading"
msgstr "Nahrávání…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "Jen pro čtení"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Prohlížeč"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Webhooks"
@@ -2298,11 +2296,11 @@ msgstr "Webhooks"
msgid "labels.write-new-comment"
msgstr "Napsat nový komentář"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(vy)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "Váš účet"
@@ -2311,23 +2309,23 @@ msgstr "Váš účet"
msgid "labels.youtube"
msgstr "YouTube"
-#: src/app/main/ui/workspace/colorpicker.cljs:449, src/app/main/ui/workspace/colorpicker.cljs:450, src/app/main/ui/workspace/colorpicker.cljs:452
+#: src/app/main/ui/workspace/colorpicker.cljs:486, src/app/main/ui/workspace/colorpicker.cljs:487, src/app/main/ui/workspace/colorpicker.cljs:489
msgid "media.choose-image"
msgstr "Vyberte obrázek"
-#: src/app/main/ui/workspace/colorpicker.cljs:244
+#: src/app/main/ui/workspace/colorpicker.cljs:256
msgid "media.gradient"
msgstr "Přechod"
-#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:44, src/app/main/ui/ds/utilities/swatch.cljs:57, src/app/main/ui/inspect/attributes/common.cljs:63, src/app/main/ui/workspace/colorpicker.cljs:246, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:251
+#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:45, src/app/main/ui/ds/utilities/swatch.cljs:58, src/app/main/ui/inspect/attributes/common.cljs:44, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:65, src/app/main/ui/workspace/colorpicker.cljs:258, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:395
msgid "media.image"
msgstr "Obrázek"
-#: src/app/main/ui/inspect/attributes/common.cljs:74
+#: src/app/main/ui/inspect/attributes/common.cljs:55
msgid "media.image.short"
msgstr "obr"
-#: src/app/main/ui/workspace/colorpicker.cljs:442
+#: src/app/main/ui/workspace/colorpicker.cljs:479
msgid "media.keep-aspect-ratio"
msgstr "Zachovat poměr stran"
@@ -2345,7 +2343,7 @@ msgstr "Načítání obrázku…"
msgid "media.radial"
msgstr "Radiální"
-#: src/app/main/ui/workspace/colorpicker.cljs:242
+#: src/app/main/ui/workspace/colorpicker.cljs:254
msgid "media.solid"
msgstr "Plná"
@@ -2420,19 +2418,19 @@ msgstr "Vytvořit token"
msgid "modals.create-access-token.title"
msgstr "Vygenerujte přístupový token"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "Vytvořit webhook"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "Vytvořit webhook"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "Adresa URL datové části"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://example.com/postreceive"
@@ -2478,11 +2476,11 @@ msgstr ""
msgid "modals.delete-comment-thread.title"
msgstr "Smazat konverzaci"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "Opravdu chcete smazat tuto anotaci?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "Smazat anotaci"
@@ -2528,11 +2526,11 @@ msgstr "Opravdu chcete smazat toto písmo? Pokud je použito v souboru, nenačte
msgid "modals.delete-font.title"
msgstr "Mazání písma"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Opravdu chcete smazat tuto stránku?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Smazat stránku"
@@ -2583,29 +2581,29 @@ msgstr[0] "Mazání souboru"
msgstr[1] "Mazání souborů"
msgstr[2] "Mazání souborů"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Smazat tým"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Opravdu chcete tento tým smazat? Všechny projekty a soubory spojené s týmem "
"budou trvale smazány."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Mazání týmu"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Smazat člena"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Opravdu chcete tohoto člena smazat z týmu?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Smazat člena týmu"
@@ -2622,57 +2620,57 @@ msgstr[2] ""
"Aktiva, která již byla v těchto souborech použita, tam zůstanou (nebude "
"porušen žádný návrh)."
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "Smazat webhook"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "Opravdu chcete tento webhook smazat?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "Mazání webhooku"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "Upravit webhook"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "Upravit webhook"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Poslat pozvánku"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "E-maily oddělené čárkou"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr ""
"Některé e-maily jsou od současných členů týmu. Jejich pozvánky nebudou "
"odeslány."
-#: src/app/main/ui/dashboard/team.cljs:220
+#: src/app/main/ui/dashboard/team.cljs:222
msgid "modals.invite-team-member.text"
msgstr ""
"Můžete pozvat členy do týmu, aby měli přístup k tomuto souboru a všem "
"souborům týmu."
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "Pozvat členy do týmu"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"Protože jste jediným členem tohoto týmu, tým bude smazán spolu s jeho "
"projekty a soubory."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "Opravdu chcete opustit tým %s?"
@@ -2700,15 +2698,15 @@ msgstr "Vyberte člena, kterého chcete povýšit"
msgid "modals.leave-and-reassign.title"
msgstr "Než odejdete"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Opustit tým"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Opravdu chcete opustit tento tým?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Opuštění týmu"
@@ -2733,39 +2731,39 @@ msgstr[0] "Přesunout knihovnu"
msgstr[1] "Přesunout knihovny"
msgstr[2] "Přesunout knihovny"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "Posunout o"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Převést vlastnictví"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"Pokud převedete vlastnictví, změníte svou roli na správce a ztratíte "
"některá oprávnění k tomuto týmu. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr ""
"Jste současným vlastníkem tohoto týmu. Opravdu chcete udělat %s novým "
"vlastníkem týmu?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Nový majitel týmu"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "Publikovat"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "Vaše knihovna je prázdná. Opravdu to chcete publikovat?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "Publikovat prázdnou knihovnu"
@@ -2823,21 +2821,21 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Aktualizujte komponenty ve sdílené knihovně"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Aktualizovat"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Zrušit"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"Chystáte se aktualizovat komponentu ve sdílené knihovně. To může ovlivnit "
"další soubory, které ji používají."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Aktualizovat komponentu ve sdílené knihovně"
@@ -2947,11 +2945,11 @@ msgstr "Přestávka na údržbu: do 5 minut budeme mimo provoz na krátkou údr
msgid "notifications.by-code.upgrade-version"
msgstr "K dispozici je nová verze, obnovte prosím stránku"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "Pozvánka byla úspěšně odeslána"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "Odkaz na pozvánku zkopírován"
@@ -3096,7 +3094,7 @@ msgstr ""
"Nezapomeňte zahrnout všechny. Vývojáře, designéry, manažéry... rozmanitost "
"se počítá :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "Pozvat s rolí:"
@@ -3314,665 +3312,649 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "Přejít na přihlášení"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "Odpojit"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "Smíšený"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:283
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:423
msgid "settings.remove-color"
msgstr "Odstranit barvu"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:288
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:428
msgid "settings.select-this-color"
msgstr "Vyberte položky pomocí tohoto stylu"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Základy"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "Nástěnka"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Prohlížeč"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Pracovní plocha"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Zarovnání"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Upravit"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "Obecný"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "Obecný"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Hlavní menu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "Upravit vrstvy"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Navigace"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Navigace"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Navigace"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Panely"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Cesty"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Tvary"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "Texty"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Nástroje"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Přiblížení"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Přiblížení"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Komentáře"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "Přidat uzel"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "Zarovnat dolů"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "Zarovnat na střed"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "Zarovnat vodorovně na střed"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "Zarovnat do bloku"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "Zarovnat vlevo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "Zarovnat vpravo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "Zarovnat nahoru"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "Zarovnat na střed svisle"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "Vytvořit tabuli z výběru"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "Přepnout tučné písmo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "Rozdíl"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "Vyloučení"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "Průnik"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "Sloučení"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "Přesunout dozadu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Přesunout dozadu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "Přesunout dopředu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "Posunout dopředu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "Vymazat zpět"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Kopírovat"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
msgid "shortcuts.copy-link"
msgstr "Zkopírovat odkaz do schránky"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "Vytvořit nový"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Vyjmout"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "Oddálit"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Smazat"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "Smazat uzel"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "Odpojit komponentu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Křivka"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "Elipsa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Tabule"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "Nakreslit cestu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Cesta"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Obdélník"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Text"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Duplikovat"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "Zrušit"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "Exportovat tvary"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "Přiblížit, aby se vešlo vše"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "Překlopit vodorovně"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "Překlopit svisle"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "Zmenšit velikost písma"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "Zvětšit velikost písma"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "Přejít na koncepty"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "Přejít na sdílené knihovny"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Hledat"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Skupina"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "Rozložit vodorovně"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "Zobrazit/skrýt uživatelské rozhraní"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "Přiblížit"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "Vložit obrázek"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "Přepnout kurzívu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "Propojit uzly"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
-msgid "shortcuts.letter-spacing-dec"
-msgstr "Zmenšit mezery mezi písmeny"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "Zvětšit mezery mezi písmeny"
-
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
-msgid "shortcuts.line-height-dec"
-msgstr "Snížit výšku řádku"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
-msgid "shortcuts.line-height-inc"
-msgstr "Zvýšit výšku řádku"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.line-through"
msgstr "Přepnout řádek"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "Udělat roh"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "Udělat křivku"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "Maska"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "Sloučit uzly"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "Posunout"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "Posunout dolů rychle"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "Posunout doleva rychle"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "Posunout doprava rychle"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "Posunout nahoru rychle"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "Posunout uzel"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "Posunout dolů"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "Posunout vlevo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "Posunout vpravo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "Posunout nahoru"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "Další tabule"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "Nebyly nalezeny žádné zkratky"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "Nastavit průhlednost na 100 %"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "Nastavit průhlednost na 10 %"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "Nastavit průhlednost na 20 %"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "Nastavit průhlednost na 30 %"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "Nastavit průhlednost na 40 %"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "Nastavit průhlednost na 50 %"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "Nastavit průhlednost na 60 %"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "Nastavit průhlednost na 70 %"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "Nastavit průhlednost na 80 %"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "Nastavit průhlednost na 90 %"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "Výběr barvy"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "Přejít do sekce komentářů"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "Přejít na nástěnku"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "Přejděte do sekce inspektor"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "Přejít do části interakce"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "Přejít do části interakce"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "Přejít na pracovní plochu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " nebo "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Vložit"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "Předchozí tabule"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "Znovu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
msgid "shortcuts.rename"
msgstr "Přejmenovat"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "Obnovit přiblížení"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
msgid "shortcuts.scale"
msgstr "Měřítko"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "Prohledat zkratky"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "Vybrat vše"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
msgid "shortcuts.select-next"
msgstr "Vybrat další vrstvu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
msgid "shortcuts.select-parent-layer"
msgstr "Vybrat nadřazenou vrstvu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
msgid "shortcuts.select-prev"
msgstr "Vybrat předchozí vrstvu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "Rozdělit uzly"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "Zobrazit/skrýt mřížku pixelů"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "Zobrazit/skrýt zkratky"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "Přichytit k uzlům"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "Přichytit k mřížce pixelů"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "Začít upravovat"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "Začít měření"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "Zastavit měření"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "Nastavit náhledy"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "Klávesové zkratky"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "Přepnout dynamické zarovnání"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "Přepnout podklady"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "Přepnout paletu barev"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "Přepnout režim soustředění"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "Přepnout zobrazení na celou obrazovku"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
msgid "shortcuts.toggle-guides"
msgstr "Zobrazit / Skrýt vodící linky"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "Přepnout historii"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "Přepínání vrstev"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "Přidat/odebrat flexibilní rozložení"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
msgid "shortcuts.toggle-layout-grid"
msgstr "Přidat/odebrat rozložení mřížky"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "Uzamknout vybrané"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "Uzamknout proporce"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
msgid "shortcuts.toggle-rulers"
msgstr "Zobrazit / Skrýt pravítka"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
msgid "shortcuts.toggle-snap-guides"
msgstr "Přichytit na vodící linky"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
msgid "shortcuts.toggle-snap-ruler-guide"
msgstr "Přichytit k vodítkům pravítek"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "Přepnout paletu textu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
msgid "shortcuts.toggle-theme"
msgstr "Změnit motiv"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "Přepnout viditelnost"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "Přepnout styl přiblížení"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "Přepnout podtržení"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Zpět"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Zrušit seskupení"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Zrušit masku"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "Rozmístit vertikálně"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "Zmenšení zoomu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "Zvětšení zoomu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "Přiblížit vybrané"
@@ -4028,19 +4010,19 @@ msgstr "Heslo - Penpot"
msgid "title.settings.profile"
msgstr "Profil - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "Pozvánky – %s – Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "Členové - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Nastavení - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "Webhooks - %s - Penpot"
@@ -4110,43 +4092,43 @@ msgstr "Zobrazit interakce po kliknutí"
msgid "viewer.header.sitemap"
msgstr "Mapa stránek"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "Poslední doručení proběhlo úspěšně."
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Zarovnat vodorovně na střed (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "Rozmístit vodorovné mezery (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Zarovnat doleva (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Zarovnat doprava (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Zarovnat dolů (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Zarovnat svisle na střed (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "Rozmístit vertikální mezery (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Zarovnat nahoru (%s)"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:163
+#: src/app/main/ui/workspace/sidebar/assets.cljs:172
msgid "workspace.assets.add-library"
msgstr "Přidat knihovnu"
@@ -4155,19 +4137,19 @@ msgstr "Přidat knihovnu"
msgid "workspace.assets.assets"
msgstr "Podklady"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "Všechny podklady"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Barvy"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:493
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:497
msgid "workspace.assets.colors.add-color"
msgstr "Přidat barvu"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Komponenty"
@@ -4175,21 +4157,21 @@ msgstr "Komponenty"
msgid "workspace.assets.components.add-component"
msgstr "Přidat komponentu"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "Vytvořit skupinu"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr ""
"Vaše položky budou automaticky pojmenovány jako „název skupiny / název "
"položky“"
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Delete"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "Duplikovat"
@@ -4197,11 +4179,11 @@ msgstr "Duplikovat"
msgid "workspace.assets.duplicate-main"
msgstr "Duplikovat hlavní"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Upravit"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:177
+#: src/app/main/ui/workspace/sidebar/assets.cljs:186
msgid "workspace.assets.filter"
msgstr "Filtr"
@@ -4210,23 +4192,23 @@ msgstr "Filtr"
msgid "workspace.assets.graphics"
msgstr "Grafika"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:576
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:190, src/app/main/ui/workspace/sidebar/assets/components.cljs:576
msgid "workspace.assets.grid-view"
msgstr "Zobrazení mřížky"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Skupina"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "Název skupiny"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:572
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:191, src/app/main/ui/workspace/sidebar/assets/components.cljs:572
msgid "workspace.assets.list-view"
msgstr "Zobrazení seznamu"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "místní knihovna"
@@ -4238,15 +4220,15 @@ msgstr "Nebyly nalezeny žádné podklady"
msgid "workspace.assets.open-library"
msgstr "Otevřete soubor knihovny"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Přejmenovat"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "Přejmenovat skupinu"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "Hledat v podkladech"
@@ -4263,22 +4245,22 @@ msgstr[2] "Počet vybraných položek: %s"
msgid "workspace.assets.shared-library"
msgstr "Sdílená knihovna"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:237
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:235
msgid "workspace.assets.sidebar.components"
msgid_plural "workspace.assets.sidebar.components"
msgstr[0] "1 komponenta"
msgstr[1] "%s komponenty"
msgstr[2] "%s komponent"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:193
+#: src/app/main/ui/workspace/sidebar/assets.cljs:204
msgid "workspace.assets.sort"
msgstr "Seřadit"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Typografie"
-#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:404
+#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:405
msgid "workspace.assets.typography.add-typography"
msgstr "Přidat typografii"
@@ -4303,7 +4285,7 @@ msgstr "Mezery mezi písmeny"
msgid "workspace.assets.typography.line-height"
msgstr "Výška řádku"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -4315,59 +4297,59 @@ msgstr "Styly textu"
msgid "workspace.assets.typography.text-transform"
msgstr "Transformace textu"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "Zrušit seskupení"
-#: src/app/main/ui/workspace/context_menu.cljs:791
+#: src/app/main/ui/workspace/context_menu.cljs:794
msgid "workspace.context-menu.grid-cells.area"
msgstr "Vytvořit oblast"
-#: src/app/main/ui/workspace/context_menu.cljs:794
+#: src/app/main/ui/workspace/context_menu.cljs:797
msgid "workspace.context-menu.grid-cells.create-board"
msgstr "Vytvořit tabuli"
-#: src/app/main/ui/workspace/context_menu.cljs:786
+#: src/app/main/ui/workspace/context_menu.cljs:789
msgid "workspace.context-menu.grid-cells.merge"
msgstr "Sloučit buňky"
-#: src/app/main/ui/workspace/context_menu.cljs:749
+#: src/app/main/ui/workspace/context_menu.cljs:752
msgid "workspace.context-menu.grid-track.column.add-after"
msgstr "Přidat 1 sloupec vpravo"
-#: src/app/main/ui/workspace/context_menu.cljs:748
+#: src/app/main/ui/workspace/context_menu.cljs:751
msgid "workspace.context-menu.grid-track.column.add-before"
msgstr "Přidat 1 sloupec vlevo"
-#: src/app/main/ui/workspace/context_menu.cljs:750
+#: src/app/main/ui/workspace/context_menu.cljs:753
msgid "workspace.context-menu.grid-track.column.delete"
msgstr "Smazat sloupec"
-#: src/app/main/ui/workspace/context_menu.cljs:751
+#: src/app/main/ui/workspace/context_menu.cljs:754
msgid "workspace.context-menu.grid-track.column.delete-shapes"
msgstr "Smazat sloupec a tvary"
-#: src/app/main/ui/workspace/context_menu.cljs:747
+#: src/app/main/ui/workspace/context_menu.cljs:750
msgid "workspace.context-menu.grid-track.column.duplicate"
msgstr "Duplikovat sloupec"
-#: src/app/main/ui/workspace/context_menu.cljs:756
+#: src/app/main/ui/workspace/context_menu.cljs:759
msgid "workspace.context-menu.grid-track.row.add-after"
msgstr "Přidat 1 řádek níže"
-#: src/app/main/ui/workspace/context_menu.cljs:755
+#: src/app/main/ui/workspace/context_menu.cljs:758
msgid "workspace.context-menu.grid-track.row.add-before"
msgstr "Přidat 1 řádek výše"
-#: src/app/main/ui/workspace/context_menu.cljs:757
+#: src/app/main/ui/workspace/context_menu.cljs:760
msgid "workspace.context-menu.grid-track.row.delete"
msgstr "Smazat řádek"
-#: src/app/main/ui/workspace/context_menu.cljs:758
+#: src/app/main/ui/workspace/context_menu.cljs:761
msgid "workspace.context-menu.grid-track.row.delete-shapes"
msgstr "Smazat řádek a tvary"
-#: src/app/main/ui/workspace/context_menu.cljs:754
+#: src/app/main/ui/workspace/context_menu.cljs:757
msgid "workspace.context-menu.grid-track.row.duplicate"
msgstr "Duplikovat řádek"
@@ -4375,7 +4357,7 @@ msgstr "Duplikovat řádek"
msgid "workspace.focus.focus-mode"
msgstr "Režim soustředění"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "Vypnout režim soustředění"
@@ -4395,11 +4377,11 @@ msgstr "Lineární přechod"
msgid "workspace.gradients.radial"
msgstr "Radiální přechod"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "Zakázat dynamické zarovnání"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "Zakázat proporcionální měřítko"
@@ -4408,23 +4390,23 @@ msgstr "Zakázat proporcionální měřítko"
msgid "workspace.header.menu.disable-scale-text"
msgstr "Zakázat měřítko textu"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "Zakázat přichycení k vodicím lištám"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "Zakázat přichycení k pixelu"
-#: src/app/main/ui/workspace/main_menu.cljs:215
+#: src/app/main/ui/workspace/main_menu.cljs:243
msgid "workspace.header.menu.disable-snap-ruler-guides"
msgstr "Zakázat přichycení na vodící linky pravítek"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "Povolit dynamické zarovnání"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "Povolit proporcionální měřítko"
@@ -4433,51 +4415,51 @@ msgstr "Povolit proporcionální měřítko"
msgid "workspace.header.menu.enable-scale-text"
msgstr "Povolit měřítko textu"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "Přichytit k vodicím lištám"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "Povolit přichycení k pixelu"
-#: src/app/main/ui/workspace/main_menu.cljs:216
+#: src/app/main/ui/workspace/main_menu.cljs:244
msgid "workspace.header.menu.enable-snap-ruler-guides"
msgstr "Přichytit k vodítkům pravítek"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "Skrýt názvy tabulí"
-#: src/app/main/ui/workspace/main_menu.cljs:348
+#: src/app/main/ui/workspace/main_menu.cljs:376
msgid "workspace.header.menu.hide-guides"
msgstr "Skrýt vodící linky"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "Skrýt paletu barev"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "Skrýt mřížku pixelů"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "Skrýt pravítka"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "Skrýt paletu písem"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Upravit"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "Soubor"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "Nápověda a informace"
@@ -4486,59 +4468,59 @@ msgstr "Nápověda a informace"
msgid "workspace.header.menu.option.power-up"
msgstr "Nastartujte svůj plán"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "Předvolby"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "Zobrazit"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "Znovu"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "Vybrat vše"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "Zobrazit názvy tabulí"
-#: src/app/main/ui/workspace/main_menu.cljs:349
+#: src/app/main/ui/workspace/main_menu.cljs:377
msgid "workspace.header.menu.show-guides"
msgstr "Zobrazit vodící linky"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "Zobrazit paletu barev"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "Zobrazit mřížku pixelů"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Zobrazit pravítka"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "Zobrazit paletu písem"
-#: src/app/main/ui/workspace/main_menu.cljs:288
+#: src/app/main/ui/workspace/main_menu.cljs:316
msgid "workspace.header.menu.toggle-dark-theme"
msgstr "Přepnout na tmavý motiv"
-#: src/app/main/ui/workspace/main_menu.cljs:286, src/app/main/ui/workspace/main_menu.cljs:289
+#: src/app/main/ui/workspace/main_menu.cljs:314, src/app/main/ui/workspace/main_menu.cljs:317
msgid "workspace.header.menu.toggle-light-theme"
msgstr "Přepnout na světlý motiv"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "Zpět"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Resetovat"
@@ -4554,7 +4536,7 @@ msgstr "Uloženo"
msgid "workspace.header.saving"
msgstr "Ukládání"
-#: src/app/main/ui/workspace/right_header.cljs:239
+#: src/app/main/ui/workspace/right_header.cljs:240
msgid "workspace.header.share"
msgstr "Sdílet"
@@ -4563,11 +4545,11 @@ msgstr "Sdílet"
msgid "workspace.header.unsaved"
msgstr "Neuložené změny"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "Režim zobrazení (%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "Přiblížení"
@@ -4579,7 +4561,7 @@ msgstr "Zvětšit na celou obrazovku"
msgid "workspace.header.zoom-fit"
msgstr "Zmenšit na celou obrazovku"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "Přiblížit, aby se vše vešlo"
@@ -4587,19 +4569,19 @@ msgstr "Přiblížit, aby se vše vešlo"
msgid "workspace.header.zoom-full-screen"
msgstr "Celá obrazovka"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "Přiblížit vybrané"
-#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:621
msgid "workspace.layout_grid.editor.options.edit-grid"
msgstr "Upravit mřížku"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1300
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1301
msgid "workspace.layout_grid.editor.options.exit"
msgstr "Odejít"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:491
msgid "workspace.layout_grid.editor.padding.expand"
msgstr "Zobrazit možnosti mezer uvnitř všech stran"
@@ -4615,7 +4597,7 @@ msgstr "Hotovo"
msgid "workspace.layout_grid.editor.top-bar.locate"
msgstr "Lokalizovat"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1326
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1327
msgid "workspace.layout_grid.editor.top-bar.locate.tooltip"
msgstr "Vyhledat rozložení mřížky"
@@ -4624,10 +4606,6 @@ msgstr "Vyhledat rozložení mřížky"
msgid "workspace.libraries.add"
msgstr "Přidat"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "barvy %s"
-
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
msgstr "Ve vaší knihovně zatím nejsou žádné barevné styly"
@@ -4654,43 +4632,35 @@ msgstr "Nedávné barvy"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "Doplňkové RGB"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Uložit styl barev"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s komponenty"
-
-#: src/app/main/ui/workspace/libraries.cljs:371
+#: src/app/main/ui/workspace/libraries.cljs:404
msgid "workspace.libraries.empty.add-some"
msgstr "Nebo přidejte některé z těchto:"
-#: src/app/main/ui/workspace/libraries.cljs:365
+#: src/app/main/ui/workspace/libraries.cljs:398
msgid "workspace.libraries.empty.no-libraries"
msgstr "Ve vašem týmu nejsou žádné sdílené knihovny, které můžete hledat"
-#: src/app/main/ui/workspace/libraries.cljs:369
+#: src/app/main/ui/workspace/libraries.cljs:402
msgid "workspace.libraries.empty.some-templates"
msgstr "nějaké šablony zde"
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Knihovna souborů"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s grafika"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "KNIHOVNY V TOMTO SOUBORU"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "KNIHOVNY"
@@ -4699,11 +4669,11 @@ msgstr "KNIHOVNY"
msgid "workspace.libraries.library"
msgstr "KNIHOVNA"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "AKTUALIZACE KNIHOVNY"
-#: src/app/main/ui/workspace/libraries.cljs:360
+#: src/app/main/ui/workspace/libraries.cljs:393
msgid "workspace.libraries.loading"
msgstr "Načítání…"
@@ -4712,79 +4682,75 @@ msgstr "Načítání…"
msgid "workspace.libraries.more-templates"
msgstr "Můžete hledat "
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "Neexistují žádné sdílené knihovny, které by potřebovaly aktualizaci"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "Nebyly nalezeny žádné shody pro „%s“"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "Prohledat sdílené knihovny"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "SDÍLENÉ KNIHOVNY"
-#: src/app/main/ui/workspace/libraries.cljs:352
+#: src/app/main/ui/workspace/libraries.cljs:385
msgid "workspace.libraries.shared-library-btn"
msgstr "Připojit knihovnu"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Několik typografií"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Odpojte všechny typografie"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s typografie"
-
-#: src/app/main/ui/workspace/libraries.cljs:323
+#: src/app/main/ui/workspace/libraries.cljs:354
msgid "workspace.libraries.unlink-library-btn"
msgstr "Odpojit knihovnu"
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Aktualizace"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "zobrazit všechny změny"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "AKTUALIZACE"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "Kliknutím na tlačítko + přidáte interakce."
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:96
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:97
msgid "workspace.options.blur-options.add-blur"
msgstr "Přidat rozostření"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:117
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:118
msgid "workspace.options.blur-options.remove-blur"
msgstr "Odebrat rozostření"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Rozostření"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "Rozostření skupiny"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "Rozostření výběru"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:114
msgid "workspace.options.blur-options.toggle-blur"
msgstr "Přepnout rozostření"
@@ -4792,39 +4758,39 @@ msgstr "Přepnout rozostření"
msgid "workspace.options.canvas-background"
msgstr "Pozadí plátna"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "Oříznout obsah"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Komponenta"
-#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:193
+#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:196
msgid "workspace.options.component.annotation"
msgstr "Anotace"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "Kopírovat"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:185
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:188
msgid "workspace.options.component.create-annotation"
msgstr "Vytvořte anotaci"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "Upravit anotaci"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "Hlavní"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:706
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:721
msgid "workspace.options.component.swap"
msgstr "Vyměnit komponentu"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:765
msgid "workspace.options.component.swap.empty"
msgstr "V této knihovně zatím nejsou žádné položky"
@@ -4868,7 +4834,7 @@ msgstr "Nahoře"
msgid "workspace.options.constraints.topbottom"
msgstr "Nahoře a dole"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Design"
@@ -4881,22 +4847,22 @@ msgstr "Exportovat"
msgid "workspace.options.export-multiple"
msgstr "Exportovat výběr"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "Exportovat 1 prvek"
msgstr[1] "Exportovat %s prvky"
msgstr[2] "Exportovat %s prvků"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:188
+#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:214
msgid "workspace.options.export.add-export"
msgstr "Přidat export"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:235
+#: 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 "Odebrat export"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Přípona"
@@ -4904,7 +4870,7 @@ msgstr "Přípona"
msgid "workspace.options.exporting-complete"
msgstr "Export byl dokončen"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "Exportování…"
@@ -4916,27 +4882,27 @@ msgstr "Export se nezdařil"
msgid "workspace.options.exporting-object-slow"
msgstr "Export je nečekaně pomalý"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Výplň"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:194
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:234
msgid "workspace.options.fill.add-fill"
msgstr "Přidat barvu výplně"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:208
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:248
msgid "workspace.options.fill.remove-fill"
msgstr "Odebrat barvu výplně"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:392
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:474
msgid "workspace.options.fit-content"
msgstr "Změňte velikost panelu podle obsahu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "Přidat počáteční bod"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:178
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:179
msgid "workspace.options.flows.flow"
msgstr "Flow"
@@ -4945,19 +4911,19 @@ msgstr "Flow"
msgid "workspace.options.flows.flow-start"
msgstr "Začátek"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "Začátky"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:155
msgid "workspace.options.flows.remove-flow"
msgstr "Odstranit flow"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Automaticky"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "Sloupce"
@@ -4966,7 +4932,7 @@ msgstr "Sloupce"
msgid "workspace.options.grid.grid-title"
msgstr "Mřížka"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Barva"
@@ -4975,15 +4941,15 @@ msgstr "Barva"
msgid "workspace.options.grid.params.columns"
msgstr "Sloupce"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "Mezera"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Výška"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Mezera vně"
@@ -4992,7 +4958,7 @@ msgstr "Mezera vně"
msgid "workspace.options.grid.params.rows"
msgstr "Řádky"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "Nastavit jako výchozí"
@@ -5006,147 +4972,147 @@ msgstr "Velikost"
msgid "workspace.options.grid.params.type"
msgstr "Typ"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Dole"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Střed"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Vlevo"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Vpravo"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "Roztáhnout"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "Nahoře"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "Použít výchozí"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Šířka"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Řádky"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "Čtverec"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Výplň skupiny"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Ohraničení skupiny"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:320
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
msgid "workspace.options.guides.title"
msgstr "Vodící linky"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "Výška"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "Inspektor"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "Akce"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "Po prodlevě"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "Animace"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "Dissolve"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "Žádná"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "Push"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "Slide"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "automaticky"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "Přidejte překrytí pozadí"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "Zavřít při kliknutí mimo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "Zavřít překrytí"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "Zavřít překrytí: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "Prodleva"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "Cíl"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "Doba trvání"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "Easing"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "Ease"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "Ease in"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "Ease in out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "Ease out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "Linear"
@@ -5155,47 +5121,47 @@ msgstr "Linear"
msgid "workspace.options.interaction-in"
msgstr "Dovnitř"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "Mouse enter"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "Mouse leave"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "ms"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "Přejít na"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "Přejít na: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(nenastaveno)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "Efekt offsetu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "Při kliknutí"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "Otevřít překrytí"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "Otevřít překrytí: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "Otevřít adresu URL"
@@ -5204,87 +5170,87 @@ msgstr "Otevřít adresu URL"
msgid "workspace.options.interaction-out"
msgstr "Ven"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "Dole uprostřed"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "Dole vlevo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "Dole vpravo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "Střed"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "Ručně"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "Nahoře uprostřed"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "Nahoře vlevo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "Nahoře vpravo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "Pozice"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "Zachovat pozici posouvání"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "Předchozí obrazovka"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "Relativní k"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "já"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "Přepnout překrytí"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "Přepnout překrytí: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "Spustit"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "Při najetí myši"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "Při stisknutí"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "Interakce"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:735
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:736
msgid "workspace.options.interactions.add-interaction"
msgstr "Přidat interakci"
@@ -5293,67 +5259,67 @@ msgstr "Přidat interakci"
msgid "workspace.options.interactions.remove-interaction"
msgstr "Odebrat interakci"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "Color"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "Color burn"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "Color dodge"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "Darken"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "Difference"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "Exclusion"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Hard light"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Hue"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Lighten"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "Luminosity"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "Multiply"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "Normal"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "Overlay"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "Saturation"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Screen"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "Soft light"
@@ -5372,7 +5338,7 @@ msgstr "Seskupení vrstev"
msgid "workspace.options.layer-options.title.multiple"
msgstr "Vybrané vrstvy"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:202
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:207, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:213
msgid "workspace.options.layer-options.toggle-layer"
msgstr "Přepnout viditelnost vrstvy"
@@ -5381,19 +5347,19 @@ msgstr "Přepnout viditelnost vrstvy"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "Rozšířené možnosti"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "Maximální výška"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "Maximální šířka"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "Minimální výška"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "Minimální šířka"
@@ -5507,15 +5473,15 @@ msgstr "místo mezi"
msgid "workspace.options.layout.top"
msgstr "Nahoře"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "Více barev"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "Více barev knihovny"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "Průhlednost"
@@ -5524,27 +5490,27 @@ msgstr "Průhlednost"
msgid "workspace.options.position"
msgstr "Pozice"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "Prototyp"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "Poloměr"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "Dole vlevo"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "Dole vpravo"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "Nahoře vlevo"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "Nahoře vpravo"
@@ -5556,7 +5522,7 @@ msgstr "Nedávné"
msgid "workspace.options.retry"
msgstr "Opakovat"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "Otočit"
@@ -5564,31 +5530,31 @@ msgstr "Otočit"
msgid "workspace.options.search-font"
msgstr "Hledat písmo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr "Vyberte tvar, tabuli nebo skupinu a přetáhněte připojení k jiné tabuli."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "Vybrané barvy"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "Vyplnění výběru"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "Obrys výběru"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:341
msgid "workspace.options.shadow-options.add-shadow"
msgstr "Přidat stín"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "Rozostření"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "Barva stínu"
@@ -5600,55 +5566,56 @@ msgstr "Vržený stín"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "Vnitřní stín"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:348
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:183, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:354
msgid "workspace.options.shadow-options.remove-shadow"
msgstr "Odebrat stín"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "Rozpětí"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "Stín"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "Stín skupiny"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "Stiny výběru"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:174
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:179
msgid "workspace.options.shadow-options.toggle-shadow"
msgstr "Přepnout stín"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "Zobrazit v exportech"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "Zobrazit v režimu zobrazení"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "Velikost"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "Předvolby velikosti"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "Obrys"
@@ -5657,7 +5624,7 @@ msgstr "Obrys"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "Zakončení - kruh"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "Kruh"
@@ -5666,7 +5633,7 @@ msgstr "Kruh"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "Zakončení - diamant"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "Diamant"
@@ -5675,19 +5642,19 @@ msgstr "Diamant"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "Zakončení - šipka"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "Šipka"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "Žádné"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "Kulaté"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "Čtvercové"
@@ -5696,7 +5663,7 @@ msgstr "Čtvercové"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "Zakončení - čtverec"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "Obdélník"
@@ -5705,83 +5672,83 @@ msgstr "Obdélník"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "Zakončení - trojúhelník"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "Trojúhelník"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "Barva obrysu"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "Šířka obrysu"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:180
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:189
msgid "workspace.options.stroke.add-stroke"
msgstr "Přidat barvu obrysu"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "Uprostřed"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "Přerušovaný"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "Tečkovaný"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "Uvnitř"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "Smíšený"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "Vně"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:193
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:202
msgid "workspace.options.stroke.remove-stroke"
msgstr "Odebrat obrys"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "Plný"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "Zarovnat dolů"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "Zarovnat na střed"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "Zarovnat nahoru"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "LTR"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "RTL"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "Automatická výška"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "Automatická šířka"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "Pevná"
@@ -5803,35 +5770,35 @@ msgstr "Malá písmena"
msgid "workspace.options.text-options.none"
msgstr "Žádné"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "Přeškrtnutí (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "Zarovnat doprostřed"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "Zarovnat"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "Zarovnat vlevo"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "Zarovnat vpravo"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "Text"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "Text skupiny"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "Text výběru"
@@ -5840,7 +5807,7 @@ msgstr "Text výběru"
msgid "workspace.options.text-options.titlecase"
msgstr "První písmeno velké"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "Podtrhnout (%s)"
@@ -5849,19 +5816,19 @@ msgstr "Podtrhnout (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "Velká písmena"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr "Pomocí tlačítka přehrávání v záhlaví spusťte zobrazení prototypu."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "Šířka"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "X"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Y"
@@ -5905,107 +5872,107 @@ msgstr "Oddělit uzly (%s)"
msgid "workspace.path.actions.snap-nodes"
msgstr "Přichytit uzly (%s)"
-#: src/app/main/ui/workspace/plugins.cljs:83
+#: src/app/main/ui/workspace/plugins.cljs:84
msgid "workspace.plugins.button-open"
msgstr "Otevřít"
-#: src/app/main/ui/workspace/plugins.cljs:197
+#: src/app/main/ui/workspace/plugins.cljs:198
#, markdown
msgid "workspace.plugins.discover"
msgstr "Objevte [další pluginy](%s)"
-#: src/app/main/ui/workspace/plugins.cljs:204
+#: src/app/main/ui/workspace/plugins.cljs:205
msgid "workspace.plugins.empty-plugins"
msgstr "Zatím nejsou nainstalovány žádné pluginy"
-#: src/app/main/ui/workspace/plugins.cljs:191
+#: src/app/main/ui/workspace/plugins.cljs:192
msgid "workspace.plugins.error.manifest"
msgstr "Manifest pluginu je nesprávný."
-#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:755, src/app/main/ui/workspace/plugins.cljs:82
+#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:783, src/app/main/ui/workspace/plugins.cljs:83
msgid "workspace.plugins.error.need-editor"
msgstr "Abyste mohli tento plugin používat, musíte být editor"
-#: src/app/main/ui/workspace/plugins.cljs:187
+#: src/app/main/ui/workspace/plugins.cljs:188
msgid "workspace.plugins.error.url"
msgstr "Plugin neexistuje nebo adresa URL není správná."
-#: src/app/main/ui/workspace/plugins.cljs:183
+#: src/app/main/ui/workspace/plugins.cljs:184
msgid "workspace.plugins.install"
msgstr "Instalovat"
-#: src/app/main/ui/workspace/plugins.cljs:213
+#: src/app/main/ui/workspace/plugins.cljs:214
msgid "workspace.plugins.installed-plugins"
msgstr "Nainstalované pluginy"
-#: src/app/main/ui/workspace/main_menu.cljs:710
+#: src/app/main/ui/workspace/main_menu.cljs:738
msgid "workspace.plugins.menu.plugins-manager"
msgstr "Správce pluginů"
-#: src/app/main/ui/workspace/main_menu.cljs:906
+#: src/app/main/ui/workspace/main_menu.cljs:934
msgid "workspace.plugins.menu.title"
msgstr "Pluginy"
-#: src/app/main/ui/workspace/plugins.cljs:374
+#: src/app/main/ui/workspace/plugins.cljs:375
msgid "workspace.plugins.permissions-update.title"
msgstr "AKTUALIZOVAT TENTO PLUGIN"
-#: src/app/main/ui/workspace/plugins.cljs:378
+#: src/app/main/ui/workspace/plugins.cljs:379
msgid "workspace.plugins.permissions-update.warning"
msgstr "Plugin byl změněn od posledního otevření. Nyní chce také získat přístup k:"
-#: src/app/main/ui/workspace/plugins.cljs:278
+#: src/app/main/ui/workspace/plugins.cljs:279
msgid "workspace.plugins.permissions.allow-download"
msgstr "Zahájit stahování souborů."
-#: src/app/main/ui/workspace/plugins.cljs:271
+#: src/app/main/ui/workspace/plugins.cljs:272
msgid "workspace.plugins.permissions.comment-read"
msgstr "Přečtěte si své komentáře a odpovědi."
-#: src/app/main/ui/workspace/plugins.cljs:265
+#: src/app/main/ui/workspace/plugins.cljs:266
msgid "workspace.plugins.permissions.comment-write"
msgstr "Přečtěte si a upravte své komentáře a odpovídejte svým jménem."
-#: src/app/main/ui/workspace/plugins.cljs:238
+#: src/app/main/ui/workspace/plugins.cljs:239
msgid "workspace.plugins.permissions.content-read"
msgstr "Číst obsah souborů, ke kterým mají uživatelé přístup."
-#: src/app/main/ui/workspace/plugins.cljs:232
+#: src/app/main/ui/workspace/plugins.cljs:233
msgid "workspace.plugins.permissions.content-write"
msgstr "Číst a upravovat obsah souborů, ke kterým mají uživatelé přístup."
-#: src/app/main/ui/workspace/plugins.cljs:325
+#: src/app/main/ui/workspace/plugins.cljs:326
msgid "workspace.plugins.permissions.disclaimer"
msgstr ""
"Tento plugin je vytvořen třetí stranou, takže se před udělením přístupu "
"ujistěte, že mu důvěřujete. Ochrana a bezpečnost vašich dat jsou pro nás "
"důležité. Máte-li jakékoli obavy, kontaktujte podporu."
-#: src/app/main/ui/workspace/plugins.cljs:258
+#: src/app/main/ui/workspace/plugins.cljs:259
msgid "workspace.plugins.permissions.library-read"
msgstr "Číst vaše knihovny a položky."
-#: src/app/main/ui/workspace/plugins.cljs:252
+#: src/app/main/ui/workspace/plugins.cljs:253
msgid "workspace.plugins.permissions.library-write"
msgstr "Číst a upravovat vaše knihovny a položky."
-#: src/app/main/ui/workspace/plugins.cljs:318
+#: src/app/main/ui/workspace/plugins.cljs:319
msgid "workspace.plugins.permissions.title"
msgstr "PLUGIN '%s' POŽADUJE PŘÍSTUP K:"
-#: src/app/main/ui/workspace/plugins.cljs:245
+#: src/app/main/ui/workspace/plugins.cljs:246
msgid "workspace.plugins.permissions.user-read"
msgstr "Číst informace o profilu aktuálního uživatele."
-#: src/app/main/ui/workspace/plugins.cljs:209
+#: src/app/main/ui/workspace/plugins.cljs:210
msgid "workspace.plugins.plugin-list-link"
msgstr "Seznam pluginů"
-#: src/app/main/ui/workspace/plugins.cljs:86
+#: src/app/main/ui/workspace/plugins.cljs:87
msgid "workspace.plugins.remove-plugin"
msgstr "Odebrat plugin"
-#: src/app/main/ui/workspace/plugins.cljs:178
+#: src/app/main/ui/workspace/plugins.cljs:179
msgid "workspace.plugins.search-placeholder"
msgstr "Napište adresu URL pluginu"
@@ -6013,26 +5980,26 @@ msgstr "Napište adresu URL pluginu"
msgid "workspace.plugins.success"
msgstr "Plugin správně načten."
-#: src/app/main/ui/workspace/plugins.cljs:172
+#: src/app/main/ui/workspace/plugins.cljs:173
msgid "workspace.plugins.title"
msgstr "Pluginy"
-#: src/app/main/ui/workspace/plugins.cljs:438
+#: src/app/main/ui/workspace/plugins.cljs:439
msgid "workspace.plugins.try-out.cancel"
msgstr "TEĎ NE"
-#: src/app/main/ui/workspace/plugins.cljs:431
+#: src/app/main/ui/workspace/plugins.cljs:432
msgid "workspace.plugins.try-out.message"
msgstr ""
"Chcete se podívat? Otevře se v novém konceptu pro váš aktuální tým. (Pokud "
"ne, můžete jej vždy najít v nainstalovaných zásuvných modulech libovolného "
"souboru.)"
-#: src/app/main/ui/workspace/plugins.cljs:427
+#: src/app/main/ui/workspace/plugins.cljs:428
msgid "workspace.plugins.try-out.title"
msgstr "PLUGIN '%s' JE NAINSTALOVÁN PRO VAŠEHO UŽIVATELE!"
-#: src/app/main/ui/workspace/plugins.cljs:444
+#: src/app/main/ui/workspace/plugins.cljs:445
msgid "workspace.plugins.try-out.try"
msgstr "VYZKOUŠET PLUGIN"
@@ -6044,7 +6011,7 @@ msgstr "Přidat flexibilní rozložení"
msgid "workspace.shape.menu.add-grid"
msgstr "Přidat rozvržení mřížky"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1015, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1039
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1016, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1040
msgid "workspace.shape.menu.add-layout"
msgstr "Přidat rozvržení"
@@ -6084,7 +6051,7 @@ msgstr "Kopírovat vlastnosti"
msgid "workspace.shape.menu.copy-text"
msgstr "Kopírovat jako text"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "Vytvořit anotaci"
@@ -6092,11 +6059,11 @@ msgstr "Vytvořit anotaci"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "Výběr na tabuli"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "Vytvořit komponentu"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "Vytvořte více komponent"
@@ -6104,7 +6071,7 @@ msgstr "Vytvořte více komponent"
msgid "workspace.shape.menu.cut"
msgstr "Vyjmout"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "Smazat"
@@ -6112,15 +6079,15 @@ msgstr "Smazat"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "Smazat počáteční bod"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "Odpojit instanci"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "Odpojit instance"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "Rozdíl"
@@ -6132,11 +6099,11 @@ msgstr "Duplikovat"
msgid "workspace.shape.menu.edit"
msgstr "Upravit"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "Vyloučit"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "Vyrovnat"
@@ -6169,19 +6136,19 @@ msgstr "Přejít na hlavní soubor komponentu"
msgid "workspace.shape.menu.group"
msgstr "Skupina"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "Skrýt"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "Zobrazit/skrýt uživatelské rozhraní"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "Průnik"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "Zamknout"
@@ -6189,7 +6156,7 @@ msgstr "Zamknout"
msgid "workspace.shape.menu.mask"
msgstr "Maska"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "Vložit"
@@ -6209,7 +6176,7 @@ msgstr "Odstranit flexibilní rozložení"
msgid "workspace.shape.menu.remove-grid"
msgstr "Odebrat rozložení mřížky"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1033
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1034
msgid "workspace.shape.menu.remove-layout"
msgstr "Odebrat rozložení"
@@ -6217,11 +6184,11 @@ msgstr "Odebrat rozložení"
msgid "workspace.shape.menu.rename"
msgstr "Přejmenovat"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "Obnovit"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "Obnovit hlavní komponentu"
@@ -6229,15 +6196,15 @@ msgstr "Obnovit hlavní komponentu"
msgid "workspace.shape.menu.select-layer"
msgstr "Vybrat vrstvu"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "Zobrazit"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "Zobrazit v panelu položek"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "Zobrazit hlavní komponentu"
@@ -6250,6 +6217,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "Nastavit jako miniaturu"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "Transformovat na cestu"
@@ -6257,11 +6225,11 @@ msgstr "Transformovat na cestu"
msgid "workspace.shape.menu.ungroup"
msgstr "Zrušit seskupení"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "Sloučení"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "Odemknout"
@@ -6274,7 +6242,7 @@ msgstr "Zrušit masku"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "Aktualizovat hlavní komponenty"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "Aktualizovat hlavní komponentu"
@@ -6286,11 +6254,11 @@ msgstr "Sbalit postranní panel"
msgid "workspace.sidebar.expand"
msgstr "Rozbalit postranní panel"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "Historie"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "Vrstvy"
@@ -6330,11 +6298,11 @@ msgstr "Texty"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "Importované atributy SVG"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "Stránky"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:248
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:249
msgid "workspace.sidebar.sitemap.add-page"
msgstr "Přidat stránku"
@@ -6351,11 +6319,11 @@ msgstr "%s aktivních motivů"
msgid "workspace.tokens.add set"
msgstr "Přidat sadu"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:161
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:136
msgid "workspace.tokens.applied-to"
msgstr "Aplikováno na"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:338
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:337
msgid "workspace.tokens.back-to-themes"
msgstr "Zpět na seznam motivů"
@@ -6363,15 +6331,15 @@ msgstr "Zpět na seznam motivů"
msgid "workspace.tokens.create-new-theme"
msgstr "Vytvořte si svůj první motiv hned teď."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:100, src/app/main/ui/workspace/tokens/themes.cljs:44
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:96, src/app/main/ui/workspace/tokens/themes.cljs:44
msgid "workspace.tokens.create-one"
msgstr "Vytvořte si."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:534
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:552
msgid "workspace.tokens.create-token"
msgstr "Vytvořte nový %s token"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:337
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:338
msgid "workspace.tokens.delete"
msgstr "Smazat token"
@@ -6379,15 +6347,15 @@ msgstr "Smazat token"
msgid "workspace.tokens.delete-theme-title"
msgstr "Smazat motiv"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:334
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:335
msgid "workspace.tokens.duplicate"
msgstr "Duplikovat token"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:321
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:322
msgid "workspace.tokens.edit"
msgstr "Upravit token"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:327
msgid "workspace.tokens.edit-theme-title"
msgstr "Upravit motiv"
@@ -6395,11 +6363,7 @@ msgstr "Upravit motiv"
msgid "workspace.tokens.edit-themes"
msgstr "Upravit motivy"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:533
-msgid "workspace.tokens.edit-token"
-msgstr "Upravit token"
-
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:540
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:558
msgid "workspace.tokens.enter-token-name"
msgstr "Zadejte název tokenu %s"
@@ -6420,7 +6384,7 @@ msgstr "Téma"
msgid "workspace.tokens.no-active-theme"
msgstr "Žádný motiv není aktivní"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:76
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:72
msgid "workspace.tokens.no-permisions-set"
msgstr "K aktivaci/deaktivaci sad musíte být editor"
@@ -6428,11 +6392,11 @@ msgstr "K aktivaci/deaktivaci sad musíte být editor"
msgid "workspace.tokens.no-permission-themes"
msgstr "Abyste mohli používat témata, musíte být editor"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:480
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:483
msgid "workspace.tokens.no-sets-create"
msgstr "Zatím nejsou definovány žádné sady. Nejprve si jednu vytvořte."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:97, src/app/main/ui/workspace/tokens/sets/lists.cljs:103
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:93, src/app/main/ui/workspace/tokens/sets/lists.cljs:99
msgid "workspace.tokens.no-sets-yet"
msgstr "Zatím nejsou žádné sady."
@@ -6444,16 +6408,16 @@ msgstr "Nejsou zde žádné motivy."
msgid "workspace.tokens.no-themes-currently"
msgstr "Momentálně nemáte žádné motivy."
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:145
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:120
#, fuzzy
msgid "workspace.tokens.original-value"
msgstr "Původní hodnota: %s"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:153
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:128
msgid "workspace.tokens.ref-not-valid"
msgstr "Reference není platná nebo není v žádné aktivní sadě"
-#: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:39, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:44, src/app/main/ui/workspace/tokens/management/token_pill.cljs:146
+#: 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:100, 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 "Vyřešená hodnota: %s"
@@ -6462,11 +6426,11 @@ msgstr "Vyřešená hodnota: %s"
msgid "workspace.tokens.save-theme"
msgstr "Uložit motiv"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:209, src/app/main/ui/workspace/tokens/sets/lists.cljs:315
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:204, src/app/main/ui/workspace/tokens/sets/lists.cljs:309
msgid "workspace.tokens.select-set"
msgstr "Vyberte sadu."
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:343
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:342
msgid "workspace.tokens.set-selection-theme"
msgstr ""
"Definujte, jaké sady tokenů by měly být použity jako součást této možnosti "
@@ -6481,23 +6445,23 @@ msgstr "Sada tokenů není aktivní"
msgid "workspace.tokens.theme-name"
msgstr "Motiv %s"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:589, src/app/main/ui/workspace/tokens/management/create/form.cljs:590
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:608, src/app/main/ui/workspace/tokens/management/create/form.cljs:609
#, fuzzy
msgid "workspace.tokens.token-description"
msgstr "Popis"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:539
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:83, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:109, src/app/main/ui/workspace/tokens/management/create/form.cljs:557
msgid "workspace.tokens.token-name"
msgstr "Jméno"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:66
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:69
msgid "workspace.tokens.token-name-validation-error"
msgstr ""
" není platný název tokenu.\n"
"Názvy tokenů by měly obsahovat pouze písmena a číslice oddělené znakem . a "
"nesmí začínat znakem $."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:567
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:585
msgid "workspace.tokens.token-value"
msgstr "Hodnota"
@@ -6505,19 +6469,19 @@ msgstr "Hodnota"
msgid "workspace.tokens.tokens-section-title"
msgstr "TOKENY - %s"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:125
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:121
msgid "workspace.tokens.tools"
msgstr "Nástroje"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:156
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:131
msgid "workspace.tokens.value-not-valid"
msgstr "Hodnota není platná"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:563
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:581
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:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "Položky"
@@ -6525,7 +6489,7 @@ msgstr "Položky"
msgid "workspace.toolbar.color-palette"
msgstr "Paleta barev (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "Komentáře (%s)"
@@ -6732,19 +6696,19 @@ msgstr "Operace nad %s"
msgid "workspace.undo.title"
msgstr "Historie"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "Zrušit"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "Více informací"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "Ve sdílených knihovnách jsou aktualizace"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "Aktualizace"
@@ -6804,11 +6768,11 @@ msgstr "Chcete obnovit tuto verzi?"
msgid "workspace.versions.snapshot-menu"
msgstr "Otevřít nabídku snímku"
-#: src/app/main/ui/workspace/sidebar.cljs:236
+#: src/app/main/ui/workspace/sidebar.cljs:237
msgid "workspace.versions.tab.actions"
msgstr "Akce"
-#: src/app/main/ui/workspace/sidebar.cljs:234
+#: src/app/main/ui/workspace/sidebar.cljs:235
msgid "workspace.versions.tab.history"
msgstr "Historie"
diff --git a/frontend/translations/da.po b/frontend/translations/da.po
index e970d50c90..9c4e72e432 100644
--- a/frontend/translations/da.po
+++ b/frontend/translations/da.po
@@ -142,7 +142,7 @@ msgstr "Open-source løsningen for design og prototyping."
msgid "auth.verification-email-sent"
msgstr "Vi har sendt en bekræftelsesmail til"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Tilføj som Delt Bibliotek"
@@ -150,19 +150,19 @@ msgstr "Tilføj som Delt Bibliotek"
msgid "dashboard.change-email"
msgstr "Skift email"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(kopi)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Opret nyt team"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Dit Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Slet team"
@@ -192,11 +192,11 @@ msgstr ""
"Penpot. Find ud af mere i sektionen om indholdsrettigheder i [Penpot's "
"Terms of Service] (%s). Du kan også læse om [font licensing](2)."
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Invitér til team"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Forlad team"
@@ -224,7 +224,7 @@ msgstr "Flyt til andet team"
msgid "dashboard.new-file"
msgstr "+ Ny Fil"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Ny Fil"
@@ -232,7 +232,7 @@ msgstr "Ny Fil"
msgid "dashboard.new-project"
msgstr "+ Nyt projekt"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Nyt Projekt"
@@ -240,7 +240,7 @@ msgstr "Nyt Projekt"
msgid "dashboard.no-matches-for"
msgstr "Intet match fundet for “%s“"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Fastgjorte projekter bliver vist her"
@@ -256,7 +256,7 @@ msgstr "Din email-adresse er blevet bekræftet med succes"
msgid "dashboard.notifications.password-saved"
msgstr "Adgangskode gemt med succes!"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s medlemmer"
@@ -268,7 +268,7 @@ msgstr "Åben fil i en ny fane"
msgid "dashboard.password-change"
msgstr "Skift adgangskode"
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Fastgør/Løsne"
@@ -285,7 +285,7 @@ msgstr "Vil du slette din konto?"
msgid "dashboard.remove-shared"
msgstr "Fjern som Delt Bibliotek"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Søg…"
@@ -321,7 +321,7 @@ msgstr "Din fil er blevet dublikeret med succes"
msgid "dashboard.success-duplicate-project"
msgstr "Dit projekt er blevet dublikeret med succes"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Din fil er blevet flyttet med succes"
@@ -333,15 +333,15 @@ msgstr "Dine filer er blevet flyttet med succes"
msgid "dashboard.success-move-project"
msgstr "Dit projekt er blevet flyttet med succes"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Team info"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Medlemmer"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Team projekter"
@@ -373,15 +373,15 @@ msgstr "Email"
msgid "dashboard.your-name"
msgstr "Dit navn"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Dit Penpot"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Fortryd"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Ok"
@@ -409,7 +409,7 @@ msgstr "Skrifttypefamilie"
msgid "labels.font-providers"
msgstr "Skrifttype udbydere"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Skrifttyper"
diff --git a/frontend/translations/de.po b/frontend/translations/de.po
index cbaae71134..031e40a501 100644
--- a/frontend/translations/de.po
+++ b/frontend/translations/de.po
@@ -1,15 +1,15 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-28 10:46+0000\n"
-"Last-Translator: Stas Haas \n"
-"Language-Team: German "
-" \n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
+"Last-Translator: Marius \n"
+"Language-Team: German \n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.13\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -183,7 +183,7 @@ msgstr ""
"Ich stimme den [Nutzungsbedingungen](%s) und der "
"[Datenschutzrichtlinie](%s) zu."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Nutzungsbedingungen"
@@ -210,7 +210,7 @@ msgstr "...Branding, Illustrationen, Marketingmaterialien, usw."
msgid "comments.mentions.not-found"
msgstr "Es wurden keine Personen für @%s gefunden"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Veröffentlichen"
@@ -282,7 +282,7 @@ msgstr "Prototypen teilen"
msgid "common.share-link.view-all"
msgstr "Alle auswählen"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Veröffentlichung aufheben"
@@ -409,7 +409,7 @@ msgstr "Der Token hat kein Ablaufdatum"
msgid "dashboard.add-file"
msgstr "Datei hinzufügen"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Hinzufügen als gemeinsam genutzte Bibliothek"
@@ -417,31 +417,31 @@ msgstr "Hinzufügen als gemeinsam genutzte Bibliothek"
msgid "dashboard.change-email"
msgstr "E-Mail-Adresse ändern"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(Kopie)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Neues Team erstellen"
-#: src/app/main/ui/workspace/main_menu.cljs:631
+#: src/app/main/ui/workspace/main_menu.cljs:659
msgid "dashboard.create-version-menu"
msgstr "Diese Version anheften"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Ihr Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Team löschen"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Penpot-Datei herunterladen (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Standarddatei herunterladen (.svg + .json)"
@@ -525,7 +525,7 @@ msgstr "Beginnen Sie mit dem Erschaffen erstaunlicher Dinge"
msgid "dashboard.export-binary-multi"
msgstr "%s Penpot-Dateien herunterladen (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Zeichenflächen als PDF exportieren"
@@ -541,7 +541,7 @@ msgstr "%s Dateien exportieren"
msgid "dashboard.export-multiple.selected"
msgstr "%s von %s Elementen ausgewählt"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Exportieren"
@@ -760,11 +760,11 @@ msgstr "Daten werden hochgeladen (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Datei %s wird hochgeladen"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Personen einladen"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Team verlassen"
@@ -772,7 +772,7 @@ msgstr "Team verlassen"
msgid "dashboard.libraries-and-templates"
msgstr "Bibliotheken & Vorlagen"
-#: src/app/main/ui/dashboard/templates.cljs:259
+#: src/app/main/ui/dashboard/templates.cljs:267
msgid "dashboard.libraries-and-templates.description"
msgstr ""
"Hier finden Sie einige Bibliotheken und Vorlagen, die Sie zu Ihrem Projekt "
@@ -782,7 +782,7 @@ msgstr ""
msgid "dashboard.libraries-and-templates.explore"
msgstr "Entdecken Sie weitere und erfahren Sie, wie Sie beitragen können"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr ""
"Beim Importieren der Vorlage ist ein Problem aufgetreten. Die Vorlage wurde "
@@ -820,7 +820,7 @@ msgstr "Zu anderem Team verschieben"
msgid "dashboard.new-file"
msgstr "+ Neue Datei"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Neue Datei"
@@ -828,7 +828,7 @@ msgstr "Neue Datei"
msgid "dashboard.new-project"
msgstr "+ Neues Projekt"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Neues Projekt"
@@ -836,11 +836,11 @@ msgstr "Neues Projekt"
msgid "dashboard.no-matches-for"
msgstr "Keine Übereinstimmungen für “%s“ gefunden"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Angeheftete Projekte werden hier angezeigt"
-#: src/app/main/ui/dashboard/comments.cljs:90
+#: src/app/main/ui/dashboard/comments.cljs:91
msgid "dashboard.notifications"
msgstr "Benachrichtigungen"
@@ -852,7 +852,7 @@ msgstr "Ihre E-Mail-Adresse wurde erfolgreich aktualisiert"
msgid "dashboard.notifications.email-verified-successfully"
msgstr "Ihre E-Mail-Adresse wurde erfolgreich verifiziert"
-#: src/app/main/data/profile.cljs:272
+#: src/app/main/data/profile.cljs:273
msgid "dashboard.notifications.notifications-saved"
msgstr "Benachrichtigungseinstellungen aktualisiert"
@@ -860,11 +860,11 @@ msgstr "Benachrichtigungseinstellungen aktualisiert"
msgid "dashboard.notifications.password-saved"
msgstr "Passwort wurde erfolgreich gespeichert!"
-#: src/app/main/ui/dashboard/comments.cljs:44
+#: src/app/main/ui/dashboard/comments.cljs:45
msgid "dashboard.notifications.view"
msgstr "Benachrichtigungen anzeigen"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s Mitglieder"
@@ -896,7 +896,7 @@ msgstr "Sie sind jetzt Eigentümer dieses Teams."
msgid "dashboard.permissions-change.viewer"
msgstr "Sie sind jetzt ein Zuschauer in diesem Team."
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Anheften/Lösen"
@@ -933,7 +933,7 @@ msgstr "Sie sind nicht mehr Teil des Teams “%s“."
msgid "dashboard.save-settings"
msgstr "Einstellungen speichern"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Suchen…"
@@ -1025,7 +1025,7 @@ msgstr "Benachrichtigungen"
msgid "dashboard.show-all-files"
msgstr "Alle Dateien anzeigen"
-#: src/app/main/ui/workspace/main_menu.cljs:638
+#: src/app/main/ui/workspace/main_menu.cljs:666
msgid "dashboard.show-version-history"
msgstr "Versionsverlauf"
@@ -1049,7 +1049,7 @@ msgstr[1] "Ihre Dateien wurden erfolgreich dupliziert"
msgid "dashboard.success-duplicate-project"
msgstr "Ihr Projekt wurde erfolgreich dupliziert"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Ihre Datei wurde erfolgreich verschoben"
@@ -1061,15 +1061,15 @@ msgstr "Ihre Dateien wurden erfolgreich verschoben"
msgid "dashboard.success-move-project"
msgstr "Ihr Projekt wurde erfolgreich verschoben"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Teaminformationen"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Teammitglieder"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Teamprojekte"
@@ -1089,7 +1089,7 @@ msgstr "Suchergebnisse"
msgid "dashboard.type-something"
msgstr "Zum Suchen etwas eingeben"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Veröffentlichung der Bibliothek aufheben"
@@ -1097,52 +1097,52 @@ msgstr "Veröffentlichung der Bibliothek aufheben"
msgid "dashboard.update-settings"
msgstr "Einstellungen aktualisieren"
-#: src/app/main/ui/dashboard/sidebar.cljs:856
+#: src/app/main/ui/dashboard/sidebar.cljs:976
msgid "dashboard.upgrade-plan.no-limits"
msgstr "Keine Grenzen für die Kreativität"
-#: src/app/main/ui/dashboard/sidebar.cljs:854
+#: src/app/main/ui/dashboard/sidebar.cljs:974
msgid "dashboard.upgrade-plan.penpot-free"
msgstr "Penpot Free"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "Aktiv"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "Wenn dieser Hook ausgelöst wird, dann werden die Eventdetails übermittelt"
-#: src/app/main/ui/dashboard/team.cljs:982
+#: src/app/main/ui/dashboard/team.cljs:1160
msgid "dashboard.webhooks.cant-edit"
msgstr "Sie können nur von Ihnen erstellte Webhooks löschen oder ändern."
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "Inhaltstyp"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "Webhook erstellen"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "Webhook wurde erfolgreich erstellt."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"Webhooks ermöglichen es, andere Websites und Anwendungen automatisch über "
"bestimmte Ereignisse bei Penpot zu informieren. Dies geschieht durch das "
"Versenden einer POST-Anfrage an die von Ihnen festgelegten URLs."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr ""
"Um einen Webhook hinzuzufügen, drücken Sie auf die Schaltfläche \"Webhook "
"hinzufügen\"."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "Bisher wurden noch keine Webhooks erstellt."
@@ -1162,7 +1162,7 @@ msgstr "E-Mail"
msgid "dashboard.your-name"
msgstr "Ihr Name"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Ihr Penpot"
@@ -1178,15 +1178,15 @@ msgstr "Achtung"
msgid "ds.component-subtitle"
msgstr "Zu aktualisierende Komponenten:"
-#: src/app/main/ui/workspace/plugins.cljs:338, src/app/main/ui/workspace/plugins.cljs:392
+#: src/app/main/ui/workspace/plugins.cljs:339, src/app/main/ui/workspace/plugins.cljs:393
msgid "ds.confirm-allow"
msgstr "Erlauben"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Abbrechen"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Ok"
@@ -1194,6 +1194,18 @@ msgstr "Ok"
msgid "ds.confirm-title"
msgstr "Sind Sie sicher?"
+#: src/app/main/ui/ds/controls/numeric_input.cljs:99
+msgid "ds.inputs.numeric-input.no-matches"
+msgstr "Keine Treffer gefunden."
+
+#: src/app/main/ui/ds/controls/numeric_input.cljs:641, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:138
+msgid "ds.inputs.numeric-input.open-token-list-dropdown"
+msgstr "Token-Liste öffnen"
+
+#: src/app/main/ui/ds/controls/utilities/token_field.cljs:85, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:133
+msgid "ds.inputs.token-field.detach-token"
+msgstr "Token trennen"
+
#: src/app/main/data/auth.cljs:314
msgid "errors.auth-provider-not-allowed"
msgstr "Auth-Provider für dieses Profil nicht erlaubt"
@@ -1234,6 +1246,12 @@ msgstr "Beim Kommentar ist ein Fehler aufgetreten"
msgid "errors.deprecated.contact.text"
msgstr "kontaktieren Sie uns"
+#: src/app/main/data/workspace/tokens/library_edit.cljs:274
+msgid "errors.drop-token-set-parent-to-child"
+msgstr ""
+"Ein übergeordnetes Set kann nicht auf einem eigenen untergeordneten Pfad "
+"abgelegt werden."
+
#: src/app/main/ui/auth/verify_token.cljs:84, src/app/main/ui/settings/change_email.cljs:29
msgid "errors.email-already-exists"
msgstr "E-Mail-Adresse wird bereits verwendet"
@@ -1246,15 +1264,19 @@ msgstr "E-Mail-Adresse wurde bereits validiert."
msgid "errors.email-as-password"
msgstr "Sie können Ihre E-Mail-Adresse nicht als Passwort verwenden"
+#: src/app/main/ui/auth/register.cljs:89
+msgid "errors.email-does-not-match-invitation"
+msgstr "Die E-Mail stimmt nicht mit der Einladung überein."
+
#: src/app/main/data/auth.cljs:316, src/app/main/ui/auth/register.cljs:95
msgid "errors.email-domain-not-allowed"
msgstr "Domain nicht zulässig"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "Die E-Mail-Adresse «%s» hat viele permanente Unzustellbarkeitsberichte."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "Die E-Mail \"%s\" wurde als Spam oder dauerhaft abgelehnt gemeldet."
@@ -1269,11 +1291,6 @@ msgstr ""
msgid "errors.feature-not-supported"
msgstr "Die Funktion '%s' wird nicht unterstützt."
-#: src/app/main/ui/auth/register.cljs, src/app/main/ui/dashboard/team_form.cljs, src/app/main/ui/onboarding/team_choice.cljs, src/app/main/ui/setti ngs/access_tokens.cljs, src/app/main/ui/settings/feedback.cljs, src/app/main/ui/settings/profile.cljs, src/app/main/ui/workspace/sidebar/assets.cljs
-#, unused
-msgid "errors.field-max-length"
-msgstr "Darf maximal 1 Zeichen enthalten."
-
#, unused
msgid "errors.field-min-length"
msgstr "Muss mindestens 1 Zeichen enthalten."
@@ -1294,7 +1311,7 @@ msgstr ""
"und den Funktionen der Datei zu geben. Die Migrationen für '%s' müssen "
"durchgeführt werden, bevor die Datei geöffnet werden kann."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Etwas ist schief gelaufen."
@@ -1344,11 +1361,11 @@ msgstr "Diese Einladung wurde möglicherweise abgebrochen oder ist abgelaufen."
msgid "errors.ldap-disabled"
msgstr "Die LDAP-Authentifizierung ist deaktiviert."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "Sie haben das Limit von '%s' erreicht. Kontaktieren Sie den Support."
-#: src/app/main/ui/dashboard/team.cljs:185, src/app/main/ui/onboarding/team_choice.cljs:101
+#: src/app/main/ui/dashboard/team.cljs:187, src/app/main/ui/dashboard/team.cljs:849, src/app/main/ui/onboarding/team_choice.cljs:101
msgid "errors.maximum-invitations-by-request-reached"
msgstr ""
"Die maximale (%s) Anzahl von E-Mails, die in einer einzigen Anfrage "
@@ -1368,7 +1385,7 @@ msgstr ""
msgid "errors.media-type-not-allowed"
msgstr "Es scheint, dass dies kein gültiges Bild ist."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"In dem von Ihnen eingeladenen Profil sind E-Mails stummgeschaltet "
@@ -1378,6 +1395,14 @@ msgstr ""
msgid "errors.migration-in-progress"
msgstr "Migration wird durchgeführt"
+#: src/app/main/errors.cljs:160
+msgid "errors.only-creator-can-lock"
+msgstr "Nur der Ersteller der Version kann sie sperren"
+
+#: src/app/main/errors.cljs:168
+msgid "errors.only-creator-can-unlock"
+msgstr "Nur der Ersteller der Version kann sie entsperren"
+
#: src/app/main/ui/settings/password.cljs
#, unused
msgid "errors.password-invalid-confirmation"
@@ -1396,7 +1421,7 @@ msgstr "Ungültige Daten in der Zwischenablage"
msgid "errors.profile-blocked"
msgstr "Das Profil ist gesperrt"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr ""
"Ihr Profil hat stummgeschaltete E-Mails (Spam-Berichte oder hohe "
@@ -1414,23 +1439,23 @@ msgstr "SVG ist ungültig oder fehlerhaft"
msgid "errors.team-feature-mismatch"
msgstr "Inkompatible Funktion '%s' erkannt"
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr ""
"Nicht genügend Mitglieder, um das Team zu verlassen, wahrscheinlich wollen "
"Sie es löschen."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "Das Mitglied, das Sie zuzuordnen möchten, existiert nicht."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr ""
"Der Besitzer kann das Team nicht verlassen, Sie müssen die Besitzerrolle "
"neu zuweisen."
-#: src/app/main/data/workspace/tokens/library_edit.cljs:153, src/app/main/data/workspace/tokens/library_edit.cljs:183
+#: src/app/main/data/workspace/tokens/library_edit.cljs:150, src/app/main/data/workspace/tokens/library_edit.cljs:180
msgid "errors.token-set-already-exists"
msgstr "Ein Set mit dem gleichen Namen existiert bereits"
@@ -1439,13 +1464,13 @@ msgstr "Ein Set mit dem gleichen Namen existiert bereits"
msgid "errors.token-set-doesnt-exists"
msgstr "Unbekanntes Set kann nicht dupliziert werden"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:265
+#: src/app/main/data/workspace/tokens/library_edit.cljs:273
msgid "errors.token-set-exists-on-drop"
msgstr ""
"Das Ablegen kann nicht abgeschlossen werden, da ein Set mit demselben Namen "
"bereits im Pfad existiert."
-#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:99
+#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:95
msgid "errors.token-theme-already-exists"
msgstr "Theme-Option mit demselben Namen existiert"
@@ -1461,35 +1486,43 @@ msgstr "Unbekannter Token"
msgid "errors.validation"
msgstr "Validierungsfehler"
+#: src/app/main/errors.cljs:176
+msgid "errors.version-already-locked"
+msgstr "Diese Version ist bereits gesperrt"
+
+#: src/app/main/errors.cljs:152
+msgid "errors.version-locked"
+msgstr "Diese Version ist gesperrt und kann nicht von anderen gelöscht werden"
+
#: src/app/main/errors.cljs:285
msgid "errors.version-not-supported"
msgstr "Die Datei hat eine inkompatible Versionsnummer"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "Verbindungsfehler, URL ist nicht erreichbar"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "Die URL erfüllt nicht die Validierungskriterien."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "Die letzte Übertragung war nicht erfolgreich."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "Fehler bei der SSL-Validierung."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "Zeitüberschreitung"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "Unerwarteter Fehler bei der Validierung"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "Unerwarteter Status %s"
@@ -1554,7 +1587,7 @@ msgstr "Ein Fehler ist aufgetreten"
msgid "inspect.attributes.blur"
msgstr "Weichzeichnen"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Wert"
@@ -1562,15 +1595,15 @@ msgstr "Wert"
msgid "inspect.attributes.color"
msgstr "Farbe"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1578,7 +1611,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Fläche"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Originalbild herunterladen"
@@ -1672,67 +1705,74 @@ msgstr "Durchgezogen"
msgid "inspect.attributes.stroke.width"
msgstr "Breite"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Typografie"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Schriftart"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Schriftgröße"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Schriftschnitt"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "Strichstärke"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Zeichenabstand"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Zeilenabstand"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Textdekoration"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#, unused
+msgid "inspect.attributes.typography.text-decoration.line-through"
+msgstr "Durchgestrichen"
+
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Keine"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Unterstrichen"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Texttransformation"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "Kapitälchen"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "Kleinbuchstaben"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Keine"
-#: src/app/main/ui/inspect/attributes/text.cljs:159
+#: src/app/main/ui/inspect/attributes/text.cljs:152
msgid "inspect.attributes.typography.text-transform.unset"
msgstr "Nicht gesetzt"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "Großbuchstaben"
@@ -1744,17 +1784,17 @@ msgstr "Eigenschaften der Variante"
msgid "inspect.attributes.variants"
msgstr "Eigenschaften der Varianten"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr ""
"Für weitere Informationen zum Thema \"Auswerten von "
"Design-Spezifikationen\", besuchen Sie bitte das Penpot-Hilfezentrum"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "Weitere Informationen zur Inspektion"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr ""
"Wählen Sie eine Form, ein Board oder eine Gruppe aus, um deren "
@@ -1820,15 +1860,23 @@ msgstr "SVG"
msgid "inspect.tabs.code.selected.text"
msgstr "Text"
+#: src/app/main/ui/inspect/right_sidebar.cljs:109
+msgid "inspect.tabs.computed"
+msgstr "Berechnet"
+
#: src/app/main/ui/inspect/right_sidebar.cljs:114
msgid "inspect.tabs.info"
msgstr "Info"
-#: src/app/main/ui/dashboard/comments.cljs:95
+#: src/app/main/ui/inspect/right_sidebar.cljs:165
+msgid "inspect.tabs.switcher.label"
+msgstr "Info zur Ebene"
+
+#: src/app/main/ui/dashboard/comments.cljs:96
msgid "label.mark-all-as-read"
msgstr "Alle als gelesen markieren"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Tastaturkürzel"
@@ -1840,11 +1888,11 @@ msgstr "Akzeptieren"
msgid "labels.access-tokens"
msgstr "Zugangstoken"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "Aktiv"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.add"
msgstr "Hinzufügen"
@@ -1852,11 +1900,11 @@ msgstr "Hinzufügen"
msgid "labels.add-custom-font"
msgstr "Eigene Schriftart hinzufügen"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.adding"
msgstr "Hinzufügen..."
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Admin"
@@ -1864,7 +1912,7 @@ msgstr "Admin"
msgid "labels.adobe-xd"
msgstr "Adobe XD"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Alles"
@@ -1887,7 +1935,7 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "Bad Gateway"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Abbrechen"
@@ -1895,11 +1943,11 @@ msgstr "Abbrechen"
msgid "labels.canva"
msgstr "Canva"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Schließen"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:186
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:181
msgid "labels.collapse"
msgstr "Zusammenklappen"
@@ -1911,11 +1959,11 @@ msgstr "Kommentar"
msgid "labels.comment.mark-as-solved"
msgstr "Als gelöst markieren"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Kommentare"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Community"
@@ -1923,7 +1971,7 @@ msgstr "Community"
msgid "labels.confirm-password"
msgstr "Passwort bestätigen"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Weiter"
@@ -1939,11 +1987,11 @@ msgstr "Sie können mit einem Penpot-Konto fortfahren"
msgid "labels.copy"
msgstr "Kopieren"
-#: src/app/main/ui/inspect/attributes/common.cljs:118
+#: src/app/main/ui/inspect/attributes/common.cljs:99
msgid "labels.copy-color"
msgstr "Farbe kopieren"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "Link kopieren"
@@ -1951,7 +1999,7 @@ msgstr "Link kopieren"
msgid "labels.copyright"
msgstr "Kaleidos @2024"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Erstellen"
@@ -1971,7 +2019,7 @@ msgstr "Eigene Schriftarten"
msgid "labels.dashboard"
msgstr "Dashboard"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Löschen"
@@ -1983,7 +2031,7 @@ msgstr "Kommentar löschen"
msgid "labels.delete-comment-thread"
msgstr "Thread löschen"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Einladung löschen"
@@ -2000,19 +2048,19 @@ msgstr "Developer"
msgid "labels.director"
msgstr "Geschäftsführer"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "Verwerfen"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Entwürfe"
-#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:65
msgid "labels.duplicate"
msgstr "Duplizieren"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Bearbeiten"
@@ -2020,11 +2068,11 @@ msgstr "Bearbeiten"
msgid "labels.edit-file"
msgstr "Datei bearbeiten"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Editor"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:302
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:301
msgid "labels.empty"
msgstr "Leer"
@@ -2037,11 +2085,11 @@ msgstr "Fehler"
msgid "labels.event"
msgstr "Veranstaltung"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Abgelaufen"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Exportieren"
@@ -2069,7 +2117,7 @@ msgstr "Schriftenhersteller"
msgid "labels.font-variants"
msgstr "Stile"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Schriftarten"
@@ -2083,11 +2131,11 @@ msgstr "Gründer/VP"
msgid "labels.freelancer"
msgstr "Ich bin ein Freelancer"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "Github-Repository"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Feedback geben"
@@ -2099,7 +2147,7 @@ msgstr "Zurück"
msgid "labels.graphic-design"
msgstr "Grafikdesign"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Hilfezentrum"
@@ -2107,15 +2155,15 @@ msgstr "Hilfezentrum"
msgid "labels.hide"
msgstr "Ausblenden"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Erledigte Kommentare ausblenden"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:134
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:130
msgid "labels.import"
msgstr "Importieren"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "Inaktiv"
@@ -2137,7 +2185,7 @@ msgstr "Interner Fehler"
msgid "labels.invision"
msgstr "InVision"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Einladungen"
@@ -2145,7 +2193,7 @@ msgstr "Einladungen"
msgid "labels.language"
msgstr "Sprache"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Bibliotheken & Vorlagen"
@@ -2153,6 +2201,10 @@ msgstr "Bibliotheken & Vorlagen"
msgid "labels.loading"
msgstr "Laden…"
+#: src/app/main/ui/workspace/sidebar/versions.cljs:209
+msgid "labels.lock"
+msgstr "Sperren"
+
#: src/app/main/ui/viewer/header.cljs:208
msgid "labels.log-or-sign"
msgstr "Einloggen oder anmelden"
@@ -2161,7 +2213,7 @@ msgstr "Einloggen oder anmelden"
msgid "labels.login"
msgstr "Anmelden"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Abmelden"
@@ -2169,11 +2221,11 @@ msgstr "Abmelden"
msgid "labels.marketing"
msgstr "Marketing"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Mitglied"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Mitglieder"
@@ -2181,21 +2233,25 @@ msgstr "Mitglieder"
msgid "labels.mention"
msgstr "Erwähnung"
+#: src/app/main/ui/ds/controls/numeric_input.cljs:619
+msgid "labels.mixed-values"
+msgstr "Mehrere"
+
#: src/app/main/ui/settings/password.cljs:84
msgid "labels.new-password"
msgstr "Neues Passwort"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "Weiter"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr ""
"Sie sind auf dem neuesten Stand! Neue Benachrichtigungen zu Kommentaren "
"werden hier angezeigt."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "Keine ausstehenden Einladungen."
@@ -2214,7 +2270,7 @@ msgstr "Ups!"
msgid "labels.notifications"
msgstr "Benachrichtigungen"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "1 Datei"
@@ -2226,7 +2282,7 @@ msgid_plural "labels.num-of-frames"
msgstr[0] "1 Zeichenfläche"
msgstr[1] "%s Zeichenflächen"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "1 Projekt"
@@ -2245,7 +2301,7 @@ msgstr "Altes Passwort"
msgid "labels.only-yours"
msgstr "Nur Ihre"
-#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:309, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:338
+#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:310, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:339
msgid "labels.options"
msgstr "Optionen"
@@ -2261,7 +2317,7 @@ msgstr "Sonstiges (bitte angeben)"
msgid "labels.other-short"
msgstr "Sonstiges"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Eigentümer"
@@ -2269,10 +2325,14 @@ msgstr "Eigentümer"
msgid "labels.password"
msgstr "Passwort"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "Ausstehend"
+#: src/app/main/ui/dashboard/sidebar.cljs:751
+msgid "labels.pinned-projects"
+msgstr "Angeheftete Projekte"
+
#: src/app/main/ui/comments.cljs:679
msgid "labels.post"
msgstr "Versenden"
@@ -2293,7 +2353,7 @@ msgstr "Produkt- oder Projektmanager"
msgid "labels.profile"
msgstr "Profil"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Projekte"
@@ -2301,7 +2361,7 @@ msgstr "Projekte"
msgid "labels.refresh"
msgstr "Aktualisieren"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Versionshinweise"
@@ -2315,11 +2375,11 @@ msgstr "Datei neu laden"
msgid "labels.remove"
msgstr "Entfernen"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Mitglied entfernen"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Umbenennen"
@@ -2347,7 +2407,7 @@ msgstr "neue Antwort"
msgid "labels.reply.thread"
msgstr "Antwort"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "Einladung erneut senden"
@@ -2359,15 +2419,15 @@ msgstr "Wiederherstellen"
msgid "labels.retry"
msgstr "Wiederholen"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Rolle"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Speichern"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:715
+#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:730
msgid "labels.search"
msgstr "Suchen"
@@ -2395,11 +2455,11 @@ msgstr "Wir befinden uns in der planmäßigen Wartung unserer Systeme."
msgid "labels.service-unavailable.main-message"
msgstr "Service nicht verfügbar"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:79
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:75
msgid "labels.sets"
msgstr "Sets"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Einstellungen"
@@ -2411,7 +2471,7 @@ msgstr "Teilen"
msgid "labels.share-prototype"
msgstr "Prototyp teilen"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Gemeinsam genutzte Bibliotheken"
@@ -2419,7 +2479,7 @@ msgstr "Gemeinsam genutzte Bibliotheken"
msgid "labels.show"
msgstr "Anzeigen"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Alle Kommentare anzeigen"
@@ -2427,11 +2487,11 @@ msgstr "Alle Kommentare anzeigen"
msgid "labels.show-comments-list"
msgstr "Kommentarliste anzeigen"
-#: src/app/main/ui/workspace/comments.cljs:67, src/app/main/ui/workspace/comments.cljs:139
+#: src/app/main/ui/workspace/comments.cljs:68, src/app/main/ui/workspace/comments.cljs:140
msgid "labels.show-mentions"
msgstr "Nur Ihre Erwähnungen anzeigen"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Nur eigene Kommentare anzeigen"
@@ -2439,11 +2499,15 @@ msgstr "Nur eigene Kommentare anzeigen"
msgid "labels.sketch"
msgstr "Sketch"
+#: src/app/main/ui/dashboard/sidebar.cljs:730
+msgid "labels.sources"
+msgstr "Quellen"
+
#: src/app/main/ui/onboarding/questions.cljs:55
msgid "labels.start"
msgstr "Start"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Status"
@@ -2465,14 +2529,18 @@ msgstr "Teammitglied"
msgid "labels.themes"
msgstr "Themen"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Tutorials"
-#: src/app/main/data/workspace/tokens/errors.cljs:93
+#: src/app/main/data/workspace/tokens/errors.cljs:101
msgid "labels.unknown-error"
msgstr "Unbekannter Fehler"
+#: src/app/main/ui/workspace/sidebar/versions.cljs:203
+msgid "labels.unlock"
+msgstr "Entsperren"
+
#: src/app/main/ui/dashboard/file_menu.cljs:267
msgid "labels.unpublish-multi-files"
msgstr "Veröffentlichung von %s-Dateien aufheben"
@@ -2497,15 +2565,15 @@ msgstr "Eigene Schriftarten hochladen"
msgid "labels.uploading"
msgstr "Hochladen…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "Nur ansehen"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Zuschauer"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Webhooks"
@@ -2513,11 +2581,11 @@ msgstr "Webhooks"
msgid "labels.write-new-comment"
msgstr "Neuen Kommentar schreiben"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(Sie)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "Ihr Konto"
@@ -2536,7 +2604,11 @@ msgstr "Kollaboration in Echtzeit"
#: src/app/main/ui/ds/product/loader.cljs:24
msgid "loader.tips.03.title"
-msgstr "Auto-Layout wie CSS"
+msgstr "Layouts wie CSS"
+
+#: src/app/main/ui/ds/product/loader.cljs:27
+msgid "loader.tips.04.message"
+msgstr "Erhalten Sie CSS- und SVG-Code direkt aus Ihren Designs."
#: src/app/main/ui/ds/product/loader.cljs:28
msgid "loader.tips.05.title"
@@ -2562,23 +2634,23 @@ msgstr "Dunkel- und Hell-Modus"
msgid "loader.tips.10.title"
msgstr "Unterstützung von Plugins"
-#: src/app/main/ui/workspace/colorpicker.cljs:449, src/app/main/ui/workspace/colorpicker.cljs:450, src/app/main/ui/workspace/colorpicker.cljs:452
+#: src/app/main/ui/workspace/colorpicker.cljs:486, src/app/main/ui/workspace/colorpicker.cljs:487, src/app/main/ui/workspace/colorpicker.cljs:489
msgid "media.choose-image"
msgstr "Bild auswählen"
-#: src/app/main/ui/workspace/colorpicker.cljs:244
+#: src/app/main/ui/workspace/colorpicker.cljs:256
msgid "media.gradient"
msgstr "Verlauf"
-#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:44, src/app/main/ui/ds/utilities/swatch.cljs:57, src/app/main/ui/inspect/attributes/common.cljs:63, src/app/main/ui/workspace/colorpicker.cljs:246, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:251
+#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:45, src/app/main/ui/ds/utilities/swatch.cljs:58, src/app/main/ui/inspect/attributes/common.cljs:44, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:65, src/app/main/ui/workspace/colorpicker.cljs:258, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:395
msgid "media.image"
msgstr "Bild"
-#: src/app/main/ui/inspect/attributes/common.cljs:74
+#: src/app/main/ui/inspect/attributes/common.cljs:55
msgid "media.image.short"
msgstr "img"
-#: src/app/main/ui/workspace/colorpicker.cljs:442
+#: src/app/main/ui/workspace/colorpicker.cljs:479
msgid "media.keep-aspect-ratio"
msgstr "Seitenverhältnis beibehalten"
@@ -2596,7 +2668,7 @@ msgstr "Bild laden…"
msgid "media.radial"
msgstr "Radial"
-#: src/app/main/ui/workspace/colorpicker.cljs:242
+#: src/app/main/ui/workspace/colorpicker.cljs:254
msgid "media.solid"
msgstr "Einfarbig"
@@ -2671,19 +2743,19 @@ msgstr "Token erzeugen"
msgid "modals.create-access-token.title"
msgstr "Zugangstoken generieren"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "Webhook erstellen"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "Webhook erstellen"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "Payload-URL"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://example.com/postreceive"
@@ -2731,11 +2803,11 @@ msgstr ""
msgid "modals.delete-comment-thread.title"
msgstr "Konversation löschen"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "Sind Sie sicher, dass Sie diese Anmerkung löschen möchten?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "Anmerkung löschen"
@@ -2783,11 +2855,11 @@ msgstr ""
msgid "modals.delete-font.title"
msgstr "Schriftart löschen"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Sind Sie sicher, dass Sie diese Seite löschen wollen?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Seite löschen"
@@ -2833,29 +2905,29 @@ msgid_plural "modals.delete-shared-confirm.title"
msgstr[0] "Datei löschen"
msgstr[1] "Dateien löschen"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Team löschen"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Sind Sie sicher, dass Sie dieses Team löschen möchten? Alle Projekte und "
"Dateien, die mit dem Team verbunden sind, werden dauerhaft gelöscht."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Team löschen"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Mitglied löschen"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Sind Sie sicher, dass Sie dieses Mitglied aus dem Team löschen möchten?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Teammitglied löschen"
@@ -2869,57 +2941,57 @@ msgstr[1] ""
"Assets, die bereits in diesen Dateien verwendet wurden, bleiben dort "
"erhalten (das Design bleibt erhalten)."
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "Webhook löschen"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "Möchten Sie diesen Webhook wirklich löschen?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "Webhook löschen"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "Webhook bearbeiten"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "Webhook bearbeiten"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Einladung senden"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "E-Mails, durch Komma getrennt"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr ""
"Einige E-Mails stammen von aktuellen Teammitgliedern. Ihre Einladungen "
"werden nicht versendet."
-#: src/app/main/ui/dashboard/team.cljs:220
+#: src/app/main/ui/dashboard/team.cljs:222
msgid "modals.invite-team-member.text"
msgstr ""
"Sie können Mitglieder in das Team einladen, damit diese auf diese Datei und "
"alle Team-Dateien zugreifen können."
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "Mitglieder in das Team einladen"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"Da Sie das einzige Mitglied dieses Teams sind, wird das Team zusammen mit "
"seinen Projekten und Dateien gelöscht."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "Sind Sie sicher, dass Sie das %s-Team verlassen wollen?"
@@ -2945,15 +3017,15 @@ msgstr "Wählen Sie ein Mitglied aus, das befördert werden soll"
msgid "modals.leave-and-reassign.title"
msgstr "Wählen Sie ein Mitglied aus, das befördert werden soll"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Team verlassen"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Sind Sie sicher, dass Sie dieses Team verlassen wollen?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Team verlassen"
@@ -2975,39 +3047,39 @@ msgid_plural "modals.move-shared-confirm.title"
msgstr[0] "Bibliothek verschieben"
msgstr[1] "Bibliotheken verschieben"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "Verschiebung"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Befördern"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"Wenn Sie die Eigentümerschaft übertragen, ändern Sie Ihre Rolle in Admin "
"und verlieren einige Berechtigungen für dieses Team. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr "Sind Sie sicher, dass Sie diesen Benutzer zum Eigentümer befördern wollen?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Zum Eigentümer befördern"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "Veröffentlichen"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr ""
"Ihre Bibliothek ist leer. Sind Sie sicher, dass Sie es veröffentlichen "
"wollen?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "Leere Bibliothek veröffentlichen"
@@ -3064,22 +3136,22 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Komponenten in einer gemeinsamen Bibliothek aktualisieren"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Aktualisieren"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Abbrechen"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"Sie sind dabei, eine Komponente in einer geteilten Bibliothek zu "
"aktualisieren. Dies kann sich auf andere Dateien auswirken, die diese "
"Komponente verwenden."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Komponente aus einer geteilten Bibliothek aktualiseren"
@@ -3197,11 +3269,11 @@ msgstr ""
msgid "notifications.by-code.upgrade-version"
msgstr "Eine neue Version ist verfügbar, bitte aktualisieren Sie die Seite"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "Einladung erfolgreich gesendet"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "Einladungslink kopiert"
@@ -3356,7 +3428,7 @@ msgstr ""
"Denken Sie daran, alle einzubeziehen. Entwickler, Designer, Manager... die "
"Vielfalt macht's :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "Einladen mit der Rolle:"
@@ -3576,193 +3648,193 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "Zur Anmeldung"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "Trennen"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "Mehrere"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:283
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:423
msgid "settings.remove-color"
msgstr "Farbe entfernen"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:288
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:428
msgid "settings.select-this-color"
msgstr "Elemente mit diesem Stil auswählen"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Grundlagen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "Dashboard"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Ansicht"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Arbeitsbereich"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Ausrichtung"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Bearbeiten"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "Allgemein"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "Allgemein"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Hauptmenü"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "Ändern von Ebenen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Navigation"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Navigation"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Navigation"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Paneele"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Pfade"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Formen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "Texte"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Werkzeuge"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Kommentare"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "Punkt hinzufügen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "Unten ausrichten"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "Zentrieren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "Horizontal zentrieren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "Blocksatz"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "Linksbündig ausrichten"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "Rechtsbündig ausrichten"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "Oben ausrichten"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "Mittig ausrichten (vertikal)"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "Zeichenfläche aus Auswahl erstellen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "Umschalten auf Fettdruck"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "Subtrahieren (Boolesche Operation)"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "Ausschluss"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "Schnittmenge"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "Vereinigung"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "In den Hintergrund"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Eins nach hinten"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "Eins nach vorne"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "In den Vordergrund"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "Verlauf löschen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Kopieren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
msgid "shortcuts.copy-link"
msgstr "Link in die Zwischenablage kopieren"
@@ -3771,287 +3843,271 @@ msgstr "Link in die Zwischenablage kopieren"
msgid "shortcuts.copy-props"
msgstr "Eigenschaften kopieren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "Neues Projekt erstellen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Ausschneiden"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "Auszoomen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Löschen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "Punkt löschen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "Komponente lösen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Kurve"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "Ellipse"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Board"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "Pfad zeichnen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Pfad"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Rechteck"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Text"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Duplizieren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "Abbrechen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "Formen exportieren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "Passend zoomen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "Horizontal spiegeln"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "Vertikal spiegeln"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "Schriftgröße verkleinern"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "Schriftgröße erhöhen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "Zu den Entwürfen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "Zu gemeinsam genutzten Bibliotheken wechseln"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Suchen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Gruppieren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "Horizontal verteilen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "Benutzeroberfläche ein-/ausblenden"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "Einzoomen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "Bild einfügen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "Umschalten auf Kursivdruck"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "Punkte verbinden"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
-msgid "shortcuts.letter-spacing-dec"
-msgstr "Buchstabenabstand verringern"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "Buchstabenabstand erhöhen"
-
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
-msgid "shortcuts.line-height-dec"
-msgstr "Zeilenhöhe verringern"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
-msgid "shortcuts.line-height-inc"
-msgstr "Zeilenhöhe erhöhen"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.line-through"
msgstr "Durchgestrichen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "Zur Ecke umwandeln"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "Kurve erstellen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "Maskieren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "Punkte zusammenführen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "Verschieben"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "Schnell nach unten verschieben"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "Schnell nach links verschieben"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "Schnell nach rechts verschieben"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "Schnell nach oben verschieben"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "Punkte verschieben"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "Nach unten verschieben"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "Nach links verschieben"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "Nach rechts verschieben"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "Nach oben verschieben"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "Nächstes Board"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "Kein Tastaturkürzel gefunden"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "Deckkraft auf 100% setzen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "Deckkraft auf 10% setzen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "Deckkraft auf 20% setzen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "Deckkraft auf 30% setzen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "Deckkraft auf 40% setzen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "Deckkraft auf 50% setzen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "Deckkraft auf 60% setzen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "Deckkraft auf 70% setzen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "Deckkraft auf 80% setzen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "Deckkraft auf 90% setzen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "Farbwähler"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "Zum Kommentarbereich im Ansichtsmodus"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "Zum Dashboard"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "Zur Spezifikation im Ansichtsmodus"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "Zum Ansichtsmodus"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "Zum Ansichtsmodus"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "Zum Arbeitsbereich"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " oder "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Einfügen"
@@ -4065,199 +4121,264 @@ msgstr "Eigenschaften einfügen"
msgid "shortcuts.plugins"
msgstr "Plugin-Manager"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "Vorheriges Board"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "Wiederholen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
msgid "shortcuts.rename"
msgstr "Umbenennen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "Zoom zurücksetzen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
msgid "shortcuts.scale"
msgstr "Skalieren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "Tastaturkürzel suchen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "Alles auswählen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
msgid "shortcuts.select-next"
msgstr "Nächste Ebene auswählen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
msgid "shortcuts.select-parent-layer"
msgstr "Übergeordnete Ebene auswählen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
msgid "shortcuts.select-prev"
msgstr "Vorherige Ebene auswählen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "Punkte trennen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "Pixelraster ein-/ausblenden"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "Tastaturkürzel ein-/ausblenden"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "An den Punkten ausrichten"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "Am Pixelraster ausrichten"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "Mit der Bearbeitung beginnen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "Mit der Vermessung beginnen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "Mit der Vermessung abbrechen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "Miniaturansichten festlegen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "Tastaturkürzel"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "Dynamische Ausrichtung umschalten"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "Assets einblenden"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "Farbpalette ein-/ausblenden"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "Fokusmodus umschalten"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "Vollbild aktivieren/deaktivieren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
msgid "shortcuts.toggle-guides"
msgstr "Hilfslinien anzeigen / ausblenden"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "Verlauf ein-/ausblenden"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "Ebenen ein-/ausblenden"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "Flex-Layout hinzufügen/entfernen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
msgid "shortcuts.toggle-layout-grid"
msgstr "Grid-Layout hinzufügen/entfernen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "Auswahl sperren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "Seitenverhältnis sperren/entsperren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
msgid "shortcuts.toggle-rulers"
msgstr "Lineale anzeigen / ausblenden"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
msgid "shortcuts.toggle-snap-guides"
msgstr "An Hilfslinien ausrichten"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
msgid "shortcuts.toggle-snap-ruler-guide"
msgstr "An den Hilfslinien des Lineals ausrichten"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "Textpalette ein-/ausblenden"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
msgid "shortcuts.toggle-theme"
msgstr "Theme ändern"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "Elemente ein-/ausblenden"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "Zoom-Optionen umschalten"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "Unterstrichen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Rückgängig"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Gruppierung aufheben"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Maske entfernen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "Vertikal verteilen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "Ansicht mit Zoomwerkzeug verkleinern"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "Ansicht mit Zoomwerkzeug vergrößern"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "Zur Auswahl zoomen"
+#: src/app/main/ui/dashboard/subscription.cljs:89, src/app/main/ui/dashboard/subscription.cljs:131
+msgid "subscription.dashboard.power-up.enterprise-plan"
+msgstr "Unternehmens-Abonnement"
+
+#: src/app/main/ui/dashboard/subscription.cljs:85
+msgid "subscription.dashboard.power-up.enterprise-trial.top-title"
+msgstr "Unternehmens-Abonnement (Testversion)"
+
+#: src/app/main/ui/dashboard/subscription.cljs:63
+msgid "subscription.dashboard.power-up.professional.top-title"
+msgstr "Professionelles Abonnement"
+
#: src/app/main/ui/dashboard/subscription.cljs:64, src/app/main/ui/settings/subscription.cljs:107, src/app/main/ui/settings/subscription.cljs:131
#, unused
msgid "subscription.dashboard.power-up.subscribe"
msgstr "Abonnieren"
+#: src/app/main/ui/dashboard/subscription.cljs:71
+msgid "subscription.dashboard.power-up.trial.top-title"
+msgstr "Unbegrenztes Abonnement (Testversion)"
+
+#: src/app/main/ui/dashboard/subscription.cljs:77, src/app/main/ui/dashboard/subscription.cljs:130
+msgid "subscription.dashboard.power-up.unlimited-plan"
+msgstr "Unbegrenztes Abonnement"
+
+#: src/app/main/ui/dashboard/subscription.cljs:62, src/app/main/ui/dashboard/subscription.cljs:70, src/app/main/ui/dashboard/subscription.cljs:76, src/app/main/ui/dashboard/subscription.cljs:84, src/app/main/ui/dashboard/subscription.cljs:88
+msgid "subscription.dashboard.power-up.your-subscription"
+msgstr "Ihr Abonnement:"
+
+#: src/app/main/ui/dashboard/subscription.cljs:111
+msgid "subscription.dashboard.team-plan"
+msgstr "Team-Abonnement"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:978
+msgid "subscription.dashboard.upgrade-plan.power-up"
+msgstr "Power up"
+
+#: src/app/main/ui/settings/sidebar.cljs:116, src/app/main/ui/settings/subscription.cljs:318, src/app/main/ui/settings/subscription.cljs:351
+msgid "subscription.labels"
+msgstr "Abonnement"
+
+#: src/app/main/ui/settings/subscription.cljs:379, src/app/main/ui/settings/subscription.cljs:391, src/app/main/ui/settings/subscription.cljs:401, src/app/main/ui/settings/subscription.cljs:453
+msgid "subscription.settings.benefits.all-unlimited-benefits"
+msgstr "Alle Vorteile des unbegrenzten Abonnements und:"
+
+#: src/app/main/ui/settings/subscription.cljs:393, src/app/main/ui/settings/subscription.cljs:403, src/app/main/ui/settings/subscription.cljs:455
+msgid "subscription.settings.enterprise.autosave"
+msgstr "90-Tage automatische Speicherung von Versionen und Dateiwiederherstellung"
+
+#: src/app/main/ui/settings/subscription.cljs:394, src/app/main/ui/settings/subscription.cljs:404, src/app/main/ui/settings/subscription.cljs:456
+msgid "subscription.settings.enterprise.capped-bill"
+msgstr "Monatliche Gesamtrechnung"
+
+#: src/app/main/ui/settings/subscription.cljs:392, src/app/main/ui/settings/subscription.cljs:402, src/app/main/ui/settings/subscription.cljs:454
+msgid "subscription.settings.enterprise.unlimited-storage-benefit"
+msgstr "Unbegrenzter Speicherplatz"
+
+#: src/app/main/ui/dashboard/subscription.cljs:124, src/app/main/ui/settings/subscription.cljs:371, src/app/main/ui/settings/subscription.cljs:383, src/app/main/ui/settings/subscription.cljs:395, src/app/main/ui/settings/subscription.cljs:405
+msgid "subscription.settings.manage-your-subscription"
+msgstr "Ihr Abonnement verwalten"
+
+#: src/app/main/ui/settings/subscription.cljs:133
+msgid "subscription.settings.management.dialog.editors"
+msgstr "Redakteure"
+
+#: src/app/main/ui/settings/subscription.cljs:170, src/app/main/ui/settings/subscription.cljs:174
+#, markdown
+msgid "subscription.settings.management.dialog.price-month"
+msgstr "**$%s**/Monat"
+
#: src/app/main/ui/settings/subscription.cljs:418
msgid "subscription.settings.member-since"
msgstr "Penpot-Mitglied seit %s"
@@ -4278,6 +4399,14 @@ msgstr "Organisation pro Monat"
msgid "subscription.settings.professional"
msgstr "Professionell"
+#: src/app/main/ui/settings/subscription.cljs:360, src/app/main/ui/settings/subscription.cljs:427
+msgid "subscription.settings.professional.autosave-benefit"
+msgstr "7-Tage automatische Speicherung von Versionen und Dateiwiederherstellung"
+
+#: src/app/main/ui/settings/subscription.cljs:359, src/app/main/ui/settings/subscription.cljs:426
+msgid "subscription.settings.professional.storage-benefit"
+msgstr "10 GB Speicherplatz"
+
#: src/app/main/ui/settings/subscription.cljs:355
msgid "subscription.settings.section-plan"
msgstr "Ihr Abonnement"
@@ -4310,10 +4439,18 @@ msgstr "Unbegrenzt"
msgid "subscription.settings.unlimited-trial"
msgstr "Unbegrenzt (Testversion)"
+#: src/app/main/ui/settings/subscription.cljs:369, src/app/main/ui/settings/subscription.cljs:381, src/app/main/ui/settings/subscription.cljs:441
+msgid "subscription.settings.unlimited.autosave-benefit"
+msgstr "30-Tage automatische Speicherung von Versionen und Dateiwiederherstellung"
+
#: src/app/main/ui/settings/subscription.cljs:370, src/app/main/ui/settings/subscription.cljs:382, src/app/main/ui/settings/subscription.cljs:442
msgid "subscription.settings.unlimited.bill"
msgstr "Monatliche Rechnung mit Kostenobergrenze"
+#: src/app/main/ui/settings/subscription.cljs:368, src/app/main/ui/settings/subscription.cljs:380, src/app/main/ui/settings/subscription.cljs:440
+msgid "subscription.settings.unlimited.storage-benefit"
+msgstr "25 GB Speicherplatz"
+
#: src/app/main/ui/dashboard/files.cljs:180
msgid "title.dashboard.files"
msgstr "%s - Penpot"
@@ -4366,19 +4503,19 @@ msgstr "Passwort - Penpot"
msgid "title.settings.profile"
msgstr "Profil - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "Einladungen - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "Mitglieder - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Einstellungen - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "Webhooks - %s - Penpot"
@@ -4450,43 +4587,43 @@ msgstr "Interaktionen beim Klicken anzeigen"
msgid "viewer.header.sitemap"
msgstr "Sitemap"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "Die letzte Übertragung war erfolgreich."
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Zentrieren (horizontal) (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "Horizontal verteilen (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Linksbündig ausrichten (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Rechtsbündig ausrichten (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Unten ausrichten (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Mittig ausrichten (vertikal) (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "Vertikal verteilen (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Oben ausrichten (%s)"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:163
+#: src/app/main/ui/workspace/sidebar/assets.cljs:172
msgid "workspace.assets.add-library"
msgstr "Bibliothek hinzufügen"
@@ -4495,19 +4632,19 @@ msgstr "Bibliothek hinzufügen"
msgid "workspace.assets.assets"
msgstr "Assets"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "Alle Assets"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Farben"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:493
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:497
msgid "workspace.assets.colors.add-color"
msgstr "Farbe hinzufügen"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Komponenten"
@@ -4515,25 +4652,25 @@ msgstr "Komponenten"
msgid "workspace.assets.components.add-component"
msgstr "Komponente hinzufügen"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:176, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:535
+#: src/app/main/ui/workspace/sidebar/assets/components.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:547
msgid "workspace.assets.components.num-variants"
msgstr "%s Varianten"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "Gruppe erstellen"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr ""
"Ihre Elemente werden automatisch nach diesem Schema benannt: \"Gruppenname "
"/ Elementname\""
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Löschen"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "Duplizieren"
@@ -4541,11 +4678,11 @@ msgstr "Duplizieren"
msgid "workspace.assets.duplicate-main"
msgstr "Hauptkomponente duplizieren"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Bearbeiten"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:177
+#: src/app/main/ui/workspace/sidebar/assets.cljs:186
msgid "workspace.assets.filter"
msgstr "Filtern"
@@ -4554,27 +4691,27 @@ msgstr "Filtern"
msgid "workspace.assets.graphics"
msgstr "Grafiken"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:576
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:190, src/app/main/ui/workspace/sidebar/assets/components.cljs:576
msgid "workspace.assets.grid-view"
msgstr "Rasteransicht"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Gruppieren"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "Name der Gruppe"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:572
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:191, src/app/main/ui/workspace/sidebar/assets/components.cljs:572
msgid "workspace.assets.list-view"
msgstr "Listenansicht"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "lokale Bibliothek"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:168
+#: src/app/main/ui/workspace/sidebar/assets.cljs:177
msgid "workspace.assets.manage-library"
msgstr "Bibliothek verwalten"
@@ -4586,15 +4723,15 @@ msgstr "Keine Assets gefunden"
msgid "workspace.assets.open-library"
msgstr "Bibliotheksdatei öffnen"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Umbenennen"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "Gruppe umbenennen"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "Assets suchen"
@@ -4610,21 +4747,21 @@ msgstr[1] "%s Elemente ausgewählt"
msgid "workspace.assets.shared-library"
msgstr "Geteilte Bibliothek"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:237
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:235
msgid "workspace.assets.sidebar.components"
msgid_plural "workspace.assets.sidebar.components"
msgstr[0] "1 Komponente"
msgstr[1] "% Komponenten"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:193
+#: src/app/main/ui/workspace/sidebar/assets.cljs:204
msgid "workspace.assets.sort"
msgstr "Sortieren"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Textstile"
-#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:404
+#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:405
msgid "workspace.assets.typography.add-typography"
msgstr "Typografie hinzufügen"
@@ -4649,7 +4786,7 @@ msgstr "Zeichenabstand"
msgid "workspace.assets.typography.line-height"
msgstr "Zeilenabstand"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -4661,59 +4798,59 @@ msgstr "Textstile"
msgid "workspace.assets.typography.text-transform"
msgstr "Texttransformation"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "Gruppierung aufheben"
-#: src/app/main/ui/workspace/context_menu.cljs:791
+#: src/app/main/ui/workspace/context_menu.cljs:794
msgid "workspace.context-menu.grid-cells.area"
msgstr "Bereich erstellen"
-#: src/app/main/ui/workspace/context_menu.cljs:794
+#: src/app/main/ui/workspace/context_menu.cljs:797
msgid "workspace.context-menu.grid-cells.create-board"
msgstr "Board erstellen"
-#: src/app/main/ui/workspace/context_menu.cljs:786
+#: src/app/main/ui/workspace/context_menu.cljs:789
msgid "workspace.context-menu.grid-cells.merge"
msgstr "Zellen zusammenführen"
-#: src/app/main/ui/workspace/context_menu.cljs:749
+#: src/app/main/ui/workspace/context_menu.cljs:752
msgid "workspace.context-menu.grid-track.column.add-after"
msgstr "1 Spalte rechts einfügen"
-#: src/app/main/ui/workspace/context_menu.cljs:748
+#: src/app/main/ui/workspace/context_menu.cljs:751
msgid "workspace.context-menu.grid-track.column.add-before"
msgstr "1 Spalte links einfügen"
-#: src/app/main/ui/workspace/context_menu.cljs:750
+#: src/app/main/ui/workspace/context_menu.cljs:753
msgid "workspace.context-menu.grid-track.column.delete"
msgstr "Spalte löschen"
-#: src/app/main/ui/workspace/context_menu.cljs:751
+#: src/app/main/ui/workspace/context_menu.cljs:754
msgid "workspace.context-menu.grid-track.column.delete-shapes"
msgstr "Spalte und Formen löschen"
-#: src/app/main/ui/workspace/context_menu.cljs:747
+#: src/app/main/ui/workspace/context_menu.cljs:750
msgid "workspace.context-menu.grid-track.column.duplicate"
msgstr "Spalte duplizieren"
-#: src/app/main/ui/workspace/context_menu.cljs:756
+#: src/app/main/ui/workspace/context_menu.cljs:759
msgid "workspace.context-menu.grid-track.row.add-after"
msgstr "1 Zeile unterhalb einfügen"
-#: src/app/main/ui/workspace/context_menu.cljs:755
+#: src/app/main/ui/workspace/context_menu.cljs:758
msgid "workspace.context-menu.grid-track.row.add-before"
msgstr "1 Zeile oberhalb einfügen"
-#: src/app/main/ui/workspace/context_menu.cljs:757
+#: src/app/main/ui/workspace/context_menu.cljs:760
msgid "workspace.context-menu.grid-track.row.delete"
msgstr "Zeile löschen"
-#: src/app/main/ui/workspace/context_menu.cljs:758
+#: src/app/main/ui/workspace/context_menu.cljs:761
msgid "workspace.context-menu.grid-track.row.delete-shapes"
msgstr "Zeile und Formen löschen"
-#: src/app/main/ui/workspace/context_menu.cljs:754
+#: src/app/main/ui/workspace/context_menu.cljs:757
msgid "workspace.context-menu.grid-track.row.duplicate"
msgstr "Zeile duplizieren"
@@ -4721,7 +4858,7 @@ msgstr "Zeile duplizieren"
msgid "workspace.focus.focus-mode"
msgstr "Fokus-Modus"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "Fokus aus"
@@ -4741,11 +4878,11 @@ msgstr "Linearer Farbverlauf"
msgid "workspace.gradients.radial"
msgstr "Radialer Farbverlauf"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "Dynamische Ausrichtung deaktivieren"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "Proportionale Skalierung deaktivieren"
@@ -4754,23 +4891,23 @@ msgstr "Proportionale Skalierung deaktivieren"
msgid "workspace.header.menu.disable-scale-text"
msgstr "Textskalierung deaktivieren"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "Ausrichten an Hilfslinien deaktivieren"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "Ausrichten am Pixel deaktivieren"
-#: src/app/main/ui/workspace/main_menu.cljs:215
+#: src/app/main/ui/workspace/main_menu.cljs:243
msgid "workspace.header.menu.disable-snap-ruler-guides"
msgstr "An den Hilfslinien des Lineals ausrichten deaktivieren"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "Dynamische Ausrichtung aktivieren"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "Proportionale Skalierung aktivieren"
@@ -4779,51 +4916,51 @@ msgstr "Proportionale Skalierung aktivieren"
msgid "workspace.header.menu.enable-scale-text"
msgstr "Textskalierung aktivieren"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "An Hilfslinien ausrichten"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "Ausrichten am Pixel aktivieren"
-#: src/app/main/ui/workspace/main_menu.cljs:216
+#: src/app/main/ui/workspace/main_menu.cljs:244
msgid "workspace.header.menu.enable-snap-ruler-guides"
msgstr "An den Hilfslinien des Lineals ausrichten"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "Namen von Zeichenflächen ausblenden"
-#: src/app/main/ui/workspace/main_menu.cljs:348
+#: src/app/main/ui/workspace/main_menu.cljs:376
msgid "workspace.header.menu.hide-guides"
msgstr "Hilfslinien ausblenden"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "Farbpalette ausblenden"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "Pixelraster ausblenden"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "Lineale ausblenden"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "Schriftartenpalette ausblenden"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Bearbeiten"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "Datei"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "Hilfe und Infos"
@@ -4832,63 +4969,63 @@ msgstr "Hilfe und Infos"
msgid "workspace.header.menu.option.power-up"
msgstr "Verstärken Sie Ihren Plan"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "Einstellungen"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "Ansicht"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "Wiederherstellen"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "Alles auswählen"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "Namen der Zeichenflächen anzeigen"
-#: src/app/main/ui/workspace/main_menu.cljs:349
+#: src/app/main/ui/workspace/main_menu.cljs:377
msgid "workspace.header.menu.show-guides"
msgstr "Hilfslinien anzeigen"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "Farbpalette einblenden"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "Pixelraster einblenden"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Lineale einblenden"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "Schriftartenpalette anzeigen"
-#: src/app/main/ui/workspace/main_menu.cljs:288
+#: src/app/main/ui/workspace/main_menu.cljs:316
msgid "workspace.header.menu.toggle-dark-theme"
msgstr "Zum dunklen Theme wechseln"
-#: src/app/main/ui/workspace/main_menu.cljs:286, src/app/main/ui/workspace/main_menu.cljs:289
+#: src/app/main/ui/workspace/main_menu.cljs:314, src/app/main/ui/workspace/main_menu.cljs:317
msgid "workspace.header.menu.toggle-light-theme"
msgstr "Zum hellen Theme wechseln"
-#: src/app/main/ui/workspace/main_menu.cljs:287
+#: src/app/main/ui/workspace/main_menu.cljs:315
msgid "workspace.header.menu.toggle-system-theme"
msgstr "Zum System-Theme wechseln"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "Rückgängig"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Zurücksetzen"
@@ -4904,7 +5041,7 @@ msgstr "Gespeichert"
msgid "workspace.header.saving"
msgstr "Speichern"
-#: src/app/main/ui/workspace/right_header.cljs:239
+#: src/app/main/ui/workspace/right_header.cljs:240
msgid "workspace.header.share"
msgstr "Teilen"
@@ -4913,11 +5050,11 @@ msgstr "Teilen"
msgid "workspace.header.unsaved"
msgstr "Ungespeicherte Änderungen"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "Ansichtsmodus (%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "Vergrößern"
@@ -4929,7 +5066,7 @@ msgstr "Füllen - Skalieren zum Füllen"
msgid "workspace.header.zoom-fit"
msgstr "Anpassen - Verkleinern zum Einpassen"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "Passend zoomen"
@@ -4937,43 +5074,43 @@ msgstr "Passend zoomen"
msgid "workspace.header.zoom-full-screen"
msgstr "Vollbild"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "Zur Auswahl zoomen"
-#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:621
msgid "workspace.layout_grid.editor.options.edit-grid"
msgstr "Grid bearbeiten"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1300
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1301
msgid "workspace.layout_grid.editor.options.exit"
msgstr "Beenden"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:429, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:435
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:430, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:436
msgid "workspace.layout_grid.editor.padding.bottom"
msgstr "Innenabstand unten"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:491
msgid "workspace.layout_grid.editor.padding.expand"
msgstr "4-seitige Abstandsoptionen anzeigen"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:354, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:355, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:362
msgid "workspace.layout_grid.editor.padding.horizontal"
msgstr "Innenabstand horizontal"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:444, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:450
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:451
msgid "workspace.layout_grid.editor.padding.left"
msgstr "Innenabstand links"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:414, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:420
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:421
msgid "workspace.layout_grid.editor.padding.right"
msgstr "Innenabstand rechts"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:406
msgid "workspace.layout_grid.editor.padding.top"
msgstr "Innenabstand oben"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:340, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:341, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:347
msgid "workspace.layout_grid.editor.padding.vertical"
msgstr "Innenabstand vertikal"
@@ -4989,7 +5126,7 @@ msgstr "Fertig"
msgid "workspace.layout_grid.editor.top-bar.locate"
msgstr "Lokalisieren"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1326
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1327
msgid "workspace.layout_grid.editor.top-bar.locate.tooltip"
msgstr "Grid-Layout lokalisieren"
@@ -4998,10 +5135,6 @@ msgstr "Grid-Layout lokalisieren"
msgid "workspace.libraries.add"
msgstr "Hinzufügen"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s Farben"
-
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
msgstr "In Ihrer Bibliothek sind noch keine Farbstile vorhanden"
@@ -5028,43 +5161,35 @@ msgstr "Aktuelle Farben"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "RGB-komplementär"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Farbstil speichern"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s Komponenten"
-
-#: src/app/main/ui/workspace/libraries.cljs:371
+#: src/app/main/ui/workspace/libraries.cljs:404
msgid "workspace.libraries.empty.add-some"
msgstr "Oder probieren Sie einige von diesen aus:"
-#: src/app/main/ui/workspace/libraries.cljs:365
+#: src/app/main/ui/workspace/libraries.cljs:398
msgid "workspace.libraries.empty.no-libraries"
msgstr "In Ihrem Team gibt es keine gemeinsamen Bibliotheken, Sie können suchen nach"
-#: src/app/main/ui/workspace/libraries.cljs:369
+#: src/app/main/ui/workspace/libraries.cljs:402
msgid "workspace.libraries.empty.some-templates"
msgstr "einige Vorlagen sind hier"
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Dateibibliothek"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s Grafik(en)"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "BIBLIOTHEKEN IN DIESER DATEI"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "BIBLIOTHEKEN"
@@ -5073,11 +5198,11 @@ msgstr "BIBLIOTHEKEN"
msgid "workspace.libraries.library"
msgstr "BIBLIOTHEK"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "AKTUALISIERUNGEN DER BIBLIOTHEK"
-#: src/app/main/ui/workspace/libraries.cljs:360
+#: src/app/main/ui/workspace/libraries.cljs:393
msgid "workspace.libraries.loading"
msgstr "Laden…"
@@ -5086,53 +5211,49 @@ msgstr "Laden…"
msgid "workspace.libraries.more-templates"
msgstr "Sie können Folgendes suchen "
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr ""
"Es gibt keine gemeinsam genutzte Bibliotheken, die aktualisiert werden "
"müssen"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "Keine Übereinstimmungen für “%s“ gefunden"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "Suche nach gemeinsam genutzten Bibliotheken"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "GEMEINSAM GENUTZTE BIBLIOTHEKEN"
-#: src/app/main/ui/workspace/libraries.cljs:352
+#: src/app/main/ui/workspace/libraries.cljs:385
msgid "workspace.libraries.shared-library-btn"
msgstr "Bibliothek verknüpfen"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Mehrere Textstile"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Verknüpfung aller Textstile aufheben"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s Textstile"
-
-#: src/app/main/ui/workspace/libraries.cljs:323
+#: src/app/main/ui/workspace/libraries.cljs:354
msgid "workspace.libraries.unlink-library-btn"
msgstr "Bibliothek trennen"
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Aktualisieren"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "alle Änderungen anzeigen"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "AKTUALISIERUNG"
@@ -5140,31 +5261,31 @@ msgstr "AKTUALISIERUNG"
msgid "workspace.notification-pill.detail"
msgstr "Details"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "Klicken Sie auf den + Button um Interaktionen hinzuzufügen."
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:96
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:97
msgid "workspace.options.blur-options.add-blur"
msgstr "Weichzeichnen hinzufügen"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:117
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:118
msgid "workspace.options.blur-options.remove-blur"
msgstr "Weichzeichnen entfernen"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Weichzeichnen"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "Gruppe weichzeichnen"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "Auswahl weichzeichnen"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:114
msgid "workspace.options.blur-options.toggle-blur"
msgstr "Weichzeichnen ein -und aufblenden"
@@ -5172,58 +5293,74 @@ msgstr "Weichzeichnen ein -und aufblenden"
msgid "workspace.options.canvas-background"
msgstr "Hintergrundfarbe"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "Inhalt beschneiden"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Komponente"
-#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:193
+#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:196
msgid "workspace.options.component.annotation"
msgstr "Anmerkung"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "Kopie"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:185
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:188
msgid "workspace.options.component.create-annotation"
msgstr "Eine Anmerkung erstellen"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "Eine Anmerkung bearbeiten"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "Hauptkomponente"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:706
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:721
msgid "workspace.options.component.swap"
msgstr "Komponente austauschen"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:765
msgid "workspace.options.component.swap.empty"
msgstr "Es gibt noch keine Assets in dieser Bibliothek"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1236
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:512
+msgid "workspace.options.component.variant.duplicated.copy.locate"
+msgstr "Konfliktverursachende Varianten finden"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1271
msgid "workspace.options.component.variant.malformed.group.locate"
msgstr "Ungültige Varianten finden"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1233
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1268
msgid "workspace.options.component.variant.malformed.group.title"
msgstr "Einige Varianten haben ungültige Namen"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:502
+msgid "workspace.options.component.variant.malformed.locate"
+msgstr "Ungültige Varianten suchen"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:252
msgid "workspace.options.component.variant.malformed.single.all"
msgstr "Diese Varianten haben ungültige Namen."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:247
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:249
msgid "workspace.options.component.variant.malformed.single.one"
msgstr "Diese Variante hat einen ungültigen Namen."
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:255
+msgid "workspace.options.component.variant.malformed.single.some"
+msgstr "Einige dieser Varianten haben ungültige Namen."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:391
+msgid "workspace.options.component.variant.malformed.structure.example"
+msgstr "[Eigenschaft]=[Wert], [Eigenschaft]=[Wert]"
+
#: src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:163
msgid "workspace.options.constraints"
msgstr "Beschränkungen"
@@ -5264,7 +5401,7 @@ msgstr "Oben"
msgid "workspace.options.constraints.topbottom"
msgstr "Oben & Unten"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Design"
@@ -5277,21 +5414,21 @@ msgstr "Exportieren"
msgid "workspace.options.export-multiple"
msgstr "Auswahl exportieren"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "Ein Element exportieren"
msgstr[1] "%s Elemente exportieren"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:188
+#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:214
msgid "workspace.options.export.add-export"
msgstr "Export hinzufügen"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:235
+#: 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 "Export entfernen"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Suffix"
@@ -5299,7 +5436,7 @@ msgstr "Suffix"
msgid "workspace.options.exporting-complete"
msgstr "Export abgeschlossen"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "Exportiere…"
@@ -5311,27 +5448,27 @@ msgstr "Export fehlgeschlagen"
msgid "workspace.options.exporting-object-slow"
msgstr "Export unerwartet langsam"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Fläche"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:194
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:234
msgid "workspace.options.fill.add-fill"
msgstr "Füllfarbe hinzufügen"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:208
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:248
msgid "workspace.options.fill.remove-fill"
msgstr "Füllung entfernen"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:392
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:474
msgid "workspace.options.fit-content"
msgstr "Größe des Boards an den Inhalt anpassen"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "Flow-Startpunkt hinzufügen"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:178
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:179
msgid "workspace.options.flows.flow"
msgstr "Flow"
@@ -5340,19 +5477,19 @@ msgstr "Flow"
msgid "workspace.options.flows.flow-start"
msgstr "Flow-Startpunkt"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "Flow-Startpunkte"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:155
msgid "workspace.options.flows.remove-flow"
msgstr "Flow entfernen"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Automatisch"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "Spalten"
@@ -5361,7 +5498,7 @@ msgstr "Spalten"
msgid "workspace.options.grid.grid-title"
msgstr "Raster"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Farbe"
@@ -5370,15 +5507,15 @@ msgstr "Farbe"
msgid "workspace.options.grid.params.columns"
msgstr "Spalten"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "Zwischenräume"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Höhe"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Rand"
@@ -5387,7 +5524,7 @@ msgstr "Rand"
msgid "workspace.options.grid.params.rows"
msgstr "Zeilen"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "Als Standard festlegen"
@@ -5401,159 +5538,159 @@ msgstr "Größe"
msgid "workspace.options.grid.params.type"
msgstr "Art"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Unten"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Zentriert"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Links"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Rechts"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "Gestreckt"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "Oben"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "Standardwerte verwenden"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Breite"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Zeile"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "Quadrat"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Gruppe füllen"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Gruppe einrahmen"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:326
msgid "workspace.options.guides.add-guide"
msgstr "Hilfslinie hinzufügen"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:187
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:188
msgid "workspace.options.guides.remove-guide"
msgstr "Hilfslinie entfernen"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:320
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
msgid "workspace.options.guides.title"
msgstr "Hilfslinien"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:183
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:184
msgid "workspace.options.guides.toggle-guide"
msgstr "Hilfslinie ein -und ausblenden"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "Höhe"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "Spezifikation"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "Aktion"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "nach einer Verzögerung"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "Animation"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "Auflösen"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "Keine"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "Push"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "Reinfahren"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "Automatisch"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "Hintergrund hinzufügen"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "Schließen, wenn außerhalb geklickt wird"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "Overlay schließen"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "Overlay %s schließen"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "Verzögerung"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "Ziel"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "Dauer"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "Easing"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "Ease"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "Ease in"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "Ease in out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "Ease out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "Linear"
@@ -5562,47 +5699,47 @@ msgstr "Linear"
msgid "workspace.options.interaction-in"
msgstr "In"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "Mauszeiger-Eintritt"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "Mauszeiger-Austritt"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "ms"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "Navigation zu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "Navigation zu: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(nicht festgelegt)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "Offset-Effekt"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "Beim Klicken"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "Overlay öffnen"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "Overlay %s öffnen"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "URL öffnen"
@@ -5611,87 +5748,87 @@ msgstr "URL öffnen"
msgid "workspace.options.interaction-out"
msgstr "Out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "Unten mittig"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "Unten links"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "Unten rechts"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "Zentriert"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "Manuell"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "Oben mittig"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "Oben links"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "Oben rechts"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "Position"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "Scrollposition beibehalten"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "Zum vorherigen Screen"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "Relativ zu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "sich selbst"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "Overlay-Sichtbarkeit umschalten"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "Overlay-Sichtbarkeit für %s umschalten"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "Auslöser"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "Beim Überfahren mit dem Mauszeiger"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "Bei gedrückter Maustaste"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "Interaktionen"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:735
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:736
msgid "workspace.options.interactions.add-interaction"
msgstr "Interaktion hinzufügen"
@@ -5700,67 +5837,67 @@ msgstr "Interaktion hinzufügen"
msgid "workspace.options.interactions.remove-interaction"
msgstr "Interaktion entfernen"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "Farbe"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "Farbig nachbelichten"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "Farbig abwedeln"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "Abdunkeln"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "Differenz"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "Ausschluss"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Hartes Licht"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Farbton"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Aufhellen"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "Luminanz"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "Multiplizieren"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "Normal"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "Ineinanderkopieren"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "Sättigung"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Negativ multiplizieren"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "Weiches Licht"
@@ -5779,7 +5916,7 @@ msgstr "Ebenen gruppieren"
msgid "workspace.options.layer-options.title.multiple"
msgstr "Ausgewählte Ebenen"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:202
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:207, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:213
msgid "workspace.options.layer-options.toggle-layer"
msgstr "Sichtbarkeit der Ebene ein- und ausschalten"
@@ -5788,19 +5925,19 @@ msgstr "Sichtbarkeit der Ebene ein- und ausschalten"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "Erweiterte Optionen"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "Max.Höhe"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "Max.Breite"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "Min.Höhe"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "Min.Breite"
@@ -5914,15 +6051,15 @@ msgstr "Abstand zwischen"
msgid "workspace.options.layout.top"
msgstr "Oben"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "Weitere Farben"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "Weitere Bibliotheksfarben"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "Deckkraft"
@@ -5931,35 +6068,35 @@ msgstr "Deckkraft"
msgid "workspace.options.position"
msgstr "Position"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "Prototyp"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "Radius"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "Unten links"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "Unten rechts"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "Oben links"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "Oben rechts"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:152
msgid "workspace.options.radius.hide-all-corners"
msgstr "Unabhängige Ecken einklappen"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:136
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:153
msgid "workspace.options.radius.show-single-corners"
msgstr "Unabhängige Ecken anzeigen"
@@ -5971,7 +6108,7 @@ msgstr "Aktuell"
msgid "workspace.options.retry"
msgstr "Wiederholen"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "Drehung"
@@ -5979,33 +6116,33 @@ msgstr "Drehung"
msgid "workspace.options.search-font"
msgstr "Schriftart suchen"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr ""
"Wählen Sie eine Form, Zeichenfläche oder Gruppe aus, um eine Verbindung zu "
"einer anderen Zeichenfläche herzustellen."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "Ausgewählte Farben"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "Auswahl füllen"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "Auswahl einrahmen"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:341
msgid "workspace.options.shadow-options.add-shadow"
msgstr "Schatten hinzufügen"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "Weichzeichnen"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "Schattenfarbe"
@@ -6017,55 +6154,56 @@ msgstr "Schlagschatten"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "Schatten nach innen"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:348
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:183, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:354
msgid "workspace.options.shadow-options.remove-shadow"
msgstr "Schatten entfernen"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "Streuung"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "Schatten"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "Gruppe schattieren"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "Auswahl schattieren"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:174
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:179
msgid "workspace.options.shadow-options.toggle-shadow"
msgstr "Schatten ein- und ausblenden"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "In Exporten anzeigen"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "Im Ansichtsmodus anzeigen"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "Größe"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "Größenvoreinstellungen"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "Rahmen"
@@ -6074,7 +6212,7 @@ msgstr "Rahmen"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "Punkt"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "Kreis"
@@ -6083,7 +6221,7 @@ msgstr "Kreis"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "Diamant-Marker"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "Diamant"
@@ -6092,19 +6230,19 @@ msgstr "Diamant"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "Pfeil"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "Pfeil"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "Keine"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "Rund"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "Rechteckig"
@@ -6113,7 +6251,7 @@ msgstr "Rechteckig"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "Quadrat"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "Rechteck"
@@ -6122,83 +6260,83 @@ msgstr "Rechteck"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "Dreieckiger Pfeil"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "Dreieck"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "Konturfarbe"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "Konturbreite"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:180
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:189
msgid "workspace.options.stroke.add-stroke"
msgstr "Strichfarbe hinzufügen"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "Zentriert"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "Gestrichelt"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "Gepunktet"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "Innen"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "Mehrere"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "Außen"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:193
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:202
msgid "workspace.options.stroke.remove-stroke"
msgstr "Strich entfernen"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "Durchgezogen"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "Unten ausrichten"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "An Mitte ausrichten"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "Oben ausrichten"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "von links nach rechts"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "von rechts nach links"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "Automatische Höhe"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "Automatische Breite"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "Feste Größe"
@@ -6220,35 +6358,35 @@ msgstr "Kleinbuchstaben"
msgid "workspace.options.text-options.none"
msgstr "Keine"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "Durchgestrichen (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "Zentrieren"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "Ausrichtung in der Breite"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "Linksbündig ausrichten"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "Rechtsbündig ausrichten"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "Text"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "Gruppe Text"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "Ausgewählter Text"
@@ -6257,7 +6395,7 @@ msgstr "Ausgewählter Text"
msgid "workspace.options.text-options.titlecase"
msgstr "Kapitälchen"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "Unterstrichen (%s)"
@@ -6266,21 +6404,21 @@ msgstr "Unterstrichen (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "Großbuchstaben"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr ""
"Verwenden Sie die Wiedergabetaste in der Kopfzeile, um die Prototypansicht "
"zu wechseln."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "Breite"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "X-Achse"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Y-Achse"
@@ -6324,106 +6462,106 @@ msgstr "Ankerpunkte trennen (%s)"
msgid "workspace.path.actions.snap-nodes"
msgstr "An Ankerpunkten ausrichten (%s)"
-#: src/app/main/ui/workspace/plugins.cljs:83
+#: src/app/main/ui/workspace/plugins.cljs:84
msgid "workspace.plugins.button-open"
msgstr "Öffnen"
-#: src/app/main/ui/workspace/plugins.cljs:197
+#: src/app/main/ui/workspace/plugins.cljs:198
#, markdown
msgid "workspace.plugins.discover"
msgstr "[Mehr Plugins](%s) entdecken"
-#: src/app/main/ui/workspace/plugins.cljs:204
+#: src/app/main/ui/workspace/plugins.cljs:205
msgid "workspace.plugins.empty-plugins"
msgstr "Noch keine Plugins installiert"
-#: src/app/main/ui/workspace/plugins.cljs:191
+#: src/app/main/ui/workspace/plugins.cljs:192
msgid "workspace.plugins.error.manifest"
msgstr "Das Plugin-Manifest ist falsch."
-#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:755, src/app/main/ui/workspace/plugins.cljs:82
+#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:783, src/app/main/ui/workspace/plugins.cljs:83
msgid "workspace.plugins.error.need-editor"
msgstr "Sie müssen ein Redakteur sein, um dieses Plugin zu benutzen"
-#: src/app/main/ui/workspace/plugins.cljs:187
+#: src/app/main/ui/workspace/plugins.cljs:188
msgid "workspace.plugins.error.url"
msgstr "Das Plugin existiert nicht oder die URL ist nicht korrekt."
-#: src/app/main/ui/workspace/plugins.cljs:183
+#: src/app/main/ui/workspace/plugins.cljs:184
msgid "workspace.plugins.install"
msgstr "Installieren"
-#: src/app/main/ui/workspace/plugins.cljs:213
+#: src/app/main/ui/workspace/plugins.cljs:214
msgid "workspace.plugins.installed-plugins"
msgstr "Installierte Plugins"
-#: src/app/main/ui/workspace/main_menu.cljs:710
+#: src/app/main/ui/workspace/main_menu.cljs:738
msgid "workspace.plugins.menu.plugins-manager"
msgstr "Plugin-Manager"
-#: src/app/main/ui/workspace/main_menu.cljs:906
+#: src/app/main/ui/workspace/main_menu.cljs:934
msgid "workspace.plugins.menu.title"
msgstr "Plugins"
-#: src/app/main/ui/workspace/plugins.cljs:374
+#: src/app/main/ui/workspace/plugins.cljs:375
msgid "workspace.plugins.permissions-update.title"
msgstr "DIESES PLUGIN AKTUALISIEREN"
-#: src/app/main/ui/workspace/plugins.cljs:378
+#: src/app/main/ui/workspace/plugins.cljs:379
msgid "workspace.plugins.permissions-update.warning"
msgstr ""
"Das Plugin wurde geändert, seit Sie es das letzte Mal geöffnet haben. Es "
"möchte nun auch zugreifen:"
-#: src/app/main/ui/workspace/plugins.cljs:278
+#: src/app/main/ui/workspace/plugins.cljs:279
msgid "workspace.plugins.permissions.allow-download"
msgstr "Starten von Dateidownloads."
-#: src/app/main/ui/workspace/plugins.cljs:271
+#: src/app/main/ui/workspace/plugins.cljs:272
msgid "workspace.plugins.permissions.comment-read"
msgstr "Ihre Kommentare und Antworten lesen."
-#: src/app/main/ui/workspace/plugins.cljs:265
+#: src/app/main/ui/workspace/plugins.cljs:266
msgid "workspace.plugins.permissions.comment-write"
msgstr "Ihre Kommentare lesen und ändern und in Ihrem Namen antworten."
-#: src/app/main/ui/workspace/plugins.cljs:238
+#: src/app/main/ui/workspace/plugins.cljs:239
msgid "workspace.plugins.permissions.content-read"
msgstr "Lesen des Inhalts von Dateien, auf die Benutzer Zugriff haben."
-#: src/app/main/ui/workspace/plugins.cljs:232
+#: src/app/main/ui/workspace/plugins.cljs:233
msgid "workspace.plugins.permissions.content-write"
msgstr "Lesen und Ändern des Inhalts von Dateien, auf die Benutzer Zugriff haben."
-#: src/app/main/ui/workspace/plugins.cljs:325
+#: src/app/main/ui/workspace/plugins.cljs:326
msgid "workspace.plugins.permissions.disclaimer"
msgstr "Beachten Sie, dass dieses Plugin von einer externen Quelle erstellt wurde."
-#: src/app/main/ui/workspace/plugins.cljs:258
+#: src/app/main/ui/workspace/plugins.cljs:259
msgid "workspace.plugins.permissions.library-read"
msgstr "Lesen Ihrer Bibliotheken und Assets."
-#: src/app/main/ui/workspace/plugins.cljs:252
+#: src/app/main/ui/workspace/plugins.cljs:253
msgid "workspace.plugins.permissions.library-write"
msgstr "Lesen und Ändern Ihrer Bibliotheken und Assets."
-#: src/app/main/ui/workspace/plugins.cljs:318
+#: src/app/main/ui/workspace/plugins.cljs:319
msgid "workspace.plugins.permissions.title"
msgstr "'%s' PLUGIN BENÖTIGT ZUGRIFF AUF:"
-#: src/app/main/ui/workspace/plugins.cljs:245
+#: src/app/main/ui/workspace/plugins.cljs:246
msgid "workspace.plugins.permissions.user-read"
msgstr "Lesen der Profil-Informationen des aktuellen Benutzers."
-#: src/app/main/ui/workspace/plugins.cljs:209
+#: src/app/main/ui/workspace/plugins.cljs:210
msgid "workspace.plugins.plugin-list-link"
msgstr "Liste der Plugins"
-#: src/app/main/ui/workspace/plugins.cljs:86
+#: src/app/main/ui/workspace/plugins.cljs:87
msgid "workspace.plugins.remove-plugin"
msgstr "Plugin entfernen"
-#: src/app/main/ui/workspace/plugins.cljs:178
+#: src/app/main/ui/workspace/plugins.cljs:179
msgid "workspace.plugins.search-placeholder"
msgstr "Eine URL des Plugins eingeben"
@@ -6431,26 +6569,26 @@ msgstr "Eine URL des Plugins eingeben"
msgid "workspace.plugins.success"
msgstr "Plugin wurde korrekt geladen."
-#: src/app/main/ui/workspace/plugins.cljs:172
+#: src/app/main/ui/workspace/plugins.cljs:173
msgid "workspace.plugins.title"
msgstr "Plugins"
-#: src/app/main/ui/workspace/plugins.cljs:438
+#: src/app/main/ui/workspace/plugins.cljs:439
msgid "workspace.plugins.try-out.cancel"
msgstr "NICHT JETZT"
-#: src/app/main/ui/workspace/plugins.cljs:431
+#: src/app/main/ui/workspace/plugins.cljs:432
msgid "workspace.plugins.try-out.message"
msgstr ""
"Möchten Sie einen ersten Eindruck bekommen? Es wird in einem neuen Entwurf "
"für Ihr aktuelles Team geöffnet. (Falls nicht, können Sie es jederzeit in "
"den installierten Plugins einer beliebigen Datei finden.)"
-#: src/app/main/ui/workspace/plugins.cljs:427
+#: src/app/main/ui/workspace/plugins.cljs:428
msgid "workspace.plugins.try-out.title"
msgstr "'%s' PLUGIN IST FÜR IHREN BENUTZER INSTALLIERT!"
-#: src/app/main/ui/workspace/plugins.cljs:444
+#: src/app/main/ui/workspace/plugins.cljs:445
msgid "workspace.plugins.try-out.try"
msgstr "PLUGIN TESTEN"
@@ -6462,11 +6600,11 @@ msgstr "Flex-Layout hinzufügen"
msgid "workspace.shape.menu.add-grid"
msgstr "Grid-Layout hinzufügen"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1015, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1039
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1016, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1040
msgid "workspace.shape.menu.add-layout"
msgstr "Layout hinzufügen"
-#: src/app/main/ui/workspace/context_menu.cljs:608, src/app/main/ui/workspace/sidebar/assets/common.cljs:505, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:941, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1161
+#: src/app/main/ui/workspace/context_menu.cljs:610, src/app/main/ui/workspace/sidebar/assets/common.cljs:514, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:961, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1113, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1195
msgid "workspace.shape.menu.add-variant"
msgstr "Variante erstellen"
@@ -6510,7 +6648,7 @@ msgstr "Als SVG kopieren"
msgid "workspace.shape.menu.copy-text"
msgstr "Als Text kopieren"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "Anmerkung erstellen"
@@ -6518,11 +6656,11 @@ msgstr "Anmerkung erstellen"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "Auswahl auf Zeichenfläche"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "Komponente erstellen"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "Mehrere Komponenten erstellen"
@@ -6530,7 +6668,7 @@ msgstr "Mehrere Komponenten erstellen"
msgid "workspace.shape.menu.cut"
msgstr "Ausschneiden"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "Löschen"
@@ -6538,15 +6676,15 @@ msgstr "Löschen"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "Startpunkt löschen"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "Instanz trennen"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "Instanzen trennen"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "Subtrahieren"
@@ -6558,11 +6696,11 @@ msgstr "Duplizieren"
msgid "workspace.shape.menu.edit"
msgstr "Bearbeiten"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "Ausschließen"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "Pfade reduzieren"
@@ -6595,19 +6733,19 @@ msgstr "Zur Hauptkomponentendatei wechseln"
msgid "workspace.shape.menu.group"
msgstr "Gruppieren"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "Ausblenden"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "Benutzeroberfläche ein-/ausblenden"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "Überlappen"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "Sperren"
@@ -6615,7 +6753,7 @@ msgstr "Sperren"
msgid "workspace.shape.menu.mask"
msgstr "Maskieren"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "Einfügen"
@@ -6635,7 +6773,7 @@ msgstr "Flex-Layout entfernen"
msgid "workspace.shape.menu.remove-grid"
msgstr "Grid-Layout entfernen"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1033
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1034
msgid "workspace.shape.menu.remove-layout"
msgstr "Layout entfernen"
@@ -6643,11 +6781,11 @@ msgstr "Layout entfernen"
msgid "workspace.shape.menu.rename"
msgstr "Umbenennen"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "Änderungen zurücksetzen"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "Hauptkomponente wiederherstellen"
@@ -6655,15 +6793,15 @@ msgstr "Hauptkomponente wiederherstellen"
msgid "workspace.shape.menu.select-layer"
msgstr "Ebene auswählen"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "Anzeigen"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "Im Assets-Panel anzeigen"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "Hauptkomponente anzeigen"
@@ -6676,6 +6814,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "Als Vorschaubild festlegen"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "In Pfade umwandeln"
@@ -6683,11 +6822,11 @@ msgstr "In Pfade umwandeln"
msgid "workspace.shape.menu.ungroup"
msgstr "Gruppierung aufheben"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "Hinzufügen"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "Entsperren"
@@ -6700,7 +6839,7 @@ msgstr "Maske entfernen"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "Hauptkomponenten aktualisieren"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "Hauptkomponente aktualisieren"
@@ -6712,11 +6851,11 @@ msgstr "Seitenleiste ausblenden"
msgid "workspace.sidebar.expand"
msgstr "Seitenleiste einblenden"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "Verlauf"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "Ebenen"
@@ -6756,11 +6895,11 @@ msgstr "Texte"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "Importierte SVG-Attribute"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "Seiten"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:248
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:249
msgid "workspace.sidebar.sitemap.add-page"
msgstr "Seite hinzufügen"
@@ -6777,19 +6916,19 @@ msgstr "%s aktive Themes"
msgid "workspace.tokens.add set"
msgstr "Set hinzufügen"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:329
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
msgid "workspace.tokens.add-new-theme"
msgstr "Neues Theme hinzufügen"
-#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:60
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:62
msgid "workspace.tokens.add-set-to-group"
msgstr "Set zu dieser Gruppe hinzufügen"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:161
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:136
msgid "workspace.tokens.applied-to"
msgstr "Angewandt auf"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:338
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:337
msgid "workspace.tokens.back-to-themes"
msgstr "Zurück zur Themen-Liste"
@@ -6797,15 +6936,15 @@ msgstr "Zurück zur Themen-Liste"
msgid "workspace.tokens.create-new-theme"
msgstr "Erstellen Sie jetzt Ihr erstes Theme."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:100, src/app/main/ui/workspace/tokens/themes.cljs:44
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:96, src/app/main/ui/workspace/tokens/themes.cljs:44
msgid "workspace.tokens.create-one"
msgstr "Ein neues erstellen."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:534
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:552
msgid "workspace.tokens.create-token"
msgstr "Neues %s Token erstellen"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:337
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:338
msgid "workspace.tokens.delete"
msgstr "Token löschen"
@@ -6813,15 +6952,15 @@ msgstr "Token löschen"
msgid "workspace.tokens.delete-theme-title"
msgstr "Theme löschen"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:334
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:335
msgid "workspace.tokens.duplicate"
msgstr "Token duplizieren"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:321
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:322
msgid "workspace.tokens.edit"
msgstr "Token bearbeiten"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:327
msgid "workspace.tokens.edit-theme-title"
msgstr "Theme bearbeiten"
@@ -6829,11 +6968,7 @@ msgstr "Theme bearbeiten"
msgid "workspace.tokens.edit-themes"
msgstr "Themes bearbeiten"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:533
-msgid "workspace.tokens.edit-token"
-msgstr "Token bearbeiten"
-
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:540
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:558
msgid "workspace.tokens.enter-token-name"
msgstr "%s Token-Name eingeben"
@@ -6854,7 +6989,7 @@ msgstr "Theme"
msgid "workspace.tokens.no-active-theme"
msgstr "Kein Theme aktiviert"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:76
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:72
msgid "workspace.tokens.no-permisions-set"
msgstr "Sie müssen ein Redakteur sein, um Sets zu aktivieren / deaktivieren"
@@ -6862,11 +6997,11 @@ msgstr "Sie müssen ein Redakteur sein, um Sets zu aktivieren / deaktivieren"
msgid "workspace.tokens.no-permission-themes"
msgstr "Sie müssen ein Redakteur sein, um Themes zu verwenden"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:480
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:483
msgid "workspace.tokens.no-sets-create"
msgstr "Es sind noch keine Sets definiert. Erstellen Sie zuerst eines."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:97, src/app/main/ui/workspace/tokens/sets/lists.cljs:103
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:93, src/app/main/ui/workspace/tokens/sets/lists.cljs:99
msgid "workspace.tokens.no-sets-yet"
msgstr "Es sind noch keine Sets vorhanden."
@@ -6878,16 +7013,16 @@ msgstr "Es gibt keine Themes."
msgid "workspace.tokens.no-themes-currently"
msgstr "Sie haben derzeit keine Themes."
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:145
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:120
#, fuzzy
msgid "workspace.tokens.original-value"
msgstr "Ursprünglicher Wert: %s"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:153
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:128
msgid "workspace.tokens.ref-not-valid"
msgstr "Referenz ist ungültig oder befindet sich nicht in einem aktiven Set"
-#: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:39, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:44, src/app/main/ui/workspace/tokens/management/token_pill.cljs:146
+#: 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:100, 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 "Aufgelöster Wert: %s"
@@ -6896,11 +7031,11 @@ msgstr "Aufgelöster Wert: %s"
msgid "workspace.tokens.save-theme"
msgstr "Theme speichern"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:209, src/app/main/ui/workspace/tokens/sets/lists.cljs:315
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:204, src/app/main/ui/workspace/tokens/sets/lists.cljs:309
msgid "workspace.tokens.select-set"
msgstr "Set auswählen."
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:343
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:342
msgid "workspace.tokens.set-selection-theme"
msgstr ""
"Legen Sie fest, welche Token-Sets als Teil dieser Theme-Option verwendet "
@@ -6919,23 +7054,23 @@ msgstr "Theme %s"
msgid "workspace.tokens.themes-list"
msgstr "Liste der Themes"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:589, src/app/main/ui/workspace/tokens/management/create/form.cljs:590
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:608, src/app/main/ui/workspace/tokens/management/create/form.cljs:609
#, fuzzy
msgid "workspace.tokens.token-description"
msgstr "Beschreibung"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:539
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:83, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:109, src/app/main/ui/workspace/tokens/management/create/form.cljs:557
msgid "workspace.tokens.token-name"
msgstr "Name"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:66
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:69
msgid "workspace.tokens.token-name-validation-error"
msgstr ""
" sit kein gültiger Token-Name.\n"
"Token-Namen dürfen nur Buchstaben und Ziffern enthalten, die durch . "
"Zeichen (Punkt) getrennt sind und dürfen nicht mit einem $-Zeichen beginnen."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:567
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:585
msgid "workspace.tokens.token-value"
msgstr "Wert"
@@ -6943,21 +7078,21 @@ msgstr "Wert"
msgid "workspace.tokens.tokens-section-title"
msgstr "TOKENS - %s"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:125
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:121
msgid "workspace.tokens.tools"
msgstr "Werkzeuge"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:156
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:131
msgid "workspace.tokens.value-not-valid"
msgstr "Der Wert ist nicht gültig"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:563
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:581
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:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "Assets"
@@ -6965,7 +7100,7 @@ msgstr "Assets"
msgid "workspace.toolbar.color-palette"
msgstr "Farbpalette (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "Kommentare (%s)"
@@ -7172,19 +7307,19 @@ msgstr "Vorgang über %s"
msgid "workspace.undo.title"
msgstr "Verlauf"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "Ignorieren"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "Mehr Info"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "Es gibt Updates in gemeinsam genutzten Bibliotheken"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "Aktualisieren"
@@ -7244,11 +7379,11 @@ msgstr "Möchten Sie diese Version wiederherstellen?"
msgid "workspace.versions.snapshot-menu"
msgstr "Schnappschuss-Menü öffnen"
-#: src/app/main/ui/workspace/sidebar.cljs:236
+#: src/app/main/ui/workspace/sidebar.cljs:237
msgid "workspace.versions.tab.actions"
msgstr "Aktionen"
-#: src/app/main/ui/workspace/sidebar.cljs:234
+#: src/app/main/ui/workspace/sidebar.cljs:235
msgid "workspace.versions.tab.history"
msgstr "Verlauf"
diff --git a/frontend/translations/el.po b/frontend/translations/el.po
index b30ecccf8c..bee17345cb 100644
--- a/frontend/translations/el.po
+++ b/frontend/translations/el.po
@@ -1,15 +1,15 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-11 07:21+0000\n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
"Last-Translator: Anonymous \n"
-"Language-Team: Greek "
-" \n"
+"Language-Team: Greek \n"
"Language: el\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.13-dev\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -140,7 +140,7 @@ msgstr "Η λύση ανοιχτού κώδικα για σχεδιασμό κα
msgid "auth.verification-email-sent"
msgstr "Εχουμε στείλει ενα mail επαλήθευσης "
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Προσθήκη ως Κοινόχρηστη βιβλιοθήκη"
@@ -148,19 +148,19 @@ msgstr "Προσθήκη ως Κοινόχρηστη βιβλιοθήκη"
msgid "dashboard.change-email"
msgstr "Αλλαγή email"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(Αντίγραφο)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Δημιουργία νέας ομάδας"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Το Penpot σας"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Διαγραφή ομάδας"
@@ -168,11 +168,11 @@ msgstr "Διαγραφή ομάδας"
msgid "dashboard.duplicate"
msgstr "Αντιγραφή"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Πρόσκληση στην ομάδα"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Αφήστε την ομάδα"
@@ -204,7 +204,7 @@ msgstr "+ Νέο έργο"
msgid "dashboard.no-matches-for"
msgstr "Δεν βρέθηκαν αντιστοιχίσεις για το “%s“"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Τα καρφιτσωμένα έργα θα εμφανιστούν εδώ"
@@ -220,7 +220,7 @@ msgstr "Η διεύθυνση email σας έχει επαληθευτεί"
msgid "dashboard.notifications.password-saved"
msgstr "Ο κωδικός πρόσβασης αποθηκεύτηκε!"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "% s μέλη"
@@ -232,7 +232,7 @@ msgstr "Άνοιγμα αρχείου σε νέα καρτέλα"
msgid "dashboard.password-change"
msgstr "Αλλαξε κωδικό"
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Καρφίτσωμα / ξεκαρφίτσωμα"
@@ -249,7 +249,7 @@ msgstr "Θέλετε να καταργήσετε τον λογαριασμό σ
msgid "dashboard.remove-shared"
msgstr "Διαγραφή ως Κοινόχρηστη βιβλιοθήκη"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Αναζήτηση…"
@@ -285,7 +285,7 @@ msgstr "Το έργο σας έχει αναπαραχθεί με επιτυχί
msgid "dashboard.success-duplicate-project"
msgstr "Το έργο σας έχει αναπαραχθεί με επιτυχία"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Το έργο σας μετακινήθηκε με επιτυχία"
@@ -293,15 +293,15 @@ msgstr "Το έργο σας μετακινήθηκε με επιτυχία"
msgid "dashboard.success-move-project"
msgstr "Το έργο σας μετακινήθηκε με επιτυχία"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Πληροφορίες ομάδας"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Μέλη ομάδας"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Ομαδικά έργα"
@@ -333,15 +333,15 @@ msgstr "Email"
msgid "dashboard.your-name"
msgstr "Το όνομα σου"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Το Penpot σας"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "ακύρωση"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Ok"
@@ -361,11 +361,11 @@ msgstr "Το email έχει ήδη χρησιμοποιηθεί"
msgid "errors.email-already-validated"
msgstr "Αυτό το email έχει ήδη επικυρωθεί."
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "Το email «%s» έχει πολλές μόνιμες αναφορές αναπήδησης."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Έχει συμβεί κάτι λάθος."
@@ -395,7 +395,7 @@ msgstr ""
msgid "errors.media-type-not-allowed"
msgstr "Φαίνεται ότι δεν είναι έγκυρη εικόνα."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"Το προφίλ που προσκαλείτε σταματά τα μηνύματα ηλεκτρονικού ταχυδρομείου "
@@ -458,19 +458,19 @@ msgstr "Παρουσιάστηκε σφάλμα"
msgid "inspect.attributes.blur"
msgstr "Θολούρα"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "αξία"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -478,7 +478,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Γέμισμα"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Λήψη εικόνας πηγής"
@@ -568,59 +568,61 @@ msgstr "Στερεός"
msgid "inspect.attributes.stroke.width"
msgstr "Πλάτος"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Τυπογραφία"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Οικογένεια γραμματοσειρών"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Μέγεθος γραμματοσειράς"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Στυλ γραμματοσειράς"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Διάστημα γραμμάτων"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Ύψος γραμμής"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Διακόσμηση κειμένου"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Κανένα"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "υπογράμμιση"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Μετασχηματισμός κειμένου"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "Πρώτα κεφαλαία"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "Πεζά γράμματα"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Κανένα"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "Κεφαλαία γράμματα"
@@ -676,11 +678,11 @@ msgstr "Πληροφορίες"
msgid "labels.accept"
msgstr "Αποδέχομαι"
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Διαχειριστής"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Ολα"
@@ -694,11 +696,11 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "Bad Gateway"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "ακύρωση"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Σχόλια"
@@ -714,7 +716,7 @@ msgstr "Δημιουργήστε μια νέα ομάδα"
msgid "labels.dashboard"
msgstr "πίνακας"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Διαγραφή"
@@ -726,15 +728,15 @@ msgstr "Διαγραφή σχολίου"
msgid "labels.delete-comment-thread"
msgstr "Διαγραφή νήματος"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Πρόχειρα"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Edit"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Editor"
@@ -746,7 +748,7 @@ msgstr "Τα σχόλια απενεργοποιήθηκαν"
msgid "labels.feedback-sent"
msgstr "Εστάλη γνώμη"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Δώστε μας τη γνώμη σας"
@@ -754,7 +756,7 @@ msgstr "Δώστε μας τη γνώμη σας"
msgid "labels.go-back"
msgstr "Πίσω"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Απόκρυψη επιλυμένων σχολίων"
@@ -772,11 +774,11 @@ msgstr "Εσωτερικό σφάλμα"
msgid "labels.language"
msgstr "Γλώσσα"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Αποσύνδεση"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Μέλη"
@@ -784,7 +786,7 @@ msgstr "Μέλη"
msgid "labels.new-password"
msgstr "Νέος κωδικός πρόσβασης"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "Δεν έχετε εκκρεμείς ειδοποιήσεις σχολίων"
@@ -799,13 +801,13 @@ msgstr ""
msgid "labels.not-found.main-message"
msgstr "Ωχ"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "1 αρχείο"
msgstr[1] "%s αρχεία"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "1 έργο"
@@ -820,7 +822,7 @@ msgstr "Παλιός κωδικός"
msgid "labels.only-yours"
msgstr "Μόνο το δικό σου"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Ιδιοκτήτης"
@@ -832,7 +834,7 @@ msgstr "Κωδικός πρόσβασης"
msgid "labels.profile"
msgstr "Προφίλ"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Εργα"
@@ -841,7 +843,7 @@ msgstr "Εργα"
msgid "labels.remove"
msgstr "Διαγραφή"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Μετονομασία"
@@ -853,11 +855,11 @@ msgstr "Μετονομασία ομάδας "
msgid "labels.retry"
msgstr "Ξαναδοκιμάσετε"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Ρόλος"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Αποθηκεύση"
@@ -877,7 +879,7 @@ msgstr "Είμαστε σε προγραμματισμένη συντήρηση
msgid "labels.service-unavailable.main-message"
msgstr "Η υπηρεσία δεν είναι διαθέσιμη"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Σύνθεση"
@@ -885,15 +887,15 @@ msgstr "Σύνθεση"
msgid "labels.share-prototype"
msgstr "Μοιραστείτε το link"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Κοινόχρηστες βιβλιοθήκες"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Εμφάνιση όλων των σχολίων"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Εμφάνιση μόνο των δικών σας σχολίων"
@@ -905,7 +907,7 @@ msgstr "Ενημέρωση"
msgid "labels.update-team"
msgstr "Ενημερώστε τον εξοπλισμό"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Θεατής"
@@ -998,11 +1000,11 @@ msgstr "Είστε σίγουροι ότι θέλετε να διαγράψετ
msgid "modals.delete-file-confirm.title"
msgstr "Διαγραφή αρχείου"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Είστε σίγουροι ότι θέλετε να διαγράψετε αυτή τη σελίδα;"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Διαγραφή σελίδας"
@@ -1018,33 +1020,33 @@ msgstr "Είστε σίγουροι ότι θέλετε να διαγράψετ
msgid "modals.delete-project-confirm.title"
msgstr "Διαγραφή έργου"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Διαγραφή ομάδας"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Είστε σίγουροι ότι θέλετε να διαγράψετε αυτή την ομάδα; Όλα τα έργα και τα "
"αρχεία που σχετίζονται με την ομάδα θα διαγραφούν οριστικά."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Διαγραφή ομάδας"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Διαγραφή μέλους"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό το μέλος από την ομάδα;"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Διαγραφή μέλους της ομάδας"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Αποστολή πρόσκλησης"
@@ -1064,27 +1066,27 @@ msgstr "Επιλέξτε ένα μέλος για προώθηση"
msgid "modals.leave-and-reassign.title"
msgstr "Επιλέξτε ένα μέλος για προώθηση"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Αφήστε την ομάδα"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Είστε σίγουροι ότι θέλετε να αφήσετε αυτή την ομάδα;"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Αφήστε την ομάδα"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Προώθηση"
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr "Είστε σίγουροι ότι θέλετε να προωθήσετε αυτό το χρήστη στον ιδιοκτήτη;"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Προώθηση σε κάτοχο"
@@ -1105,25 +1107,25 @@ msgstr ""
msgid "modals.remove-shared-confirm.message"
msgstr "Καταργήστε το “%s” ως Κοινόχρηστη βιβλιοθήκη"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Ενημέρωση στοιχείου"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Ακύρωση"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"Πρόκειται να ενημερώσετε ένα στοιχείο σε μια κοινόχρηστη βιβλιοθήκη. Αυτό "
"μπορεί να επηρεάσει άλλα αρχεία που το χρησιμοποιούν."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Ενημερώστε ένα στοιχείο σε μια κοινόχρηστη βιβλιοθήκη"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "Η πρόσκληση εστάλη με επιτυχία"
@@ -1145,7 +1147,7 @@ msgstr "Το email επαλήθευσης εστάλη στο %s. Ελέγξτε
msgid "profile.recovery.go-to-login"
msgstr "Μεταβείτε στη σύνδεση"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "Μικτός "
@@ -1181,35 +1183,35 @@ msgstr "Εμφάνιση αλληλεπιδράσεων με click"
msgid "viewer.header.sitemap"
msgstr "Sitemap"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Στοίχιση στο κέντρο (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "Κατανομή οριζόντιου χώρου (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Ευθυγράμμιση προς τα αριστερά (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Ευθυγράμμιση προς τα δεξιά (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Στοίχιση κάτω (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Ευθυγραμμίστε το κάθετο κέντρο (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "Κατανομή κατακόρυφων αποστάσεων (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Ευθυγραμμίστε την κορυφή (%s)"
@@ -1218,27 +1220,27 @@ msgstr "Ευθυγραμμίστε την κορυφή (%s)"
msgid "workspace.assets.assets"
msgstr "Περιουσιακά στοιχεία"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "Όλα τα περιουσιακά στοιχεία"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Χρώματα"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Συστατικά"
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Διαγραφή"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "Αντιγραφή"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Επεξεργασία"
@@ -1251,15 +1253,15 @@ msgstr "Γραφικά"
msgid "workspace.assets.not-found"
msgstr "Δεν βρέθηκαν στοιχεία"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Μετονομασία"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "Αναζήτηση στοιχείων"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Τυπογραφίες"
@@ -1284,7 +1286,7 @@ msgstr "Διάστημα γραμμάτων"
msgid "workspace.assets.typography.line-height"
msgstr "Υψος γραμμής"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -1300,31 +1302,31 @@ msgstr "Γραμμική κλίση"
msgid "workspace.gradients.radial"
msgstr "Ακτινική κλίση"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "Απενεργοποίηση δυναμικής ευθυγράμμισης"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "Ενεργοποίηση δυναμικής ευθυγράμμισης"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "Απόκρυψη παλέτας χρωμάτων"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "Απόκρυψη κανόνες"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "Επιλογή όλων"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "Εμφάνιση παλέτας χρωμάτων"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Εμφάνιση κανόνες"
@@ -1345,7 +1347,7 @@ msgstr "Aποθήκευση "
msgid "workspace.header.unsaved"
msgstr "Μη αποθηκευμένες αλλαγές"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "Λειτουργία προβολής (%s)"
@@ -1354,10 +1356,6 @@ msgstr "Λειτουργία προβολής (%s)"
msgid "workspace.libraries.add"
msgstr "Προσθήκη"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s χρώματα"
-
#: src/app/main/ui/workspace/color_palette_ctx_menu.cljs:88, src/app/main/ui/workspace/colorpicker/libraries.cljs:48, src/app/main/ui/workspace/text_palette_ctx_menu.cljs:49
msgid "workspace.libraries.colors.file-library"
msgstr "Βιβλιοθήκη αρχείων"
@@ -1366,27 +1364,19 @@ msgstr "Βιβλιοθήκη αρχείων"
msgid "workspace.libraries.colors.recent-colors"
msgstr "Πρόσφατα χρώματα"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Αποθηκεύστε το στυλ χρώματος"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s στοιχεία"
-
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Βιβλιοθήκη αρχείων"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s γραφικά"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "ΒΙΒΛΙΟΘΗΚΕΣ ΣΕ ΑΥΤΟ ΤΟ ΑΡΧΕΙΟ"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "ΒΙΒΛΙΟΘΗΚΕΣ"
@@ -1395,51 +1385,47 @@ msgstr "ΒΙΒΛΙΟΘΗΚΕΣ"
msgid "workspace.libraries.library"
msgstr "ΒΙΒΛΙΟΘΗΚΗ"
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "Δεν υπάρχουν κοινόχρηστες βιβλιοθήκες που χρειάζονται ενημέρωση"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "Δεν βρίσκεται «%s»"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "Αναζήτηση σε κοινόχρηστες βιβλιοθήκες"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "Κοινόχρηστες βιβλιοθήκες"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Πολλαπλές τυπογραφίες"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Αποσύνδεση όλων των τυπογραφιών"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s τυπογραφίες"
-
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Ενημέρωση"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "ΕΝΗΜΕΡΩΣΕΙΣ"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Θολούρα"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "Θολούρα της ομάδας"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "Θόλωμα επιλογής"
@@ -1447,11 +1433,11 @@ msgstr "Θόλωμα επιλογής"
msgid "workspace.options.canvas-background"
msgstr "Χρώμα του φόντου"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Συστατικό"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Σχέδιο"
@@ -1459,27 +1445,27 @@ msgstr "Σχέδιο"
msgid "workspace.options.export"
msgstr "Εξαγωγή"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgstr "Εξαγωγή σχήματος"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Κατάληξη"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "Εξαγωγή ..."
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Γέμισμα"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Αυτόματο"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "Στήλες"
@@ -1488,15 +1474,15 @@ msgstr "Στήλες"
msgid "workspace.options.grid.params.columns"
msgstr "Στήλες"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "απόσταση"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Υψος"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Περιθώριο"
@@ -1505,7 +1491,7 @@ msgstr "Περιθώριο"
msgid "workspace.options.grid.params.rows"
msgstr "Σειρές"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "Ορίσετε ως προεπιλογή"
@@ -1519,115 +1505,115 @@ msgstr "Μέγεθος"
msgid "workspace.options.grid.params.type"
msgstr "Τύπος"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Κάτω"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Κέντρο"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Αριστερά"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Δεξιά"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "Τέντωμα"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "Πάνω"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "χρήση προεπιλεγμένης"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Πλάτος"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Σειρές"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "τετράγωνο"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Συμπλήρωση ομάδας"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Ομαδικό εγκεφαλικό"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "Χρώμα"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "Έγκαυμα χρώματος"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "Χρώμα πιο μαλακό "
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "Σκούρο"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "Διαφορά"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "Αποκλεισμός"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Δυνατο φως"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Απόχρωση"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Φωτίζω"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "Φωτεινότητα"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "Πολλαπλασιάζω"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "Κανονικός"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "Επικάλυμμα"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "Κορεσμός"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Κόσκινο"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "Απαλό φως"
@@ -1651,33 +1637,33 @@ msgstr "Επιλεγμένα επίπεδα"
msgid "workspace.options.position"
msgstr "Θέση"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "Πρωτότυπο"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "Ακτίνα κύκλου"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "Περιστροφή"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr ""
"Επιλέξτε ένα σχήμα, ένα artboard ή μια ομάδα για να σύρετε μια σύνδεση με "
"άλλο artboard."
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "Συμπλήρωση επιλογής"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "Επιλογή διαδρομής"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "Θολούρα"
@@ -1689,91 +1675,92 @@ msgstr "Σκίαση"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "Εσωτερική σκιά"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "Χ"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Υ"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "Διάχυση"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "Σκιά"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "Ομαδική σκιά"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "Επιλογή σκιών"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "Μέγεθος"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "Προεπιλογές μεγέθους"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "Ακρη"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "Κέντρο"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "Dashed"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "Διάστικτο"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "Μέσα"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "Μικτός"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "Εξω"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "Στερεός"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "Στοίχιση κάτω"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "Στοίχιση στο κέντρο"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "Ευθυγραμμίστε την κορυφή"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "Αυτόματο ύψος"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "Αυτόματο πλάτος"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "Σταθερός"
@@ -1795,35 +1782,35 @@ msgstr "Πεζά"
msgid "workspace.options.text-options.none"
msgstr "Κανένας"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "Διαγράμμιση (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "Ευθυγράμμιση κέντρο"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "Δικαιολόγηση"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "Στοίχιση αριστερά"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "Για ευθυγράμμιση προς τα δεξιά"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "Κείμενο"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "Κείμενο ομάδας"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "Κείμενο επιλογής"
@@ -1832,7 +1819,7 @@ msgstr "Κείμενο επιλογής"
msgid "workspace.options.text-options.titlecase"
msgstr "Τίτλος υπόθεση"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "υπογράμμιση (%s)"
@@ -1841,7 +1828,7 @@ msgstr "υπογράμμιση (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "κεφαλαία"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr ""
"Χρησιμοποιήστε το κουμπί αναπαραγωγής στην κεφαλίδα για να εκτελέσετε την "
@@ -1859,7 +1846,7 @@ msgstr "Αποστολή προς τα πίσω"
msgid "workspace.shape.menu.copy"
msgstr "αντίγραφο"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "Δημιουργία στοιχείου"
@@ -1867,11 +1854,11 @@ msgstr "Δημιουργία στοιχείου"
msgid "workspace.shape.menu.cut"
msgstr "Αποκοπή"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "Διαγραφή"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "Αποσύνδεση παρουσίας"
@@ -1903,11 +1890,11 @@ msgstr "Φέρτε μπροστά"
msgid "workspace.shape.menu.group"
msgstr "Ομάδα"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "Κρύβω"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "Κλείδωμα"
@@ -1915,15 +1902,15 @@ msgstr "Κλείδωμα"
msgid "workspace.shape.menu.mask"
msgstr "Μάσκα"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "Επικόλληση"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "Επαναφορά παρακάμψεων"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "προβολή"
@@ -1931,7 +1918,7 @@ msgstr "προβολή"
msgid "workspace.shape.menu.ungroup"
msgstr "Κατάργηση ομάδας"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "Ξεκλείδωμα"
@@ -1939,11 +1926,11 @@ msgstr "Ξεκλείδωμα"
msgid "workspace.shape.menu.unmask"
msgstr "Ανακάλυψη"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "Ιστορικό"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "στρώσεις"
@@ -1951,7 +1938,7 @@ msgstr "στρώσεις"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "Εισαγόμενα χαρακτηριστικά SVG"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "Σελίδες"
@@ -1959,7 +1946,7 @@ msgstr "Σελίδες"
msgid "workspace.sitemap"
msgstr "Χάρτης ιστοτόπου"
-#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "Στοιχεία"
@@ -1967,7 +1954,7 @@ msgstr "Στοιχεία"
msgid "workspace.toolbar.color-palette"
msgstr "Παλέτα χρωμάτων (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "Σχόλια (%s)"
@@ -2148,15 +2135,15 @@ msgstr "Λειτουργία άνω του %s"
msgid "workspace.undo.title"
msgstr "Ιστορία"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "Παράβλεψη"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "Υπάρχουν ενημερώσεις σε κοινόχρηστες βιβλιοθήκες"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "Ενημέρωση"
diff --git a/frontend/translations/en.po b/frontend/translations/en.po
index f9539da5fb..c76c43af56 100644
--- a/frontend/translations/en.po
+++ b/frontend/translations/en.po
@@ -172,7 +172,7 @@ msgstr "The open-source solution for design and prototyping."
msgid "auth.terms-and-privacy-agreement"
msgstr "I agree to the [terms of service](%s) and [privacy policy](%s)."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Terms of service"
@@ -195,11 +195,19 @@ msgstr "Work email"
msgid "branding-illustrations-marketing-pieces"
msgstr "...branding, illustrations, marketing pieces, etc."
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:98, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:105
+msgid "color-row.token-color-row.deleted-token"
+msgstr "This token does not exists or has been deleted."
+
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:35
+msgid "color-token.empty-state"
+msgstr "No available color tokens. Check active sets/themes or add new tokens."
+
#: src/app/main/ui/comments.cljs:530
msgid "comments.mentions.not-found"
msgstr "No people found for @%s"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Publish"
@@ -271,7 +279,7 @@ msgstr "Share prototypes"
msgid "common.share-link.view-all"
msgstr "Select All"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Unpublish"
@@ -396,7 +404,7 @@ msgstr "The token has no expiration date"
msgid "dashboard.add-file"
msgstr "Add file"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Add as Shared Library"
@@ -404,31 +412,31 @@ msgstr "Add as Shared Library"
msgid "dashboard.change-email"
msgstr "Change email"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(copy)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Create new team"
-#: src/app/main/ui/workspace/main_menu.cljs:631
+#: src/app/main/ui/workspace/main_menu.cljs:659
msgid "dashboard.create-version-menu"
msgstr "Pin this version"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Your Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Delete team"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Download Penpot file (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Download standard file (.svg + .json)"
@@ -512,7 +520,7 @@ msgstr "Start building amazing stuff"
msgid "dashboard.export-binary-multi"
msgstr "Download %s Penpot files (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Export boards as PDF"
@@ -528,7 +536,7 @@ msgstr "Export Penpot %s files"
msgid "dashboard.export-multiple.selected"
msgstr "%s of %s elements selected"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Export"
@@ -738,11 +746,33 @@ msgstr "Uploading data to server (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Uploading file: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:765
+msgid "dashboard.invitation-modal.delete"
+msgstr "You're going to delete the invitations to:"
+
+#: src/app/main/ui/dashboard/team.cljs:766
+msgid "dashboard.invitation-modal.resend"
+msgstr "You're going to resend the invitations to:"
+
+#: src/app/main/ui/dashboard/team.cljs:756
+msgid "dashboard.invitation-modal.title.delete-invitations"
+msgstr "Delete invitations"
+
+#: src/app/main/ui/dashboard/team.cljs:757
+msgid "dashboard.invitation-modal.title.resend-invitations"
+msgstr "Resend invitations"
+
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Invite people"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/team.cljs:933
+msgid "team.invitations-selected"
+msgid_plural "team.invitations-selected"
+msgstr[0] "1 invitation selected"
+msgstr[1] "%s invitations selected"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Leave team"
@@ -750,7 +780,7 @@ msgstr "Leave team"
msgid "dashboard.libraries-and-templates"
msgstr "Libraries & Templates"
-#: src/app/main/ui/dashboard/templates.cljs:259
+#: src/app/main/ui/dashboard/templates.cljs:267
msgid "dashboard.libraries-and-templates.description"
msgstr "Here you have some Libraries and templates you can add to your project"
@@ -758,7 +788,7 @@ msgstr "Here you have some Libraries and templates you can add to your project"
msgid "dashboard.libraries-and-templates.explore"
msgstr "Explore more of them and know how to contribute"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "There was a problem importing the template. The template wasn't imported."
@@ -794,7 +824,7 @@ msgstr "Move to other team"
msgid "dashboard.new-file"
msgstr "+ New File"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "New File"
@@ -802,7 +832,7 @@ msgstr "New File"
msgid "dashboard.new-project"
msgstr "+ New project"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "New Project"
@@ -810,11 +840,11 @@ msgstr "New Project"
msgid "dashboard.no-matches-for"
msgstr "No matches found for “%s“"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Pinned projects will appear here"
-#: src/app/main/ui/dashboard/comments.cljs:90
+#: src/app/main/ui/dashboard/comments.cljs:91
msgid "dashboard.notifications"
msgstr "Notifications"
@@ -826,7 +856,7 @@ msgstr "Your email address has been updated successfully"
msgid "dashboard.notifications.email-verified-successfully"
msgstr "Your email address has been verified successfully"
-#: src/app/main/data/profile.cljs:272
+#: src/app/main/data/profile.cljs:273
msgid "dashboard.notifications.notifications-saved"
msgstr "Notification settings updated"
@@ -834,11 +864,11 @@ msgstr "Notification settings updated"
msgid "dashboard.notifications.password-saved"
msgstr "Password saved successfully!"
-#: src/app/main/ui/dashboard/comments.cljs:44
+#: src/app/main/ui/dashboard/comments.cljs:45
msgid "dashboard.notifications.view"
msgstr "View notifications"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s members"
@@ -850,6 +880,14 @@ msgstr "Open file in a new tab"
msgid "dashboard.options"
msgstr "Options"
+#: src/app/main/ui/dashboard/team.cljs:949
+msgid "dashboard.order-invitations-by-role"
+msgstr "Order by role"
+
+#: src/app/main/ui/dashboard/team.cljs:958
+msgid "dashboard.order-invitations-by-status"
+msgstr "Order by status"
+
#: src/app/main/ui/settings/password.cljs:94, src/app/main/ui/settings/password.cljs:107
msgid "dashboard.password-change"
msgstr "Change password"
@@ -870,7 +908,7 @@ msgstr "You are now owner on this team."
msgid "dashboard.permissions-change.viewer"
msgstr "You are now a viewer on this team."
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Pin/Unpin"
@@ -907,7 +945,7 @@ msgstr "You are not part of the team “%s“ anymore."
msgid "dashboard.save-settings"
msgstr "Save settings"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Search…"
@@ -999,7 +1037,7 @@ msgstr "Notifications"
msgid "dashboard.show-all-files"
msgstr "Show all files"
-#: src/app/main/ui/workspace/main_menu.cljs:638
+#: src/app/main/ui/workspace/main_menu.cljs:666
msgid "dashboard.show-version-history"
msgstr "Version history"
@@ -1023,7 +1061,7 @@ msgstr[1] "Your files have been duplicated successfully"
msgid "dashboard.success-duplicate-project"
msgstr "Your project has been duplicated successfully"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Your file has been moved successfully"
@@ -1035,15 +1073,15 @@ msgstr "Your files have been moved successfully"
msgid "dashboard.success-move-project"
msgstr "Your project has been moved successfully"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Team info"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Team members"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Team projects"
@@ -1063,7 +1101,7 @@ msgstr "Search results"
msgid "dashboard.type-something"
msgstr "Type to search results"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Unpublish Library"
@@ -1071,50 +1109,50 @@ msgstr "Unpublish Library"
msgid "dashboard.update-settings"
msgstr "Update settings"
-#: src/app/main/ui/dashboard/sidebar.cljs:856
+#: src/app/main/ui/dashboard/sidebar.cljs:976
msgid "dashboard.upgrade-plan.no-limits"
msgstr "No limits on creativity"
-#: src/app/main/ui/dashboard/sidebar.cljs:854
+#: src/app/main/ui/dashboard/sidebar.cljs:974
msgid "dashboard.upgrade-plan.penpot-free"
msgstr "Penpot Free"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "Is active"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "When this hook is triggered event details will be delivered"
-#: src/app/main/ui/dashboard/team.cljs:982
+#: src/app/main/ui/dashboard/team.cljs:1160
msgid "dashboard.webhooks.cant-edit"
msgstr "You only can delete or modify webhooks created by you."
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "Content type"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "Create webhook"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "Webhook created successfully."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"Webhooks are a simple way to allow other websites and apps to be notified "
"when certain events happen at Penpot. We’ll send a POST request to each of "
"the URLs you provide."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "Press the button \"Add webhook\" to add one."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "No webhooks created so far."
@@ -1134,7 +1172,7 @@ msgstr "Email"
msgid "dashboard.your-name"
msgstr "Your name"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Your Penpot"
@@ -1150,15 +1188,15 @@ msgstr "Attention"
msgid "ds.component-subtitle"
msgstr "Components to update:"
-#: src/app/main/ui/workspace/plugins.cljs:338, src/app/main/ui/workspace/plugins.cljs:392
+#: src/app/main/ui/workspace/plugins.cljs:339, src/app/main/ui/workspace/plugins.cljs:393
msgid "ds.confirm-allow"
msgstr "Allow"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Cancel"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Ok"
@@ -1174,17 +1212,17 @@ msgstr "No applicable tokens in active sets or themes."
msgid "ds.inputs.numeric-input.no-matches"
msgstr "No matches found."
-#: src/app/main/ui/ds/controls/numeric_input.cljs:611
+#: src/app/main/ui/ds/controls/numeric_input.cljs:641, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:138
msgid "ds.inputs.numeric-input.open-token-list-dropdown"
msgstr "Open token list"
-#: src/app/main/ui/ds/controls/utilities/token_field.cljs:84
+#: src/app/main/ui/ds/controls/utilities/token_field.cljs:85, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:133
msgid "ds.inputs.token-field.detach-token"
msgstr "Detach token"
-#: src/app/main/ui/ds/controls/utilities/token_field.cljs:39
+#: src/app/main/ui/ds/controls/utilities/token_field.cljs:40, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:96, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:103
msgid "ds.inputs.token-field.no-active-token-option"
-msgstr "This token is not available in any active set or theme."
+msgstr "This token is not in any active set or has an invalid value."
#: src/app/main/data/auth.cljs:314
msgid "errors.auth-provider-not-allowed"
@@ -1240,7 +1278,7 @@ msgstr "Although Penpot no longer support this type of Assets, you can"
msgid "errors.deprecated.contact.text"
msgstr "contact us"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:266
+#: src/app/main/data/workspace/tokens/library_edit.cljs:274
msgid "errors.drop-token-set-parent-to-child"
msgstr "Cannot drop a parent set to an own child path."
@@ -1264,11 +1302,11 @@ msgstr "Email does not match the invitation."
msgid "errors.email-domain-not-allowed"
msgstr "Domain not allowed"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "The email «%s» has many permanent bounce reports."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "The email «%s» has been reported as spam or permanently bounce."
@@ -1282,10 +1320,9 @@ msgstr ""
msgid "errors.feature-not-supported"
msgstr "Feature '%s' is not supported."
-#: src/app/main/ui/auth/register.cljs, src/app/main/ui/dashboard/team_form.cljs, src/app/main/ui/onboarding/team_choice.cljs, src/app/main/ui/setti ngs/access_tokens.cljs, src/app/main/ui/settings/feedback.cljs, src/app/main/ui/settings/profile.cljs, src/app/main/ui/workspace/sidebar/assets.cljs
-#, unused
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs
msgid "errors.field-max-length"
-msgstr "Must contain at most 1 characters."
+msgstr "Must contain at most %s characters."
#, unused
msgid "errors.field-min-length"
@@ -1307,7 +1344,7 @@ msgstr ""
"features of the file you are trying to open. Migrations for '%s' need to be "
"applied before the file can be opened."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Something wrong has happened."
@@ -1357,11 +1394,16 @@ msgstr "This invite might be canceled or may be expired."
msgid "errors.ldap-disabled"
msgstr "LDAP authentication is disabled."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "You have reached the '%s' quota. Contact support."
-#: src/app/main/ui/dashboard/team.cljs:185, src/app/main/ui/onboarding/team_choice.cljs:101
+#: src/app/main/ui/dashboard/team.cljs:853
+#, fuzzy
+msgid "errors.max-quote-reached"
+msgstr ""
+
+#: src/app/main/ui/dashboard/team.cljs:187, src/app/main/ui/dashboard/team.cljs:849, src/app/main/ui/onboarding/team_choice.cljs:101
msgid "errors.maximum-invitations-by-request-reached"
msgstr ""
"The maximum (%s) number of emails that can be invited in a single request "
@@ -1379,7 +1421,7 @@ msgstr "Seems that the contents of the image does not match the file extension."
msgid "errors.media-type-not-allowed"
msgstr "Seems that this is not a valid image."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr "The profile you inviting has emails muted (spam reports or high bounces)."
@@ -1413,7 +1455,7 @@ msgstr "Invalid data in clipboard"
msgid "errors.profile-blocked"
msgstr "The profile is blocked"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr "Your profile has emails muted (spam reports or high bounces)."
@@ -1429,19 +1471,19 @@ msgstr "SVG is invalid or malformed"
msgid "errors.team-feature-mismatch"
msgstr "Detected incompatible feature '%s'"
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr "Insufficient members to leave team, you probably want to delete it."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "The member you try to assign does not exist."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr "Owner can't leave team, you must reassign the owner role."
-#: src/app/main/data/workspace/tokens/library_edit.cljs:153, src/app/main/data/workspace/tokens/library_edit.cljs:183
+#: src/app/main/data/workspace/tokens/library_edit.cljs:150, src/app/main/data/workspace/tokens/library_edit.cljs:180
msgid "errors.token-set-already-exists"
msgstr "A set with the same name already exists"
@@ -1450,11 +1492,11 @@ msgstr "A set with the same name already exists"
msgid "errors.token-set-doesnt-exists"
msgstr "Can't duplicate an unkown set"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:265
+#: src/app/main/data/workspace/tokens/library_edit.cljs:273
msgid "errors.token-set-exists-on-drop"
msgstr "Cannot complete drop, a set with same name already exists at path."
-#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:99
+#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:95
msgid "errors.token-theme-already-exists"
msgstr "Theme Option with the same name exists"
@@ -1482,31 +1524,31 @@ msgstr "This version is locked and cannot be deleted by others"
msgid "errors.version-not-supported"
msgstr "File has an incompatible version number"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "Connection error, URL not reacheable"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "URL does not pass validation."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "Last delivery was not successful."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "Error on SSL validation."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "Timeout"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "Unexpected error on validating"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "Unexpected status %s"
@@ -1570,7 +1612,7 @@ msgstr "An error has occurred"
msgid "inspect.attributes.blur"
msgstr "Blur"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Value"
@@ -1578,15 +1620,15 @@ msgstr "Value"
msgid "inspect.attributes.color"
msgstr "Color"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1594,7 +1636,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Fill"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Download source image"
@@ -1688,35 +1730,37 @@ msgstr "Solid"
msgid "inspect.attributes.stroke.width"
msgstr "Width"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Typography"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Font Family"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Font Size"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Font Style"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "Font Weight"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Letter Spacing"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Line Height"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Text Decoration"
@@ -1724,40 +1768,41 @@ msgstr "Text Decoration"
msgid "inspect.attributes.typography.text-decoration.line-through"
msgstr "Strikethrough"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "None"
-#: src/app/main/ui/inspect/attributes/text.cljs:143
+#: src/app/main/ui/inspect/attributes/text.cljs:137
#, fuzzy
msgid "inspect.attributes.typography.text-decoration.strikethrough"
msgstr ""
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Underline"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Text Transform"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "Capitalize"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "Lower Case"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "None"
-#: src/app/main/ui/inspect/attributes/text.cljs:159
+#: src/app/main/ui/inspect/attributes/text.cljs:152
msgid "inspect.attributes.typography.text-transform.unset"
msgstr "Unset"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "Upper Case"
@@ -1769,15 +1814,15 @@ msgstr "Variant properties"
msgid "inspect.attributes.variants"
msgstr "Variants properties"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr "If you want to know more about design inspect visit Penpot's help center"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "More info about inspect"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr "Select a shape, board or group to inspect their properties and code"
@@ -1849,74 +1894,59 @@ msgstr "Computed"
msgid "inspect.tabs.info"
msgstr "Info"
-#: src/app/main/ui/inspect/right_sidebar.cljs:107
-msgid "inspect.tabs.styles"
-msgstr "Styles"
+#: src/app/main/ui/inspect/styles/style_box.cljs:66
+#, fuzzy
+msgid "inspect.tabs.styles.panel.copy-style-shorthand"
+msgstr ""
+
+#: src/app/main/ui/inspect/styles/property_detail_copiable.cljs:52
+msgid "inspect.tabs.styles.panel.copy-to-clipboard"
+msgstr "Copy to clipboard"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:22
+msgid "inspect.tabs.styles.panel.geometry"
+msgstr "Size & Position"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:59, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:179
+msgid "inspect.tabs.styles.panel.toggle-style"
+msgstr "Toggle panel %s"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:21
+msgid "inspect.tabs.styles.panel.token"
+msgstr "Token Sets & Themes"
+
+#: src/app/main/ui/inspect/styles/panels/tokens_panel.cljs:26
+msgid "inspect.tabs.styles.panel.tokens.active-sets"
+msgstr "Active sets"
+
+#: src/app/main/ui/inspect/styles/panels/tokens_panel.cljs:21
+msgid "inspect.tabs.styles.panel.tokens.active-themes"
+msgstr "Active themes"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:20
+msgid "inspect.tabs.styles.panel.variant"
+msgstr "Variant properties"
+
+#: src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:102, src/app/main/ui/inspect/styles/rows/properties_row.cljs:53
+msgid "inspect.tabs.styles.token.resolved-value"
+msgstr "Resolved value:"
#: src/app/main/ui/inspect/right_sidebar.cljs:165
msgid "inspect.tabs.switcher.label"
msgstr "Layer info"
-#: src/app/main/ui/inspect/styles/style_box.cljs:10
-msgid "inspect.tabs.styles.panel.variant"
-msgstr "Variant properties"
-
-#: src/app/main/ui/inspect/styles/style_box.cljs:11
-msgid "inspect.tabs.styles.panel.token"
-msgstr "Token Sets & Themes"
-
-#: src/app/main/ui/inspect/styles/style_box.cljs:12
-msgid "inspect.tabs.styles.panel.geometry"
-msgstr "Size & Position"
-
-#: src/app/main/ui/inspect/styles/style_box.cljs:12
-msgid "inspect.tabs.styles.panel.fill"
-msgstr "Fill"
-
-#: src/app/main/ui/inspect/styles/style_box.cljs:12
-msgid "inspect.tabs.styles.panel.stroke"
-msgstr "Stroke"
-
-#: src/app/main/ui/inspect/styles/style_box.cljs:12
-msgid "inspect.tabs.styles.panel.text"
-msgstr "Text"
-
-#: src/app/main/ui/inspect/styles/style_box.cljs:12
-msgid "inspect.tabs.styles.panel.shadow"
-msgstr "Shadow"
-
-#: src/app/main/ui/inspect/styles/style_box.cljs:12
-msgid "inspect.tabs.styles.panel.layout"
-msgstr "Layout"
-
-#: src/app/main/ui/inspect/styles/style_box.cljs:12
-msgid "inspect.tabs.styles.panel.layout-element"
-msgstr "Layout Element"
-
-#: src/app/main/ui/inspect/styles/style_box.cljs:12
-msgid "inspect.tabs.styles.panel.visibility"
-msgstr "Visibility"
-
-#: src/app/main/ui/inspect/styles/style_box.cljs:12
-msgid "inspect.tabs.styles.panel.blur"
-msgstr "Blur"
-
-#: src/app/main/ui/inspect/styles/style_box.cljs:12
-msgid "inspect.tabs.styles.panel.svg"
-msgstr "SVG"
-
-#: src/app/main/ui/inspect/styles/style_box.cljs:12
-msgid "inspect.tabs.styles.panel.toggle-style"
-msgstr "Toggle panel %s"
-
-#: src/app/main/ui/dashboard/comments.cljs:95
+#: src/app/main/ui/dashboard/comments.cljs:96
msgid "label.mark-all-as-read"
msgstr "Mark all as read"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Shortcuts"
+#: src/app/main/ui/dashboard/sidebar.cljs:1043
+msgid "labels.about-penpot"
+msgstr "About Penpot"
+
#: src/app/main/data/common.cljs:90, src/app/main/ui/dashboard/import.cljs:530
msgid "labels.accept"
msgstr "Accept"
@@ -1925,11 +1955,11 @@ msgstr "Accept"
msgid "labels.access-tokens"
msgstr "Access tokens"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "Active"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.add"
msgstr "Add"
@@ -1937,11 +1967,11 @@ msgstr "Add"
msgid "labels.add-custom-font"
msgstr "Add custom font"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.adding"
msgstr "Adding..."
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Admin"
@@ -1949,7 +1979,7 @@ msgstr "Admin"
msgid "labels.adobe-xd"
msgstr "Adobe XD"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "All"
@@ -1972,7 +2002,11 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "Bad Gateway"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/ui/inspect/styles/style_box.cljs:26
+msgid "labels.blur"
+msgstr "Blur"
+
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Cancel"
@@ -1980,14 +2014,18 @@ msgstr "Cancel"
msgid "labels.canva"
msgstr "Canva"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Close"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:186
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:181
msgid "labels.collapse"
msgstr "Collapse"
+#: src/app/main/ui/workspace/colorpicker.cljs:427
+msgid "labels.color"
+msgstr "Color"
+
#: src/app/main/ui/comments.cljs:913
msgid "labels.comment"
msgstr "Comment"
@@ -1996,19 +2034,23 @@ msgstr "Comment"
msgid "labels.comment.mark-as-solved"
msgstr "Mark as solved"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Comments"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Community"
+#: src/app/main/ui/dashboard/sidebar.cljs:1030
+msgid "labels.community-contributions"
+msgstr "Community & Contributions"
+
#: src/app/main/ui/settings/password.cljs:91
msgid "labels.confirm-password"
msgstr "Confirm password"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Continue"
@@ -2024,11 +2066,11 @@ msgstr "You can continue with a Penpot account"
msgid "labels.copy"
msgstr "Copy"
-#: src/app/main/ui/inspect/attributes/common.cljs:118
+#: src/app/main/ui/inspect/attributes/common.cljs:99
msgid "labels.copy-color"
msgstr "Copy color"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "Copy link"
@@ -2036,7 +2078,7 @@ msgstr "Copy link"
msgid "labels.copyright"
msgstr "Kaleidos @2024"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Create"
@@ -2056,7 +2098,7 @@ msgstr "Custom fonts"
msgid "labels.dashboard"
msgstr "Dashboard"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Delete"
@@ -2068,7 +2110,7 @@ msgstr "Delete comment"
msgid "labels.delete-comment-thread"
msgstr "Delete thread"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Delete invitation"
@@ -2085,19 +2127,19 @@ msgstr "Development"
msgid "labels.director"
msgstr "Director"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "Discard"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Drafts"
-#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:65
msgid "labels.duplicate"
msgstr "Duplicate"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Edit"
@@ -2105,11 +2147,11 @@ msgstr "Edit"
msgid "labels.edit-file"
msgstr "Edit file"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Editor"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:302
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:301
msgid "labels.empty"
msgstr "Empty"
@@ -2122,11 +2164,11 @@ msgstr "Error"
msgid "labels.event"
msgstr "Event"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Expired"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Export"
@@ -2142,6 +2184,10 @@ msgstr "Feedback sent"
msgid "labels.figma"
msgstr "Figma"
+#: src/app/main/ui/inspect/styles/style_box.cljs:23
+msgid "labels.fill"
+msgstr "Fill"
+
#: src/app/main/ui/dashboard/fonts.cljs:430
msgid "labels.font-family"
msgstr "Font Family"
@@ -2154,7 +2200,7 @@ msgstr "Font providers"
msgid "labels.font-variants"
msgstr "Styles"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Fonts"
@@ -2168,11 +2214,11 @@ msgstr "CEO or Founder"
msgid "labels.freelancer"
msgstr "Freelancer"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "Github repository"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Give feedback"
@@ -2184,23 +2230,27 @@ msgstr "Go back"
msgid "labels.graphic-design"
msgstr "Graphic design"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Help Center"
+#: src/app/main/ui/dashboard/sidebar.cljs:1019
+msgid "labels.help-learning"
+msgstr "Help & Learning"
+
#: src/app/main/ui/dashboard/templates.cljs:91
msgid "labels.hide"
msgstr "Hide"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Hide resolved comments"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:134
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:130
msgid "labels.import"
msgstr "Import"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "Inactive"
@@ -2222,7 +2272,7 @@ msgstr "Internal Error"
msgid "labels.invision"
msgstr "InVision"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Invitations"
@@ -2230,7 +2280,15 @@ msgstr "Invitations"
msgid "labels.language"
msgstr "Language"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/inspect/styles/style_box.cljs:28
+msgid "labels.layout"
+msgstr "Layout"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:798
+msgid "labels.learning-center"
+msgstr "Learning Center"
+
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Libraries & Templates"
@@ -2250,7 +2308,7 @@ msgstr "Log in or sign up"
msgid "labels.login"
msgstr "Login"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Logout"
@@ -2258,11 +2316,11 @@ msgstr "Logout"
msgid "labels.marketing"
msgstr "Marketing"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Member"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Members"
@@ -2270,7 +2328,7 @@ msgstr "Members"
msgid "labels.mention"
msgstr "Mention"
-#: src/app/main/ui/ds/controls/numeric_input.cljs:591
+#: src/app/main/ui/ds/controls/numeric_input.cljs:619
msgid "labels.mixed-values"
msgstr "Mixed"
@@ -2278,19 +2336,19 @@ msgstr "Mixed"
msgid "labels.new-password"
msgstr "New password"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "Next"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "You're all caught up! New comment notifications will appear here."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "No pending invitations."
-#: src/app/main/ui/dashboard/team.cljs:761
+#: src/app/main/ui/dashboard/team.cljs:739
msgid "labels.no-invitations-gather-people"
msgstr "Gather your people and build great things together."
@@ -2307,7 +2365,7 @@ msgstr "Oops!"
msgid "labels.notifications"
msgstr "Notifications"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "1 file"
@@ -2319,7 +2377,7 @@ msgid_plural "labels.num-of-frames"
msgstr[0] "1 board"
msgstr[1] "%s boards"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "1 project"
@@ -2338,7 +2396,7 @@ msgstr "Old password"
msgid "labels.only-yours"
msgstr "Only yours"
-#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:309, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:338
+#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:310, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:339
msgid "labels.options"
msgstr "Options"
@@ -2354,7 +2412,7 @@ msgstr "Other (specify)"
msgid "labels.other-short"
msgstr "Other"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Owner"
@@ -2362,11 +2420,19 @@ msgstr "Owner"
msgid "labels.password"
msgstr "Password"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "Pending"
-#: src/app/main/ui/dashboard/sidebar.cljs:750
+#: src/app/main/ui/dashboard/sidebar.cljs:878
+msgid "labels.penpot-changelog"
+msgstr "Penpot Changelog"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:804
+msgid "labels.penpot-hub"
+msgstr "Penpot hub"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:751
msgid "labels.pinned-projects"
msgstr "Pinned Projects"
@@ -2390,15 +2456,19 @@ msgstr "Product Management"
msgid "labels.profile"
msgstr "Profile"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Projects"
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:644
+msgid "labels.reference"
+msgstr "Reference"
+
#: src/app/main/data/common.cljs:83
msgid "labels.refresh"
msgstr "Refresh"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Release notes"
@@ -2412,11 +2482,11 @@ msgstr "Reload file"
msgid "labels.remove"
msgstr "Remove"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Remove member"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Rename"
@@ -2444,7 +2514,11 @@ msgstr "new reply"
msgid "labels.reply.thread"
msgstr "Reply"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:788
+msgid "labels.resend"
+msgstr "Resend"
+
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "Resend invitation"
@@ -2456,15 +2530,15 @@ msgstr "Restore"
msgid "labels.retry"
msgstr "Retry"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Role"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Save"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:715
+#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:730
msgid "labels.search"
msgstr "Search"
@@ -2492,14 +2566,18 @@ msgstr "We are in programmed maintenance of our systems."
msgid "labels.service-unavailable.main-message"
msgstr "Service Unavailable"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:79
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:75
msgid "labels.sets"
msgstr "Sets"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Settings"
+#: src/app/main/ui/inspect/styles/style_box.cljs:27
+msgid "labels.shadow"
+msgstr "Shadow"
+
#: src/app/main/ui/viewer/header.cljs:204
msgid "labels.share"
msgstr "Share"
@@ -2508,7 +2586,7 @@ msgstr "Share"
msgid "labels.share-prototype"
msgstr "Share prototype"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Libraries"
@@ -2516,7 +2594,7 @@ msgstr "Libraries"
msgid "labels.show"
msgstr "Show"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Show all comments"
@@ -2524,11 +2602,11 @@ msgstr "Show all comments"
msgid "labels.show-comments-list"
msgstr "Show comments list"
-#: src/app/main/ui/workspace/comments.cljs:67, src/app/main/ui/workspace/comments.cljs:139
+#: src/app/main/ui/workspace/comments.cljs:68, src/app/main/ui/workspace/comments.cljs:140
msgid "labels.show-mentions"
msgstr "Show only your mentions"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Show only your comments"
@@ -2536,7 +2614,7 @@ msgstr "Show only your comments"
msgid "labels.sketch"
msgstr "Sketch"
-#: src/app/main/ui/dashboard/sidebar.cljs:729
+#: src/app/main/ui/dashboard/sidebar.cljs:730
msgid "labels.sources"
msgstr "Sources"
@@ -2544,14 +2622,30 @@ msgstr "Sources"
msgid "labels.start"
msgstr "Start"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Status"
+#: src/app/main/ui/inspect/styles/style_box.cljs:24, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:46
+msgid "labels.stroke"
+msgstr "Stroke"
+
#: src/app/main/ui/onboarding/questions.cljs:87
msgid "labels.student-teacher"
msgstr "Student or teacher"
+#: src/app/main/ui/inspect/right_sidebar.cljs:107, src/app/main/ui/inspect/styles.cljs:107
+msgid "labels.styles"
+msgstr "Styles"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:33
+msgid "labels.svg"
+msgstr "SVG"
+
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:250
+msgid "labels.switch"
+msgstr "Switch"
+
#: src/app/main/ui/onboarding/questions.cljs:256
#, unused
msgid "labels.team-leader"
@@ -2562,15 +2656,23 @@ msgstr "Team Leader"
msgid "labels.team-member"
msgstr "Team member"
+#: src/app/main/ui/inspect/styles/style_box.cljs:25
+msgid "labels.text"
+msgstr "Text"
+
#: src/app/main/ui/workspace/tokens/themes.cljs:36
msgid "labels.themes"
msgstr "Themes"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Tutorials"
-#: src/app/main/data/workspace/tokens/errors.cljs:93
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1148
+msgid "labels.typography"
+msgstr "Typography"
+
+#: src/app/main/data/workspace/tokens/errors.cljs:101
msgid "labels.unknown-error"
msgstr "Unknown error"
@@ -2602,15 +2704,27 @@ msgstr "Upload custom fonts"
msgid "labels.uploading"
msgstr "Uploading…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/inspect/right_sidebar.cljs:65, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:949, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:518
+msgid "labels.variant"
+msgstr "Variant"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:872
+msgid "labels.version-notes"
+msgstr "Version %s notes"
+
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "View only"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Viewer"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/inspect/styles/style_box.cljs:32
+msgid "labels.visibility"
+msgstr "Visibility"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Webhooks"
@@ -2618,11 +2732,11 @@ msgstr "Webhooks"
msgid "labels.write-new-comment"
msgstr "Write new comment"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(you)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "Your account"
@@ -2631,10 +2745,6 @@ msgstr "Your account"
msgid "labels.youtube"
msgstr "YouTube"
-#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:518
-msgid "labels.variant"
-msgstr "Variant"
-
#: src/app/main/ui/ds/product/loader.cljs:21
msgid "loader.tips.01.message"
msgstr "Keep your designs consistent and easy to update across projects."
@@ -2657,7 +2767,7 @@ msgstr "Design flexibly with familiar CSS-like layout controls."
#: src/app/main/ui/ds/product/loader.cljs:24
msgid "loader.tips.03.title"
-msgstr "Auto Layout like CSS"
+msgstr "Layouts like CSS"
#: src/app/main/ui/ds/product/loader.cljs:27
msgid "loader.tips.04.message"
@@ -2715,23 +2825,23 @@ msgstr "Extend Penpot with community-built plugins for extra functionality."
msgid "loader.tips.10.title"
msgstr "Plugins Support"
-#: src/app/main/ui/workspace/colorpicker.cljs:449, src/app/main/ui/workspace/colorpicker.cljs:450, src/app/main/ui/workspace/colorpicker.cljs:452
+#: src/app/main/ui/workspace/colorpicker.cljs:486, src/app/main/ui/workspace/colorpicker.cljs:487, src/app/main/ui/workspace/colorpicker.cljs:489
msgid "media.choose-image"
msgstr "Choose image"
-#: src/app/main/ui/workspace/colorpicker.cljs:244
+#: src/app/main/ui/workspace/colorpicker.cljs:256
msgid "media.gradient"
msgstr "Gradient"
-#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:44, src/app/main/ui/ds/utilities/swatch.cljs:57, src/app/main/ui/inspect/attributes/common.cljs:63, src/app/main/ui/workspace/colorpicker.cljs:246, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:251
+#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:45, src/app/main/ui/ds/utilities/swatch.cljs:58, src/app/main/ui/inspect/attributes/common.cljs:44, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:65, src/app/main/ui/workspace/colorpicker.cljs:258, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:395
msgid "media.image"
msgstr "Image"
-#: src/app/main/ui/inspect/attributes/common.cljs:74
+#: src/app/main/ui/inspect/attributes/common.cljs:55
msgid "media.image.short"
msgstr "img"
-#: src/app/main/ui/workspace/colorpicker.cljs:442
+#: src/app/main/ui/workspace/colorpicker.cljs:479
msgid "media.keep-aspect-ratio"
msgstr "Keep aspect ratio"
@@ -2749,7 +2859,7 @@ msgstr "Loading image…"
msgid "media.radial"
msgstr "Radial"
-#: src/app/main/ui/workspace/colorpicker.cljs:242
+#: src/app/main/ui/workspace/colorpicker.cljs:254
msgid "media.solid"
msgstr "Solid"
@@ -2822,19 +2932,19 @@ msgstr "Create token"
msgid "modals.create-access-token.title"
msgstr "Generate access token"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "Create webhook"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "Create webhook"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "Payload URL"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://example.com/postreceive"
@@ -2880,11 +2990,11 @@ msgstr ""
msgid "modals.delete-comment-thread.title"
msgstr "Delete conversation"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "Are you sure you want to delete this annotation?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "Delete annotation"
@@ -2932,11 +3042,11 @@ msgstr ""
msgid "modals.delete-font.title"
msgstr "Deleting font"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Are you sure you want to delete this page?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Delete page"
@@ -2982,29 +3092,29 @@ msgid_plural "modals.delete-shared-confirm.title"
msgstr[0] "Deleting file"
msgstr[1] "Deleting files"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Delete team"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Are you sure you want to delete this team? All projects and files "
"associated with team will be permanently deleted."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Deleting team"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Delete member"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Are you sure you want to delete this member from the team?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Delete team member"
@@ -3018,55 +3128,55 @@ msgstr[1] ""
"Assets that have already been used in those files will remain there (no "
"design will be broken)."
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "Delete webhook"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "Are you sure you want to delete this webhook?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "Deleting webhook"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "Edit webhook"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "Edit webhook"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Send invitation"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "Emails, comma separated"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr "Some members are already on the team. We'll invite the rest."
-#: src/app/main/ui/dashboard/team.cljs:220
+#: src/app/main/ui/dashboard/team.cljs:222
msgid "modals.invite-team-member.text"
msgstr ""
"You can invite members to the team so they can access to this file and all "
"of the team files."
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "Invite members to the team"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"As you're the only member of this team, the team will be deleted along with "
"its projects and files."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "Are you sure you want to leave the %s team?"
@@ -3094,15 +3204,15 @@ msgstr "Select a member to promote"
msgid "modals.leave-and-reassign.title"
msgstr "Before you leave"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Leave team"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Are you sure you want to leave this team?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Leaving team"
@@ -3124,39 +3234,39 @@ msgid_plural "modals.move-shared-confirm.title"
msgstr[0] "Move library"
msgstr[1] "Move libraries"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "Nudge amount"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Transfer ownership"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"If you transfer the ownership, you will change your role to Admin, losing "
"some permissions over this team. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr ""
"You are the current owner of this team. Are you sure you want to make %s "
"the new owner of the team?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "New team owner"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "Publish"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "Your library is empty. Are you sure you want to publish it?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "Publish empty library"
@@ -3211,21 +3321,21 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Update components in a shared library"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Update"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Cancel"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"You are about to update a component in a shared library. This may affect "
"other files that use it."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Update a component in a shared library"
@@ -3337,11 +3447,15 @@ msgstr "Maintenance break: we will be down for a short maintenance within 5 minu
msgid "notifications.by-code.upgrade-version"
msgstr "A new version is available, please refresh the page"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:825
+msgid "notifications.invitation-deleted"
+msgstr "Invitation deleted successfully"
+
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "Invitation sent successfully"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "Invitation link copied"
@@ -3487,7 +3601,7 @@ msgstr ""
"Remember to include everyone. Developers, designers, managers... diversity "
"adds up :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "Invite with the role:"
@@ -3707,193 +3821,193 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "Go to login"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "Detach"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "Mixed"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:283
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:423
msgid "settings.remove-color"
msgstr "Remove color"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:288
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:428
msgid "settings.select-this-color"
msgstr "Select items using this style"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Basics"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "Dashboard"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Viewer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Workspace"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Alignment"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Edit"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "Generic"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "Generic"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Main menu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "Modify layers"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Navigation"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Navigation"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Navigation"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Panels"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Paths"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Shapes"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "Texts"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Tools"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Comments"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "Add node"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "Align bottom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "Align center"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "Align center horizontally"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "Align justify"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "Align left"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "Align right"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "Align top"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "Align center vertically"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "Create board from selection"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "Toggle bold"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "Boolean difference"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "Boolean exclude"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "Boolean intersection"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "Boolean union"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "Send to the back"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Send backward"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "Bring forward"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "Bring to the front"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "Clear undo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Copy"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
msgid "shortcuts.copy-link"
msgstr "Copy link"
@@ -3902,275 +4016,275 @@ msgstr "Copy link"
msgid "shortcuts.copy-props"
msgstr "Copy properties"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
msgid "shortcuts.create-component-variant"
msgstr "Create component / variant"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "Create new"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Cut"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "Zoom out"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Delete"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "Delete node"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "Detach component"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Curve"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "Ellipse"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Board"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "Draw path"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Path"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Rectangle"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Text"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Duplicate"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "Cancel"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "Export shapes"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "Zoom to fit all"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "Flip horizontally"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "Flip vertically"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "Decrement font size"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "Increment font size"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "Go to drafts"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "Go to shared libraries"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Search"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Group"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "Distribute horizontally"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "Show / Hide UI"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "Zoom in"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "Insert image"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "Toggle italic"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "Join nodes"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
msgid "shortcuts.line-through"
msgstr "Toggle line through"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "Make corner"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "Make curve"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "Mask"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "Merge nodes"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "Move"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "Move down fast"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "Move left fast"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "Move right fast"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "Move up fast"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "Move node"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "Move down"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "Move left"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "Move right"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "Move up"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "Next board"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "No shortcuts found"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "Set opacity to 100%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "Set opacity to 10%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "Set opacity to 20%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "Set opacity to 30%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "Set opacity to 40%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "Set opacity to 50%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "Set opacity to 60%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "Set opacity to 70%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "Set opacity to 80%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "Set opacity to 90%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "Color picker"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "Go to viewer comment section"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "Go to dashboard"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "Go to viewer inspect section"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "Go to viewer interactions section"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "Go to viewer interactions section"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "Go to workspace"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " or "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Paste"
@@ -4184,191 +4298,191 @@ msgstr "Paste properties"
msgid "shortcuts.plugins"
msgstr "Plugins manager"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "Previous board"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "Redo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
msgid "shortcuts.rename"
msgstr "Rename"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "Reset zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
msgid "shortcuts.scale"
msgstr "Scale"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "Search shortcuts"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "Select all"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
msgid "shortcuts.select-next"
msgstr "Select next layer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
msgid "shortcuts.select-parent-layer"
msgstr "Select parent layer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
msgid "shortcuts.select-prev"
msgstr "Select previous layer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "Separate nodes"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "Show / Hide pixel grid"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "Show / Hide shortcuts"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "Snap to nodes"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "Snap to pixel grid"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "Start editing"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "Start measurement"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "Stop measurement"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "Set thumbnails"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "Keyboard shortcuts"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "Toggle dynamic alignment"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "Toggle assets"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "Toggle color palette"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "Toggle focus mode"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "Toggle fullscreen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
msgid "shortcuts.toggle-guides"
msgstr "Show / Hide guides"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "Toggle history"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "Toggle layers"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "Add / Remove flex layout"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
msgid "shortcuts.toggle-layout-grid"
msgstr "Add/remove grid layout"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "Lock / Unlock"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "Lock proportions"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
msgid "shortcuts.toggle-rulers"
msgstr "Show / Hide rulers"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
msgid "shortcuts.toggle-snap-guides"
msgstr "Snap to guides"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
msgid "shortcuts.toggle-snap-ruler-guide"
msgstr "Snap to ruler guides"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "Toggle text palette"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
msgid "shortcuts.toggle-theme"
msgstr "Change theme"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "Show / Hide"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "Toggle zoom style"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "Toggle underline"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Undo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Ungroup"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Unmask"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "Distribute vertically"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "Zoom lense decrease"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "Zoom lense increase"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "Zoom to selected"
@@ -4471,7 +4585,7 @@ msgstr ""
msgid "subscription.dashboard.unlimited-members-extra-editors-cta-title"
msgstr "Inviting people while on the Unlimited plan"
-#: src/app/main/ui/dashboard/sidebar.cljs:858
+#: src/app/main/ui/dashboard/sidebar.cljs:978
msgid "subscription.dashboard.upgrade-plan.power-up"
msgstr "Power up"
@@ -4660,7 +4774,7 @@ msgstr "Capped monthly bill at $175"
msgid "subscription.settings.unlimited.storage-benefit"
msgstr "25GB of storage"
-#: src/app/main/ui/dashboard/subscription.cljs:147, src/app/main/ui/workspace/main_menu.cljs:933
+#: src/app/main/ui/dashboard/subscription.cljs:147, src/app/main/ui/workspace/main_menu.cljs:961
msgid "subscription.workspace.header.menu.option.power-up"
msgstr "Power up your plan"
@@ -4733,19 +4847,19 @@ msgstr "Password - Penpot"
msgid "title.settings.profile"
msgstr "Profile - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "Invitations - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "Members - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Settings - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "Webhooks - %s - Penpot"
@@ -4817,43 +4931,43 @@ msgstr "Show interactions on click"
msgid "viewer.header.sitemap"
msgstr "Sitemap"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "Last delivery was successful."
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Align horizontal center (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "Distribute horizontal spacing (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Align left (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Align right (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Align bottom (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Align vertical center (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "Distribute vertical spacing (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Align top (%s)"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:163
+#: src/app/main/ui/workspace/sidebar/assets.cljs:172
msgid "workspace.assets.add-library"
msgstr "Add library"
@@ -4862,23 +4976,23 @@ msgstr "Add library"
msgid "workspace.assets.assets"
msgstr "Assets"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "All assets"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Colors"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:493
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:497
msgid "workspace.assets.colors.add-color"
msgstr "Add color"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:80
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:81
msgid "workspace.assets.component-group-options"
msgstr "Component group options"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Components"
@@ -4886,23 +5000,23 @@ msgstr "Components"
msgid "workspace.assets.components.add-component"
msgstr "Add component"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:176, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:535
+#: src/app/main/ui/workspace/sidebar/assets/components.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:547
msgid "workspace.assets.components.num-variants"
msgstr "%s Variants"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "Create a group"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr "Your items are going to be named automatically as \"group name / item name\""
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Delete"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "Duplicate"
@@ -4910,11 +5024,11 @@ msgstr "Duplicate"
msgid "workspace.assets.duplicate-main"
msgstr "Duplicate main"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Edit"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:177
+#: src/app/main/ui/workspace/sidebar/assets.cljs:186
msgid "workspace.assets.filter"
msgstr "Filter"
@@ -4923,27 +5037,27 @@ msgstr "Filter"
msgid "workspace.assets.graphics"
msgstr "Graphics"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:576
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:190, src/app/main/ui/workspace/sidebar/assets/components.cljs:576
msgid "workspace.assets.grid-view"
msgstr "Grid view"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Group"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "Group name"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:572
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:191, src/app/main/ui/workspace/sidebar/assets/components.cljs:572
msgid "workspace.assets.list-view"
msgstr "List view"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "local library"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:168
+#: src/app/main/ui/workspace/sidebar/assets.cljs:177
msgid "workspace.assets.manage-library"
msgstr "Manage library"
@@ -4955,15 +5069,15 @@ msgstr "No assets found"
msgid "workspace.assets.open-library"
msgstr "Open library file"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Rename"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "Rename group"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "Search assets"
@@ -4979,21 +5093,21 @@ msgstr[1] "%s items selected"
msgid "workspace.assets.shared-library"
msgstr "Shared library"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:237
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:235
msgid "workspace.assets.sidebar.components"
msgid_plural "workspace.assets.sidebar.components"
msgstr[0] "1 component"
msgstr[1] "%s components"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:193
+#: src/app/main/ui/workspace/sidebar/assets.cljs:204
msgid "workspace.assets.sort"
msgstr "Sort"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Typographies"
-#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:404
+#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:405
msgid "workspace.assets.typography.add-typography"
msgstr "Add typography"
@@ -5018,7 +5132,7 @@ msgstr "Letter Spacing"
msgid "workspace.assets.typography.line-height"
msgstr "Line Height"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -5030,59 +5144,73 @@ msgstr "Text styles"
msgid "workspace.assets.typography.text-transform"
msgstr "Text Transform"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "Ungroup"
-#: src/app/main/ui/workspace/context_menu.cljs:791
+#: src/app/main/ui/workspace/colorpicker.cljs:431, src/app/main/ui/workspace/colorpicker.cljs:443
+msgid "workspace.colorpicker.color-tokens"
+msgstr "Color tokens"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:464
+msgid "workspace.component.swap.loop-error"
+msgstr "Components can't be nested inside themselves."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:463
+msgid "workspace.component.switch.loop-error-multi"
+msgstr ""
+"Some copies could not be switched. Components can't be nested inside "
+"themselves."
+
+#: src/app/main/ui/workspace/context_menu.cljs:794
msgid "workspace.context-menu.grid-cells.area"
msgstr "Create area"
-#: src/app/main/ui/workspace/context_menu.cljs:794
+#: src/app/main/ui/workspace/context_menu.cljs:797
msgid "workspace.context-menu.grid-cells.create-board"
msgstr "Create board"
-#: src/app/main/ui/workspace/context_menu.cljs:786
+#: src/app/main/ui/workspace/context_menu.cljs:789
msgid "workspace.context-menu.grid-cells.merge"
msgstr "Merge cells"
-#: src/app/main/ui/workspace/context_menu.cljs:749
+#: src/app/main/ui/workspace/context_menu.cljs:752
msgid "workspace.context-menu.grid-track.column.add-after"
msgstr "Add 1 column to the right"
-#: src/app/main/ui/workspace/context_menu.cljs:748
+#: src/app/main/ui/workspace/context_menu.cljs:751
msgid "workspace.context-menu.grid-track.column.add-before"
msgstr "Add 1 column to the left"
-#: src/app/main/ui/workspace/context_menu.cljs:750
+#: src/app/main/ui/workspace/context_menu.cljs:753
msgid "workspace.context-menu.grid-track.column.delete"
msgstr "Delete column"
-#: src/app/main/ui/workspace/context_menu.cljs:751
+#: src/app/main/ui/workspace/context_menu.cljs:754
msgid "workspace.context-menu.grid-track.column.delete-shapes"
msgstr "Delete column and shapes"
-#: src/app/main/ui/workspace/context_menu.cljs:747
+#: src/app/main/ui/workspace/context_menu.cljs:750
msgid "workspace.context-menu.grid-track.column.duplicate"
msgstr "Duplicate column"
-#: src/app/main/ui/workspace/context_menu.cljs:756
+#: src/app/main/ui/workspace/context_menu.cljs:759
msgid "workspace.context-menu.grid-track.row.add-after"
msgstr "Add 1 row below"
-#: src/app/main/ui/workspace/context_menu.cljs:755
+#: src/app/main/ui/workspace/context_menu.cljs:758
msgid "workspace.context-menu.grid-track.row.add-before"
msgstr "Add 1 row above"
-#: src/app/main/ui/workspace/context_menu.cljs:757
+#: src/app/main/ui/workspace/context_menu.cljs:760
msgid "workspace.context-menu.grid-track.row.delete"
msgstr "Delete row"
-#: src/app/main/ui/workspace/context_menu.cljs:758
+#: src/app/main/ui/workspace/context_menu.cljs:761
msgid "workspace.context-menu.grid-track.row.delete-shapes"
msgstr "Delete row and shapes"
-#: src/app/main/ui/workspace/context_menu.cljs:754
+#: src/app/main/ui/workspace/context_menu.cljs:757
msgid "workspace.context-menu.grid-track.row.duplicate"
msgstr "Duplicate row"
@@ -5090,7 +5218,7 @@ msgstr "Duplicate row"
msgid "workspace.focus.focus-mode"
msgstr "Focus mode"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "Focus off"
@@ -5110,11 +5238,11 @@ msgstr "Linear gradient"
msgid "workspace.gradients.radial"
msgstr "Radial gradient"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "Disable dynamic alignment"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "Disable proportional scale"
@@ -5123,23 +5251,23 @@ msgstr "Disable proportional scale"
msgid "workspace.header.menu.disable-scale-text"
msgstr "Disable scale text"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "Disable snap to guides"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "Disable snap to pixel"
-#: src/app/main/ui/workspace/main_menu.cljs:215
+#: src/app/main/ui/workspace/main_menu.cljs:243
msgid "workspace.header.menu.disable-snap-ruler-guides"
msgstr "Disable snap to ruler guides"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "Enable dynamic alignment"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "Enable proportional scale"
@@ -5148,51 +5276,51 @@ msgstr "Enable proportional scale"
msgid "workspace.header.menu.enable-scale-text"
msgstr "Enable scale text"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "Snap to guides"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "Enable snap to pixel"
-#: src/app/main/ui/workspace/main_menu.cljs:216
+#: src/app/main/ui/workspace/main_menu.cljs:244
msgid "workspace.header.menu.enable-snap-ruler-guides"
msgstr "Snap to ruler guides"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "Hide board names"
-#: src/app/main/ui/workspace/main_menu.cljs:348
+#: src/app/main/ui/workspace/main_menu.cljs:376
msgid "workspace.header.menu.hide-guides"
msgstr "Hide guides"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "Hide color palette"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "Hide pixel grid"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "Hide rulers"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "Hide fonts palette"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Edit"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "File"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "Help & info"
@@ -5201,63 +5329,63 @@ msgstr "Help & info"
msgid "workspace.header.menu.option.power-up"
msgstr "Power up your plan"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "Preferences"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "View"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "Redo"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "Select all"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "Show boards names"
-#: src/app/main/ui/workspace/main_menu.cljs:349
+#: src/app/main/ui/workspace/main_menu.cljs:377
msgid "workspace.header.menu.show-guides"
msgstr "Show guides"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "Show color palette"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "Show pixel grid"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Show rulers"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "Show fonts palette"
-#: src/app/main/ui/workspace/main_menu.cljs:288
+#: src/app/main/ui/workspace/main_menu.cljs:316
msgid "workspace.header.menu.toggle-dark-theme"
msgstr "Switch to dark theme"
-#: src/app/main/ui/workspace/main_menu.cljs:286, src/app/main/ui/workspace/main_menu.cljs:289
+#: src/app/main/ui/workspace/main_menu.cljs:314, src/app/main/ui/workspace/main_menu.cljs:317
msgid "workspace.header.menu.toggle-light-theme"
msgstr "Switch to light theme"
-#: src/app/main/ui/workspace/main_menu.cljs:287
+#: src/app/main/ui/workspace/main_menu.cljs:315
msgid "workspace.header.menu.toggle-system-theme"
msgstr "Switch to system theme"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "Undo"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Reset"
@@ -5273,7 +5401,7 @@ msgstr "Saved"
msgid "workspace.header.saving"
msgstr "Saving"
-#: src/app/main/ui/workspace/right_header.cljs:239
+#: src/app/main/ui/workspace/right_header.cljs:240
msgid "workspace.header.share"
msgstr "Share"
@@ -5282,11 +5410,11 @@ msgstr "Share"
msgid "workspace.header.unsaved"
msgstr "Unsaved changes"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "View mode (%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "Zoom"
@@ -5298,7 +5426,7 @@ msgstr "Fill - Scale to fill"
msgid "workspace.header.zoom-fit"
msgstr "Fit - Scale down to fit"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "Zoom to fit all"
@@ -5306,43 +5434,43 @@ msgstr "Zoom to fit all"
msgid "workspace.header.zoom-full-screen"
msgstr "Full screen"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "Zoom to selected"
-#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:621
msgid "workspace.layout_grid.editor.options.edit-grid"
msgstr "Edit grid"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1300
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1301
msgid "workspace.layout_grid.editor.options.exit"
msgstr "Exit"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:429, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:435
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:430, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:436
msgid "workspace.layout_grid.editor.padding.bottom"
msgstr "Bottom padding"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:491
msgid "workspace.layout_grid.editor.padding.expand"
msgstr "Show 4 sided padding options"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:354, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:355, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:362
msgid "workspace.layout_grid.editor.padding.horizontal"
msgstr "Horizontal padding"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:444, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:450
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:451
msgid "workspace.layout_grid.editor.padding.left"
msgstr "Left padding"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:414, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:420
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:421
msgid "workspace.layout_grid.editor.padding.right"
msgstr "Right padding"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:406
msgid "workspace.layout_grid.editor.padding.top"
msgstr "Top padding"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:340, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:341, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:347
msgid "workspace.layout_grid.editor.padding.vertical"
msgstr "Vertical padding"
@@ -5358,7 +5486,7 @@ msgstr "Done"
msgid "workspace.layout_grid.editor.top-bar.locate"
msgstr "Locate"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1326
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1327
msgid "workspace.layout_grid.editor.top-bar.locate.tooltip"
msgstr "Locate grid layout"
@@ -5367,9 +5495,11 @@ msgstr "Locate grid layout"
msgid "workspace.libraries.add"
msgstr "Add"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
+#: src/app/main/ui/workspace/libraries.cljs:107, src/app/main/ui/workspace/libraries.cljs:133
msgid "workspace.libraries.colors"
-msgstr "%s colors"
+msgid_plural "workspace.libraries.colors"
+msgstr[0] "1 color"
+msgstr[1] "%s colors"
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
@@ -5397,43 +5527,51 @@ msgstr "Recent colors"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "RGB Complementary"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Save color style"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
+#: src/app/main/ui/workspace/libraries.cljs:101, src/app/main/ui/workspace/libraries.cljs:125
msgid "workspace.libraries.components"
-msgstr "%s components"
+msgid_plural "workspace.libraries.components"
+msgstr[0] "1 component"
+msgstr[1] "%s components"
-#: src/app/main/ui/workspace/libraries.cljs:371
+#: src/app/main/ui/workspace/libraries.cljs:349
+msgid "workspace.libraries.connected-to"
+msgstr "Connected to"
+
+#: src/app/main/ui/workspace/libraries.cljs:404
msgid "workspace.libraries.empty.add-some"
msgstr "Or add some of these to try:"
-#: src/app/main/ui/workspace/libraries.cljs:365
+#: src/app/main/ui/workspace/libraries.cljs:398
msgid "workspace.libraries.empty.no-libraries"
msgstr "There are no Shared Libraries at your team, you can look for"
-#: src/app/main/ui/workspace/libraries.cljs:369
+#: src/app/main/ui/workspace/libraries.cljs:402
msgid "workspace.libraries.empty.some-templates"
msgstr "some templates in here"
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "File library"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
+#: src/app/main/ui/workspace/libraries.cljs:104, src/app/main/ui/workspace/libraries.cljs:129
msgid "workspace.libraries.graphics"
-msgstr "%s graphics"
+msgid_plural "workspace.libraries.graphics"
+msgstr[0] "1 graphic"
+msgstr[1] "%s graphics"
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "LIBRARIES IN THIS FILE"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "LIBRARIES"
@@ -5442,11 +5580,11 @@ msgstr "LIBRARIES"
msgid "workspace.libraries.library"
msgstr "LIBRARY"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "LIBRARY UPDATES"
-#: src/app/main/ui/workspace/libraries.cljs:360
+#: src/app/main/ui/workspace/libraries.cljs:393
msgid "workspace.libraries.loading"
msgstr "Loading…"
@@ -5455,51 +5593,53 @@ msgstr "Loading…"
msgid "workspace.libraries.more-templates"
msgstr "You can look for "
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "There are no Shared Libraries that need update"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "No matches found for “%s“"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "Search shared libraries"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "SHARED LIBRARIES"
-#: src/app/main/ui/workspace/libraries.cljs:352
+#: src/app/main/ui/workspace/libraries.cljs:385
msgid "workspace.libraries.shared-library-btn"
msgstr "Connect library"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Multiple typographies"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Unlink all typographies"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
+#: src/app/main/ui/workspace/libraries.cljs:110, src/app/main/ui/workspace/libraries.cljs:137
msgid "workspace.libraries.typography"
-msgstr "%s typographies"
+msgid_plural "workspace.libraries.typography"
+msgstr[0] "1 typography"
+msgstr[1] "%s typographies"
-#: src/app/main/ui/workspace/libraries.cljs:323
+#: src/app/main/ui/workspace/libraries.cljs:354
msgid "workspace.libraries.unlink-library-btn"
msgstr "Disconnect library"
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Update"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "see all changes"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "UPDATES"
@@ -5507,31 +5647,31 @@ msgstr "UPDATES"
msgid "workspace.notification-pill.detail"
msgstr "Details"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "Click the + button to add interactions."
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:96
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:97
msgid "workspace.options.blur-options.add-blur"
msgstr "Add blur"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:117
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:118
msgid "workspace.options.blur-options.remove-blur"
msgstr "Remove blur"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Blur"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "Group blur"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "Selection blur"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:114
msgid "workspace.options.blur-options.toggle-blur"
msgstr "Toggle blur"
@@ -5539,120 +5679,117 @@ msgstr "Toggle blur"
msgid "workspace.options.canvas-background"
msgstr "Canvas background"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "Clip content"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Component"
-#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:193
+#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:196
msgid "workspace.options.component.annotation"
msgstr "Annotation"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "Copy"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:185
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:188
msgid "workspace.options.component.create-annotation"
msgstr "Create an annotation"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "Edit an annotation"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "Main"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:706
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:721
msgid "workspace.options.component.swap"
msgstr "Swap component"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:765
msgid "workspace.options.component.swap.empty"
msgstr "There are no assets in this library yet"
-msgid "workspace.component.swap.loop-error"
-msgstr "Components can't be nested inside themselves"
-
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:973
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:993
msgid "workspace.options.component.unlinked"
msgstr "Unlinked"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:512
msgid "workspace.options.component.variant.duplicated.copy.locate"
msgstr "Locate conflicting variants"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:496
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:509
msgid "workspace.options.component.variant.duplicated.copy.title"
msgstr ""
"This component has conflicting variants. Make sure each variation has a "
"unique set of property values."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1246
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1281
msgid "workspace.options.component.variant.duplicated.group.locate"
msgstr "Locate duplicated variants"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1243
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1278
msgid "workspace.options.component.variant.duplicated.group.title"
msgstr "Some variants have identical properties and values"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:267
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:268
msgid "workspace.options.component.variant.duplicated.single.all"
msgstr ""
"These variants have identical properties and values. Adjust the values so "
"they can be retrieved."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:264
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:265
msgid "workspace.options.component.variant.duplicated.single.one"
msgstr ""
"This variant has identical properties and values to another variant. Adjust "
"the values so they can be retrieved."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:270
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:271
msgid "workspace.options.component.variant.duplicated.single.some"
msgstr ""
"Some of these variants have identical properties and values. Adjust the "
"values so they can be retrieved."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:486
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:499
msgid "workspace.options.component.variant.malformed.copy"
msgstr ""
"This component has variants with invalid names. Make sure every variant is "
"following the correct structure."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1236
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1271
msgid "workspace.options.component.variant.malformed.group.locate"
msgstr "Locate invalid variants"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1233
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1268
msgid "workspace.options.component.variant.malformed.group.title"
msgstr "Some variants have invalid names"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:489
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:502
msgid "workspace.options.component.variant.malformed.locate"
msgstr "Locate invalid variants"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:252
msgid "workspace.options.component.variant.malformed.single.all"
msgstr "These variants have invalid names."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:247
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:249
msgid "workspace.options.component.variant.malformed.single.one"
msgstr "This variant has an invalid name."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:253
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:255
msgid "workspace.options.component.variant.malformed.single.some"
msgstr "Some of these variants have invalid names."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:390
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:391
msgid "workspace.options.component.variant.malformed.structure.example"
msgstr "[property]=[value], [property]=[value]"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:389
msgid "workspace.options.component.variant.malformed.structure.title"
msgstr "Try using the following structure:"
@@ -5688,7 +5825,7 @@ msgstr "Have the same hierarchy level."
msgid "workspace.options.component.variants-help-modal.rule3.detail"
msgstr "Groups, boards and layouts are considered equivalent."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:935, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1157, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:47
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:955, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1191, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:47
msgid "workspace.options.component.variants-help-modal.title"
msgstr "How variants stay connected"
@@ -5732,7 +5869,7 @@ msgstr "Top"
msgid "workspace.options.constraints.topbottom"
msgstr "Top & Bottom"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Design"
@@ -5745,21 +5882,21 @@ msgstr "Export"
msgid "workspace.options.export-multiple"
msgstr "Export selection"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "Export 1 element"
msgstr[1] "Export %s elements"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:188
+#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:214
msgid "workspace.options.export.add-export"
msgstr "Add export"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:235
+#: 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 "Remove export"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Suffix"
@@ -5767,7 +5904,7 @@ msgstr "Suffix"
msgid "workspace.options.exporting-complete"
msgstr "Export complete"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "Exporting…"
@@ -5779,27 +5916,27 @@ msgstr "Export failed"
msgid "workspace.options.exporting-object-slow"
msgstr "Export unexpectedly slow"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Fill"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:194
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:234
msgid "workspace.options.fill.add-fill"
msgstr "Add fill"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:208
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:248
msgid "workspace.options.fill.remove-fill"
msgstr "Remove fill"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:392
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:474
msgid "workspace.options.fit-content"
msgstr "Resize board to fit content"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "Add flow start"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:178
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:179
msgid "workspace.options.flows.flow"
msgstr "Flow"
@@ -5808,19 +5945,19 @@ msgstr "Flow"
msgid "workspace.options.flows.flow-start"
msgstr "Flow start"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "Flow starts"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:155
msgid "workspace.options.flows.remove-flow"
msgstr "Remove flow"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Auto"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "Columns"
@@ -5829,7 +5966,7 @@ msgstr "Columns"
msgid "workspace.options.grid.grid-title"
msgstr "Grid"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Color"
@@ -5838,15 +5975,15 @@ msgstr "Color"
msgid "workspace.options.grid.params.columns"
msgstr "Columns"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "Gutter"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Height"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Margin"
@@ -5855,7 +5992,7 @@ msgstr "Margin"
msgid "workspace.options.grid.params.rows"
msgstr "Rows"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "Set as default"
@@ -5869,159 +6006,159 @@ msgstr "Size"
msgid "workspace.options.grid.params.type"
msgstr "Type"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Bottom"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Center"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Left"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Right"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "Stretch"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "Top"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "Use default"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Width"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Rows"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "Square"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Group fill"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Group stroke"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:326
msgid "workspace.options.guides.add-guide"
msgstr "Add guide"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:187
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:188
msgid "workspace.options.guides.remove-guide"
msgstr "Remove guide"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:320
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
msgid "workspace.options.guides.title"
msgstr "Guides"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:183
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:184
msgid "workspace.options.guides.toggle-guide"
msgstr "Toggle guide"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "Height"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "Inspect"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "Action"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "After delay"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "Animation"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "Dissolve"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "None"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "Push"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "Slide"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "auto"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "Add background overlay"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "Close when clicking outside"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "Close overlay"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "Close overlay: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "Delay"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "Destination"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "Duration"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "Easing"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "Ease"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "Ease in"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "Ease in out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "Ease out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "Linear"
@@ -6030,47 +6167,47 @@ msgstr "Linear"
msgid "workspace.options.interaction-in"
msgstr "In"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "Mouse enter"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "Mouse leave"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "ms"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "Navigate to"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "Navigate to: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(not set)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "Offset effect"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "On Click"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "Open overlay"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "Open overlay: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "Open URL"
@@ -6079,87 +6216,87 @@ msgstr "Open URL"
msgid "workspace.options.interaction-out"
msgstr "Out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "Bottom center"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "Bottom left"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "Bottom right"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "Center"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "Manual"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "Top center"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "Top left"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "Top right"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "Position"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "Preserve scroll position"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "Previous screen"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "Relative to"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "self"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "Toggle overlay"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "Toggle overlay: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "Trigger"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "While Hovering"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "While Pressing"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "Interactions"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:735
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:736
msgid "workspace.options.interactions.add-interaction"
msgstr "Add interaction"
@@ -6168,67 +6305,67 @@ msgstr "Add interaction"
msgid "workspace.options.interactions.remove-interaction"
msgstr "Remove interaction"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "Color"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "Color burn"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "Color dodge"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "Darken"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "Difference"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "Exclusion"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Hard light"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Hue"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Lighten"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "Luminosity"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "Multiply"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "Normal"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "Overlay"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "Saturation"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Screen"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "Soft light"
@@ -6247,7 +6384,7 @@ msgstr "Group layers"
msgid "workspace.options.layer-options.title.multiple"
msgstr "Selected layers"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:202
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:207, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:213
msgid "workspace.options.layer-options.toggle-layer"
msgstr "Toggle layer visibility"
@@ -6256,19 +6393,19 @@ msgstr "Toggle layer visibility"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "Advanced options"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "Max.Height"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "Max.Width"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "Min.Height"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "Min.Width"
@@ -6382,15 +6519,15 @@ msgstr "space between"
msgid "workspace.options.layout.top"
msgstr "Top"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "More colors"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "More library colors"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "Opacity"
@@ -6399,35 +6536,35 @@ msgstr "Opacity"
msgid "workspace.options.position"
msgstr "Position"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "Prototype"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "Radius"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "Bottom left"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "Bottom right"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "Top left"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "Top right"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:152
msgid "workspace.options.radius.hide-all-corners"
msgstr "Collapse independent radius"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:136
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:153
msgid "workspace.options.radius.show-single-corners"
msgstr "Show independent radius"
@@ -6439,7 +6576,7 @@ msgstr "Recent"
msgid "workspace.options.retry"
msgstr "Retry"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "Rotation"
@@ -6447,31 +6584,31 @@ msgstr "Rotation"
msgid "workspace.options.search-font"
msgstr "Search font"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr "Select a shape, board or group to drag a connection to other board."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "Selected colors"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "Selection fill"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "Selection stroke"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:341
msgid "workspace.options.shadow-options.add-shadow"
msgstr "Add shadow"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "Blur"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "Shadow color"
@@ -6483,63 +6620,64 @@ msgstr "Drop shadow"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "Inner shadow"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:348
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:183, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:354
msgid "workspace.options.shadow-options.remove-shadow"
msgstr "Remove shadow"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "Spread"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "Shadow"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "Group shadow"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "Selection shadows"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:174
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:179
msgid "workspace.options.shadow-options.toggle-shadow"
msgstr "Toggle shadow"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "Show in exports"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "Show in view mode"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "Size"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "Size presets"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:534
msgid "workspace.options.size.lock"
msgstr "Lock ratio"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:534
msgid "workspace.options.size.unlock"
msgstr "Unlock ratio"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "Stroke"
@@ -6548,7 +6686,7 @@ msgstr "Stroke"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "Circle marker"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "Circle"
@@ -6557,7 +6695,7 @@ msgstr "Circle"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "Diamond marker"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "Diamond"
@@ -6566,19 +6704,19 @@ msgstr "Diamond"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "Line arrow"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "Arrow"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "None"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "Round"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "Square"
@@ -6587,7 +6725,7 @@ msgstr "Square"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "Square marker"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "Rectangle"
@@ -6596,83 +6734,83 @@ msgstr "Rectangle"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "Triangle arrow"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "Triangle"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "Stroke color"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "Stroke width"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:180
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:189
msgid "workspace.options.stroke.add-stroke"
msgstr "Add stroke color"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "Center"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "Dashed"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "Dotted"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "Inside"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "Mixed"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "Outside"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:193
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:202
msgid "workspace.options.stroke.remove-stroke"
msgstr "Remove stroke"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "Solid"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "Align bottom"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "Align middle"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "Align top"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "LTR"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "RTL"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "Auto height"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "Auto width"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "Fixed"
@@ -6694,35 +6832,35 @@ msgstr "Lowercase"
msgid "workspace.options.text-options.none"
msgstr "None"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "Strikethrough (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "Align center"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "Justify"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "Align left"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "Align right"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "Text"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "Group text"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "Selection text"
@@ -6731,7 +6869,7 @@ msgstr "Selection text"
msgid "workspace.options.text-options.titlecase"
msgstr "Title case"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "Underline (%s)"
@@ -6740,19 +6878,19 @@ msgstr "Underline (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "Uppercase"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr "Use the play button at the header to run the prototype view."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "Width"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "X axis"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Y axis"
@@ -6796,113 +6934,113 @@ msgstr "Separate nodes (%s)"
msgid "workspace.path.actions.snap-nodes"
msgstr "Snap nodes (%s)"
-#: src/app/main/ui/workspace/plugins.cljs:83
+#: src/app/main/ui/workspace/plugins.cljs:84
msgid "workspace.plugins.button-open"
msgstr "Open"
-#: src/app/main/ui/workspace/plugins.cljs:197
+#: src/app/main/ui/workspace/plugins.cljs:198
#, markdown
msgid "workspace.plugins.discover"
msgstr "Discover [more plugins](%s)"
-#: src/app/main/ui/workspace/plugins.cljs:204
+#: src/app/main/ui/workspace/plugins.cljs:205
msgid "workspace.plugins.empty-plugins"
msgstr "No plugins installed yet"
-#: src/app/main/ui/workspace/plugins.cljs:191
+#: src/app/main/ui/workspace/plugins.cljs:192
msgid "workspace.plugins.error.manifest"
msgstr "The plugin manifest is incorrect."
-#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:755, src/app/main/ui/workspace/plugins.cljs:82
+#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:783, src/app/main/ui/workspace/plugins.cljs:83
msgid "workspace.plugins.error.need-editor"
msgstr "You need to be an editor to use this plugin"
-#: src/app/main/ui/workspace/plugins.cljs:187
+#: src/app/main/ui/workspace/plugins.cljs:188
msgid "workspace.plugins.error.url"
msgstr "The plugin doesn't exist or the URL is not correct."
-#: src/app/main/ui/workspace/plugins.cljs:183
+#: src/app/main/ui/workspace/plugins.cljs:184
msgid "workspace.plugins.install"
msgstr "Install"
-#: src/app/main/ui/workspace/plugins.cljs:213
+#: src/app/main/ui/workspace/plugins.cljs:214
msgid "workspace.plugins.installed-plugins"
msgstr "Installed plugins"
-#: src/app/main/ui/workspace/main_menu.cljs:710
+#: src/app/main/ui/workspace/main_menu.cljs:738
msgid "workspace.plugins.menu.plugins-manager"
msgstr "Plugins manager"
-#: src/app/main/ui/workspace/main_menu.cljs:906
+#: src/app/main/ui/workspace/main_menu.cljs:934
msgid "workspace.plugins.menu.title"
msgstr "Plugins"
-#: src/app/main/ui/workspace/plugins.cljs:374
+#: src/app/main/ui/workspace/plugins.cljs:375
msgid "workspace.plugins.permissions-update.title"
msgstr "UPDATE THIS PLUGIN"
-#: src/app/main/ui/workspace/plugins.cljs:378
+#: src/app/main/ui/workspace/plugins.cljs:379
msgid "workspace.plugins.permissions-update.warning"
msgstr ""
"The plugin has been modified since you last opened it. It now also wants to "
"access:"
-#: src/app/main/ui/workspace/plugins.cljs:278
+#: src/app/main/ui/workspace/plugins.cljs:279
msgid "workspace.plugins.permissions.allow-download"
msgstr "Start file downloads."
-#: src/app/main/ui/workspace/plugins.cljs:285
+#: src/app/main/ui/workspace/plugins.cljs:286
msgid "workspace.plugins.permissions.allow-localstorage"
msgstr "Store data in the browser."
-#: src/app/main/ui/workspace/plugins.cljs:271
+#: src/app/main/ui/workspace/plugins.cljs:272
msgid "workspace.plugins.permissions.comment-read"
msgstr "Read your comments and replies."
-#: src/app/main/ui/workspace/plugins.cljs:265
+#: src/app/main/ui/workspace/plugins.cljs:266
msgid "workspace.plugins.permissions.comment-write"
msgstr "Read and modify your comments and reply in your name."
-#: src/app/main/ui/workspace/plugins.cljs:238
+#: src/app/main/ui/workspace/plugins.cljs:239
msgid "workspace.plugins.permissions.content-read"
msgstr "Read the content of files that users have access to."
-#: src/app/main/ui/workspace/plugins.cljs:232
+#: src/app/main/ui/workspace/plugins.cljs:233
msgid "workspace.plugins.permissions.content-write"
msgstr "Read and modify the content of files that users have access to."
-#: src/app/main/ui/workspace/plugins.cljs:325
+#: src/app/main/ui/workspace/plugins.cljs:326
msgid "workspace.plugins.permissions.disclaimer"
msgstr ""
"Please note that this plugin is created by an external party, so ensure you "
"trust it before granting access. Your data privacy and security are "
"important to us. If you have any concerns, please contact support."
-#: src/app/main/ui/workspace/plugins.cljs:258
+#: src/app/main/ui/workspace/plugins.cljs:259
msgid "workspace.plugins.permissions.library-read"
msgstr "Read your libraries and assets."
-#: src/app/main/ui/workspace/plugins.cljs:252
+#: src/app/main/ui/workspace/plugins.cljs:253
msgid "workspace.plugins.permissions.library-write"
msgstr "Read and modify your libraries and assets."
-#: src/app/main/ui/workspace/plugins.cljs:318
+#: src/app/main/ui/workspace/plugins.cljs:319
msgid "workspace.plugins.permissions.title"
msgstr "'%s' PLUGIN WANTS ACCESS TO:"
-#: src/app/main/ui/workspace/plugins.cljs:245
+#: src/app/main/ui/workspace/plugins.cljs:246
msgid "workspace.plugins.permissions.user-read"
msgstr "Read the profile information of the current user."
-#: src/app/main/ui/workspace/plugins.cljs:209
+#: src/app/main/ui/workspace/plugins.cljs:210
msgid "workspace.plugins.plugin-list-link"
msgstr "Plugins List"
-#: src/app/main/ui/workspace/plugins.cljs:86
+#: src/app/main/ui/workspace/plugins.cljs:87
msgid "workspace.plugins.remove-plugin"
msgstr "Remove plugin"
-#: src/app/main/ui/workspace/plugins.cljs:178
+#: src/app/main/ui/workspace/plugins.cljs:179
msgid "workspace.plugins.search-placeholder"
msgstr "Write a plugin URL"
@@ -6910,25 +7048,25 @@ msgstr "Write a plugin URL"
msgid "workspace.plugins.success"
msgstr "Plugin correctly loaded."
-#: src/app/main/ui/workspace/plugins.cljs:172
+#: src/app/main/ui/workspace/plugins.cljs:173
msgid "workspace.plugins.title"
msgstr "Plugins"
-#: src/app/main/ui/workspace/plugins.cljs:438
+#: src/app/main/ui/workspace/plugins.cljs:439
msgid "workspace.plugins.try-out.cancel"
msgstr "NOT NOW"
-#: src/app/main/ui/workspace/plugins.cljs:431
+#: src/app/main/ui/workspace/plugins.cljs:432
msgid "workspace.plugins.try-out.message"
msgstr ""
"Want to take a look? It will open in a new draft for your current team. (If "
"not, you can always find it in the installed plugins of any file.)"
-#: src/app/main/ui/workspace/plugins.cljs:427
+#: src/app/main/ui/workspace/plugins.cljs:428
msgid "workspace.plugins.try-out.title"
msgstr "'%s' PLUGIN IS INSTALLED FOR YOUR USER!"
-#: src/app/main/ui/workspace/plugins.cljs:444
+#: src/app/main/ui/workspace/plugins.cljs:445
msgid "workspace.plugins.try-out.try"
msgstr "TRY PLUGIN"
@@ -6940,15 +7078,15 @@ msgstr "Add flex layout"
msgid "workspace.shape.menu.add-grid"
msgstr "Add grid layout"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1015, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1039
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1016, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1040
msgid "workspace.shape.menu.add-layout"
msgstr "Add layout"
-#: src/app/main/ui/workspace/context_menu.cljs:608, src/app/main/ui/workspace/sidebar/assets/common.cljs:505, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:941, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1161
+#: src/app/main/ui/workspace/context_menu.cljs:610, src/app/main/ui/workspace/sidebar/assets/common.cljs:514, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:961, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1113, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1195
msgid "workspace.shape.menu.add-variant"
msgstr "Create variant"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:509, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:990, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1082, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1198
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:518, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1010, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1115, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1233
msgid "workspace.shape.menu.add-variant-property"
msgstr "Add new property"
@@ -6960,11 +7098,11 @@ msgstr "Send to back"
msgid "workspace.shape.menu.backward"
msgstr "Send backward"
-#: src/app/main/ui/workspace/context_menu.cljs:615, src/app/main/ui/workspace/sidebar/assets/components.cljs:638, src/app/main/ui/workspace/sidebar/assets/groups.cljs:74, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1021
+#: src/app/main/ui/workspace/context_menu.cljs:617, src/app/main/ui/workspace/sidebar/assets/components.cljs:634, src/app/main/ui/workspace/sidebar/assets/groups.cljs:75, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1041
msgid "workspace.shape.menu.combine-as-variants"
msgstr "Combine as variants"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:640
+#: src/app/main/ui/workspace/sidebar/assets/components.cljs:636
msgid "workspace.shape.menu.combine-as-variants-error"
msgstr "Components need to be in the same page"
@@ -7000,7 +7138,7 @@ msgstr "Copy as SVG"
msgid "workspace.shape.menu.copy-text"
msgstr "Copy as text"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "Create annotation"
@@ -7008,11 +7146,11 @@ msgstr "Create annotation"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "Selection to board"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "Create component"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "Create multiple components"
@@ -7020,7 +7158,7 @@ msgstr "Create multiple components"
msgid "workspace.shape.menu.cut"
msgstr "Cut"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "Delete"
@@ -7028,15 +7166,15 @@ msgstr "Delete"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "Delete flow start"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "Detach instance"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "Detach instances"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "Difference"
@@ -7048,11 +7186,11 @@ msgstr "Duplicate"
msgid "workspace.shape.menu.edit"
msgstr "Edit"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "Exclude"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "Flatten"
@@ -7085,19 +7223,19 @@ msgstr "Go to main component file"
msgid "workspace.shape.menu.group"
msgstr "Group"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "Hide"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "Show / Hide UI"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "Intersection"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "Lock"
@@ -7105,7 +7243,7 @@ msgstr "Lock"
msgid "workspace.shape.menu.mask"
msgstr "Mask"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "Paste"
@@ -7125,15 +7263,15 @@ msgstr "Remove flex layout"
msgid "workspace.shape.menu.remove-grid"
msgstr "Remove grid layout"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1033
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1034
msgid "workspace.shape.menu.remove-layout"
msgstr "Remove layout"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1222
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1257
msgid "workspace.shape.menu.remove-variant-property"
msgstr "Remove property"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1221
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1256
msgid "workspace.shape.menu.remove-variant-property.last-property"
msgstr "Variant should have at least one property"
@@ -7141,15 +7279,15 @@ msgstr "Variant should have at least one property"
msgid "workspace.shape.menu.rename"
msgstr "Rename"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "Reset overrides"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "Restore main component"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:504
msgid "workspace.shape.menu.restore-variant"
msgstr "Restore variant"
@@ -7157,15 +7295,15 @@ msgstr "Restore variant"
msgid "workspace.shape.menu.select-layer"
msgstr "Select layer"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "Show"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "Show in assets panel"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "Show main component"
@@ -7178,6 +7316,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "Set as thumbnail"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "Transform to path"
@@ -7185,11 +7324,11 @@ msgstr "Transform to path"
msgid "workspace.shape.menu.ungroup"
msgstr "Ungroup"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "Union"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "Unlock"
@@ -7202,7 +7341,7 @@ msgstr "Unmask"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "Update main components"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "Update main component"
@@ -7214,11 +7353,11 @@ msgstr "Collapse sidebar"
msgid "workspace.sidebar.expand"
msgstr "Expand sidebar"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "History"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "Layers"
@@ -7258,11 +7397,11 @@ msgstr "Texts"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "Imported SVG Attributes"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "Pages"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:248
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:249
msgid "workspace.sidebar.sitemap.add-page"
msgstr "Add page"
@@ -7279,27 +7418,27 @@ msgstr "%s active themes"
msgid "workspace.tokens.add set"
msgstr "Add set"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:329
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
msgid "workspace.tokens.add-new-theme"
msgstr "Add new theme"
-#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:60
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:62
msgid "workspace.tokens.add-set-to-group"
msgstr "Add set to this group"
-#: src/app/main/ui/workspace/tokens/management/group.cljs:113
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:197, src/app/main/ui/workspace/tokens/management/group.cljs:115
msgid "workspace.tokens.add-token"
msgstr "Add token: %s"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:161
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:136
msgid "workspace.tokens.applied-to"
msgstr "Applied to"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:315
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:316
msgid "workspace.tokens.axis"
msgstr "Axis"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:338
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:337
msgid "workspace.tokens.back-to-themes"
msgstr "Back to theme list"
@@ -7325,19 +7464,23 @@ msgstr "Choose folder"
msgid "workspace.tokens.color"
msgstr "Color"
+#: src/app/main/data/workspace/tokens/errors.cljs:97
+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/themes/create_modal.cljs:53
msgid "workspace.tokens.create-new-theme"
msgstr "Create your first theme now."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:100, src/app/main/ui/workspace/tokens/themes.cljs:44
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:96, src/app/main/ui/workspace/tokens/themes.cljs:44
msgid "workspace.tokens.create-one"
msgstr "Create one."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:534
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:552
msgid "workspace.tokens.create-token"
msgstr "Create new %s token"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:337
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:338
msgid "workspace.tokens.delete"
msgstr "Delete token"
@@ -7345,19 +7488,19 @@ msgstr "Delete token"
msgid "workspace.tokens.delete-theme-title"
msgstr "Delete theme"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:334
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:335
msgid "workspace.tokens.duplicate"
msgstr "Duplicate token"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:201, src/app/main/data/workspace/tokens/library_edit.cljs:405
+#: src/app/main/data/workspace/tokens/library_edit.cljs:197, src/app/main/data/workspace/tokens/library_edit.cljs:415
msgid "workspace.tokens.duplicate-suffix"
msgstr "copy"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:321
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:322
msgid "workspace.tokens.edit"
msgstr "Edit token"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:327
msgid "workspace.tokens.edit-theme-title"
msgstr "Edit theme"
@@ -7365,15 +7508,15 @@ msgstr "Edit theme"
msgid "workspace.tokens.edit-themes"
msgstr "Edit themes"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:533
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:551
msgid "workspace.tokens.edit-token"
-msgstr "Edit token"
+msgstr "Edit %s token"
#: src/app/main/data/workspace/tokens/errors.cljs:41
msgid "workspace.tokens.empty-input"
msgstr "Token value cannot be empty"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:540
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:558
msgid "workspace.tokens.enter-token-name"
msgstr "Enter %s token name"
@@ -7405,17 +7548,21 @@ msgstr "Preview:"
msgid "workspace.tokens.export.single-file"
msgstr "Single file"
-#: src/app/main/data/workspace/tokens/application.cljs:366
+#: src/app/main/data/workspace/tokens/application.cljs:292
msgid "workspace.tokens.font-variant-not-found"
msgstr ""
"Error setting font weight/style. This font style does not exist in the "
"current font"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:877, src/app/main/ui/workspace/tokens/management/create/form.cljs:889
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1024, src/app/main/ui/workspace/tokens/management/create/form.cljs:1039
msgid "workspace.tokens.font-weight-value-enter"
-msgstr "Enter a value (300, Bold, Regular Italic...) or an {alias}"
+msgstr "Font weight (300, Bold Italic...) or an {alias}"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:229
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs
+msgid "workspace.tokens.font-size-value-enter"
+msgstr "Font size or {alias}"
+
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:228
msgid "workspace.tokens.gaps"
msgstr "Gaps"
@@ -7433,7 +7580,7 @@ msgstr "Group name"
msgid "workspace.tokens.grouping-set-alert"
msgstr "Token Set grouping is not supported yet."
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:232
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:233
msgid "workspace.tokens.import-button-prefix"
msgstr "Import %s"
@@ -7441,27 +7588,27 @@ msgstr "Import %s"
msgid "workspace.tokens.import-error"
msgstr "Import Error:"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:272
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:273
msgid "workspace.tokens.import-menu-folder-option"
msgstr "Folder"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:271
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:272
msgid "workspace.tokens.import-menu-json-option"
msgstr "Single JSON file"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:270
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:271
msgid "workspace.tokens.import-menu-zip-option"
msgstr "ZIP file"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:240
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:241
msgid "workspace.tokens.import-multiple-files"
msgstr "In multiple files, the file name / path are the set names."
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:239
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:240
msgid "workspace.tokens.import-single-file"
msgstr "In a single JSON file, the first-level keys should be the token set names."
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:236
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:237
msgid "workspace.tokens.import-tokens"
msgstr "Import tokens"
@@ -7470,7 +7617,7 @@ msgstr "Import tokens"
msgid "workspace.tokens.import-tooltip"
msgstr "Importing a JSON file will override all your current tokens, sets and themes"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:246
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:247
msgid "workspace.tokens.import-warning"
msgstr "Importing tokens will override all your current tokens, sets and themes."
@@ -7484,6 +7631,10 @@ msgstr ""
"This set is not active. Change theme or activate this set to see changes in "
"the viewport"
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:711
+msgid "workspace.tokens.individual-tokens"
+msgstr "Use individual tokens"
+
#: src/app/main/data/workspace/tokens/errors.cljs:49
msgid "workspace.tokens.invalid-color"
msgstr "Invalid color value: %s"
@@ -7519,6 +7670,10 @@ msgstr ""
msgid "workspace.tokens.invalid-text-decoration-token-value"
msgstr "Invalid token value: only none, underline and strike-through are accepted"
+#: src/app/main/data/workspace/tokens/errors.cljs:93
+msgid "workspace.tokens.invalid-token-value-typography"
+msgstr "Invalid value: must reference a composite typography token."
+
#: src/app/main/data/workspace/tokens/errors.cljs:61, src/app/main/data/workspace/tokens/errors.cljs:73, src/app/main/data/workspace/tokens/errors.cljs:77
msgid "workspace.tokens.invalid-value"
msgstr "Invalid token value: %s"
@@ -7539,15 +7694,23 @@ msgstr "Theme"
msgid "workspace.tokens.label.theme-placeholder"
msgstr "Add a theme (i.e. Light)"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:221
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1047
+msgid "workspace.tokens.letter-spacing-value-enter-composite"
+msgstr "Letter spacing or {alias}"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1043
+msgid "workspace.tokens.line-height-value-enter"
+msgstr "Line height (multiplier, px, %) or {alias}"
+
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:220
msgid "workspace.tokens.margins"
msgstr "Margins"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:257
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:256
msgid "workspace.tokens.max-size"
msgstr "Max. size"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:251
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:250
msgid "workspace.tokens.min-size"
msgstr "Min. size"
@@ -7555,7 +7718,7 @@ msgstr "Min. size"
msgid "workspace.tokens.missing-references"
msgstr "Missing token references: "
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:148
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:123
msgid "workspace.tokens.more-options"
msgstr "Right click to see options"
@@ -7567,7 +7730,7 @@ msgstr "No active sets"
msgid "workspace.tokens.no-active-theme"
msgstr "No theme active"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:76
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:72
msgid "workspace.tokens.no-permisions-set"
msgstr "You need to be an editor to activate / deactivate sets"
@@ -7575,11 +7738,11 @@ msgstr "You need to be an editor to activate / deactivate sets"
msgid "workspace.tokens.no-permission-themes"
msgstr "You need to be an editor to use themes"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:480
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:483
msgid "workspace.tokens.no-sets-create"
msgstr "There are no sets defined yet. Create one first."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:97, src/app/main/ui/workspace/tokens/sets/lists.cljs:103
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:93, src/app/main/ui/workspace/tokens/sets/lists.cljs:99
msgid "workspace.tokens.no-sets-yet"
msgstr "There are no sets yet."
@@ -7607,12 +7770,12 @@ msgstr "Invalid token value. The resolved value is too large: %s"
msgid "workspace.tokens.opacity-range"
msgstr "Opacity must be between 0 and 100% or 0 and 1 (e.g. 50% or 0.5)."
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:145
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:120
#, fuzzy
msgid "workspace.tokens.original-value"
msgstr "Original value: %s"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:205
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:204
msgid "workspace.tokens.paddings"
msgstr "Paddings"
@@ -7620,16 +7783,20 @@ msgstr "Paddings"
msgid "workspace.tokens.radius"
msgstr "Radius"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:153
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:128
msgid "workspace.tokens.ref-not-valid"
msgstr "Reference is not valid or is not in any active set"
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:744
+msgid "workspace.tokens.reference-composite"
+msgstr "Enter a token typography alias"
+
#: src/app/main/ui/workspace/tokens/style_dictionary.cljs
#, unused
msgid "workspace.tokens.reference-error"
msgstr "Reference Errors: "
-#: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:39, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:44, src/app/main/ui/workspace/tokens/management/token_pill.cljs:146
+#: 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:100, 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 "Resolved value: %s"
@@ -7638,7 +7805,7 @@ msgstr "Resolved value: %s"
msgid "workspace.tokens.save-theme"
msgstr "Save theme"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:209, src/app/main/ui/workspace/tokens/sets/lists.cljs:315
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:204, src/app/main/ui/workspace/tokens/sets/lists.cljs:309
msgid "workspace.tokens.select-set"
msgstr "Select set."
@@ -7646,11 +7813,11 @@ msgstr "Select set."
msgid "workspace.tokens.self-reference"
msgstr "Token has self reference"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:64
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:60
msgid "workspace.tokens.set-edit-placeholder"
msgstr "Enter name (use '/' for groups)"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:343
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:342
msgid "workspace.tokens.set-selection-theme"
msgstr "Define what token sets should be used as part of this theme option:"
@@ -7671,7 +7838,7 @@ msgstr "Here you can configure the base font size, which defines the value of 1r
msgid "workspace.tokens.settings"
msgstr "Tokens settings"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:245
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:244
msgid "workspace.tokens.size"
msgstr "Size"
@@ -7679,18 +7846,22 @@ msgstr "Size"
msgid "workspace.tokens.stroke-width-range"
msgstr "Stroke width must be greater than or equal to 0."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:865, src/app/main/ui/workspace/tokens/management/create/form.cljs:895
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1012, src/app/main/ui/workspace/tokens/management/create/form.cljs:1051
msgid "workspace.tokens.text-case-value-enter"
-msgstr "Enter: none | uppercase | lowercase | capitalize or {alias}"
+msgstr "none | uppercase | lowercase | capitalize or {alias}"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:871, src/app/main/ui/workspace/tokens/management/create/form.cljs:898
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1018, src/app/main/ui/workspace/tokens/management/create/form.cljs:1055
msgid "workspace.tokens.text-decoration-value-enter"
-msgstr "Enter text decoration: none | underline | strike-through"
+msgstr "none | underline | strike-through or {alias}"
#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:130
msgid "workspace.tokens.theme-name"
msgstr "Theme %s"
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:48
+msgid "workspace.tokens.theme-name-already-exists"
+msgstr "A theme with this name already exists"
+
#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:96
msgid "workspace.tokens.themes-description"
msgstr ""
@@ -7701,44 +7872,52 @@ msgstr ""
msgid "workspace.tokens.themes-list"
msgstr "Themes list"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:589, src/app/main/ui/workspace/tokens/management/create/form.cljs:590
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:608, src/app/main/ui/workspace/tokens/management/create/form.cljs:609
#, fuzzy
msgid "workspace.tokens.token-description"
msgstr "Description"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:827
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:973
msgid "workspace.tokens.token-font-family-select"
msgstr "Select font family"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:834, src/app/main/ui/workspace/tokens/management/create/form.cljs:885
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1029
msgid "workspace.tokens.token-font-family-value"
msgstr "Font family"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:833, src/app/main/ui/workspace/tokens/management/create/form.cljs:886
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:979, src/app/main/ui/workspace/tokens/management/create/form.cljs:1031
msgid "workspace.tokens.token-font-family-value-enter"
msgstr "Font family or list of fonts separated by comma (,)"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:539
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:83, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:109, src/app/main/ui/workspace/tokens/management/create/form.cljs:557
msgid "workspace.tokens.token-name"
msgstr "Name"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:66
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:69
msgid "workspace.tokens.token-name-validation-error"
msgstr ""
" is not a valid token name.\n"
"Token names should only contain letters and digits separated by . "
"characters and must not start with a $ sign."
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs
+msgid "workspace.tokens.token-name-length-validation-error"
+msgstr "Name should be at least 1 character"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs
+msgid "workspace.tokens.token-name-duplication-validation-error"
+msgstr "A token already exists at the path: %s"
+
#: src/app/main/ui/workspace/tokens/style_dictionary.cljs:259
#, unused
msgid "workspace.tokens.token-not-resolved"
msgstr "Could not resolve reference token with the name: %s"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:567
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:585
msgid "workspace.tokens.token-value"
msgstr "Value"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:566, src/app/main/ui/workspace/tokens/management/create/form.cljs:883, src/app/main/ui/workspace/tokens/management/create/form.cljs:892
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:584, src/app/main/ui/workspace/tokens/management/create/form.cljs:1035
msgid "workspace.tokens.token-value-enter"
msgstr "Enter a value or alias with {alias}"
@@ -7746,7 +7925,7 @@ msgstr "Enter a value or alias with {alias}"
msgid "workspace.tokens.tokens-section-title"
msgstr "TOKENS - %s"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:125
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:121
msgid "workspace.tokens.tools"
msgstr "Tools"
@@ -7758,7 +7937,11 @@ msgstr "Import was successful. Some tokens were not included."
msgid "workspace.tokens.unknown-token-type-section"
msgstr "Type '%s' is not supported (%s)\n"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:156
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:715
+msgid "workspace.tokens.use-reference"
+msgstr "Use a reference"
+
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:131
msgid "workspace.tokens.value-not-valid"
msgstr "The value is not valid"
@@ -7770,11 +7953,11 @@ 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/form.cljs:563
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:581
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:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "Assets"
@@ -7782,7 +7965,7 @@ msgstr "Assets"
msgid "workspace.toolbar.color-palette"
msgstr "Color Palette (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "Comments (%s)"
@@ -7993,19 +8176,19 @@ msgstr "Operation over %s"
msgid "workspace.undo.title"
msgstr "History"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "Dismiss"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "More info"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "There are updates in shared libraries"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "Update"
@@ -8073,11 +8256,11 @@ msgstr "Do you want to restore this version?"
msgid "workspace.versions.snapshot-menu"
msgstr "Open snapshot menu"
-#: src/app/main/ui/workspace/sidebar.cljs:236
+#: src/app/main/ui/workspace/sidebar.cljs:237
msgid "workspace.versions.tab.actions"
msgstr "Actions"
-#: src/app/main/ui/workspace/sidebar.cljs:234
+#: src/app/main/ui/workspace/sidebar.cljs:235
msgid "workspace.versions.tab.history"
msgstr "History"
diff --git a/frontend/translations/es.po b/frontend/translations/es.po
index 0875eaadfe..2211b83947 100644
--- a/frontend/translations/es.po
+++ b/frontend/translations/es.po
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-11 07:21+0000\n"
-"Last-Translator: Anonymous \n"
+"PO-Revision-Date: 2025-10-07 16:35+0000\n"
+"Last-Translator: Deleted User \n"
"Language-Team: Spanish "
" \n"
"Language: es\n"
@@ -9,7 +9,7 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.13-dev\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -179,7 +179,7 @@ msgstr "La solución de código abierto para diseñar y prototipar."
msgid "auth.terms-and-privacy-agreement"
msgstr "Yo acepto los [términos de servicio](%s) y la [política de privacidad](%s)."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Términos de servicio"
@@ -202,11 +202,21 @@ msgstr "Correo electrónico"
msgid "branding-illustrations-marketing-pieces"
msgstr "diseño de marca, ilustraciones, piezas de marketing..."
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:98, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:105
+msgid "color-row.token-color-row.deleted-token"
+msgstr "Este token no existe o ha sido borrado."
+
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:35
+msgid "color-token.empty-state"
+msgstr ""
+"No hay tokens disponibles. Comprueba los sets/themes activos o crea nuevos "
+"tokens de color."
+
#: src/app/main/ui/comments.cljs:530
msgid "comments.mentions.not-found"
msgstr "No se encuentra miembros con @%s"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Publicar"
@@ -278,7 +288,7 @@ msgstr "Compartir prototipos"
msgid "common.share-link.view-all"
msgstr "Selecctionar todas"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Despublicar"
@@ -403,7 +413,7 @@ msgstr "El token no tiene fecha de expiración"
msgid "dashboard.add-file"
msgstr "Añadir archivo"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Añadir como Biblioteca Compartida"
@@ -411,31 +421,31 @@ msgstr "Añadir como Biblioteca Compartida"
msgid "dashboard.change-email"
msgstr "Cambiar correo"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(copia)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Crear nuevo equipo"
-#: src/app/main/ui/workspace/main_menu.cljs:631
+#: src/app/main/ui/workspace/main_menu.cljs:659
msgid "dashboard.create-version-menu"
msgstr "Guardar esta versión"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Tu Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Eliminar equipo"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Descargar archivo Penpot (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Descargar archivo estándar (.svg + .json)"
@@ -519,7 +529,7 @@ msgstr "Empieza a crear cosas increíbles"
msgid "dashboard.export-binary-multi"
msgstr "Descargar %s archivos Penpot (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Exportar tableros como PDF"
@@ -535,7 +545,7 @@ msgstr "Exportar %s archivos Penpot"
msgid "dashboard.export-multiple.selected"
msgstr "%s de %s elementos seleccionados"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Exportar"
@@ -750,11 +760,33 @@ msgstr "Enviando datos al servidor (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Enviando fichero: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:765
+msgid "dashboard.invitation-modal.delete"
+msgstr "Vas a eliminar las invitaciones para:"
+
+#: src/app/main/ui/dashboard/team.cljs:766
+msgid "dashboard.invitation-modal.resend"
+msgstr "Vas a reenviar las invitaciones para:"
+
+#: src/app/main/ui/dashboard/team.cljs:756
+msgid "dashboard.invitation-modal.title.delete-invitations"
+msgstr "Eliminar invitaciones"
+
+#: src/app/main/ui/dashboard/team.cljs:757
+msgid "dashboard.invitation-modal.title.resend-invitations"
+msgstr "Reenviar invitaciones"
+
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Invitar a la gente"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/team.cljs:933
+msgid "team.invitations-selected"
+msgid_plural "team.invitations-selected"
+msgstr[0] "1 invitación seleccionada"
+msgstr[1] "%s invitaciones seleccionadas"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Abandonar equipo"
@@ -762,7 +794,7 @@ msgstr "Abandonar equipo"
msgid "dashboard.libraries-and-templates"
msgstr "Bibliotecas y plantillas"
-#: src/app/main/ui/dashboard/templates.cljs:259
+#: src/app/main/ui/dashboard/templates.cljs:267
msgid "dashboard.libraries-and-templates.description"
msgstr "Aquí tienes algunas Bibliotecas y plantillas que puedes añadir a tu proyecto"
@@ -770,7 +802,7 @@ msgstr "Aquí tienes algunas Bibliotecas y plantillas que puedes añadir a tu pr
msgid "dashboard.libraries-and-templates.explore"
msgstr "Explora más y descubre cómo contribuir"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "Hubo un problema importando la plantilla. No ha podido ser importada."
@@ -806,7 +838,7 @@ msgstr "Mover a otro equipo"
msgid "dashboard.new-file"
msgstr "+ Nuevo Archivo"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Nuevo Archivo"
@@ -814,7 +846,7 @@ msgstr "Nuevo Archivo"
msgid "dashboard.new-project"
msgstr "+ Nuevo proyecto"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Nuevo Proyecto"
@@ -822,11 +854,11 @@ msgstr "Nuevo Proyecto"
msgid "dashboard.no-matches-for"
msgstr "No se encuentra “%s“"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Los proyectos fijados aparecerán aquí"
-#: src/app/main/ui/dashboard/comments.cljs:90
+#: src/app/main/ui/dashboard/comments.cljs:91
msgid "dashboard.notifications"
msgstr "Notificaciones"
@@ -838,7 +870,7 @@ msgstr "Tu dirección de correo ha sido actualizada"
msgid "dashboard.notifications.email-verified-successfully"
msgstr "Tu dirección de correo ha sido verificada"
-#: src/app/main/data/profile.cljs:272
+#: src/app/main/data/profile.cljs:273
msgid "dashboard.notifications.notifications-saved"
msgstr "Configuración de notificaciones actualizada"
@@ -846,11 +878,11 @@ msgstr "Configuración de notificaciones actualizada"
msgid "dashboard.notifications.password-saved"
msgstr "¡Contraseña guardada!"
-#: src/app/main/ui/dashboard/comments.cljs:44
+#: src/app/main/ui/dashboard/comments.cljs:45
msgid "dashboard.notifications.view"
msgstr "Ver notificaciones"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s integrantes"
@@ -862,6 +894,14 @@ msgstr "Abrir en una pestaña nueva"
msgid "dashboard.options"
msgstr "Opciones"
+#: src/app/main/ui/dashboard/team.cljs:949
+msgid "dashboard.order-invitations-by-role"
+msgstr "Ordenar por rol"
+
+#: src/app/main/ui/dashboard/team.cljs:958
+msgid "dashboard.order-invitations-by-status"
+msgstr "Ordenar por estado"
+
#: src/app/main/ui/settings/password.cljs:94, src/app/main/ui/settings/password.cljs:107
msgid "dashboard.password-change"
msgstr "Cambiar contraseña"
@@ -882,7 +922,7 @@ msgstr "Ahora eres el dueño del equipo."
msgid "dashboard.permissions-change.viewer"
msgstr "Ahora eres lector del equipo."
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Anclar/Desanclar"
@@ -919,7 +959,7 @@ msgstr "Ya no eres parte del equipo “%s“."
msgid "dashboard.save-settings"
msgstr "Guardar opciones"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Buscar…"
@@ -1011,7 +1051,7 @@ msgstr "Notificaciones"
msgid "dashboard.show-all-files"
msgstr "Ver todos los archivos"
-#: src/app/main/ui/workspace/main_menu.cljs:638
+#: src/app/main/ui/workspace/main_menu.cljs:666
msgid "dashboard.show-version-history"
msgstr "Histórico de versiones"
@@ -1035,7 +1075,7 @@ msgstr[1] "Tus archivos han sido duplicado con éxito"
msgid "dashboard.success-duplicate-project"
msgstr "Tu proyecto ha sido duplicado con éxito"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Tu archivo ha sido movido con éxito"
@@ -1047,15 +1087,15 @@ msgstr "Tus archivos han sido movidos con éxito"
msgid "dashboard.success-move-project"
msgstr "Tu proyecto ha sido movido con éxito"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Información del equipo"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Integrantes del equipo"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Proyectos del equipo"
@@ -1075,7 +1115,7 @@ msgstr "Resultados de búsqueda"
msgid "dashboard.type-something"
msgstr "Escribe algo para buscar"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Despublicar Biblioteca"
@@ -1083,50 +1123,50 @@ msgstr "Despublicar Biblioteca"
msgid "dashboard.update-settings"
msgstr "Actualizar opciones"
-#: src/app/main/ui/dashboard/sidebar.cljs:856
+#: src/app/main/ui/dashboard/sidebar.cljs:976
msgid "dashboard.upgrade-plan.no-limits"
msgstr "Sin límites a la creatividad"
-#: src/app/main/ui/dashboard/sidebar.cljs:854
+#: src/app/main/ui/dashboard/sidebar.cljs:974
msgid "dashboard.upgrade-plan.penpot-free"
msgstr "Penpot Gratis"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "Activo"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "Cuando se active este webhook se enviarán detalles del evento"
-#: src/app/main/ui/dashboard/team.cljs:982
+#: src/app/main/ui/dashboard/team.cljs:1160
msgid "dashboard.webhooks.cant-edit"
msgstr "Sólo puedes borrar o modificar webhooks creados por ti."
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "Tipo de contenido"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "Crear webhook"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "Webhook creado con éxito."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"Los webhooks son una forma simple de permitir notificar a otros sitios web "
"y aplicaciones cuando ocurren ciertos eventos en Penpot. Enviaremos una "
"petición POST a cada una de las URLs que indiques."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "Pulsa el botón \"Crear webhook\" para añadir uno."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "No hay ningún webhook aún."
@@ -1146,7 +1186,7 @@ msgstr "Correo"
msgid "dashboard.your-name"
msgstr "Tu nombre"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Tu Penpot"
@@ -1162,15 +1202,15 @@ msgstr "Atención"
msgid "ds.component-subtitle"
msgstr "Componentes a actualizar:"
-#: src/app/main/ui/workspace/plugins.cljs:338, src/app/main/ui/workspace/plugins.cljs:392
+#: src/app/main/ui/workspace/plugins.cljs:339, src/app/main/ui/workspace/plugins.cljs:393
msgid "ds.confirm-allow"
msgstr "Permitir"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Cancelar"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Ok"
@@ -1186,17 +1226,17 @@ msgstr "No hay tokens aplicables en sets o temas activos."
msgid "ds.inputs.numeric-input.no-matches"
msgstr "No hay coincidencias"
-#: src/app/main/ui/ds/controls/numeric_input.cljs:611
+#: src/app/main/ui/ds/controls/numeric_input.cljs:641, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:138
msgid "ds.inputs.numeric-input.open-token-list-dropdown"
msgstr "Abrir lista de tokens"
-#: src/app/main/ui/ds/controls/utilities/token_field.cljs:84
+#: src/app/main/ui/ds/controls/utilities/token_field.cljs:85, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:133
msgid "ds.inputs.token-field.detach-token"
msgstr "Desvincular token"
-#: src/app/main/ui/ds/controls/utilities/token_field.cljs:39
+#: src/app/main/ui/ds/controls/utilities/token_field.cljs:40, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:96, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:103
msgid "ds.inputs.token-field.no-active-token-option"
-msgstr "Este token no está disponible en ningún set ni tema activo."
+msgstr "Este token no está disponible en ningún set o tiene un valor inválido."
#: src/app/main/data/auth.cljs:314
msgid "errors.auth-provider-not-allowed"
@@ -1268,11 +1308,11 @@ msgstr "No puedes usar tu correo electrónico como contraseña"
msgid "errors.email-domain-not-allowed"
msgstr "Dominio no permitido"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "El correo electrónico «%s» tiene varios reportes de rebote permanente."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "El email «%s» tiene reportes de spam o de rebote permanente."
@@ -1286,10 +1326,9 @@ msgstr ""
msgid "errors.feature-not-supported"
msgstr "Caracteristica no soportada: '%s'."
-#: src/app/main/ui/auth/register.cljs, src/app/main/ui/dashboard/team_form.cljs, src/app/main/ui/onboarding/team_choice.cljs, src/app/main/ui/setti ngs/access_tokens.cljs, src/app/main/ui/settings/feedback.cljs, src/app/main/ui/settings/profile.cljs, src/app/main/ui/workspace/sidebar/assets.cljs
-#, unused
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs
msgid "errors.field-max-length"
-msgstr "Debe contener como máximo 1 caracter."
+msgstr "Debe contener como máximo %s caracteres."
#, unused
msgid "errors.field-min-length"
@@ -1311,7 +1350,7 @@ msgstr ""
"del fichero que se esta intentando abrir. Falta aplicar migraciones para "
"'%s' antes de poder abrir el fichero."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Ha ocurrido algún error."
@@ -1361,11 +1400,11 @@ msgstr "Esta invitación puede haber sido cancelada o ha expirado."
msgid "errors.ldap-disabled"
msgstr "La autheticacion via LDAP esta deshabilitada."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "Ha alcalzando el maximo de la quota '%s'. Contacte con soporte tecnico."
-#: src/app/main/ui/dashboard/team.cljs:185, src/app/main/ui/onboarding/team_choice.cljs:101
+#: src/app/main/ui/dashboard/team.cljs:187, src/app/main/ui/dashboard/team.cljs:849, src/app/main/ui/onboarding/team_choice.cljs:101
msgid "errors.maximum-invitations-by-request-reached"
msgstr ""
"Se ha alcanzado el número máximo (%s) de correos electrónicos que se pueden "
@@ -1385,7 +1424,7 @@ msgstr ""
msgid "errors.media-type-not-allowed"
msgstr "Parece que no es una imagen válida."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"El perfil que esta invitando tiene los emails silenciados (por reportes de "
@@ -1413,7 +1452,7 @@ msgstr "Datos inválidos en el portapapeles"
msgid "errors.profile-blocked"
msgstr "El perfil esta blockeado"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr ""
"Tu perfil tiene los emails silenciados (por reportes de spam o alto indice "
@@ -1431,23 +1470,23 @@ msgstr "El SVG no es válido o está mal formado"
msgid "errors.team-feature-mismatch"
msgstr "Detectada funcionalidad incompatible '%s'"
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr ""
"No hay miembros suficientes para salir del equipo, probablemente quieras "
"borrarlo."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "El integrante que intentas designar no existe."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr ""
"El propietario no puede salir del equipo, tienes que asignar la propiedad a "
"otra persona."
-#: src/app/main/data/workspace/tokens/library_edit.cljs:153, src/app/main/data/workspace/tokens/library_edit.cljs:183
+#: src/app/main/data/workspace/tokens/library_edit.cljs:150, src/app/main/data/workspace/tokens/library_edit.cljs:180
msgid "errors.token-set-already-exists"
msgstr "Ya existe un set con el mismo nombre"
@@ -1456,13 +1495,13 @@ msgstr "Ya existe un set con el mismo nombre"
msgid "errors.token-set-doesnt-exists"
msgstr "No se puede duplicar un set que no existe."
-#: src/app/main/data/workspace/tokens/library_edit.cljs:265
+#: src/app/main/data/workspace/tokens/library_edit.cljs:273
msgid "errors.token-set-exists-on-drop"
msgstr ""
"No se ha podido mover el set, un set con el mismo nombre ya existe en la "
"esa ruta."
-#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:99
+#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:95
msgid "errors.token-theme-already-exists"
msgstr "Ya existe un theme con este nombre"
@@ -1482,31 +1521,31 @@ msgstr "Error de validación"
msgid "errors.version-not-supported"
msgstr "El fichero tiene un número de versión incompatible"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "Error de conexion, la url no es alcanzable"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "La URL no pasa la validación."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "Hubo un problema en el último envío."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "Error en la validación SSL."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "Timeout"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "Error inesperado al validar"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "Estado inesperado %s"
@@ -1571,7 +1610,7 @@ msgstr "Ha ocurrido un error"
msgid "inspect.attributes.blur"
msgstr "Desenfocado"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Valor"
@@ -1579,15 +1618,15 @@ msgstr "Valor"
msgid "inspect.attributes.color"
msgstr "Color"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1595,7 +1634,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Relleno"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Descargar imagen original"
@@ -1689,35 +1728,37 @@ msgstr "Sólido"
msgid "inspect.attributes.stroke.width"
msgstr "Ancho"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Tipografía"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Familia tipográfica"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Tamaño de fuente"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Estilo de fuente"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "Grosor de fuente"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Espaciado de letras"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Interlineado"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Decoración de texto"
@@ -1725,35 +1766,36 @@ msgstr "Decoración de texto"
msgid "inspect.attributes.typography.text-decoration.line-through"
msgstr "Tachar"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Ninguna"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Subrayar"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Transformación de texto"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "Primera en mayúscula"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "Minúsculas"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Ninguna"
-#: src/app/main/ui/inspect/attributes/text.cljs:159
+#: src/app/main/ui/inspect/attributes/text.cljs:152
msgid "inspect.attributes.typography.text-transform.unset"
msgstr "Sin asignar"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "Mayúsculas"
@@ -1765,17 +1807,17 @@ msgstr "Propiedades de la variante"
msgid "inspect.attributes.variants"
msgstr "Propiedades de las variantes"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr ""
"Si quieres saber más sobre la inspección puedes visitar el centro de ayuda "
"de Penpot"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "Más información sobre la inspección"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr "Elige una forma, tablero o grupo para inspeccionar sus propiedades y código"
@@ -1847,74 +1889,42 @@ msgstr "Calculado"
msgid "inspect.tabs.info"
msgstr "Información"
-#: src/app/main/ui/inspect/right_sidebar.cljs:107
-msgid "inspect.tabs.styles"
-msgstr "Estilos"
-
-#: src/app/main/ui/inspect/styles/style_box.cljs:12
-msgid "inspect.tabs.styles.panel.blur"
-msgstr "Desenfoque"
-
-#: src/app/main/ui/inspect/styles/style_box.cljs:12
-msgid "inspect.tabs.styles.panel.fill"
-msgstr "Relleno"
-
-#: src/app/main/ui/inspect/styles/style_box.cljs:12
+#: src/app/main/ui/inspect/styles/style_box.cljs:22
msgid "inspect.tabs.styles.panel.geometry"
msgstr "Tamaño y posición"
-#: src/app/main/ui/inspect/styles/style_box.cljs:12
-msgid "inspect.tabs.styles.panel.layout"
-msgstr "Layout"
-
-#: src/app/main/ui/inspect/styles/style_box.cljs:12
-msgid "inspect.tabs.styles.panel.layout-element"
-msgstr "Layout de elemento"
-
-#: src/app/main/ui/inspect/styles/style_box.cljs:12
-msgid "inspect.tabs.styles.panel.shadow"
-msgstr "Sombra"
-
-#: src/app/main/ui/inspect/styles/style_box.cljs:12
-msgid "inspect.tabs.styles.panel.stroke"
-msgstr "Borde"
-
-#: src/app/main/ui/inspect/styles/style_box.cljs:12
-msgid "inspect.tabs.styles.panel.svg"
-msgstr "SVG"
-
-#: src/app/main/ui/inspect/styles/style_box.cljs:12
-msgid "inspect.tabs.styles.panel.text"
-msgstr "Texto"
-
-#: src/app/main/ui/inspect/styles/style_box.cljs:12
+#: src/app/main/ui/inspect/styles/style_box.cljs:59, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:179
msgid "inspect.tabs.styles.panel.toggle-style"
msgstr "Alternar panel %s"
-#: src/app/main/ui/inspect/styles/style_box.cljs:11
+#: src/app/main/ui/inspect/styles/style_box.cljs:21
msgid "inspect.tabs.styles.panel.token"
msgstr "Sets y temas de tokens"
-#: src/app/main/ui/inspect/styles/style_box.cljs:10
+#: src/app/main/ui/inspect/styles/style_box.cljs:20
msgid "inspect.tabs.styles.panel.variant"
msgstr "Propiedades de las variantes"
-#: src/app/main/ui/inspect/styles/style_box.cljs:12
-msgid "inspect.tabs.styles.panel.visibility"
-msgstr "Visibilidad"
+#: src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:102, src/app/main/ui/inspect/styles/rows/properties_row.cljs:53
+msgid "inspect.tabs.styles.token.resolved-value"
+msgstr "Valor resuelto:"
#: src/app/main/ui/inspect/right_sidebar.cljs:165
msgid "inspect.tabs.switcher.label"
msgstr "Información sobre la capa"
-#: src/app/main/ui/dashboard/comments.cljs:95
+#: src/app/main/ui/dashboard/comments.cljs:96
msgid "label.mark-all-as-read"
msgstr "Marcar todo como leído"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Atajos de teclado"
+#: src/app/main/ui/dashboard/sidebar.cljs:1043
+msgid "labels.about-penpot"
+msgstr "Acerca de Penpot"
+
#: src/app/main/data/common.cljs:90, src/app/main/ui/dashboard/import.cljs:530
msgid "labels.accept"
msgstr "Aceptar"
@@ -1923,11 +1933,11 @@ msgstr "Aceptar"
msgid "labels.access-tokens"
msgstr "Access tokens"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "Activo"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.add"
msgstr "Añadir"
@@ -1935,11 +1945,11 @@ msgstr "Añadir"
msgid "labels.add-custom-font"
msgstr "Añadir fuente personalizada"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.adding"
msgstr "Añadiendo..."
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Administración"
@@ -1947,7 +1957,7 @@ msgstr "Administración"
msgid "labels.adobe-xd"
msgstr "Adobe XD"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Todo"
@@ -1970,7 +1980,11 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "Error del servidor (Bad Gateway)"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/ui/inspect/styles/style_box.cljs:26
+msgid "labels.blur"
+msgstr "Desenfoque"
+
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Cancelar"
@@ -1978,14 +1992,18 @@ msgstr "Cancelar"
msgid "labels.canva"
msgstr "Canva"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Cerrar"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:186
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:181
msgid "labels.collapse"
msgstr "Colapsar"
+#: src/app/main/ui/workspace/colorpicker.cljs:427
+msgid "labels.color"
+msgstr "Color"
+
#: src/app/main/ui/comments.cljs:913
msgid "labels.comment"
msgstr "Comentario"
@@ -1994,19 +2012,23 @@ msgstr "Comentario"
msgid "labels.comment.mark-as-solved"
msgstr "Marcar como resuelto"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Comentarios"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Comunidad"
+#: src/app/main/ui/dashboard/sidebar.cljs:1030
+msgid "labels.community-contributions"
+msgstr "Comunidad y contribuciones"
+
#: src/app/main/ui/settings/password.cljs:91
msgid "labels.confirm-password"
msgstr "Confirmar contraseña"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Continuar"
@@ -2022,11 +2044,11 @@ msgstr "Puedes continuar con una cuenta de Penpot"
msgid "labels.copy"
msgstr "Copiar"
-#: src/app/main/ui/inspect/attributes/common.cljs:118
+#: src/app/main/ui/inspect/attributes/common.cljs:99
msgid "labels.copy-color"
msgstr "Copiar color"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "Copiar enlace"
@@ -2034,7 +2056,7 @@ msgstr "Copiar enlace"
msgid "labels.copyright"
msgstr "Kaleidos @2024"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Crear"
@@ -2054,7 +2076,7 @@ msgstr "Fuentes personalizadas"
msgid "labels.dashboard"
msgstr "Panel"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Borrar"
@@ -2066,7 +2088,7 @@ msgstr "Eliminar comentario"
msgid "labels.delete-comment-thread"
msgstr "Eliminar hilo"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Eliminar invitation"
@@ -2083,19 +2105,19 @@ msgstr "Desarrollo"
msgid "labels.director"
msgstr "Director"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "Descartar"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Borradores"
-#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:65
msgid "labels.duplicate"
msgstr "Duplicar"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Editar"
@@ -2103,11 +2125,11 @@ msgstr "Editar"
msgid "labels.edit-file"
msgstr "Editar archivo"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Edición"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:302
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:301
msgid "labels.empty"
msgstr "Vacío"
@@ -2120,11 +2142,11 @@ msgstr "Error"
msgid "labels.event"
msgstr "Evento"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Expirada"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Exportar"
@@ -2140,6 +2162,10 @@ msgstr "Opinión enviada"
msgid "labels.figma"
msgstr "Figma"
+#: src/app/main/ui/inspect/styles/style_box.cljs:23
+msgid "labels.fill"
+msgstr "Relleno"
+
#: src/app/main/ui/dashboard/fonts.cljs:430
msgid "labels.font-family"
msgstr "Familia de fuente"
@@ -2152,7 +2178,7 @@ msgstr "Proveedores de fuentes"
msgid "labels.font-variants"
msgstr "Estilos"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Fuentes"
@@ -2166,11 +2192,11 @@ msgstr "CEO o Fundador"
msgid "labels.freelancer"
msgstr "Autónomo"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "Repositorio de Github"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Danos tu opinión"
@@ -2182,23 +2208,27 @@ msgstr "Volver"
msgid "labels.graphic-design"
msgstr "Diseño gráfico"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Centro de ayuda"
+#: src/app/main/ui/dashboard/sidebar.cljs:1019
+msgid "labels.help-learning"
+msgstr "Ayuda y aprendizaje"
+
#: src/app/main/ui/dashboard/templates.cljs:91
msgid "labels.hide"
msgstr "Ocultar"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Ocultar comentarios resueltos"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:134
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:130
msgid "labels.import"
msgstr "Importar"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "Inactivo"
@@ -2220,7 +2250,7 @@ msgstr "Error interno"
msgid "labels.invision"
msgstr "InVision"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Invitaciones"
@@ -2228,7 +2258,15 @@ msgstr "Invitaciones"
msgid "labels.language"
msgstr "Idioma"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/inspect/styles/style_box.cljs:28
+msgid "labels.layout"
+msgstr "Layout"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:798
+msgid "labels.learning-center"
+msgstr "Centro de aprendizaje"
+
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Bibliotecas y Plantillas"
@@ -2244,7 +2282,7 @@ msgstr "Entra o regístrate"
msgid "labels.login"
msgstr "Entrar"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Salir"
@@ -2252,11 +2290,11 @@ msgstr "Salir"
msgid "labels.marketing"
msgstr "Marketing"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Integrante"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Integrantes"
@@ -2264,7 +2302,7 @@ msgstr "Integrantes"
msgid "labels.mention"
msgstr "Mencionar"
-#: src/app/main/ui/ds/controls/numeric_input.cljs:591
+#: src/app/main/ui/ds/controls/numeric_input.cljs:619
msgid "labels.mixed-values"
msgstr "Varios"
@@ -2272,19 +2310,19 @@ msgstr "Varios"
msgid "labels.new-password"
msgstr "Nueva contraseña"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "Siguiente"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "¡Ya estás al día! Nuevas notificaciones de comentarios aparecerán aquí."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "No hay invitaciones pendientes."
-#: src/app/main/ui/dashboard/team.cljs:761
+#: src/app/main/ui/dashboard/team.cljs:739
msgid "labels.no-invitations-gather-people"
msgstr "Reúne a tu gente y construid juntos grandes cosas."
@@ -2301,7 +2339,7 @@ msgstr "¡Uy!"
msgid "labels.notifications"
msgstr "Notificaciones"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "1 archivo"
@@ -2313,7 +2351,7 @@ msgid_plural "labels.num-of-frames"
msgstr[0] "1 tablero"
msgstr[1] "%s tableros"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "1 proyecto"
@@ -2332,7 +2370,7 @@ msgstr "Contraseña anterior"
msgid "labels.only-yours"
msgstr "Sólo los tuyos"
-#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:309, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:338
+#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:310, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:339
msgid "labels.options"
msgstr "Opciones"
@@ -2348,7 +2386,7 @@ msgstr "Otra (especifica)"
msgid "labels.other-short"
msgstr "Otra"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Propiedad"
@@ -2356,11 +2394,19 @@ msgstr "Propiedad"
msgid "labels.password"
msgstr "Contraseña"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "Pendiente"
-#: src/app/main/ui/dashboard/sidebar.cljs:750
+#: src/app/main/ui/dashboard/sidebar.cljs:878
+msgid "labels.penpot-changelog"
+msgstr "Registro de cambios de Penpot"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:804
+msgid "labels.penpot-hub"
+msgstr "Penpot hub"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:751
msgid "labels.pinned-projects"
msgstr "Proyectos fijados"
@@ -2384,11 +2430,15 @@ msgstr "Gestión de Productos"
msgid "labels.profile"
msgstr "Perfil"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Proyectos"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:644
+msgid "labels.reference"
+msgstr "Referencia"
+
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Notas de versión"
@@ -2402,11 +2452,11 @@ msgstr "Recargar archivo"
msgid "labels.remove"
msgstr "Quitar"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Eliminar integrante"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Renombrar"
@@ -2434,7 +2484,11 @@ msgstr "nueva respuesta"
msgid "labels.reply.thread"
msgstr "Responder"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:788
+msgid "labels.resend"
+msgstr "Reenviar"
+
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "Reenviar invitacion"
@@ -2446,15 +2500,15 @@ msgstr "Restaurar"
msgid "labels.retry"
msgstr "Reintentar"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Rol"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Guardar"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:715
+#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:730
msgid "labels.search"
msgstr "Buscar"
@@ -2482,14 +2536,18 @@ msgstr "Estamos en una operación de mantenimiento programado de nuestros sistem
msgid "labels.service-unavailable.main-message"
msgstr "El servicio no está disponible"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:79
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:75
msgid "labels.sets"
msgstr "Sets"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Configuración"
+#: src/app/main/ui/inspect/styles/style_box.cljs:27
+msgid "labels.shadow"
+msgstr "Sombra"
+
#: src/app/main/ui/viewer/header.cljs:204
msgid "labels.share"
msgstr "Compartir"
@@ -2498,7 +2556,7 @@ msgstr "Compartir"
msgid "labels.share-prototype"
msgstr "Compartir prototipo"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Bibliotecas"
@@ -2506,7 +2564,7 @@ msgstr "Bibliotecas"
msgid "labels.show"
msgstr "Mostrar"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Mostrar todos los comentarios"
@@ -2514,11 +2572,11 @@ msgstr "Mostrar todos los comentarios"
msgid "labels.show-comments-list"
msgstr "Mostrar lista de comentarios"
-#: src/app/main/ui/workspace/comments.cljs:67, src/app/main/ui/workspace/comments.cljs:139
+#: src/app/main/ui/workspace/comments.cljs:68, src/app/main/ui/workspace/comments.cljs:140
msgid "labels.show-mentions"
msgstr "Mostrar sólo tus menciones"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Mostrar sólo tus comentarios"
@@ -2526,7 +2584,7 @@ msgstr "Mostrar sólo tus comentarios"
msgid "labels.sketch"
msgstr "Sketch"
-#: src/app/main/ui/dashboard/sidebar.cljs:729
+#: src/app/main/ui/dashboard/sidebar.cljs:730
msgid "labels.sources"
msgstr "Recursos"
@@ -2534,14 +2592,30 @@ msgstr "Recursos"
msgid "labels.start"
msgstr "Comenzar"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Status"
+#: src/app/main/ui/inspect/styles/style_box.cljs:24, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:46
+msgid "labels.stroke"
+msgstr "Borde"
+
#: src/app/main/ui/onboarding/questions.cljs:87
msgid "labels.student-teacher"
msgstr "Estudiante o profesor"
+#: src/app/main/ui/inspect/right_sidebar.cljs:107, src/app/main/ui/inspect/styles.cljs:107
+msgid "labels.styles"
+msgstr "Estilos"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:33
+msgid "labels.svg"
+msgstr "SVG"
+
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:250
+msgid "labels.switch"
+msgstr "Intercambiar"
+
#: src/app/main/ui/onboarding/questions.cljs:256
#, unused
msgid "labels.team-leader"
@@ -2552,15 +2626,23 @@ msgstr "Líder de equipo"
msgid "labels.team-member"
msgstr "Miembro de equipo"
+#: src/app/main/ui/inspect/styles/style_box.cljs:25
+msgid "labels.text"
+msgstr "Texto"
+
#: src/app/main/ui/workspace/tokens/themes.cljs:36
msgid "labels.themes"
msgstr "Temas"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Tutoriales"
-#: src/app/main/data/workspace/tokens/errors.cljs:93
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1148
+msgid "labels.typography"
+msgstr "Tipografía"
+
+#: src/app/main/data/workspace/tokens/errors.cljs:101
msgid "labels.unknown-error"
msgstr "Error desconocido"
@@ -2588,15 +2670,27 @@ msgstr "Cargar fuente"
msgid "labels.uploading"
msgstr "Subiendo…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/inspect/right_sidebar.cljs:65, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:949, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:518
+msgid "labels.variant"
+msgstr "Variante"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:872
+msgid "labels.version-notes"
+msgstr "Notas versión %s"
+
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "Solo lectura"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Lector"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/inspect/styles/style_box.cljs:32
+msgid "labels.visibility"
+msgstr "Visibilidad"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Webhooks"
@@ -2604,11 +2698,11 @@ msgstr "Webhooks"
msgid "labels.write-new-comment"
msgstr "Escribir un nuevo comentario"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(tú)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "Tu cuenta"
@@ -2641,7 +2735,7 @@ msgstr "Diseña de forma flexible con controles de diseño similares a CSS."
#: src/app/main/ui/ds/product/loader.cljs:24
msgid "loader.tips.03.title"
-msgstr "Auto Layout como CSS"
+msgstr "Layouts como en CSS"
#: src/app/main/ui/ds/product/loader.cljs:27
msgid "loader.tips.04.message"
@@ -2703,23 +2797,23 @@ msgstr ""
msgid "loader.tips.10.title"
msgstr "Soporte de Plugins"
-#: src/app/main/ui/workspace/colorpicker.cljs:449, src/app/main/ui/workspace/colorpicker.cljs:450, src/app/main/ui/workspace/colorpicker.cljs:452
+#: src/app/main/ui/workspace/colorpicker.cljs:486, src/app/main/ui/workspace/colorpicker.cljs:487, src/app/main/ui/workspace/colorpicker.cljs:489
msgid "media.choose-image"
msgstr "Elegir imagen"
-#: src/app/main/ui/workspace/colorpicker.cljs:244
+#: src/app/main/ui/workspace/colorpicker.cljs:256
msgid "media.gradient"
msgstr "Gradiente"
-#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:44, src/app/main/ui/ds/utilities/swatch.cljs:57, src/app/main/ui/inspect/attributes/common.cljs:63, src/app/main/ui/workspace/colorpicker.cljs:246, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:251
+#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:45, src/app/main/ui/ds/utilities/swatch.cljs:58, src/app/main/ui/inspect/attributes/common.cljs:44, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:65, src/app/main/ui/workspace/colorpicker.cljs:258, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:395
msgid "media.image"
msgstr "Imagen"
-#: src/app/main/ui/inspect/attributes/common.cljs:74
+#: src/app/main/ui/inspect/attributes/common.cljs:55
msgid "media.image.short"
msgstr "img"
-#: src/app/main/ui/workspace/colorpicker.cljs:442
+#: src/app/main/ui/workspace/colorpicker.cljs:479
msgid "media.keep-aspect-ratio"
msgstr "Mantener la proporción"
@@ -2737,7 +2831,7 @@ msgstr "Cargando imagen…"
msgid "media.radial"
msgstr "Radial"
-#: src/app/main/ui/workspace/colorpicker.cljs:242
+#: src/app/main/ui/workspace/colorpicker.cljs:254
msgid "media.solid"
msgstr "Sólido"
@@ -2810,19 +2904,19 @@ msgstr "Crear token"
msgid "modals.create-access-token.title"
msgstr "Generar access token"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "Crear webhook"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "Crear webhook"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "Payload URL"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://example.com/postreceive"
@@ -2868,11 +2962,11 @@ msgstr ""
msgid "modals.delete-comment-thread.title"
msgstr "Eliminar conversación"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "¿Seguro que quieres borrar esta nota?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "Borrar nota"
@@ -2920,11 +3014,11 @@ msgstr ""
msgid "modals.delete-font.title"
msgstr "Eliminando fuente"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "¿Seguro que quieres borrar esta página?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Borrar página"
@@ -2970,29 +3064,29 @@ msgid_plural "modals.delete-shared-confirm.title"
msgstr[0] "Borrando archivo"
msgstr[1] "Borrando archivos"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Eliminar equipo"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"¿Seguro que quieres eliminar este equipo? Todos los proyectos y archivos "
"asociados con el equipo serán eliminados permamentemente."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Eliminando equipo"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Eliminando miembro"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "¿Seguro que quieres eliminar este integrante del equipo?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Eliminar integrante del equipo"
@@ -3006,57 +3100,57 @@ msgstr[1] ""
"Los elementos que hayan sido utilizados en esos archivos permanecerán allí "
"(¡ningún diseño se romperá!)."
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "Borrar webhook"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "¿Seguro que quieres borrar este webhook?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "Borrando webhook"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "Modificar webhook"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "Modificar webhook"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Enviar invitacion"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "Emails, separados por coma"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr ""
"Algunas direcciones de correo ya se encuentran entre los miembros. Estas "
"invitaciones no serán enviadas."
-#: src/app/main/ui/dashboard/team.cljs:220
+#: src/app/main/ui/dashboard/team.cljs:222
msgid "modals.invite-team-member.text"
msgstr ""
"Puedes invitar miembros al equipo para que puedan acceder a este fichero y "
"a todos los demás ficheros del equipo."
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "Invitar a miembros al equipo"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"Al ser la única persona integrante de este equipo, el equipo será eliminado "
"junto con sus proyectos y archivos."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "¿Seguro que quieres abandonar el equipo %s?"
@@ -3084,15 +3178,15 @@ msgstr "Selecciona un miembro a promocionar"
msgid "modals.leave-and-reassign.title"
msgstr "Antes de que abandones"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Abandonar el equipo"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "¿Seguro que quieres abandonar este equipo?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Abandonando el equipo"
@@ -3114,39 +3208,39 @@ msgid_plural "modals.move-shared-confirm.title"
msgstr[0] "Mover biblioteca"
msgstr[1] "Mover bibliotecas"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "Desplazamiento"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Transferir propiedad"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"Si transfieres la propiedad, tu rol cambiará a Administración, perdiendo "
"algunos permisos sobre este equipo. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr ""
"Tienes la propiedad de este equipo. ¿Seguro que quieres transferir la "
"propiedad del equipo a %s?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Nueva propiedad del equipo"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "Publicar"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "Tu biblioteca está vacía. ¿Seguro que quieres publicarla?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "Publicar biblioteca vacía"
@@ -3201,21 +3295,21 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Actualizar componentes en biblioteca"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Actualizar"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Cancelar"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"Vas a actualizar un componente en una biblioteca compartida. Esto puede "
"afectar a otros archivos que la usen."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Actualizar un componente en biblioteca"
@@ -3329,11 +3423,15 @@ msgstr ""
msgid "notifications.by-code.upgrade-version"
msgstr "Una nueva versión está disponible, por favor actualiza la página"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:825
+msgid "notifications.invitation-deleted"
+msgstr "Invitación eliminada con éxito"
+
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "Invitación enviada con éxito"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "Enlace de invitacion copiado"
@@ -3483,7 +3581,7 @@ msgstr ""
"No olvides incluir personas de desarrollo, diseño, gestión… la diversidad "
"suma :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "Invitar con el rol:"
@@ -3698,193 +3796,193 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "Ir al login"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "Desvincular"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "Varios"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:283
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:423
msgid "settings.remove-color"
msgstr "Eliminar color"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:288
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:428
msgid "settings.select-this-color"
msgstr "Seleccionar elementos que usan este estilo"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Básicos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "Panel"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Modo visualización"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Área de trabajo"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Alineamiento"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Editar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "Genérico"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "Genérico"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Menu principal"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "Modificar capas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Navegación"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Navegación"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Navegación"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Paneles"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Ruta"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Formas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "Textos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Herramientas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Añadir comentarios"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "Añadir nodo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "Alinear abajo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "Alinear al centro"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "Alinear al centro horizontalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "Alinear justificado"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "Alinear a la izquierda"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "Alinear a la derecha"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "Alinear arriba"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "Alinear al centro verticalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "Crear tablero desde la selección"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "Alternar negrita"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "Diferencia"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "Exclusión"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "Interescción"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "Unión"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "Enviar detrás"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Enviar al fondo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "Mover al frente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "Mover hacia adelante"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "Limpiar historial"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Copiar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
msgid "shortcuts.copy-link"
msgstr "Copiar enlace"
@@ -3893,275 +3991,275 @@ msgstr "Copiar enlace"
msgid "shortcuts.copy-props"
msgstr "Copiar propiedades"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
msgid "shortcuts.create-component-variant"
msgstr "Crear componente / variante"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "Crear nuevo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Cortar"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "Reducir zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Borrar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "Borrar nodo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "Desvincular componente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Curva"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "Elipse"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Tablero"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "Dibujar nodos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Ruta"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Rectángulo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Texto"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Duplicar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "Cancelar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "Exportar elementos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "Zoom abarcar todo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "Voltear horizontalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "Voltear verticalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "Decrementar el tamaño de fuente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "Incrementar el tamaño de fuente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "Ir a borradores"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "Ir a bibliotecas compartidas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Buscar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Agrupar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "Distribuir horizontalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "Mostrar/ocultar interfaz"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "Aumentar zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "Insertar imagen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "Alternar cursiva"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "Unir nodos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
msgid "shortcuts.line-through"
msgstr "Alternar tachado"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "Convertir en esquina"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "Convertir en curva"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "Máscara"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "Fusionar nodos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "Mover"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "Mover rápidamente hacia abajo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "Mover rápidamente hacia la izquierda"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "Mover rápidamente hacia la derecha"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "Mover rápidamente hacia arriba"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "Mover nodo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "Mover hacia abajo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "Mover hacia la izquierda"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "Mover hacia la derecha"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "Mover hacia arriba"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "Siguiente tablero"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "No hay resultados"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "Opacidad 100%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "Opacidad 10%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "Opacidad 20%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "Opacidad 30%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "Opacidad 40%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "Opacidad 50%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "Opacidad 60%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "Opacidad 70%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "Opacidad 80%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "Opacidad 90%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "Abrir selector de color"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "Comentarios"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "Ir al dashboard"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "Ir al inspector"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "Ir a interacciones"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "Ir al modo de visualización"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "Ir al área de trabajo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " o "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Pegar"
@@ -4175,191 +4273,191 @@ msgstr "Pegar propiedades"
msgid "shortcuts.plugins"
msgstr "Gestor de extensiones"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "Tablero anterior"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "Rehacer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
msgid "shortcuts.rename"
msgstr "Renombrar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "Reiniciar zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
msgid "shortcuts.scale"
msgstr "Escalado"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "Buscar atajos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "Seleccionar todo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
msgid "shortcuts.select-next"
msgstr "Seleccionar capa siguiente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
msgid "shortcuts.select-parent-layer"
msgstr "Seleccionar capa padre"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
msgid "shortcuts.select-prev"
msgstr "Seleccionar capa anterior"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "Separar nodos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "Mostrar rejilla a pixel"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "Mostrar atajos de teclado"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "Alinear nodos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "Activar alineación a rejilla de pixel"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "Comenzar edición"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "Comenzar medida"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "Terminar medida"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "Activar miniaturas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "Atajos de teclado"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "Alternar alineación"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "Mostrar/ocultar recursos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "Mostrar/ocultar paleta de colores"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "Mostrar/ocultar focus mode"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "Activar/desactivar pantalla completa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
msgid "shortcuts.toggle-guides"
msgstr "Mostrar/ocultar guías"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "Mostrar/ocultar histórico"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "Mostrar/ocultar capas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "Añadir/eliminar flex layout"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
msgid "shortcuts.toggle-layout-grid"
msgstr "Añadir/eliminar grid layout"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "Bloquear/Desbloquear"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "Bloquear/Desbloquear proporciones"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
msgid "shortcuts.toggle-rulers"
msgstr "Mostrar/ocultar reglas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
msgid "shortcuts.toggle-snap-guides"
msgstr "Alinear a las guías"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
msgid "shortcuts.toggle-snap-ruler-guide"
msgstr "Alinear a las guías de reglas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "Mostrar/ocultar paleta de textos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
msgid "shortcuts.toggle-theme"
msgstr "Cambiar tema"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "Mostrar/ocultar elemento"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "Alternar estilo de zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "Alternar subrayado"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Deshacer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Desagrupar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Deshacer máscara"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "Distribuir verticalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "Decrementar zoom a objetivo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "Incrementar zoom a objetivo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "Zoom a selección"
@@ -4468,7 +4566,7 @@ msgstr ""
msgid "subscription.dashboard.unlimited-members-extra-editors-cta-title"
msgstr "Invita a personas mientras estás en el plan Unlimited"
-#: src/app/main/ui/dashboard/sidebar.cljs:858
+#: src/app/main/ui/dashboard/sidebar.cljs:978
msgid "subscription.dashboard.upgrade-plan.power-up"
msgstr "Mejora"
@@ -4658,7 +4756,7 @@ msgstr "Factura mensual limitada en $175"
msgid "subscription.settings.unlimited.storage-benefit"
msgstr "25 GB de almacenamiento"
-#: src/app/main/ui/dashboard/subscription.cljs:147, src/app/main/ui/workspace/main_menu.cljs:933
+#: src/app/main/ui/dashboard/subscription.cljs:147, src/app/main/ui/workspace/main_menu.cljs:961
msgid "subscription.workspace.header.menu.option.power-up"
msgstr "Mejora tu plan"
@@ -4731,19 +4829,19 @@ msgstr "Contraseña - Penpot"
msgid "title.settings.profile"
msgstr "Perfil - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "Invitaciones - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "Integrantes - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Configuración - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "Webhooks - %s - Penpot"
@@ -4815,43 +4913,43 @@ msgstr "Mostrar interacciones al hacer click"
msgid "viewer.header.sitemap"
msgstr "Mapa del sitio"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "El último envío fue correcto."
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Alinear al centro (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "Distribuir espacio horizontal (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Alinear a la izquierda (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Alinear a la derecha (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Alinear abajo (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Alinear al centro (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "Distribuir espacio vertical (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Alinear arriba (%s)"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:163
+#: src/app/main/ui/workspace/sidebar/assets.cljs:172
msgid "workspace.assets.add-library"
msgstr "Añadir biblioteca"
@@ -4860,23 +4958,23 @@ msgstr "Añadir biblioteca"
msgid "workspace.assets.assets"
msgstr "Recursos"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "Todos"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Colores"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:493
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:497
msgid "workspace.assets.colors.add-color"
msgstr "Añadir color"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:80
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:81
msgid "workspace.assets.component-group-options"
msgstr "Opciones del grupo de componentes"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Componentes"
@@ -4884,25 +4982,25 @@ msgstr "Componentes"
msgid "workspace.assets.components.add-component"
msgstr "Añadir componente"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:176, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:535
+#: src/app/main/ui/workspace/sidebar/assets/components.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:547
msgid "workspace.assets.components.num-variants"
msgstr "%s Variantes"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "Crear un grupo"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr ""
"Tus elementos se renombrarán automáticamente a \"nombre grupo / nombre "
"elemento\""
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Borrar"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "Duplicar"
@@ -4910,11 +5008,11 @@ msgstr "Duplicar"
msgid "workspace.assets.duplicate-main"
msgstr "Duplicar principal"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Editar"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:177
+#: src/app/main/ui/workspace/sidebar/assets.cljs:186
msgid "workspace.assets.filter"
msgstr "Filtrar"
@@ -4923,27 +5021,27 @@ msgstr "Filtrar"
msgid "workspace.assets.graphics"
msgstr "Gráficos"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:576
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:190, src/app/main/ui/workspace/sidebar/assets/components.cljs:576
msgid "workspace.assets.grid-view"
msgstr "Ver como rejilla"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Agrupar"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "Nombre del grupo"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:572
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:191, src/app/main/ui/workspace/sidebar/assets/components.cljs:572
msgid "workspace.assets.list-view"
msgstr "Ver como lista"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "biblioteca local"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:168
+#: src/app/main/ui/workspace/sidebar/assets.cljs:177
msgid "workspace.assets.manage-library"
msgstr "Gestionar biblioteca"
@@ -4955,15 +5053,15 @@ msgstr "No se encontraron recursos"
msgid "workspace.assets.open-library"
msgstr "Abrir el fichero de la biblioteca"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Renombrar"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "Renombrar grupo"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "Buscar recursos"
@@ -4979,21 +5077,21 @@ msgstr[1] "%s elementos seleccionados"
msgid "workspace.assets.shared-library"
msgstr "Biblioteca compartida"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:237
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:235
msgid "workspace.assets.sidebar.components"
msgid_plural "workspace.assets.sidebar.components"
msgstr[0] "1 componente"
msgstr[1] "%s componentes"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:193
+#: src/app/main/ui/workspace/sidebar/assets.cljs:204
msgid "workspace.assets.sort"
msgstr "Ordenar"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Tipografías"
-#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:404
+#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:405
msgid "workspace.assets.typography.add-typography"
msgstr "Añadir tipografía"
@@ -5018,7 +5116,7 @@ msgstr "Interletrado"
msgid "workspace.assets.typography.line-height"
msgstr "Interlineado"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -5030,62 +5128,73 @@ msgstr "Estilos de texto"
msgid "workspace.assets.typography.text-transform"
msgstr "Transformar texto"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "Desagrupar"
-msgid "workspace.component.swap.loop-error"
-msgstr "Los componentes no pueden anidarse dentro de sí mismos"
+#: src/app/main/ui/workspace/colorpicker.cljs:431, src/app/main/ui/workspace/colorpicker.cljs:443
+msgid "workspace.colorpicker.color-tokens"
+msgstr "Tokens de color"
-#: src/app/main/ui/workspace/context_menu.cljs:791
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:464
+msgid "workspace.component.swap.loop-error"
+msgstr "Los componentes no pueden anidarse dentro de sí mismos."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:463
+msgid "workspace.component.switch.loop-error-multi"
+msgstr ""
+"Algunas copias no se han podido intercambiar. Los componentes no pueden "
+"anidarse dentro de sí mismos."
+
+#: src/app/main/ui/workspace/context_menu.cljs:794
msgid "workspace.context-menu.grid-cells.area"
msgstr "Crear area"
-#: src/app/main/ui/workspace/context_menu.cljs:794
+#: src/app/main/ui/workspace/context_menu.cljs:797
msgid "workspace.context-menu.grid-cells.create-board"
msgstr "Crear tablero"
-#: src/app/main/ui/workspace/context_menu.cljs:786
+#: src/app/main/ui/workspace/context_menu.cljs:789
msgid "workspace.context-menu.grid-cells.merge"
msgstr "Fusionar celdas"
-#: src/app/main/ui/workspace/context_menu.cljs:749
+#: src/app/main/ui/workspace/context_menu.cljs:752
msgid "workspace.context-menu.grid-track.column.add-after"
msgstr "Añadir 1 columna a la derecha"
-#: src/app/main/ui/workspace/context_menu.cljs:748
+#: src/app/main/ui/workspace/context_menu.cljs:751
msgid "workspace.context-menu.grid-track.column.add-before"
msgstr "Añadir 1 columna a la izquierda"
-#: src/app/main/ui/workspace/context_menu.cljs:750
+#: src/app/main/ui/workspace/context_menu.cljs:753
msgid "workspace.context-menu.grid-track.column.delete"
msgstr "Borrar columna"
-#: src/app/main/ui/workspace/context_menu.cljs:751
+#: src/app/main/ui/workspace/context_menu.cljs:754
msgid "workspace.context-menu.grid-track.column.delete-shapes"
msgstr "Borrar columna con el contenido"
-#: src/app/main/ui/workspace/context_menu.cljs:747
+#: src/app/main/ui/workspace/context_menu.cljs:750
msgid "workspace.context-menu.grid-track.column.duplicate"
msgstr "Duplicar columna"
-#: src/app/main/ui/workspace/context_menu.cljs:756
+#: src/app/main/ui/workspace/context_menu.cljs:759
msgid "workspace.context-menu.grid-track.row.add-after"
msgstr "Añadir 1 fila debajo"
-#: src/app/main/ui/workspace/context_menu.cljs:755
+#: src/app/main/ui/workspace/context_menu.cljs:758
msgid "workspace.context-menu.grid-track.row.add-before"
msgstr "Añadir 1 fila encima"
-#: src/app/main/ui/workspace/context_menu.cljs:757
+#: src/app/main/ui/workspace/context_menu.cljs:760
msgid "workspace.context-menu.grid-track.row.delete"
msgstr "Borrar fila"
-#: src/app/main/ui/workspace/context_menu.cljs:758
+#: src/app/main/ui/workspace/context_menu.cljs:761
msgid "workspace.context-menu.grid-track.row.delete-shapes"
msgstr "Borrar fila con el contenido"
-#: src/app/main/ui/workspace/context_menu.cljs:754
+#: src/app/main/ui/workspace/context_menu.cljs:757
msgid "workspace.context-menu.grid-track.row.duplicate"
msgstr "Duplicar fila"
@@ -5093,7 +5202,7 @@ msgstr "Duplicar fila"
msgid "workspace.focus.focus-mode"
msgstr "Modo foco"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "Desactivar modo foco"
@@ -5113,11 +5222,11 @@ msgstr "Degradado lineal"
msgid "workspace.gradients.radial"
msgstr "Degradado radial"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "Desactivar alineamiento dinámico"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "Desactivar escala proporcional"
@@ -5126,23 +5235,23 @@ msgstr "Desactivar escala proporcional"
msgid "workspace.header.menu.disable-scale-text"
msgstr "Desactivar escalar texto"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "Desactivar alinear a las guias"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "Desactivar ajuste al pixel"
-#: src/app/main/ui/workspace/main_menu.cljs:215
+#: src/app/main/ui/workspace/main_menu.cljs:243
msgid "workspace.header.menu.disable-snap-ruler-guides"
msgstr "Desactivar alinear a las guias de reglas"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "Activar alineamiento dinámico"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "Activar escala proporcional"
@@ -5151,111 +5260,111 @@ msgstr "Activar escala proporcional"
msgid "workspace.header.menu.enable-scale-text"
msgstr "Activar escalar texto"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "Alinear a las guias"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "Activar ajuste al pixel"
-#: src/app/main/ui/workspace/main_menu.cljs:216
+#: src/app/main/ui/workspace/main_menu.cljs:244
msgid "workspace.header.menu.enable-snap-ruler-guides"
msgstr "Alinear a las guias de reglas"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "Ocultar nombres de tableros"
-#: src/app/main/ui/workspace/main_menu.cljs:348
+#: src/app/main/ui/workspace/main_menu.cljs:376
msgid "workspace.header.menu.hide-guides"
msgstr "Ocultar guías"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "Ocultar paleta de colores"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "Ocultar rejilla de pixeles"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "Ocultar reglas"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "Ocultar paleta de textos"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Editar"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "Archivo"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "Ayuda e información"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "Preferencias"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "Ver"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "Rehacer"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "Seleccionar todo"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "Mostrar nombres de tableros"
-#: src/app/main/ui/workspace/main_menu.cljs:349
+#: src/app/main/ui/workspace/main_menu.cljs:377
msgid "workspace.header.menu.show-guides"
msgstr "Mostrar guías"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "Mostrar paleta de colores"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "Mostrar rejilla de pixeles"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Mostrar reglas"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "Mostrar paleta de textos"
-#: src/app/main/ui/workspace/main_menu.cljs:288
+#: src/app/main/ui/workspace/main_menu.cljs:316
msgid "workspace.header.menu.toggle-dark-theme"
msgstr "Cambiar a tema oscuro"
-#: src/app/main/ui/workspace/main_menu.cljs:286, src/app/main/ui/workspace/main_menu.cljs:289
+#: src/app/main/ui/workspace/main_menu.cljs:314, src/app/main/ui/workspace/main_menu.cljs:317
msgid "workspace.header.menu.toggle-light-theme"
msgstr "Cambiar a tema claro"
-#: src/app/main/ui/workspace/main_menu.cljs:287
+#: src/app/main/ui/workspace/main_menu.cljs:315
msgid "workspace.header.menu.toggle-system-theme"
msgstr "Cambiar a tema del sistema"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "Deshacer"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Restablecer"
@@ -5271,7 +5380,7 @@ msgstr "Guardado"
msgid "workspace.header.saving"
msgstr "Guardando"
-#: src/app/main/ui/workspace/right_header.cljs:239
+#: src/app/main/ui/workspace/right_header.cljs:240
msgid "workspace.header.share"
msgstr "Compartir"
@@ -5280,11 +5389,11 @@ msgstr "Compartir"
msgid "workspace.header.unsaved"
msgstr "Cambios sin guardar"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "Modo de visualización (%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "Zoom"
@@ -5296,7 +5405,7 @@ msgstr "Escalar para rellenar"
msgid "workspace.header.zoom-fit"
msgstr "Escalar para ajustar"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "Zoom abarcar todo"
@@ -5304,43 +5413,43 @@ msgstr "Zoom abarcar todo"
msgid "workspace.header.zoom-full-screen"
msgstr "Pantalla completa"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "Zoom a selección"
-#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:621
msgid "workspace.layout_grid.editor.options.edit-grid"
msgstr "Editar rejilla"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1300
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1301
msgid "workspace.layout_grid.editor.options.exit"
msgstr "Salir"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:429, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:435
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:430, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:436
msgid "workspace.layout_grid.editor.padding.bottom"
msgstr "Padding inferior"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:491
msgid "workspace.layout_grid.editor.padding.expand"
msgstr "Mostrar el padding a 4 lados"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:354, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:355, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:362
msgid "workspace.layout_grid.editor.padding.horizontal"
msgstr "Padding horizontal"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:444, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:450
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:451
msgid "workspace.layout_grid.editor.padding.left"
msgstr "Padding izquierdo"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:414, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:420
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:421
msgid "workspace.layout_grid.editor.padding.right"
msgstr "Padding derecho"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:406
msgid "workspace.layout_grid.editor.padding.top"
msgstr "Padding superior"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:340, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:341, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:347
msgid "workspace.layout_grid.editor.padding.vertical"
msgstr "Padding vertical"
@@ -5356,7 +5465,7 @@ msgstr "Hecho"
msgid "workspace.layout_grid.editor.top-bar.locate"
msgstr "Mostrar"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1326
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1327
msgid "workspace.layout_grid.editor.top-bar.locate.tooltip"
msgstr "Mostrar grid layout"
@@ -5365,9 +5474,11 @@ msgstr "Mostrar grid layout"
msgid "workspace.libraries.add"
msgstr "Añadir"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
+#: src/app/main/ui/workspace/libraries.cljs:107, src/app/main/ui/workspace/libraries.cljs:133
msgid "workspace.libraries.colors"
-msgstr "%s colores"
+msgid_plural "workspace.libraries.colors"
+msgstr[0] "1 color"
+msgstr[1] "%s colores"
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
@@ -5395,43 +5506,51 @@ msgstr "Colores recientes"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "RGB Complementario"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Guardar estilo de color"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
+#: src/app/main/ui/workspace/libraries.cljs:101, src/app/main/ui/workspace/libraries.cljs:125
msgid "workspace.libraries.components"
-msgstr "%s componentes"
+msgid_plural "workspace.libraries.components"
+msgstr[0] "1 componente"
+msgstr[1] "%s componentes"
-#: src/app/main/ui/workspace/libraries.cljs:371
+#: src/app/main/ui/workspace/libraries.cljs:349
+msgid "workspace.libraries.connected-to"
+msgstr "Conectada con"
+
+#: src/app/main/ui/workspace/libraries.cljs:404
msgid "workspace.libraries.empty.add-some"
msgstr "O añadir algunas de éstas para probar:"
-#: src/app/main/ui/workspace/libraries.cljs:365
+#: src/app/main/ui/workspace/libraries.cljs:398
msgid "workspace.libraries.empty.no-libraries"
msgstr "No hay Bibliotecas Compartidas en tu equipo, puedes buscar"
-#: src/app/main/ui/workspace/libraries.cljs:369
+#: src/app/main/ui/workspace/libraries.cljs:402
msgid "workspace.libraries.empty.some-templates"
msgstr "algunas plantillas aquí"
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Biblioteca del archivo"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
+#: src/app/main/ui/workspace/libraries.cljs:104, src/app/main/ui/workspace/libraries.cljs:129
msgid "workspace.libraries.graphics"
-msgstr "%s gráficos"
+msgid_plural "workspace.libraries.graphics"
+msgstr[0] "1 gráfico"
+msgstr[1] "%s gráficos"
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "BIBLIOTECAS EN ESTE ARCHIVO"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "BIBLIOTECAS"
@@ -5440,11 +5559,11 @@ msgstr "BIBLIOTECAS"
msgid "workspace.libraries.library"
msgstr "BIBLIOTECA"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "ACTUALIZACIONES DE BIBLIOTECAS"
-#: src/app/main/ui/workspace/libraries.cljs:360
+#: src/app/main/ui/workspace/libraries.cljs:393
msgid "workspace.libraries.loading"
msgstr "Cargando…"
@@ -5453,51 +5572,53 @@ msgstr "Cargando…"
msgid "workspace.libraries.more-templates"
msgstr "Puedes buscar "
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "No hay bibliotecas que necesiten ser actualizadas"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "No se encuentra “%s“"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "Buscar bibliotecas compartidas"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "BIBLIOTECAS COMPARTIDAS"
-#: src/app/main/ui/workspace/libraries.cljs:352
+#: src/app/main/ui/workspace/libraries.cljs:385
msgid "workspace.libraries.shared-library-btn"
msgstr "Conectar biblioteca"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Varias tipografías"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Desvincular todas las tipografías"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
+#: src/app/main/ui/workspace/libraries.cljs:110, src/app/main/ui/workspace/libraries.cljs:137
msgid "workspace.libraries.typography"
-msgstr "%s tipografías"
+msgid_plural "workspace.libraries.typography"
+msgstr[0] "1 tipografía"
+msgstr[1] "%s tipografías"
-#: src/app/main/ui/workspace/libraries.cljs:323
+#: src/app/main/ui/workspace/libraries.cljs:354
msgid "workspace.libraries.unlink-library-btn"
msgstr "Desconectar biblioteca"
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Actualizar"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "ver todos los cambios"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "ACTUALIZACIONES"
@@ -5505,31 +5626,31 @@ msgstr "ACTUALIZACIONES"
msgid "workspace.notification-pill.detail"
msgstr "Detalles"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "Pulsa el botón + para añadir interacciones."
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:96
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:97
msgid "workspace.options.blur-options.add-blur"
msgstr "Añadir desenfoque"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:117
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:118
msgid "workspace.options.blur-options.remove-blur"
msgstr "Eliminar desenfoque"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Desenfoque"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "Desenfoque del grupo"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "Desenfoque de la selección"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:114
msgid "workspace.options.blur-options.toggle-blur"
msgstr "Mostrar/ocultar desenfoque"
@@ -5537,117 +5658,117 @@ msgstr "Mostrar/ocultar desenfoque"
msgid "workspace.options.canvas-background"
msgstr "Color de fondo"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "Truncar contenido"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Componente"
-#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:193
+#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:196
msgid "workspace.options.component.annotation"
msgstr "Nota"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "Copia"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:185
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:188
msgid "workspace.options.component.create-annotation"
msgstr "Crear una nota"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "Editar una nota"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "Principal"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:706
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:721
msgid "workspace.options.component.swap"
msgstr "Intercambiar componente"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:765
msgid "workspace.options.component.swap.empty"
msgstr "Aún no hay recursos en esta biblioteca"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:973
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:993
msgid "workspace.options.component.unlinked"
msgstr "Desvinculado"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:512
msgid "workspace.options.component.variant.duplicated.copy.locate"
msgstr "Localizar variantes en conflicto"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:496
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:509
msgid "workspace.options.component.variant.duplicated.copy.title"
msgstr ""
"Este componente tiene variantes en conflicto. Comprueba que cada variante "
"tenga un conjunto único de propiedades y valores."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1246
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1281
msgid "workspace.options.component.variant.duplicated.group.locate"
msgstr "Localizar variantes duplicadas"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1243
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1278
msgid "workspace.options.component.variant.duplicated.group.title"
msgstr "Algunas variantes tienen propiedades y valores idénticos"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:267
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:268
msgid "workspace.options.component.variant.duplicated.single.all"
msgstr ""
"Estas variantes tienen propiedades y valores idénticos. Ajusta los valores "
"para que puedan ser encontradas"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:264
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:265
msgid "workspace.options.component.variant.duplicated.single.one"
msgstr ""
"Esta variante tiene propiedades y valores idénticos a los de otra variante. "
"Ajusta los valores para que puedan ser encontradas"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:270
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:271
msgid "workspace.options.component.variant.duplicated.single.some"
msgstr ""
"Algunas de estas variantes tienen propiedades y valores idénticos. Ajusta "
"los valores para que puedan ser encontradas"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:486
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:499
msgid "workspace.options.component.variant.malformed.copy"
msgstr ""
"Este componente tiene variantes con nombres no válidos. Asegúrate de que "
"cada variante siga la estructura correcta."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1236
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1271
msgid "workspace.options.component.variant.malformed.group.locate"
msgstr "Localizar variantes no válidas"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1233
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1268
msgid "workspace.options.component.variant.malformed.group.title"
msgstr "Algunas variantes tienen nombres no válidos"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:489
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:502
msgid "workspace.options.component.variant.malformed.locate"
msgstr "Localizar variantes inválidas"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:252
msgid "workspace.options.component.variant.malformed.single.all"
msgstr "Estas variantes tienen nombres no válidos."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:247
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:249
msgid "workspace.options.component.variant.malformed.single.one"
msgstr "Esta variante tiene un nombre no válido."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:253
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:255
msgid "workspace.options.component.variant.malformed.single.some"
msgstr "Algunas de estas variantes tienen nombres no válidos."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:390
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:391
msgid "workspace.options.component.variant.malformed.structure.example"
msgstr "[propiedad]=[valor], [propiedad]=[valor]"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:389
msgid "workspace.options.component.variant.malformed.structure.title"
msgstr "Prueba a utilizar la siguiente estructura:"
@@ -5691,7 +5812,7 @@ msgstr "Arriba"
msgid "workspace.options.constraints.topbottom"
msgstr "Arriba y Abajo"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Diseño"
@@ -5704,21 +5825,21 @@ msgstr "Exportar"
msgid "workspace.options.export-multiple"
msgstr "Exportar selección"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "Exportar 1 elemento"
msgstr[1] "Exportar %s elementos"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:188
+#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:214
msgid "workspace.options.export.add-export"
msgstr "Añadir exportación"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:235
+#: 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 "Eliminar exportación"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Sufijo"
@@ -5726,7 +5847,7 @@ msgstr "Sufijo"
msgid "workspace.options.exporting-complete"
msgstr "Exportación completa"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "Exportando…"
@@ -5738,27 +5859,27 @@ msgstr "Exportación fallida"
msgid "workspace.options.exporting-object-slow"
msgstr "Exportación lenta"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Relleno"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:194
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:234
msgid "workspace.options.fill.add-fill"
msgstr "Añadir relleno"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:208
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:248
msgid "workspace.options.fill.remove-fill"
msgstr "Eliminar relleno"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:392
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:474
msgid "workspace.options.fit-content"
msgstr "Redimensionar para ajustar al contenido"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "Añadir inicio de flujo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:178
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:179
msgid "workspace.options.flows.flow"
msgstr "Flujo"
@@ -5767,19 +5888,19 @@ msgstr "Flujo"
msgid "workspace.options.flows.flow-start"
msgstr "Inicio de flujo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "Inicios de flujo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:155
msgid "workspace.options.flows.remove-flow"
msgstr "Eliminar flujo"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Automático"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "Columnas"
@@ -5788,7 +5909,7 @@ msgstr "Columnas"
msgid "workspace.options.grid.grid-title"
msgstr "Rejilla"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Color"
@@ -5797,15 +5918,15 @@ msgstr "Color"
msgid "workspace.options.grid.params.columns"
msgstr "Columnas"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "Espaciado"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Altura"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Margen"
@@ -5814,7 +5935,7 @@ msgstr "Margen"
msgid "workspace.options.grid.params.rows"
msgstr "Filas"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "Establecer valor por defecto"
@@ -5828,159 +5949,159 @@ msgstr "Tamaño"
msgid "workspace.options.grid.params.type"
msgstr "Tipo"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Abajo"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Centro"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Izquierda"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Derecha"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "Estirar"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "Arriba"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "Usar valor por defecto"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Ancho"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Filas"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "Cuadros"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Relleno de grupo"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Borde de grupo"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:326
msgid "workspace.options.guides.add-guide"
msgstr "Añadir guía"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:187
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:188
msgid "workspace.options.guides.remove-guide"
msgstr "Eliminar guía"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:320
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
msgid "workspace.options.guides.title"
msgstr "Guías"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:183
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:184
msgid "workspace.options.guides.toggle-guide"
msgstr "Mostrar/ocultar guía"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "Altura"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "Inspeccionar"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "Acción"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "Tiempo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "Animación"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "Disolver"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "Ninguno"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "Empujar"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "Deslizar"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "automático"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "Añadir sombreado de fondo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "Cerrar al pulsar fuera"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "Cerrar superposición"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "Cerrar superposición: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "Tiempo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "Destino"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "Duración"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "Easing"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "Ease"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "Ease in"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "Ease in out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "Ease out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "Linear"
@@ -5989,47 +6110,47 @@ msgstr "Linear"
msgid "workspace.options.interaction-in"
msgstr "Dentro"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "Pasar encima"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "Retirar encima"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "ms"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "Navegar a"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "Navegar a: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(sin definir)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "Offset effect"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "En click"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "Superposición"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "Superposición: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "Abrir URL"
@@ -6038,87 +6159,87 @@ msgstr "Abrir URL"
msgid "workspace.options.interaction-out"
msgstr "Fuera"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "Abajo centro"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "Abajo izquierda"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "Abajo derecha"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "Centro"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "Manual"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "Arriba centro"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "Arriba izquierda"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "Arriba derecha"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "Posición"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "Conservar posición de desplazamiento"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "Pantalla anterior"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "Relativo a"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "mismo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "Alternar superpos."
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "Alternar superpos.: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "Disparador"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "Mientras pasa encima"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "Mientras pulsa"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "Interacciones"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:735
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:736
msgid "workspace.options.interactions.add-interaction"
msgstr "Añadir interacción"
@@ -6127,67 +6248,67 @@ msgstr "Añadir interacción"
msgid "workspace.options.interactions.remove-interaction"
msgstr "Eliminar interacción"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "Color"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "Color más oscuro"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "Color más suave"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "Oscurecer"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "Diferencia"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "Exclusión"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Luz fuerte"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Tono"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Aclarar"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "Luminosidad"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "Multiplicar"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "Normal"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "Superponer"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "Saturación"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Trama"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "Luz suave"
@@ -6206,7 +6327,7 @@ msgstr "Capas de grupo"
msgid "workspace.options.layer-options.title.multiple"
msgstr "Capas seleccionadas"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:202
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:207, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:213
msgid "workspace.options.layer-options.toggle-layer"
msgstr "Mostrar/ocultar capa"
@@ -6215,19 +6336,19 @@ msgstr "Mostrar/ocultar capa"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "Opciones avanzadas"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "Altura.Max"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "Ancho.Max"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "Altura.Min"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "Ancho.Min"
@@ -6341,15 +6462,15 @@ msgstr "espaciar"
msgid "workspace.options.layout.top"
msgstr "Arriba"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "Más colores"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "Más colores de la biblioteca"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "Opacidad"
@@ -6358,35 +6479,35 @@ msgstr "Opacidad"
msgid "workspace.options.position"
msgstr "Posición"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "Prototipo"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "Radio"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "Abajo izquierda"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "Abajo derecha"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "Arriba izquierda"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "Arriba derecha"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:152
msgid "workspace.options.radius.hide-all-corners"
msgstr "Colapsar radios individuales"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:136
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:153
msgid "workspace.options.radius.show-single-corners"
msgstr "Mostrar radios individuales"
@@ -6398,7 +6519,7 @@ msgstr "Recientes"
msgid "workspace.options.retry"
msgstr "Reintentar"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "Rotación"
@@ -6406,33 +6527,33 @@ msgstr "Rotación"
msgid "workspace.options.search-font"
msgstr "Buscar fuente"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr ""
"Selecciona una figura, tablero o grupo para arrastrar una conexión a otro "
"tablero."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "Colores seleccionados"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "Relleno de selección"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "Borde de selección"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:341
msgid "workspace.options.shadow-options.add-shadow"
msgstr "Añadir sombra"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "Desenfoque"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "Color de sombra"
@@ -6444,63 +6565,64 @@ msgstr "Sombra arrojada"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "Sombra interior"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:348
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:183, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:354
msgid "workspace.options.shadow-options.remove-shadow"
msgstr "Eliminar sombra"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "Difusión"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "Sombra"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "Sombra del grupo"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "Sombras de la seleccíón"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:174
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:179
msgid "workspace.options.shadow-options.toggle-shadow"
msgstr "Mostrar/ocultar sombra"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "Mostrar al exportar"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "Mostrar en modo visualización"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "Tamaño"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "Tamaños predefinidos"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:534
msgid "workspace.options.size.lock"
msgstr "Bloquear proporción"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:534
msgid "workspace.options.size.unlock"
msgstr "Desbloquear proporción"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "Borde"
@@ -6509,7 +6631,7 @@ msgstr "Borde"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "Marcador círculo"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "Círculo"
@@ -6518,7 +6640,7 @@ msgstr "Círculo"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "Marcador diamante"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "Diamante"
@@ -6527,19 +6649,19 @@ msgstr "Diamante"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "Flecha de línea"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "Flecha"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "Ninguno"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "Redondo"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "Cuadrado"
@@ -6548,7 +6670,7 @@ msgstr "Cuadrado"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "Marcador cuadrado"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "Rectángulo"
@@ -6557,83 +6679,83 @@ msgstr "Rectángulo"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "Flecha triángulo"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "Triángulo"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "Color del trazo"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "Ancho del trazo"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:180
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:189
msgid "workspace.options.stroke.add-stroke"
msgstr "Añadir color de borde"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "Centro"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "Rayado"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "Punteado"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "Interior"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "Mezclado"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "Exterior"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:193
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:202
msgid "workspace.options.stroke.remove-stroke"
msgstr "Eliminar borde"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "Sólido"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "Alinear abajo"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "Alinear al centro"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "Alinear arriba"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "LTR"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "RTL"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "Alto automático"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "Ancho automático"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "Fijo"
@@ -6655,35 +6777,35 @@ msgstr "Minúsculas"
msgid "workspace.options.text-options.none"
msgstr "Nada"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "Tachado (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "Alinear al centro"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "Justificar"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "Alinear a la izquierda"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "Alinear a la derecha"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "Texto"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "Texto de grupo"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "Texto de selección"
@@ -6692,7 +6814,7 @@ msgstr "Texto de selección"
msgid "workspace.options.text-options.titlecase"
msgstr "Título"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "Subrayado (%s)"
@@ -6701,19 +6823,19 @@ msgstr "Subrayado (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "Mayúsculas"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr "Usa el botón de play de la cabecera para arrancar la vista de prototipo."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "Ancho"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "eje X"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "eje Y"
@@ -6757,82 +6879,82 @@ msgstr "Separar nodos (%s)"
msgid "workspace.path.actions.snap-nodes"
msgstr "Alinear nodos (%s)"
-#: src/app/main/ui/workspace/plugins.cljs:83
+#: src/app/main/ui/workspace/plugins.cljs:84
msgid "workspace.plugins.button-open"
msgstr "Abrir"
-#: src/app/main/ui/workspace/plugins.cljs:197
+#: src/app/main/ui/workspace/plugins.cljs:198
#, markdown
msgid "workspace.plugins.discover"
msgstr "Descubre [más extensiones](%s)"
-#: src/app/main/ui/workspace/plugins.cljs:204
+#: src/app/main/ui/workspace/plugins.cljs:205
msgid "workspace.plugins.empty-plugins"
msgstr "No se encuentran extensiones"
-#: src/app/main/ui/workspace/plugins.cljs:191
+#: src/app/main/ui/workspace/plugins.cljs:192
msgid "workspace.plugins.error.manifest"
msgstr "El manifiesto de la expansión es incorrecto."
-#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:755, src/app/main/ui/workspace/plugins.cljs:82
+#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:783, src/app/main/ui/workspace/plugins.cljs:83
msgid "workspace.plugins.error.need-editor"
msgstr "Debes ser un editor para usar este plugin"
-#: src/app/main/ui/workspace/plugins.cljs:187
+#: src/app/main/ui/workspace/plugins.cljs:188
msgid "workspace.plugins.error.url"
msgstr "La extensión no existe o la url no es correcta."
-#: src/app/main/ui/workspace/plugins.cljs:183
+#: src/app/main/ui/workspace/plugins.cljs:184
msgid "workspace.plugins.install"
msgstr "Instalar"
-#: src/app/main/ui/workspace/plugins.cljs:213
+#: src/app/main/ui/workspace/plugins.cljs:214
msgid "workspace.plugins.installed-plugins"
msgstr "Extensiones instaladas"
-#: src/app/main/ui/workspace/main_menu.cljs:710
+#: src/app/main/ui/workspace/main_menu.cljs:738
msgid "workspace.plugins.menu.plugins-manager"
msgstr "Gestor de extensiones"
-#: src/app/main/ui/workspace/main_menu.cljs:906
+#: src/app/main/ui/workspace/main_menu.cljs:934
msgid "workspace.plugins.menu.title"
msgstr "Extensiones"
-#: src/app/main/ui/workspace/plugins.cljs:374
+#: src/app/main/ui/workspace/plugins.cljs:375
msgid "workspace.plugins.permissions-update.title"
msgstr "EXTENSIÓN ACTUALIZADA"
-#: src/app/main/ui/workspace/plugins.cljs:378
+#: src/app/main/ui/workspace/plugins.cljs:379
msgid "workspace.plugins.permissions-update.warning"
msgstr ""
"La extensión ha cambiado desde la última vez que la abriste. Ahora quiere "
"acceder a:"
-#: src/app/main/ui/workspace/plugins.cljs:278
+#: src/app/main/ui/workspace/plugins.cljs:279
msgid "workspace.plugins.permissions.allow-download"
msgstr "Comenzar descargas de ficheros."
-#: src/app/main/ui/workspace/plugins.cljs:285
+#: src/app/main/ui/workspace/plugins.cljs:286
msgid "workspace.plugins.permissions.allow-localstorage"
msgstr "Guardar datos en el navegador."
-#: src/app/main/ui/workspace/plugins.cljs:271
+#: src/app/main/ui/workspace/plugins.cljs:272
msgid "workspace.plugins.permissions.comment-read"
msgstr "Leer tus comentarios y respuestas."
-#: src/app/main/ui/workspace/plugins.cljs:265
+#: src/app/main/ui/workspace/plugins.cljs:266
msgid "workspace.plugins.permissions.comment-write"
msgstr "Leer y modificar tus comentarios y responder en tu nombre."
-#: src/app/main/ui/workspace/plugins.cljs:238
+#: src/app/main/ui/workspace/plugins.cljs:239
msgid "workspace.plugins.permissions.content-read"
msgstr "Leer el contenido de sus archivos."
-#: src/app/main/ui/workspace/plugins.cljs:232
+#: src/app/main/ui/workspace/plugins.cljs:233
msgid "workspace.plugins.permissions.content-write"
msgstr "Leer y modificar el contenido de sus archivos."
-#: src/app/main/ui/workspace/plugins.cljs:325
+#: src/app/main/ui/workspace/plugins.cljs:326
msgid "workspace.plugins.permissions.disclaimer"
msgstr ""
"Ten en cuenta que las extensiones están desarrolladas por terceros, "
@@ -6840,31 +6962,31 @@ msgstr ""
"seguridad es importante para nosotros. Si tienes cualquier duda, contacta "
"con soporte."
-#: src/app/main/ui/workspace/plugins.cljs:258
+#: src/app/main/ui/workspace/plugins.cljs:259
msgid "workspace.plugins.permissions.library-read"
msgstr "Leer la información de sus bibliotecas y recursos."
-#: src/app/main/ui/workspace/plugins.cljs:252
+#: src/app/main/ui/workspace/plugins.cljs:253
msgid "workspace.plugins.permissions.library-write"
msgstr "Leer y modificar la información de sus bibliotecas y recursos."
-#: src/app/main/ui/workspace/plugins.cljs:318
+#: src/app/main/ui/workspace/plugins.cljs:319
msgid "workspace.plugins.permissions.title"
msgstr "LA EXTENSIÓN '%s' SOLICITA PERMISO PARA ACCEDER:"
-#: src/app/main/ui/workspace/plugins.cljs:245
+#: src/app/main/ui/workspace/plugins.cljs:246
msgid "workspace.plugins.permissions.user-read"
msgstr "Leer la información del usuario actual."
-#: src/app/main/ui/workspace/plugins.cljs:209
+#: src/app/main/ui/workspace/plugins.cljs:210
msgid "workspace.plugins.plugin-list-link"
msgstr "Lista de extensiones"
-#: src/app/main/ui/workspace/plugins.cljs:86
+#: src/app/main/ui/workspace/plugins.cljs:87
msgid "workspace.plugins.remove-plugin"
msgstr "Eliminar extensión"
-#: src/app/main/ui/workspace/plugins.cljs:178
+#: src/app/main/ui/workspace/plugins.cljs:179
msgid "workspace.plugins.search-placeholder"
msgstr "Intruduzca URL de la extensión"
@@ -6872,26 +6994,26 @@ msgstr "Intruduzca URL de la extensión"
msgid "workspace.plugins.success"
msgstr "Extensión cargada correctamente."
-#: src/app/main/ui/workspace/plugins.cljs:172
+#: src/app/main/ui/workspace/plugins.cljs:173
msgid "workspace.plugins.title"
msgstr "Extensiones"
-#: src/app/main/ui/workspace/plugins.cljs:438
+#: src/app/main/ui/workspace/plugins.cljs:439
msgid "workspace.plugins.try-out.cancel"
msgstr "AHORA NO"
-#: src/app/main/ui/workspace/plugins.cljs:431
+#: src/app/main/ui/workspace/plugins.cljs:432
msgid "workspace.plugins.try-out.message"
msgstr ""
"¿Quieres echar un vistazo?. Crearemos un nuevo borrador en tu equipo "
"actual. (Si no, puedes encontrar los plugins instalados en cualquier "
"fichero.)"
-#: src/app/main/ui/workspace/plugins.cljs:427
+#: src/app/main/ui/workspace/plugins.cljs:428
msgid "workspace.plugins.try-out.title"
msgstr "¡LA EXTENSIÓN '%s' HA SIDO INSTALADA PARA TU USUARIO!"
-#: src/app/main/ui/workspace/plugins.cljs:444
+#: src/app/main/ui/workspace/plugins.cljs:445
msgid "workspace.plugins.try-out.try"
msgstr "PROBAR PLUGIN"
@@ -6903,15 +7025,15 @@ msgstr "Añadir flex layout"
msgid "workspace.shape.menu.add-grid"
msgstr "Añadir grid layout"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1015, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1039
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1016, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1040
msgid "workspace.shape.menu.add-layout"
msgstr "Añadir layout"
-#: src/app/main/ui/workspace/context_menu.cljs:608, src/app/main/ui/workspace/sidebar/assets/common.cljs:505, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:941, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1161
+#: src/app/main/ui/workspace/context_menu.cljs:610, src/app/main/ui/workspace/sidebar/assets/common.cljs:514, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:961, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1113, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1195
msgid "workspace.shape.menu.add-variant"
msgstr "Crear variante"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:509, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:990, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1082, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1198
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:518, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1010, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1115, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1233
msgid "workspace.shape.menu.add-variant-property"
msgstr "Añadir nueva propiedad"
@@ -6923,11 +7045,11 @@ msgstr "Enviar al fondo"
msgid "workspace.shape.menu.backward"
msgstr "Enviar atrás"
-#: src/app/main/ui/workspace/context_menu.cljs:615, src/app/main/ui/workspace/sidebar/assets/components.cljs:638, src/app/main/ui/workspace/sidebar/assets/groups.cljs:74, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1021
+#: src/app/main/ui/workspace/context_menu.cljs:617, src/app/main/ui/workspace/sidebar/assets/components.cljs:634, src/app/main/ui/workspace/sidebar/assets/groups.cljs:75, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1041
msgid "workspace.shape.menu.combine-as-variants"
msgstr "Combinar como variantes"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:640
+#: src/app/main/ui/workspace/sidebar/assets/components.cljs:636
msgid "workspace.shape.menu.combine-as-variants-error"
msgstr "Los componentes tienen que estar en la misma página"
@@ -6963,7 +7085,7 @@ msgstr "Copiar como SVG"
msgid "workspace.shape.menu.copy-text"
msgstr "Copiar como texto"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "Crear una nota"
@@ -6971,11 +7093,11 @@ msgstr "Crear una nota"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "Tablero de selección"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "Crear componente"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "Crear múltiples componentes"
@@ -6983,7 +7105,7 @@ msgstr "Crear múltiples componentes"
msgid "workspace.shape.menu.cut"
msgstr "Cortar"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "Eliminar"
@@ -6991,15 +7113,15 @@ msgstr "Eliminar"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "Eliminar inicio de flujo"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "Desvincular instancia"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "Desvincular instancias"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "Diferencia"
@@ -7011,11 +7133,11 @@ msgstr "Duplicar"
msgid "workspace.shape.menu.edit"
msgstr "Editar"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "Exclusión"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "Aplanar"
@@ -7048,19 +7170,19 @@ msgstr "Ir al archivo del componente principal"
msgid "workspace.shape.menu.group"
msgstr "Agrupar"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "Ocultar"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "Mostrar/Ocultar Interfaz"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "Intersección"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "Bloquear"
@@ -7068,7 +7190,7 @@ msgstr "Bloquear"
msgid "workspace.shape.menu.mask"
msgstr "Crear máscara"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "Pegar"
@@ -7088,15 +7210,15 @@ msgstr "Eliminar flex layout"
msgid "workspace.shape.menu.remove-grid"
msgstr "Eliminar grid layout"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1033
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1034
msgid "workspace.shape.menu.remove-layout"
msgstr "Eliminar layout"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1222
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1257
msgid "workspace.shape.menu.remove-variant-property"
msgstr "Eliminar propiedad"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1221
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1256
msgid "workspace.shape.menu.remove-variant-property.last-property"
msgstr "La variante debe tener al menos una propiedad"
@@ -7104,15 +7226,15 @@ msgstr "La variante debe tener al menos una propiedad"
msgid "workspace.shape.menu.rename"
msgstr "Renombrar"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "Deshacer modificaciones"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "Restaurar componente principal"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:504
msgid "workspace.shape.menu.restore-variant"
msgstr "Restaurar variante"
@@ -7120,15 +7242,15 @@ msgstr "Restaurar variante"
msgid "workspace.shape.menu.select-layer"
msgstr "Seleccionar capa"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "Mostrar"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "Ver en el panel de recursos"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "Ver componente principal"
@@ -7141,6 +7263,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "Poner como miniatura"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "Convertir en vector"
@@ -7148,11 +7271,11 @@ msgstr "Convertir en vector"
msgid "workspace.shape.menu.ungroup"
msgstr "Desagrupar"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "Unión"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "Desbloquear"
@@ -7165,7 +7288,7 @@ msgstr "Quitar máscara"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "Actualizar componentes"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "Actualizar componente principal"
@@ -7177,11 +7300,11 @@ msgstr "Cerrar barra lateral"
msgid "workspace.sidebar.expand"
msgstr "Abrir barra lateral"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "Historial"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "Capas"
@@ -7221,11 +7344,11 @@ msgstr "Textos"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "Atributos del SVG Importado"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "Páginas"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:248
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:249
msgid "workspace.sidebar.sitemap.add-page"
msgstr "Añadir página"
@@ -7242,23 +7365,23 @@ msgstr "%s temas activos"
msgid "workspace.tokens.add set"
msgstr "Añadir set"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:329
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
msgid "workspace.tokens.add-new-theme"
msgstr "Añadir nuevo tema"
-#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:60
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:62
msgid "workspace.tokens.add-set-to-group"
msgstr "Añadir un set a este grupo"
-#: src/app/main/ui/workspace/tokens/management/group.cljs:113
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:197, src/app/main/ui/workspace/tokens/management/group.cljs:115
msgid "workspace.tokens.add-token"
msgstr "Añadir token: %s"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:161
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:136
msgid "workspace.tokens.applied-to"
msgstr "Aplicado a"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:338
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:337
msgid "workspace.tokens.back-to-themes"
msgstr "Volver al listado de temas"
@@ -7280,19 +7403,25 @@ msgstr "Elige archivo"
msgid "workspace.tokens.choose-folder"
msgstr "Elige carpeta"
+#: src/app/main/data/workspace/tokens/errors.cljs:97
+msgid "workspace.tokens.composite-line-height-needs-font-size"
+msgstr ""
+"El Line Height depende del Font Size. Añade un Font Size para obtener el "
+"valor computado."
+
#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:53
msgid "workspace.tokens.create-new-theme"
msgstr "Crea un nuevo tema ahora."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:100, src/app/main/ui/workspace/tokens/themes.cljs:44
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:96, src/app/main/ui/workspace/tokens/themes.cljs:44
msgid "workspace.tokens.create-one"
msgstr "Crear uno."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:534
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:552
msgid "workspace.tokens.create-token"
msgstr "Crear un token de %s"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:337
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:338
msgid "workspace.tokens.delete"
msgstr "Eliminar token"
@@ -7300,19 +7429,19 @@ msgstr "Eliminar token"
msgid "workspace.tokens.delete-theme-title"
msgstr "Borrar theme"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:334
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:335
msgid "workspace.tokens.duplicate"
msgstr "Duplicar token"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:201, src/app/main/data/workspace/tokens/library_edit.cljs:405
+#: src/app/main/data/workspace/tokens/library_edit.cljs:197, src/app/main/data/workspace/tokens/library_edit.cljs:415
msgid "workspace.tokens.duplicate-suffix"
msgstr "copiar"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:321
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:322
msgid "workspace.tokens.edit"
msgstr "Editar token"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:327
msgid "workspace.tokens.edit-theme-title"
msgstr "Editar tema"
@@ -7320,15 +7449,15 @@ msgstr "Editar tema"
msgid "workspace.tokens.edit-themes"
msgstr "Editar temas"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:533
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:551
msgid "workspace.tokens.edit-token"
-msgstr "Editar token"
+msgstr "Editar token de %s"
#: src/app/main/data/workspace/tokens/errors.cljs:41
msgid "workspace.tokens.empty-input"
msgstr "El valor del token no puede estar vacío"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:540
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:558
msgid "workspace.tokens.enter-token-name"
msgstr "Introduce un nombre para el token %s"
@@ -7356,15 +7485,19 @@ msgstr "Previsualizar:"
msgid "workspace.tokens.export.single-file"
msgstr "fichero único"
-#: src/app/main/data/workspace/tokens/application.cljs:366
+#: src/app/main/data/workspace/tokens/application.cljs:292
msgid "workspace.tokens.font-variant-not-found"
msgstr ""
"Error al configurar el font-weight/style de la fuente. Este estilo de "
"fuente no existe en la fuente actual."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:877, src/app/main/ui/workspace/tokens/management/create/form.cljs:889
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1024, src/app/main/ui/workspace/tokens/management/create/form.cljs:1039
msgid "workspace.tokens.font-weight-value-enter"
-msgstr "Introduce un valor (300, Bold, Regular Italic...) o un {alias}"
+msgstr "Font weight (300, Bold, Regular Italic...) o un {alias}"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs
+msgid "workspace.tokens.font-size-value-enter"
+msgstr "Font size o {alias}"
#: src/app/main/ui/workspace/tokens/style_dictionary.cljs
#, unused
@@ -7384,19 +7517,19 @@ msgstr "La agrupación de sets aun no está soportada."
msgid "workspace.tokens.import-error"
msgstr "Error al importar:"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:240
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:241
msgid "workspace.tokens.import-multiple-files"
msgstr ""
"En multiples archivos, el nombre o la ruta del archivo serán los nombres de "
"los sets."
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:239
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:240
msgid "workspace.tokens.import-single-file"
msgstr ""
"En un archivo JSON único, las claves de primer nivel deben ser los nombres "
"de los sets de tokens."
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:236
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:237
msgid "workspace.tokens.import-tokens"
msgstr "Import tokens"
@@ -7405,7 +7538,7 @@ msgstr "Import tokens"
msgid "workspace.tokens.import-tooltip"
msgstr "Al importar un fichero JSON sobreescribirás todos tus tokens, sets y themes"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:246
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:247
msgid "workspace.tokens.import-warning"
msgstr "Al importar tokens sobreescribirás todos tus tokens, sets y themes."
@@ -7419,6 +7552,10 @@ msgstr ""
"Este set no está activo. Cambia el tema o activa este set para ver los "
"cambios en el viewport"
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:711
+msgid "workspace.tokens.individual-tokens"
+msgstr "Usa tokens individuales"
+
#: src/app/main/data/workspace/tokens/errors.cljs:49
msgid "workspace.tokens.invalid-color"
msgstr "Valor de color inválido: %s"
@@ -7445,6 +7582,10 @@ msgstr ""
"Los nombres de token solo pueden contener letras y dígitos separados por "
"caracteres . y no pueden empezar con un signo $."
+#: src/app/main/data/workspace/tokens/errors.cljs:93
+msgid "workspace.tokens.invalid-token-value-typography"
+msgstr "Valor no válido: debe hacer referencia a un token tipográfico compuesto."
+
#: src/app/main/data/workspace/tokens/errors.cljs:61, src/app/main/data/workspace/tokens/errors.cljs:73, src/app/main/data/workspace/tokens/errors.cljs:77
msgid "workspace.tokens.invalid-value"
msgstr "Valor de token no válido: %s"
@@ -7465,11 +7606,19 @@ msgstr "Tema"
msgid "workspace.tokens.label.theme-placeholder"
msgstr "Añade un Tema (p. ej. Claro)"
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1047
+msgid "workspace.tokens.letter-spacing-value-enter-composite"
+msgstr "Letter spacing o {alias}"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1043
+msgid "workspace.tokens.line-height-value-enter"
+msgstr "Line height (multiplicador, px o %) o {alias}"
+
#: src/app/main/data/workspace/tokens/errors.cljs:57
msgid "workspace.tokens.missing-references"
msgstr "Referéncias de tokens no encontradas:"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:148
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:123
msgid "workspace.tokens.more-options"
msgstr "Click derecho para ver opciones"
@@ -7481,7 +7630,7 @@ msgstr "No hay sets activos"
msgid "workspace.tokens.no-active-theme"
msgstr "No hay temas activos"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:76
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:72
msgid "workspace.tokens.no-permisions-set"
msgstr "Debes ser editor para activar / desactivar sets"
@@ -7489,7 +7638,7 @@ msgstr "Debes ser editor para activar / desactivar sets"
msgid "workspace.tokens.no-permission-themes"
msgstr "Debes ser editor para usar temas"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:480
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:483
msgid "workspace.tokens.no-sets-create"
msgstr "Aun no hay sets definidos. Crea uno primero"
@@ -7513,12 +7662,12 @@ msgstr "Valor de token no valido. El valor resuelto es muy grande: %s"
msgid "workspace.tokens.opacity-range"
msgstr "La opacidad debe estar entre 0 y 100% o 0 y 1 (p.e. 50% o 0.5)."
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:145
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:120
#, fuzzy
msgid "workspace.tokens.original-value"
msgstr "Valor original: %s"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:153
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:128
msgid "workspace.tokens.ref-not-valid"
msgstr "La referencia no es válida o no se encuentra en ningún set activo."
@@ -7527,7 +7676,7 @@ msgstr "La referencia no es válida o no se encuentra en ningún set activo."
msgid "workspace.tokens.reference-error"
msgstr "Errores en referencias: "
-#: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:39, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:44, src/app/main/ui/workspace/tokens/management/token_pill.cljs:146
+#: 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:100, 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 "Valor resuelto: %s"
@@ -7536,7 +7685,7 @@ msgstr "Valor resuelto: %s"
msgid "workspace.tokens.save-theme"
msgstr "Guardar tema"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:209, src/app/main/ui/workspace/tokens/sets/lists.cljs:315
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:204, src/app/main/ui/workspace/tokens/sets/lists.cljs:309
msgid "workspace.tokens.select-set"
msgstr "Selecciona set"
@@ -7544,11 +7693,11 @@ msgstr "Selecciona set"
msgid "workspace.tokens.self-reference"
msgstr "El token tiene una autoreferencia"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:64
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:60
msgid "workspace.tokens.set-edit-placeholder"
msgstr "Añade un nombre - usa '/' para grupos"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:343
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:342
msgid "workspace.tokens.set-selection-theme"
msgstr "Define que sets de tokens deberian formar parte de este tema:"
@@ -7575,18 +7724,22 @@ msgstr "Configuración de tokens"
msgid "workspace.tokens.stroke-width-range"
msgstr "Stroke width debe ser mayor o igual a 0."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:865, src/app/main/ui/workspace/tokens/management/create/form.cljs:895
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1012, src/app/main/ui/workspace/tokens/management/create/form.cljs:1051
msgid "workspace.tokens.text-case-value-enter"
-msgstr "Introduce: none | uppercase | lowercase | capitalize o {alias}"
+msgstr "none | uppercase | lowercase | capitalize o {alias}"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:871, src/app/main/ui/workspace/tokens/management/create/form.cljs:898
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1018, src/app/main/ui/workspace/tokens/management/create/form.cljs:1055
msgid "workspace.tokens.text-decoration-value-enter"
-msgstr "Introduce text decoration: none | underline | strike-through"
+msgstr "none | underline | strike-through o {alias}"
#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:130
msgid "workspace.tokens.theme-name"
msgstr "Tema %s"
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:48
+msgid "workspace.tokens.theme-name-already-exists"
+msgstr "Ya existe un tema con este nombre"
+
#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:96
msgid "workspace.tokens.themes-description"
msgstr ""
@@ -7597,29 +7750,44 @@ msgstr ""
msgid "workspace.tokens.themes-list"
msgstr "Lista de temas"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:589, src/app/main/ui/workspace/tokens/management/create/form.cljs:590
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:608, src/app/main/ui/workspace/tokens/management/create/form.cljs:609
#, fuzzy
msgid "workspace.tokens.token-description"
msgstr "Descripción"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:539
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:83, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:109, src/app/main/ui/workspace/tokens/management/create/form.cljs:557
msgid "workspace.tokens.token-name"
msgstr "Nombre"
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:69
+msgid "workspace.tokens.token-name-validation-error"
+msgstr ""
+" es un nombre de token no válido.\n"
+"Los nombres de token deben contener letras o dígitos separados por . "
+"y no deben empezar con el símbolo $."
+
#: src/app/main/ui/workspace/tokens/style_dictionary.cljs:259
#, unused
msgid "workspace.tokens.token-not-resolved"
msgstr "No se pudo resolver el token de referencia con el nombre: %s"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:567
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs
+msgid "workspace.tokens.token-name-duplication-validation-error"
+msgstr "Ya existe un token en la ruta: %s"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs
+msgid "workspace.tokens.token-name-length-validation-error"
+msgstr "El nombre debería ser de al menos 1 caracter"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:585
msgid "workspace.tokens.token-value"
msgstr "Valor"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:566, src/app/main/ui/workspace/tokens/management/create/form.cljs:883, src/app/main/ui/workspace/tokens/management/create/form.cljs:892
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:584, src/app/main/ui/workspace/tokens/management/create/form.cljs:1035
msgid "workspace.tokens.token-value-enter"
msgstr "Introduce un valor o un alias usando {alias}"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:125
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:121
msgid "workspace.tokens.tools"
msgstr "Herramientas"
@@ -7633,7 +7801,11 @@ msgstr ""
msgid "workspace.tokens.unknown-token-type-section"
msgstr "El tipo '%s' no está soportado (%s)\n"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:156
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:715
+msgid "workspace.tokens.use-reference"
+msgstr "Usa una referencia"
+
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:131
msgid "workspace.tokens.value-not-valid"
msgstr "El valor no es válido"
@@ -7641,11 +7813,11 @@ 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/form.cljs:563
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:581
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:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "Recursos"
@@ -7653,7 +7825,7 @@ msgstr "Recursos"
msgid "workspace.toolbar.color-palette"
msgstr "Paleta de colores (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "Comentarios (%s)"
@@ -7864,19 +8036,19 @@ msgstr "Operación sobre %s"
msgid "workspace.undo.title"
msgstr "Histórico"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "Ignorar"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "Más información"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "Hay actualizaciones en bibliotecas compartidas"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "Actualizar"
@@ -7936,11 +8108,11 @@ msgstr "¿Quieres restaurar esta versión?"
msgid "workspace.versions.snapshot-menu"
msgstr "Abrir menu de versiones"
-#: src/app/main/ui/workspace/sidebar.cljs:236
+#: src/app/main/ui/workspace/sidebar.cljs:237
msgid "workspace.versions.tab.actions"
msgstr "Acciones"
-#: src/app/main/ui/workspace/sidebar.cljs:234
+#: src/app/main/ui/workspace/sidebar.cljs:235
msgid "workspace.versions.tab.history"
msgstr "Histórico"
diff --git a/frontend/translations/es_419.po b/frontend/translations/es_419.po
index b4b362f627..672d621652 100644
--- a/frontend/translations/es_419.po
+++ b/frontend/translations/es_419.po
@@ -144,7 +144,7 @@ msgstr "Crea una cuenta"
msgid "auth.sidebar-tagline"
msgstr "La solución de código abierto para diseño y creación de prototipos."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Términos de servicio"
@@ -163,7 +163,7 @@ msgstr "Hemos enviado un correo electrónico de verificación"
msgid "branding-illustrations-marketing-pieces"
msgstr "...marca, ilustraciones, piezas de marketing, etc."
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Publicar"
@@ -235,7 +235,7 @@ msgstr "Compartir prototipos"
msgid "common.share-link.view-all"
msgstr "Seleccionar todo"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Despublicar"
@@ -356,7 +356,7 @@ msgstr "El token caducará el %s"
msgid "dashboard.access-tokens.token-will-not-expire"
msgstr "El token no tiene fecha de vencimiento"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Agregar como biblioteca compartida"
@@ -364,27 +364,27 @@ msgstr "Agregar como biblioteca compartida"
msgid "dashboard.change-email"
msgstr "Cambiar el correo electrónico"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(copiar)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Crear nuevo equipo"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Tu Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Eliminar equipo"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Descargar el archivo Penpot (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Descargar archivo estándar (.svg + .json)"
@@ -400,7 +400,7 @@ msgstr "Duplicar %s archivos"
msgid "dashboard.export-binary-multi"
msgstr "Descargar %s archivos Penpot (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Exportar tableros como PDF"
@@ -416,7 +416,7 @@ msgstr "Exportar %s archivos de Penpot"
msgid "dashboard.export-multiple.selected"
msgstr "%s de %s elementos seleccionados"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Exportar"
@@ -494,11 +494,11 @@ msgstr "Subiendo datos al servidor (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Subiendo archivo: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Invitar a la gente"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "dejar el equipo"
@@ -510,7 +510,7 @@ msgstr "Bibliotecas y plantillas"
msgid "dashboard.libraries-and-templates.explore"
msgstr "Explore más de ellos y sepa cómo contribuir"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "Hubo un problema al importar la plantilla. La plantilla no fue importada."
@@ -542,7 +542,7 @@ msgstr "Pasar a otro equipo"
msgid "dashboard.new-file"
msgstr "+ Nuevo archivo"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Archivo nuevo"
@@ -550,7 +550,7 @@ msgstr "Archivo nuevo"
msgid "dashboard.new-project"
msgstr "+ Nuevo proyecto"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Nuevo proyecto"
@@ -558,7 +558,7 @@ msgstr "Nuevo proyecto"
msgid "dashboard.no-matches-for"
msgstr "No se encontraron coincidencias para \"%s\""
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Los proyectos fijados aparecerán aquí"
@@ -566,10 +566,9 @@ msgstr "Los proyectos fijados aparecerán aquí"
msgid "dashboard.notifications.email-changed-successfully"
msgstr "Su dirección de correo electrónico se ha actualizado correctamente"
-#: src/app/main/ui/auth/register.cljs, src/app/main/ui/dashboard/team_form.cljs, src/app/main/ui/onboarding/team_choice.cljs, src/app/main/ui/setti ngs/access_tokens.cljs, src/app/main/ui/settings/feedback.cljs, src/app/main/ui/settings/profile.cljs, src/app/main/ui/workspace/sidebar/assets.cljs
-#, unused
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs
msgid "errors.field-max-length"
-msgstr "El nombre debe contener como máximo 1 caracter."
+msgstr "El nombre debe contener como máximo %s caracteres."
#: src/app/main/ui/settings/team-form.cljs, src/app/main/ui/auth/register.cljs, src/app/main/ui/dashboard/team_form.cljs, src/app/main/ui/onboarding/team_choice.cljs, src/app/main/ui/settings/access_tokens.cljs, src/app/main/ui/settings/feedback.cljs, src/app/main/ui/settings/profile.cljs, src/app/main/ui/workspace/sidebar/assets.cljs
#, unused
diff --git a/frontend/translations/eu.po b/frontend/translations/eu.po
index c5d13a6f7f..f6728dfbdc 100644
--- a/frontend/translations/eu.po
+++ b/frontend/translations/eu.po
@@ -1,15 +1,15 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-11 07:21+0000\n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
"Last-Translator: Mikel Larreategi \n"
-"Language-Team: Basque "
-" \n"
+"Language-Team: Basque \n"
"Language: eu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.13-dev\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -142,7 +142,7 @@ msgstr "Sortu kontua"
msgid "auth.sidebar-tagline"
msgstr "Diseinuak eta prototipoak egiteko kode irekiko soluzioa."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Zerbitzuaren erabilpen-baldintzak"
@@ -150,7 +150,7 @@ msgstr "Zerbitzuaren erabilpen-baldintzak"
msgid "auth.verification-email-sent"
msgstr "Egiaztapen mezu bat bidali dugu helbide honetara"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Argitaratu"
@@ -220,7 +220,7 @@ msgstr "Partekatu prototipoak"
msgid "common.share-link.view-all"
msgstr "Aukeratu guztiak"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Argitaraketa atzera bota"
@@ -270,7 +270,7 @@ msgstr "Hasi"
msgid "dasboard.walkthrough-hero.title"
msgstr "Interfazea ezagutu"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Gehitu partekatutako liburutegi bezala"
@@ -278,27 +278,27 @@ msgstr "Gehitu partekatutako liburutegi bezala"
msgid "dashboard.change-email"
msgstr "Eposta aldatu"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(kopia)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Sortu talde berria"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Zure Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Ezabatu taldea"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Deskargatu Penpot fitxategia (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Deskargatu fitxategi estandarra (.svg + .json)"
@@ -314,7 +314,7 @@ msgstr "%s fitxategi bizkoiztu"
msgid "dashboard.export-binary-multi"
msgstr "Deskargatu %s Penpot fitxategi (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Esportatu arbelak PDFra"
@@ -330,7 +330,7 @@ msgstr "Esportatu %s Penpot fitxategi"
msgid "dashboard.export-multiple.selected"
msgstr "Aukeratutakoak: %s / %s"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Esportatu"
@@ -499,11 +499,11 @@ msgstr "Datuak zerbitzarira bidaltzen (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Fitxategia bidaltzen: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Gonbidatu taldera"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Utzi taldea"
@@ -515,7 +515,7 @@ msgstr "Liburutegi eta txantiloiak"
msgid "dashboard.libraries-and-templates.explore"
msgstr "Gehiago ikusi eta ikasi nola lagundu"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "Arazo bat egon da txantiloia inportatzean. Ezin izan da inportatu."
@@ -547,7 +547,7 @@ msgstr "Mugitu beste talde batera"
msgid "dashboard.new-file"
msgstr "+ Fitxategi berria"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Fitxategi berria"
@@ -555,7 +555,7 @@ msgstr "Fitxategi berria"
msgid "dashboard.new-project"
msgstr "+ Proiektu berria"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Proiektu berria"
@@ -563,7 +563,7 @@ msgstr "Proiektu berria"
msgid "dashboard.no-matches-for"
msgstr "Ez da \"%s\" aurkitu"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Ainguratutako proiektuak hemen agertuko dira"
@@ -579,7 +579,7 @@ msgstr "Zure eposta helbidea egiaztatu egin da"
msgid "dashboard.notifications.password-saved"
msgstr "Pasahitza ondo gorde da!"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s kide"
@@ -595,7 +595,7 @@ msgstr "Aukerak"
msgid "dashboard.password-change"
msgstr "Aldatu pasahitza"
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Ainguratu/Desainguratu"
@@ -616,7 +616,7 @@ msgstr "Ezabatu partekatutako liburutegi gisa"
msgid "dashboard.save-settings"
msgstr "Gorde aukerak"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Bilatu…"
@@ -652,7 +652,7 @@ msgstr "Zure fitxategia ondo bikoiztu da"
msgid "dashboard.success-duplicate-project"
msgstr "Zure proiektua ondo bikoiztu da"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Zure fitxategia ondo mugitu da"
@@ -664,15 +664,15 @@ msgstr "Zure fitxategiak ondo mugitu dira"
msgid "dashboard.success-move-project"
msgstr "Zure proiektua ondo mugitu da"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Taldearen informazioa"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Taldekideak"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Taldearen proiektuak"
@@ -688,7 +688,7 @@ msgstr "Bilaketaren emaitzak"
msgid "dashboard.type-something"
msgstr "Idatzi bilaktzeko zerbaitu"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Atzera bota liburutegia argitaratzea"
@@ -696,37 +696,37 @@ msgstr "Atzera bota liburutegia argitaratzea"
msgid "dashboard.update-settings"
msgstr "Eguneratu aukerak"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "Aktibo"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "Webhook hau aktibatzen denean gertaeraren xehetasunak bidaliko dira"
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "Elementu mota"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "Sortu webhooka"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "Webhooka ondo sortu da."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"Webhookak beste webgune batzuei Penpoten zerbait gertatu dela jakinarazteko "
"modu bat dira. Adierazitako URLtara POST eskaera bat bidaliko dugu."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "Sakatu \"Sortu webhooka\" botoia bat gehitzeko."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "Ez dago webhookik."
@@ -746,7 +746,7 @@ msgstr "Eposta"
msgid "dashboard.your-name"
msgstr "Izena"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Zure Penpot"
@@ -762,11 +762,11 @@ msgstr "Oharra"
msgid "ds.component-subtitle"
msgstr "Eguneratzeko dauden osagaiak:"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Utzi"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Ados"
@@ -806,11 +806,11 @@ msgstr "Eposta helbide hori egiaztatuta dago."
msgid "errors.email-as-password"
msgstr "Ezin duzu zure eposta helbidea pasahitz gisa erabiliz"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "«%s» helbideak ez ditu mezuak ondo jasotzen, itzuli egiten ditu."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr ""
"«%s» helbideak ez ditu mezuak ondo jasotzen, itzuli egiten ditu edo "
@@ -827,7 +827,7 @@ msgstr ""
msgid "errors.feature-not-supported"
msgstr "Ezaugarria ezin da erabili: '%s'."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Erroreren bat gertatu da."
@@ -860,7 +860,7 @@ msgstr "Gonbidapen hau bertan behera utzi dute edo iraungi egin da."
msgid "errors.ldap-disabled"
msgstr "LDAP bidez sartzea desgaituta dago."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr ""
"Kuotaren maximora heldu zara: '%s'. Jarri kontaktuan laguntza "
@@ -878,7 +878,7 @@ msgstr "Irudiaren edukia eta luzapena bat ez datozela dirudi."
msgid "errors.media-type-not-allowed"
msgstr "Irudia zuzena ez dela dirudi."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"Gonbidatzen ari zaren profilak ez ditu eposta bidezko mezuak jasotzen (spam "
@@ -898,7 +898,7 @@ msgstr "Pasahitzak gutxienez 8 karaktere izan behar ditu"
msgid "errors.profile-blocked"
msgstr "Profila blokeatuta dago"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr ""
"Zure profilak ez ditu eposta mezuak jasotzen (spam gisa markatu delako edo "
@@ -908,17 +908,17 @@ msgstr ""
msgid "errors.registration-disabled"
msgstr "Erregistroa desgaituta dago."
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr ""
"Ez dago taldetik irteteko behar beste kide, seguru aski ezabatu egin nahiko "
"duzu."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "Izendatu nahi duzun kidea ez da existitzen."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr "Jabea ezin da taldetik irten, jabetza beste pertsona bati eman behar diozu."
@@ -930,31 +930,31 @@ msgstr "Errore bat gertatut da."
msgid "errors.unexpected-token"
msgstr "Tokena ez da zuzena"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "Konexio errorea, URLa ezin da ireki"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "URLak ez du balidazioa gainditu."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "Errore bat gertatu da azken bidalketan."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "Errorea gertatu da SSL balidazioan."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "Denbora muga gainditu da"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "Errore ezezaguna balidazioan"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "Espero ez zen egoera %s"
@@ -1016,19 +1016,19 @@ msgstr "Errore bat gertatu da"
msgid "inspect.attributes.blur"
msgstr "Desenfokatuta"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Balioa"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1036,7 +1036,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Betegarria"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Deskargatu jatorrizko irudia"
@@ -1130,77 +1130,80 @@ msgstr "Solidoa"
msgid "inspect.attributes.stroke.width"
msgstr "Zabalera"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Letra-tipo"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Letra-tipo familia"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Letra-tipoaren tamaina"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Letra-tipoaren estiloa"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "Letra tipoaren lodiera"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Hizkien tartea"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Lerroartea"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Testuaren apainketa"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Bat ere ez"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Azpimarratu"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Testua eraldatu"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "Lehenengoa letra larriz"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "Letra xeheak"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Bat ere ez"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "Letra larriz"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr ""
"Diseinua ikuskatzeari buruz gehiago jakin nahi baduzu zoaz Penpoten "
"laguntza zentrora"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "Informazio gehiago ikuskatzeari buruz"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr ""
"Aukeratu forma bat, taula bat edo talde bat beren propietateak eta kodea "
@@ -1262,7 +1265,7 @@ msgstr "Testua"
msgid "inspect.tabs.info"
msgstr "Informazioa"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Lasterteklak"
@@ -1270,7 +1273,7 @@ msgstr "Lasterteklak"
msgid "labels.accept"
msgstr "Onartu"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "Aktibo"
@@ -1278,11 +1281,11 @@ msgstr "Aktibo"
msgid "labels.add-custom-font"
msgstr "Gehitu letra-tipo pertsonalizatua"
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Kudeaketa"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Guztia"
@@ -1305,19 +1308,19 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "Zerbitzariaren errorea (Bad Gateway)"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Utzi"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Itxi"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Iruzkinak"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Komunitatea"
@@ -1325,7 +1328,7 @@ msgstr "Komunitatea"
msgid "labels.confirm-password"
msgstr "Berretsi pasahitza"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Jarraitu"
@@ -1337,11 +1340,11 @@ msgstr "Honekin jarraitu"
msgid "labels.continue-with-penpot"
msgstr "Penpot kontu batekin jarraitu dezakezu"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "Kopiatu esteka"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Sortu"
@@ -1361,7 +1364,7 @@ msgstr "Pertsonalizatutako letra-tipoak"
msgid "labels.dashboard"
msgstr "Lanlekua"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Ezabatu"
@@ -1373,7 +1376,7 @@ msgstr "Ezabatu iruzkina"
msgid "labels.delete-comment-thread"
msgstr "Ezabatu haria"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Ezabatu gonbidapena"
@@ -1381,11 +1384,11 @@ msgstr "Ezabatu gonbidapena"
msgid "labels.delete-multi-files"
msgstr "Ezabatu %s fitxategi"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Zirriborroak"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Editatu"
@@ -1393,15 +1396,15 @@ msgstr "Editatu"
msgid "labels.edit-file"
msgstr "Editatu fitxategia"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Edizioa"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Iraungita"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Esportatu"
@@ -1425,15 +1428,15 @@ msgstr "Letra-tipo hornitzaileak"
msgid "labels.font-variants"
msgstr "Estiloak"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Letra-tipoak"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "GitHubeko errepositorioa"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Eman zure iritzia"
@@ -1441,15 +1444,15 @@ msgstr "Eman zure iritzia"
msgid "labels.go-back"
msgstr "Itzuli"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Laguntza zentroa"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Ezkutatu ebatzitzako iruzkinak"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "Inaktibo"
@@ -1467,7 +1470,7 @@ msgstr ""
msgid "labels.internal-error.main-message"
msgstr "Barneko errorea"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Gonbidapenak"
@@ -1475,7 +1478,7 @@ msgstr "Gonbidapenak"
msgid "labels.language"
msgstr "Hizkuntzak"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Liburutegi eta Txantiloiak"
@@ -1483,15 +1486,15 @@ msgstr "Liburutegi eta Txantiloiak"
msgid "labels.log-or-sign"
msgstr "Sartu edo eman izena"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Irten"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Kidea"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Kideak"
@@ -1499,11 +1502,11 @@ msgstr "Kideak"
msgid "labels.new-password"
msgstr "Pasahitz berria"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "Ez duzu iruzkinen inguruko jakinarazpenik."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "Ez dago gonbidapenik."
@@ -1516,7 +1519,7 @@ msgstr "Orrialde hau ez da existitzen edo ez duzu ikusteko baimenik."
msgid "labels.not-found.main-message"
msgstr "Atx!"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "Fitxategi 1"
@@ -1528,7 +1531,7 @@ msgid_plural "labels.num-of-frames"
msgstr[0] "Arbel 1"
msgstr[1] "%s arbel"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "Proiektu 1"
@@ -1547,7 +1550,7 @@ msgstr "Zureak bakarrik"
msgid "labels.or"
msgstr "edo"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Jabea"
@@ -1555,7 +1558,7 @@ msgstr "Jabea"
msgid "labels.password"
msgstr "Pasahitza"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "Zain"
@@ -1563,11 +1566,11 @@ msgstr "Zain"
msgid "labels.profile"
msgstr "Profila"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Proiektuak"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Bertsioaren oharrak"
@@ -1581,11 +1584,11 @@ msgstr "Birkargatu fitxategia"
msgid "labels.remove"
msgstr "Kendu"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Kendu kidea"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Berrizendatu"
@@ -1593,7 +1596,7 @@ msgstr "Berrizendatu"
msgid "labels.rename-team"
msgstr "Berrizendatu taldea"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "Birbidali gonbidapena"
@@ -1601,11 +1604,11 @@ msgstr "Birbidali gonbidapena"
msgid "labels.retry"
msgstr "Berriz saiatu"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Rola"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Gorde"
@@ -1629,7 +1632,7 @@ msgstr "Gure sistemaren programatutako mantentze-lanak egiten ari gara."
msgid "labels.service-unavailable.main-message"
msgstr "Zerbitzua ez dago martxan"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Ezarpenak"
@@ -1637,11 +1640,11 @@ msgstr "Ezarpenak"
msgid "labels.share-prototype"
msgstr "Partekatu prototipoa"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Partekatutako liburutegiak"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Erakutsi iruzkin guztiak"
@@ -1649,15 +1652,15 @@ msgstr "Erakutsi iruzkin guztiak"
msgid "labels.show-comments-list"
msgstr "Erakutsi iruzkinen zerrenda"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Erakutsi zure iruzkinak bakarrik"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Egoera"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Tutorialak"
@@ -1685,15 +1688,15 @@ msgstr "Kargatu letra-tipoa"
msgid "labels.uploading"
msgstr "Kargatzen…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "IKUSTEKO BAKARRIK"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Bistarazlea"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Webhookak"
@@ -1701,11 +1704,11 @@ msgstr "Webhookak"
msgid "labels.write-new-comment"
msgstr "Idatzi iruzkin berria"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(zu)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "zure kontua"
@@ -1753,19 +1756,19 @@ msgstr "Aldatu posta elektronikoa"
msgid "modals.change-email.title"
msgstr "Aldatu zure posta elektronikoa"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "Sortu webhooka"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "Sortu webhooka"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "Informazioaren URLa"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://example.com/postreceive"
@@ -1845,11 +1848,11 @@ msgstr ""
msgid "modals.delete-font.title"
msgstr "Letra-tipoa ezabatzen"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Benetan orrialde hau ezabatu egin nahi duzu?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Ezabatu orrialdea"
@@ -1883,75 +1886,75 @@ msgid_plural "modals.delete-shared-confirm.title"
msgstr[0] "Ezabatu fitxategia"
msgstr[1] "Ezabatu fitxategiak"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Ezabatu taldea"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Benetan talde hau ezabatu egin nahi duzu? Taldeari lotutako proiektu eta "
"fitxategi guztiak betiko ezabatuko dira."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Taldea ezabatzen"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Kidea ezabatzen"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Benetan kide hau taldetik ezabatu egin nahi duzu?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Taldekidea ezabatzen"
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "Ezabatu webhooka"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "Benetan webhook hau ezabatu egin nahi duzu?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "Webhooka ezabatzen"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "Aldatu webhooka"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "Aldatu webhooka"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Bidali gonbidapena"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "Posta elektronikoak, komarekin banatuta"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr "Eposta helbide batzuk jada taldekideenak dira. Ez da gonbidapenik bidaliko."
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "Gonbidatu kideak taldera"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"Talde honetako kide bakarra zarenez, taldea bere proiektu eta fitxategiekin "
"ezabatuko da."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "Benetan %s taldea utzi egin nahi duzu?"
@@ -1977,37 +1980,37 @@ msgstr "Aukeratu jabe berria"
msgid "modals.leave-and-reassign.title"
msgstr "Utzi aurretik"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Utzi taldea"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Benetal taldea utzi egin nahi duzu?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Taldea uzten"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "Desplazamendua"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Eman jabetza"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"Jabetza ematen baduzu, zure rola Kudeatzaile izatera pasatuko da, "
"taldearekiko zure baimen batzuk galduz. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr "Taldearen jabea zara. Benetan %s taldearen gabe egin nahi duzu?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Taldearen jabe berria"
@@ -2060,29 +2063,29 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Eguneratu liburutegiaren osagaiak"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Eguneratu"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Utzi"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"Partekatutako liburutegi baten osagai bat eguneratzera zoaz. Honek berau "
"darabilten beste fitxategi batzuengan eragina izan dezake."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Eguneratu liburutegiaren osagaia"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "Gonbidapena ondo bidali da"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "Gonbidapenaren esteka kopiatu da"
@@ -2205,7 +2208,7 @@ msgstr ""
"Ez ahaztu garapeneko, diseinuko, kudeaketako... pertsonak sartzea, "
"dibertsitatea ona da :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "Gonbidatu rol honekin:"
@@ -2273,613 +2276,597 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "Sartu"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "Batzuk"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Oinarrizkoak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "Lanlekua"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Ikusteko modua"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Mahaigaina"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Lerrokatzea"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Editatu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "Orokorra"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "Orokorra"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Menu nagusia"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "Aldatu geruzak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Nabigazioa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Nabigazioa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Nabigazioa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Panelak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Bidea"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Formak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "Testuak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Tresnak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Gehitu iruzkinak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "Gehitu nodoa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "Lerrokatu behean"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "Erdian lerrokatu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "Lerrokatu erdian horizontalki"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "Justifikatuta lerrokatu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "Lerrokatu ezkerrean"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "Lerrokatu eskuman"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "Lerrokatu goian"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "Lerrokatu erdian bertikalki"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "Sortu arbela hautapenetik"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "Aktibatu/desaktibatu beltza"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "Diferentzia"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "Baztertu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "Ebakidura"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "Elkarketa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "Bidali atzera"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Bidali hondora"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "Mugitu aurrealdera"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "Mugitu aurrera"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "Garbitu historiala"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Kopiatu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "Sortu berria"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Moztu"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "Jaitsi zooma"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Ezabatu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "Ezabatu nodoa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "Banandu osagaian"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Kurba"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "Elipsea"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Arbela"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "Marraztu nodoak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Bidea"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Laukia"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Testua"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Bikoiztu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "Utzi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "Esportatu osagaiak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "Zoom dena ikusteko"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "Irauli horizontalki"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "Irauli bertikalki"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "Letra tipoaren tamaina txikitu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "Letra tipoaren tamaina handitu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "Joan zirriborroetara"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "Joan partekatutako liburutegietara"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Bilatu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Taldekatu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "Banatu horizontalki"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "Erakutsi/ezkutatu interfazea"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "Zooma handitu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "Txertatu irudia"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "Aktibatu/desaktibatu etzana"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "Elkartu nodoak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
-msgid "shortcuts.letter-spacing-dec"
-msgstr "Hizkien arteko espazioa txikitu"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "Hizkien arteko espazioa handitu"
-
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
-msgid "shortcuts.line-height-dec"
-msgstr "Lerroen arteko tartea txikitu"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
-msgid "shortcuts.line-height-inc"
-msgstr "Lerroen arteko tartea handitu"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.line-through"
msgstr "Aktibatu/desaktibatu marratzea"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "Bihurtu ertz"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "Bihurtu kurba"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "Maskara"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "Elkartu nodoak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "Mugitu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "Mugitu behera azkar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "Mugitu ezkerrera azkar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "Mugitu eskumara azar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "Mugitu gora azkar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "Mugitu nodoa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "Mugitu behera"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "Mugitu ezkerrera"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "Mugitu eskumara"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "Mugitu gora"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "Hurrengo arbela"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "Ez dago emaitzarik"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "Opakutasuna %100"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "Opakutasuna %10"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "Opakutasuna %20"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "Opakutasuna %30"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "Opakutasuna %40"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "Opakutasuna %50"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "Opakutasuna %60"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "Opakutasuna %70"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "Opakutasuna %80"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "Opakutasuna %90"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "Ireki kolore-hautatzailea"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "Iruzkinak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "Joan lan-lekura"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "Ikuskagailura joan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "Joan interakzioetara"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "Joan ikusteko modura"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "Joan zure mahaigainera"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " edo "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Itsatsi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "Aurreko arbela"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "Berregin"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "Berrezarri zooma"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "Bilatu lasterbideak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "Aukeratu guztia"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
msgid "shortcuts.select-next"
msgstr "Aukeratu hurrengo geruza"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
msgid "shortcuts.select-prev"
msgstr "Aukeratu aurreko geruza"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "Banatu nodoak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "Erakutsi/ezkutatu pixel sarea"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "Erakutsi/ezkutatu lasterbideak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "Lerrokatu nodoak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "Aktibatu sarea pixelera lerrokatzea"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "Hasi edizioa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "Hasi neurketa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "Amaitu neurketa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "Aktibatu iruditxoak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "Lasterteklak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "Lerrokatzea aldatu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "Erakutsi/ezkutatu baliabideak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "Erakutsi/ezkutatu kolore paleta"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "Erakutsi/ezkutatu foko-modua"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "Aktibatu/desaktibatu pantaila osoa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "Erakutsi/Ezkutatu historikoa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "Erakutsi/ezkutatu geruzak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "Gehitu/kendu flex diseinua"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "Blokeatu/Desblokeatu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "Blokeatu/Desblokeatu proportzioak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "Erakutsi/Ezkutatu testuen paleta"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "Erakutsi/Ezkutatu elementua"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "Erakutsi/Ezkutatu zoomaren estiloa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "Aktibatu/desaktibatu azpimarraketa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Desegin"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Banatu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Desegin maskara"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "Banatu bertikalki"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "Zooma txikitu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "Zooma handitu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "Zooma aukeraketara"
@@ -2927,19 +2914,19 @@ msgstr "Pasahitza - Penpot"
msgid "title.settings.profile"
msgstr "Profila - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "Gonbidapenak - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "Kideak - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Ezarpenak - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "Webhookak - %s - Penpot"
@@ -3011,39 +2998,39 @@ msgstr "Erakutsi interakzioak klik egitean"
msgid "viewer.header.sitemap"
msgstr "Webgunearen mapa"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "Azken bidalketa ondo joan da."
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Lerrokatu erdian (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "Banatu espazioa horizontalki (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Lerrokatu ezkerrean (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Lerrokatu eskuman (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Lerrokatu behean (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Lerrokatu erdian (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "Banatu espazioa bertikalki (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Lerrokatu goian (%s)"
@@ -3052,33 +3039,33 @@ msgstr "Lerrokatu goian (%s)"
msgid "workspace.assets.assets"
msgstr "Baliabideak"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "Guztiak"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Koloreak"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Osagaiak"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "Sortu talde bat"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr ""
"Zure elementuak berrizendatu egingo dira: \"taldearen izena / elementuaren "
"izena\""
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Ezabatu"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "Bikoiztu"
@@ -3086,7 +3073,7 @@ msgstr "Bikoiztu"
msgid "workspace.assets.duplicate-main"
msgstr "Bikoiztu nagusia"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Editatu"
@@ -3095,15 +3082,15 @@ msgstr "Editatu"
msgid "workspace.assets.graphics"
msgstr "Grafikoak"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Taldekatu"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "Taldearen izena"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "liburutegi lokala"
@@ -3111,15 +3098,15 @@ msgstr "liburutegi lokala"
msgid "workspace.assets.not-found"
msgstr "Ez da baliabiderik aurkitu"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Izena aldatu"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "Berrizendatu taldea"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "Bilatu baliabideak"
@@ -3130,7 +3117,7 @@ msgid_plural "workspace.assets.selected-count"
msgstr[0] "%s elementu aukeratuta"
msgstr[1] "Ez da elementurik aukeratu"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Letra-tipoak"
@@ -3155,7 +3142,7 @@ msgstr "Hizkien tartea"
msgid "workspace.assets.typography.line-height"
msgstr "Lerroaren altuera"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -3167,7 +3154,7 @@ msgstr "Testuen estiloak"
msgid "workspace.assets.typography.text-transform"
msgstr "Testua eraldatu"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "Banatu"
@@ -3175,7 +3162,7 @@ msgstr "Banatu"
msgid "workspace.focus.focus-mode"
msgstr "Foku-modua"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "Fokua kendu"
@@ -3195,11 +3182,11 @@ msgstr "Gradiente lineala"
msgid "workspace.gradients.radial"
msgstr "Gradiente erradiala"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "Desaktibatu lerrokatze dinamikoa"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "Desaktibatu eskala proportzionala"
@@ -3208,19 +3195,19 @@ msgstr "Desaktibatu eskala proportzionala"
msgid "workspace.header.menu.disable-scale-text"
msgstr "Desaktibatu testu eskala"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "Desaktibatu gidetara atxikitzea"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "Desaktibatu pixelera atxikitzea"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "Aktibatu lerrokatze dinamikoa"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "Aktibatu eskala proportzionala"
@@ -3229,83 +3216,83 @@ msgstr "Aktibatu eskala proportzionala"
msgid "workspace.header.menu.enable-scale-text"
msgstr "Aktibatu testua eskalatzea"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "Atxikitu gidetara"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "Aktibatu pixelera atxikitzea"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "Ezkutatu arbelen izenak"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "Ezkutatu kolore-paleta"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "Ezkutatu pixel sareta"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "Ezkutatu erregleank"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "Ezkutatu letra-tipoen paleta"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Editatu"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "Fitxategia"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "Laguntza eta informazioa"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "Hobespenak"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "Ikusi"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "Berregin"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "Guztiak aukeratu"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "Erakutsi arbelen izenak"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "Erakutsi kolore-paleta"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Erakutsi erregelak"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "Erakutsi letra-tipoen paleta"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "Desegin"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Berrezarri"
@@ -3326,7 +3313,7 @@ msgstr "Gordetzen"
msgid "workspace.header.unsaved"
msgstr "Gorde gabeko aldaketak"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "Ikusteko modua (%s)"
@@ -3338,7 +3325,7 @@ msgstr "Bete - Eskala betetzeko"
msgid "workspace.header.zoom-fit"
msgstr "Egokitu - Eskalatu egokitzeko"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "Zoom dena ikusteko"
@@ -3346,7 +3333,7 @@ msgstr "Zoom dena ikusteko"
msgid "workspace.header.zoom-full-screen"
msgstr "Pantaila osoa"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "Zooma aukeraketara"
@@ -3355,10 +3342,6 @@ msgstr "Zooma aukeraketara"
msgid "workspace.libraries.add"
msgstr "Gehitu"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s kolore"
-
#: src/app/main/ui/workspace/color_palette_ctx_menu.cljs:88, src/app/main/ui/workspace/colorpicker/libraries.cljs:48, src/app/main/ui/workspace/text_palette_ctx_menu.cljs:49
msgid "workspace.libraries.colors.file-library"
msgstr "Fitxategien liburutegia"
@@ -3377,31 +3360,23 @@ msgstr "Azken koloreak"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "RGB Osagarria"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Gorde kolorearen estiloa"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s osagai"
-
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Fitxategien liburutegia"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s grafiko"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "FITXATEGI HONETAKO LIBURUTEGIAK"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "LIBURUTEGIAK"
@@ -3410,55 +3385,51 @@ msgstr "LIBURUTEGIAK"
msgid "workspace.libraries.library"
msgstr "LIBURUTEGIA"
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "Ez dago eguneraketa behar duen partekatutako liburutegirik"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "Ez da ezer aurkitu bilaketa honentzat: \"%s\""
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "Bilatu partekatutako liburutegiak"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "Partekatutako liburutegiak"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Letra-tipo anitz"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Kendu esteka letra-tipo guztiei"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s letra-tipo"
-
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Eguneratu"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "EGUNERAKETAK"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "Sakatu + botoia interakzioak gehitzeko."
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Lausotu"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "Taldea lausotu"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "Aukeraketa lausotu"
@@ -3466,11 +3437,11 @@ msgstr "Aukeraketa lausotu"
msgid "workspace.options.canvas-background"
msgstr "Mihisearen atzeko planoa"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "Edukia aukeratu"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Osagaia"
@@ -3514,7 +3485,7 @@ msgstr "Goian"
msgid "workspace.options.constraints.topbottom"
msgstr "Goian eta behean"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Diseinua"
@@ -3527,13 +3498,13 @@ msgstr "Esportatu"
msgid "workspace.options.export-multiple"
msgstr "Esportatu aukeraketa"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "Esportatu elementu 1"
msgstr[1] "Esportatu %s elementu"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Aurrizkia"
@@ -3541,7 +3512,7 @@ msgstr "Aurrizkia"
msgid "workspace.options.exporting-complete"
msgstr "Esportazioa osatu da"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "Esportazen…"
@@ -3553,11 +3524,11 @@ msgstr "Esportazioak huts egin du"
msgid "workspace.options.exporting-object-slow"
msgstr "Esportazio oso geldoa"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Bete"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "Gehitu fluxuaren hasiera"
@@ -3566,15 +3537,15 @@ msgstr "Gehitu fluxuaren hasiera"
msgid "workspace.options.flows.flow-start"
msgstr "Fluxuaren hasiera"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "Fluxua hasi da"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Auto"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "Zutabeak"
@@ -3583,7 +3554,7 @@ msgstr "Zutabeak"
msgid "workspace.options.grid.grid-title"
msgstr "Sareta"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Kolorea"
@@ -3592,15 +3563,15 @@ msgstr "Kolorea"
msgid "workspace.options.grid.params.columns"
msgstr "Zutabeak"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "Erretena"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Altuera"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Margina"
@@ -3609,7 +3580,7 @@ msgstr "Margina"
msgid "workspace.options.grid.params.rows"
msgstr "Lerroak"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "Defektuzko orri gisa ezarri"
@@ -3623,143 +3594,143 @@ msgstr "Tamaina"
msgid "workspace.options.grid.params.type"
msgstr "Elementu mota"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Behean"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Erdiratu"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Ezkerrean"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Eskuman"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "Luzatu"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "Goian"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "Erabili defektuzkoa"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Zabalera"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Lerroak"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "Karratua"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Taldea bete"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Taldea trazatu"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "Altuera"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "Ikuskatu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "Ekintza"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "Atzerapen baten ostean"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "Animazioa"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "Disolbatu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "Bat ere ez"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "Sartu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "Irristatu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "automatikoa"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "Gehitu atzeko planoko geruzi"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "Itxi kanpoan klik egitean"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "Itxi geruza"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "Itxi geruza: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "Atzeratu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "Helburua"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "Iraupena"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "Mugimendua"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "Mugitu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "Mugitu barrura"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "Mugitu barrura eta kanpora"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "Mugitu kanpora"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "Lineala"
@@ -3768,47 +3739,47 @@ msgstr "Lineala"
msgid "workspace.options.interaction-in"
msgstr "Barrura"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "Sagua sartzean"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "Sagua urruntzean"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "ms"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "Nabigatu hona"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "Nabigatu hona: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(ez da ezarri)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "Desplazamenduaren efektua"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "Klik egitean"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "Ireki geruza"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "Ireki geruz: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "Ireki helbidea"
@@ -3817,147 +3788,147 @@ msgstr "Ireki helbidea"
msgid "workspace.options.interaction-out"
msgstr "Kanpoan"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "Behean erdian"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "Behean ezkerrean"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "Behean eskuman"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "Erdiratu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "Eskuzkoa"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "Goian erdian"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "Goian ezkerrean"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "Goian eskuman"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "Posizioa"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "Mantendu scrollaren posizioa"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "Aurreko pantaila"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "Honekiko erlatiboa"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "norbera"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "Erakutsi/Ezkutatu geruza"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "Erakutsi/Ezkutatu geruza: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "Hasi"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "Sagua gainetik pasatzean"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "Sakatzean"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "Interakzioak"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "Kolorea"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "Erretako kolorea"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "Saihestu kolorea"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "Ilundu"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "Diferentzia"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "Baztertu"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Argi gogorra"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Ñabardura"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Argitu"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "Argitasuna"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "Biderkatu"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "Normala"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "Geruza"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "Asetasuna"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Pantaila"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "Argi biguna"
@@ -3981,19 +3952,19 @@ msgstr "Aukeratutako geruzak"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "Aukera aurreratuak"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "Gehieneko altuera"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "Gehieneko zabalera"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "Gutxieneko altuera"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "Gutxieneko zabalera"
@@ -4107,15 +4078,15 @@ msgstr "Tarteko espazioa"
msgid "workspace.options.layout.top"
msgstr "Goian"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "Kolore gehiago"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "Liburutegiko kolore gehiago"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "Opakotasuna"
@@ -4124,27 +4095,27 @@ msgstr "Opakotasuna"
msgid "workspace.options.position"
msgstr "Posizioa"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "Prototipoa"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "Erradioa"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "Behean ezkerrean"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "Behean eskuman"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "Goian ezkerrean"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "Goian eskuman"
@@ -4156,7 +4127,7 @@ msgstr "Azkenak"
msgid "workspace.options.retry"
msgstr "Berriz saiatu"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "Biraketa"
@@ -4164,29 +4135,29 @@ msgstr "Biraketa"
msgid "workspace.options.search-font"
msgstr "Bilatu letra-tipoa"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr ""
"Aukeratu forma bat, arbel bat edo talde bat eta arrastatu konexioa beste "
"arbel batera."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "Aukeratutako koloreak"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "Aukeraketa bete"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "Aukeraketa trazatu"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "Lausotu"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "Itzalaren kolorea"
@@ -4198,47 +4169,48 @@ msgstr "Kendu itzala"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "Barruko itzala"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "Banatu"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "Itzala"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "Taldearen itzala"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "Aukeraketaren itzalak"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "Erakutsi esportazioan"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "Erakutsi ikusteko moduan"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "Tamaina"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "Aurredefinitutako tamaina"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "Trazua"
@@ -4257,15 +4229,15 @@ msgstr "Diamante erako markatzailea"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "Lerro erako gezia"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "Bat ere ez"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "Txanda"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "Karratua"
@@ -4279,71 +4251,71 @@ msgstr "Lauki erako marka"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "Hiruki gezia"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "Trazuaren kolorea"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "Marraren zabalera"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "Erdiratu"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "Marrekin"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "Muntuekin"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "Barruan"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "Nahastuta"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "Kanpoan"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "Solidoa"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "Lerrokatu behean"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "Lerrokatu erdian"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "Lerrokatu goian"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "LTR"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "RTL"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "Altuera automatikoa"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "Zabalera automatikoa"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "Finkoa"
@@ -4365,35 +4337,35 @@ msgstr "Letra xeheak"
msgid "workspace.options.text-options.none"
msgstr "Bat ere ez"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "Gaineko marra (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "Lerrokatu erdian"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "Justifikatu"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "Lerrokatu ezkerrean"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "Lerrokatu eskuman"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "Kontsultaren testua"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "Taldekatu testua"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "Aukeraketa testua"
@@ -4402,7 +4374,7 @@ msgstr "Aukeraketa testua"
msgid "workspace.options.text-options.titlecase"
msgstr "Izenburuaren mota"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "Azpimarra (%s)"
@@ -4411,19 +4383,19 @@ msgstr "Azpimarra (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "Letra larriak"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr "Erabili goiburuko play botoia prototipoa ikusteko."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "Zabalera"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "X"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Y"
@@ -4487,7 +4459,7 @@ msgstr "Kopiatu"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "Aukeraketa arbelera"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "Sortu osagaia"
@@ -4495,7 +4467,7 @@ msgstr "Sortu osagaia"
msgid "workspace.shape.menu.cut"
msgstr "Ebaki"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "Ezabatu"
@@ -4503,15 +4475,15 @@ msgstr "Ezabatu"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "Ezabatu fluxuaren hasiera"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "Askatu instantzia"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "Askatu instantziak"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "Diferentzia"
@@ -4523,11 +4495,11 @@ msgstr "Bikoiztu"
msgid "workspace.shape.menu.edit"
msgstr "Editatu"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "Baztertu"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "Lautu"
@@ -4560,19 +4532,19 @@ msgstr "Joan osagai nagusiaren fitxategira"
msgid "workspace.shape.menu.group"
msgstr "Taldea"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "Ezkutatu"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "Erakutsi/Ezkuatu interfazea"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "Ebakidura"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "Blokeatu"
@@ -4580,7 +4552,7 @@ msgstr "Blokeatu"
msgid "workspace.shape.menu.mask"
msgstr "Maskara aplikatu"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "Itsatsi"
@@ -4592,11 +4564,11 @@ msgstr "Bidea"
msgid "workspace.shape.menu.remove-flex"
msgstr "Ezabatu flex diseinua"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "Berrezarri gainidazketak"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "Berrezarri osagai nagusia"
@@ -4604,15 +4576,15 @@ msgstr "Berrezarri osagai nagusia"
msgid "workspace.shape.menu.select-layer"
msgstr "Aukeratu geruza"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "Erakutsi"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "Ikusi baliabideen panelean"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "Erakutsi osagai nagusia"
@@ -4625,6 +4597,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "Ezarri iruditxo gisa"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "Eraldatu bidera"
@@ -4632,11 +4605,11 @@ msgstr "Eraldatu bidera"
msgid "workspace.shape.menu.ungroup"
msgstr "Banatu"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "Batu"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "Desblokeatu"
@@ -4649,7 +4622,7 @@ msgstr "Desegin maskara"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "Eguneratu osagai nagusiak"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "Eguneratu osagai nagusia"
@@ -4661,11 +4634,11 @@ msgstr "Itxi alboko barra"
msgid "workspace.sidebar.expand"
msgstr "Ireki alboko barra"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "Historikoa"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "Geruzak"
@@ -4705,7 +4678,7 @@ msgstr "Testuak"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "Inportatutako SVG atributuak"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "Orrialdeak"
@@ -4713,7 +4686,7 @@ msgstr "Orrialdeak"
msgid "workspace.sitemap"
msgstr "Web mapa"
-#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "Baliabideak"
@@ -4721,7 +4694,7 @@ msgstr "Baliabideak"
msgid "workspace.toolbar.color-palette"
msgstr "Kolore paleta (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "Iruzkinak (%s)"
@@ -4911,15 +4884,15 @@ msgstr "Honen gaineko eragiketa: %s"
msgid "workspace.undo.title"
msgstr "Historia"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "Baztertu"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "Eguneraketak daude partekatutako liburutegietan"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "Eguneratu"
diff --git a/frontend/translations/fa.po b/frontend/translations/fa.po
index 6ce157fe6b..b5ffaa6431 100644
--- a/frontend/translations/fa.po
+++ b/frontend/translations/fa.po
@@ -178,7 +178,7 @@ msgstr ""
"من با قوانین و مقررات این سرویس و چگونگی مراقبت از اطلاعات شخصی در این "
"سرویس را قبول میکنم."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "شرایط استفاده از خدمات"
@@ -197,7 +197,7 @@ msgstr "ما یک ایمیل تأیید ارسال کردیم به"
msgid "auth.work-email"
msgstr "ایمیلِ کار"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "انتشار"
@@ -269,7 +269,7 @@ msgstr "اشتراکگذاری پروتوتایپها"
msgid "common.share-link.view-all"
msgstr "انتخاب همه"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "لغو انتشار"
@@ -387,7 +387,7 @@ msgstr "توکن دسترسی تاریخ انقضایش در تاریخ %s تم
msgid "dashboard.access-tokens.token-will-not-expire"
msgstr "این توکن دسترسی تاریخ انقضا ندارد"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "افزودن بهعنوان کتابخانه مشترک"
@@ -395,27 +395,27 @@ msgstr "افزودن بهعنوان کتابخانه مشترک"
msgid "dashboard.change-email"
msgstr "تغییر ایمیل"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(کپی)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "ایجاد تیم جدید"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Penpot شما"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "حذف تیم"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "دانلود فایل پنپات (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "دانلود فایل استاندارد (.svg + .json)"
@@ -431,7 +431,7 @@ msgstr "فایلهای %s را کپی کنید"
msgid "dashboard.export-binary-multi"
msgstr "دانلود %s عدد فایل های پنپات (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "خروجی آرتبوردها به پیدیاف"
@@ -447,7 +447,7 @@ msgstr "خروجی فایلهای %s پنپات"
msgid "dashboard.export-multiple.selected"
msgstr "%s از %s عناصر انتخابشده"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "اکسپورت"
@@ -607,11 +607,11 @@ msgstr "در حال آپلود اطلاعات روی سرور (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "در حال آپلود فایل: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "دعوت به تیم"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "خروج از تیم"
@@ -623,7 +623,7 @@ msgstr "کتابخانهها و قالبها"
msgid "dashboard.libraries-and-templates.explore"
msgstr "بیشتر آنها را کاوش کنید و بدانید که چگونه مشارکت کنید"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "مشکلی در ایمپورت کردن قالب وجود داشت. قالب ایمپورت نشد."
@@ -655,7 +655,7 @@ msgstr "انتقال به تیم دیگر"
msgid "dashboard.new-file"
msgstr "+ فایل جدید"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "فایل جدید"
@@ -663,7 +663,7 @@ msgstr "فایل جدید"
msgid "dashboard.new-project"
msgstr "+ پروژه جدید"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "پروژه جدید"
@@ -671,7 +671,7 @@ msgstr "پروژه جدید"
msgid "dashboard.no-matches-for"
msgstr "هیچ منطبقی برای «%s» یافت نشد"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "پروژههای پین شده در اینجا ظاهر میشوند"
@@ -687,7 +687,7 @@ msgstr "آدرس ایمیل شما با موفقیت تایید شد"
msgid "dashboard.notifications.password-saved"
msgstr "رمزعبور با موفقیت ذخیره شد!"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "اعضای %s"
@@ -703,7 +703,7 @@ msgstr "گزینهها"
msgid "dashboard.password-change"
msgstr "تغییر رمزعبور"
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "پین/برداشتن پین"
@@ -724,7 +724,7 @@ msgstr "حذف به عنوان کتابخانه مشترک"
msgid "dashboard.save-settings"
msgstr "ذخیره تنظیمات"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "جستجو…"
@@ -760,7 +760,7 @@ msgstr "فایل شما با موفقیت duplicate شد"
msgid "dashboard.success-duplicate-project"
msgstr "پروژه شما با موفقیت duplicate شد"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "فایل شما با موفقیت منتقل شد"
@@ -772,15 +772,15 @@ msgstr "فایلهای شما با موفقیت منتقل شدند"
msgid "dashboard.success-move-project"
msgstr "پروژه شما با موفقیت منتقل شد"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "اطلاعات تیم"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "اعضای تیم"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "پروژههای تیم"
@@ -796,7 +796,7 @@ msgstr "نتایج جستجو"
msgid "dashboard.type-something"
msgstr "برای نمایش نتایج جستجو تایپ کنید"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "لغو انتشار کتابخانه"
@@ -816,7 +816,7 @@ msgstr "ایمیل"
msgid "dashboard.your-name"
msgstr "نام شما"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "پنپات شما"
@@ -832,11 +832,11 @@ msgstr "توجه"
msgid "ds.component-subtitle"
msgstr "کامپوننتها برای بهروزرسانی:"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "لغو"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "بله"
@@ -876,7 +876,7 @@ msgstr "ایمیل قبلاً تأیید شده است."
msgid "errors.email-as-password"
msgstr "شما نمیتوانید از ایمیل خود به عنوان رمزعبور استفاده کنید"
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "اشتباهی رخ داده است."
@@ -934,15 +934,15 @@ msgstr "پروفایل مسدود شده"
msgid "errors.registration-disabled"
msgstr "ثبتنام در حال حاضر غیرفعال است."
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr "اعضای کافی برای ترک تیم وجود ندارد، احتمالاً میخواهید آن را حذف کنید."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "عضوی که میخواهید اختصاص دهید وجود ندارد."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr "مالک نمیتواند تیم را ترک کند، شما باید نقش مالک را مجدداً اختصاص دهید."
@@ -1014,19 +1014,19 @@ msgstr "خطایی رخ داده است"
msgid "inspect.attributes.blur"
msgstr "محو"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "مقدار"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1034,7 +1034,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "پر"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "دانلود تصویر منبع"
@@ -1124,51 +1124,52 @@ msgstr "جامد"
msgid "inspect.attributes.stroke.width"
msgstr "عرض"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "تایپوگرافی"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "خانواده فونت"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "اندازه فونت"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "استایل فونت"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "فاصله بین حروف"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "ارتفاع خط"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "هیچیک"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "خطزیر"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "تبدیل متن"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "حروف کوچک"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "هیچیک"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "حروف بزرگ"
@@ -1228,7 +1229,7 @@ msgstr "متن"
msgid "inspect.tabs.info"
msgstr "اطلاعات"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "میانبرها"
@@ -1240,11 +1241,11 @@ msgstr "تایید"
msgid "labels.add-custom-font"
msgstr "اضافه کردن فونت سفارشی"
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "مدیر"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "همه"
@@ -1263,19 +1264,19 @@ msgstr ""
"به نظر میرسد باید کمی صبر کنید و دوباره تلاش کنید; ما در حال انجام تعمیرات "
"کوچک روی سرورهای خود هستیم."
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "لغو"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "بستن"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "نظرات"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "انجمن"
@@ -1283,7 +1284,7 @@ msgstr "انجمن"
msgid "labels.confirm-password"
msgstr "تایید رمزعبور"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "ادامه"
@@ -1295,7 +1296,7 @@ msgstr "ادامه دادن با"
msgid "labels.continue-with-penpot"
msgstr "شما میتوانید با یک حساب Penpot ادامه دهید"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "ایجاد"
@@ -1315,7 +1316,7 @@ msgstr "فونتهای سفارشی"
msgid "labels.dashboard"
msgstr "داشبورد"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "حذف"
@@ -1327,7 +1328,7 @@ msgstr "حذف نظر"
msgid "labels.delete-comment-thread"
msgstr "حذف موضوع"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "حذف دعوت"
@@ -1335,11 +1336,11 @@ msgstr "حذف دعوت"
msgid "labels.delete-multi-files"
msgstr "حذف فایلهای %s"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "پیشنویسها"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "ویرایش"
@@ -1347,15 +1348,15 @@ msgstr "ویرایش"
msgid "labels.edit-file"
msgstr "ویرایش فایل"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "ویرایشگر"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "منقضی شده"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "اکسپورت"
@@ -1379,15 +1380,15 @@ msgstr "ارائهدهندگان فونت"
msgid "labels.font-variants"
msgstr "استایلها"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "فونتها"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "مخزن Github"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "بازخورد بده"
@@ -1395,11 +1396,11 @@ msgstr "بازخورد بده"
msgid "labels.go-back"
msgstr "برگرد"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "مرکز کمک"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "پنهان کردن نظرات حل شده"
@@ -1417,7 +1418,7 @@ msgstr ""
msgid "labels.internal-error.main-message"
msgstr "خطای داخلی"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "دعوتنامهها"
@@ -1425,7 +1426,7 @@ msgstr "دعوتنامهها"
msgid "labels.language"
msgstr "زبان"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "کتابخانهها و قالبها"
@@ -1433,15 +1434,15 @@ msgstr "کتابخانهها و قالبها"
msgid "labels.log-or-sign"
msgstr "ورود یا ثبت نام"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "خروج"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "عضو"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "اعضا"
@@ -1449,11 +1450,11 @@ msgstr "اعضا"
msgid "labels.new-password"
msgstr "رمزعبور جدید"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "هیچ اعلان نظر معلقی ندارید"
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "هیچ دعوتنامهای وجود ندارد."
@@ -1466,7 +1467,7 @@ msgstr "ممکن است این صفحه وجود نداشته باشد یا شم
msgid "labels.not-found.main-message"
msgstr "اوپس!"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "۱ فایل"
@@ -1478,7 +1479,7 @@ msgid_plural "labels.num-of-frames"
msgstr[0] "۱ برد"
msgstr[1] "%s برد"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "۱ پروژه"
@@ -1497,7 +1498,7 @@ msgstr "فقط برای تو"
msgid "labels.or"
msgstr "یا"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "مالک"
@@ -1505,7 +1506,7 @@ msgstr "مالک"
msgid "labels.password"
msgstr "کلمهعبور"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "در انتظار"
@@ -1513,11 +1514,11 @@ msgstr "در انتظار"
msgid "labels.profile"
msgstr "پروفایل"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "پروژهها"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "یادداشتهای انتشار"
@@ -1526,11 +1527,11 @@ msgstr "یادداشتهای انتشار"
msgid "labels.remove"
msgstr "حذف"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "حذف عضو"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "تغییرنام"
@@ -1538,7 +1539,7 @@ msgstr "تغییرنام"
msgid "labels.rename-team"
msgstr "تغییر نام تیم"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "فرستادن مجدد دعوتنامه"
@@ -1546,11 +1547,11 @@ msgstr "فرستادن مجدد دعوتنامه"
msgid "labels.retry"
msgstr "امتحان دوباره"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "نقش"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "ذخیره"
@@ -1574,7 +1575,7 @@ msgstr "ما در حال تعمیر و نگهداری برنامهریزی ش
msgid "labels.service-unavailable.main-message"
msgstr "سرویس در دسترس نیست"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "تنظیمات"
@@ -1582,11 +1583,11 @@ msgstr "تنظیمات"
msgid "labels.share-prototype"
msgstr "به اشتراک گذاشتن پروتوتایپ"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "کتابخانههای مشترک"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "نمایش همه نظرات"
@@ -1594,15 +1595,15 @@ msgstr "نمایش همه نظرات"
msgid "labels.show-comments-list"
msgstr "نمایش لیست نظرات"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "فقط نظرات خودتان را نشان دهید"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "وضعیت"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "آموزشها"
@@ -1626,7 +1627,7 @@ msgstr "آپلود فونتهای سفارشی"
msgid "labels.uploading"
msgstr "درحال بارگذاری…"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "بیننده"
@@ -1634,11 +1635,11 @@ msgstr "بیننده"
msgid "labels.write-new-comment"
msgstr "نظر جدید بنویس"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(شما)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "حساب شما"
@@ -1756,11 +1757,11 @@ msgstr ""
msgid "modals.delete-font.title"
msgstr "درحال حذف فونت"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "آیا مطمئن هستید که میخواهید این صفحه را حذف کنید؟"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "حذف صفحه"
@@ -1794,51 +1795,51 @@ msgid_plural "modals.delete-shared-confirm.title"
msgstr[0] "درحال حذف فایل"
msgstr[1] "درحال حذف فایلها"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "حذف تیم"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"آیا مطمئنید که میخواهید این تیم را حذف کنید؟ تمام پروژهها و فایلهای "
"مرتبط با تیم به طور دائم حذف خواهند شد."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "درحال حذف تیم"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "حذف عضو"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "آیا مطمئن هستید که میخواهید این عضو را از تیم حذف کنید؟"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "حذف عضو تیم"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "ارسال دعوتنامه"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "ایمیلها، با کاما از هم جدا شدهاند"
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "دعوت اعضا به تیم"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"از آنجایی که شما تنها عضو این تیم هستید، تیم به همراه پروژهها و فایلهایش "
"حذف خواهد شد."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "آیا مطمئنید که میخواهید تیم %s را ترک کنید؟"
@@ -1862,35 +1863,35 @@ msgstr "انتخاب یک عضو برای ارتقا"
msgid "modals.leave-and-reassign.title"
msgstr "قبل از رفتن"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "خروج از تیم"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "آیا مطمئنید که میخواهید این تیم را ترک کنید؟"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "درحال ترک تیم"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "انتقال مالکیت"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"اگر مالکیت را منتقل کنید، نقش خود را به مدیر تغییر میدهید و برخی از "
"مجوزهای این تیم را از دست میدهید. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr ""
"شما مالک فعلی این تیم هستید. آیا مطمئنید که میخواهید %s را مالک جدید تیم "
"کنید؟"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "مالک جدید تیم"
@@ -1906,11 +1907,11 @@ msgstr ""
"پس از حذف بهعنوان کتابخانه مشترک، کتابخانه فایل این فایل برای استفاده در "
"بین بقیه فایلهای شما در دسترس نخواهد بود."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "بهروزرسانی"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "لغو"
@@ -1938,139 +1939,139 @@ msgstr "پس از نامگذاری تیم خود، میتوانید افرا
msgid "onboarding.welcome.alt"
msgstr "Penpot"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "مخلوط"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "داشبورد"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "بیننده"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "ویرایش"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "منوی اصلی"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "پنلها"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "مسیرها"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "شکلها"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "ابزار"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "بزرگنمایی"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "بزرگنمایی"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "نظرات"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "افزودن گره"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "تراز به پایین"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "کپی"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "حذف"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "منحنی"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "بیضی"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "آرتبورد"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "مسیر"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "مستطیل"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "متن"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "لغو"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "حرکت افقی"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "حرکت عمودی"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "جستجو"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "گروه"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "ماسک"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "انتقال"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "چسباندن"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "واگرد"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "حذف گروه"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "برداشتن ماسک"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "توزیع به صورت عمودی"
@@ -2114,15 +2115,15 @@ msgstr "رمزعبور - Penpot"
msgid "title.settings.profile"
msgstr "پروفایل - پنپات"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "دعوتنامهها - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "اعضا - %s - پنپات"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "تنظیمات - %s - پنپات"
@@ -2190,31 +2191,31 @@ msgstr "نمایش تعاملات در کلیک"
msgid "viewer.header.sitemap"
msgstr "نقشه سایت"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "تراز کردن مرکز افقی (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "توزیع فاصله افقی (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "تراز به چپ (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "تراز کردن به راست (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "تراز کردن پایین (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "تراز کردن مرکز عمودی (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "توزیع فاصله عمودی (%s)"
@@ -2223,35 +2224,35 @@ msgstr "توزیع فاصله عمودی (%s)"
msgid "workspace.assets.assets"
msgstr "داراییها"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "تمام داراییها"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "رنگها"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "کامپوننتها"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "ایجاد یک گروه"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr "آیتمهای شما به طور خودکار به عنوان \"نام گروه / نام آیتم\" نامگذاری میشوند"
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "حذف"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "تکثیر"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "ویرایش"
@@ -2260,15 +2261,15 @@ msgstr "ویرایش"
msgid "workspace.assets.graphics"
msgstr "گرافیک"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "گروه"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "تغییرنام"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "تایپوگرافیها"
@@ -2281,7 +2282,7 @@ msgstr "فونت"
msgid "workspace.assets.typography.font-size"
msgstr "اندازه"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "مثال"
@@ -2289,7 +2290,7 @@ msgstr "مثال"
msgid "workspace.assets.typography.text-transform"
msgstr "تبدیل متن"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "حذف گروه"
@@ -2297,31 +2298,31 @@ msgstr "حذف گروه"
msgid "workspace.focus.selection"
msgstr "انتخاب"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "پنهان کردن پالت فونتها"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "ویرایش"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "فایل"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "اولویتها"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "بازدید"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "نمایش پالت فونتها"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "بازنشانی"
@@ -2352,15 +2353,15 @@ msgstr "افزودن"
msgid "workspace.libraries.colors.hsv"
msgstr "HSV"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "ذخیره استایل رنگ"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "کتابخانهها"
@@ -2369,31 +2370,31 @@ msgstr "کتابخانهها"
msgid "workspace.libraries.library"
msgstr "کتابخانه"
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "هیچ کتابخانه مشترکی وجود ندارد که نیاز به بهروزرسانی داشته باشد"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "جستجوی کتابخانههای مشترک"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "کتابخانههای مشترک"
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "بهروزرسانی"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "بهروزرسانیها"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "محو"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "کامپوننت"
@@ -2425,7 +2426,7 @@ msgstr "مقیاس"
msgid "workspace.options.constraints.top"
msgstr "بالا"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "طراحی"
@@ -2433,27 +2434,27 @@ msgstr "طراحی"
msgid "workspace.options.export"
msgstr "اکسپورت"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "پسوند"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "درحال گرفتن خروجی…"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "پر"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "خودکار"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "ستونها"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "رنگ"
@@ -2462,11 +2463,11 @@ msgstr "رنگ"
msgid "workspace.options.grid.params.columns"
msgstr "ستونها"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "ارتفاع"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "لبه"
@@ -2475,7 +2476,7 @@ msgstr "لبه"
msgid "workspace.options.grid.params.rows"
msgstr "ردیفها"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "تنظیم به عنوان پیشفرض"
@@ -2489,87 +2490,87 @@ msgstr "اندازه"
msgid "workspace.options.grid.params.type"
msgstr "نوع"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "پایین"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "مرکز"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "چپ"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "راست"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "بالا"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "پهنا"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "ردیفها"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "مربع"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "بلندی"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "عمل"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "انیمیشن"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "حل کردن"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "هیچیک"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "هل"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "اسلاید"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "تاخیر"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "مقصد"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "مدتزمان"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "تسهیل"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "سهولت"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "خطی"
@@ -2578,11 +2579,11 @@ msgstr "خطی"
msgid "workspace.options.interaction-in"
msgstr "در"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "مث"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(تنظیم نشده)"
@@ -2591,63 +2592,63 @@ msgstr "(تنظیم نشده)"
msgid "workspace.options.interaction-out"
msgstr "خارج"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "مرکز"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "دستی"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "موقعیت"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "خود"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "رنگ"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "تاریک"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "تفاوت"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "رنگ"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "روشن کردن"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "درخشندگی"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "تکثیر"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "معمولی"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "اشباع"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "صفحه نمایش"
@@ -2661,11 +2662,11 @@ msgstr "لایه"
msgid "workspace.options.position"
msgstr "موقعیت"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "پروتوتایپ"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "گردی"
@@ -2677,103 +2678,104 @@ msgstr "اخیر"
msgid "workspace.options.retry"
msgstr "تلاش دوباره"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "چرخش"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr "یک شکل، برد یا گروه را برای کشیدن اتصال به تابلوی دیگر انتخاب کنید."
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "محو"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "سایه"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "اندازه"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "استروک"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "هیچیک"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "گردی"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "مربع"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "مرکز"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "نقطهچین"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "خطچین"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "داخل"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "مخلوط"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "خارج"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "تراز پایین"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "تراز وسط"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "تراز بالا"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "LTR"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "RTL"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "ارتفاع خودکار"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "عرض خودکار"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "درست شد"
@@ -2795,31 +2797,31 @@ msgstr "حروف کوچک"
msgid "workspace.options.text-options.none"
msgstr "هیچیک"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "تراز در مرکز"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "تراز چپ"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "تراز راست"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "متن"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "متن گروهی"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "متن انتخابی"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "خطزیر (%s)"
@@ -2828,19 +2830,19 @@ msgstr "خطزیر (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "حروف بزرگ"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr "از دکمه پخش در هدر برای اجرای نمای پروتوتایپ استفاده کنید."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "پهنا"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "X"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Y"
@@ -2872,7 +2874,7 @@ msgstr "فرستادن به عقب"
msgid "workspace.shape.menu.copy"
msgstr "کپی"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "ایجاد کامپوننت"
@@ -2880,11 +2882,11 @@ msgstr "ایجاد کامپوننت"
msgid "workspace.shape.menu.cut"
msgstr "برش"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "حذف"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "تفاوت"
@@ -2896,7 +2898,7 @@ msgstr "تکرار"
msgid "workspace.shape.menu.edit"
msgstr "ویزایش"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "صاف"
@@ -2929,19 +2931,19 @@ msgstr "به فایل کامپوننت اصلی بروید"
msgid "workspace.shape.menu.group"
msgstr "گروه"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "مخفی"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "نمایش/پنهان کردن رابط کاربری"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "تقاطع"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "قفل"
@@ -2949,7 +2951,7 @@ msgstr "قفل"
msgid "workspace.shape.menu.mask"
msgstr "ماسک"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "چسباندن"
@@ -2957,7 +2959,7 @@ msgstr "چسباندن"
msgid "workspace.shape.menu.path"
msgstr "مسیر"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "بازیابی کامپوننت اصلی"
@@ -2965,15 +2967,15 @@ msgstr "بازیابی کامپوننت اصلی"
msgid "workspace.shape.menu.select-layer"
msgstr "انتخاب لایه"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "نمایش"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "نمایش در پنل دارایی"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "نمایش کامپوننت اصلی"
@@ -2986,6 +2988,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "تنظیم بعنوان تصویر کوچک"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "تبدیل به مسیر"
@@ -2993,11 +2996,11 @@ msgstr "تبدیل به مسیر"
msgid "workspace.shape.menu.ungroup"
msgstr "حذف گروه"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "متحد"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "بازکردن قفل"
@@ -3010,7 +3013,7 @@ msgstr "حذف ماسک"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "بهروزرسانی کامپوننتهای اصلی"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "بهروزرسانی کامپوننت اصلی"
@@ -3018,11 +3021,11 @@ msgstr "بهروزرسانی کامپوننت اصلی"
msgid "workspace.sidebar.expand"
msgstr "گسترش نوار کناری"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "تاریخچه"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "لایهها"
@@ -3062,7 +3065,7 @@ msgstr "متنها"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "ویژگیهای SVG ایمپورت شد"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "صفحات"
@@ -3070,7 +3073,7 @@ msgstr "صفحات"
msgid "workspace.sitemap"
msgstr "نقشه سایت"
-#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "داراییها"
@@ -3078,7 +3081,7 @@ msgstr "داراییها"
msgid "workspace.toolbar.color-palette"
msgstr "پالت رنگ (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "نظرات (%s)"
@@ -3264,15 +3267,15 @@ msgstr "عملیات بیشاز %s"
msgid "workspace.undo.title"
msgstr "تاریخچه"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "رد"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "بهروزرسانی در کتابخانههای مشترک وجود دارد"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "بهروزرسانی"
diff --git a/frontend/translations/fin_FI.po b/frontend/translations/fin_FI.po
index eea454cb6d..9461d58748 100644
--- a/frontend/translations/fin_FI.po
+++ b/frontend/translations/fin_FI.po
@@ -142,7 +142,7 @@ msgstr "Luo uusi käyttäjä"
msgid "auth.sidebar-tagline"
msgstr "Avoimen lähdekoodin ratkaisu suunnitteluun ja prototyyppien valmistukseen."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Käyttöehdot"
@@ -150,7 +150,7 @@ msgstr "Käyttöehdot"
msgid "auth.verification-email-sent"
msgstr "Lähetimme vahvistussähköpostin osoitteeseen"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Julkaise"
@@ -222,7 +222,7 @@ msgstr "Jaa prototyypit"
msgid "common.share-link.view-all"
msgstr "Valitse kaikki"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Peruuta julkaisu"
diff --git a/frontend/translations/fo.po b/frontend/translations/fo.po
index 0939c3c9d1..add89f372d 100644
--- a/frontend/translations/fo.po
+++ b/frontend/translations/fo.po
@@ -176,7 +176,7 @@ msgstr "Stovna eina konto"
msgid "auth.sidebar-tagline"
msgstr "Loysnin við opnari keldukotu, at formgeva og frumsniða."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Treytir"
@@ -184,7 +184,7 @@ msgstr "Treytir"
msgid "auth.verification-email-sent"
msgstr "Vit hava sent ein váttanar teldupost til"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Gev út"
@@ -256,7 +256,7 @@ msgstr "Deil frumsnið"
msgid "common.share-link.view-all"
msgstr "Vel alt"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Angra útgevan"
@@ -299,7 +299,7 @@ msgstr "Kom ein túr gjøgnum Penpot og lær høvuðsfunkurnar at kenna."
msgid "dasboard.walkthrough-hero.start"
msgstr "Byrja rundferð"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Legg afturat sum Deilt Savn"
@@ -307,27 +307,27 @@ msgstr "Legg afturat sum Deilt Savn"
msgid "dashboard.change-email"
msgstr "Broyt teldupost"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(avrita)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Stovna nýtt toymi"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Títt Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Strika toymi"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Heinta Penpot fílu (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Heinta standarafílu (.svg + .json)"
@@ -343,7 +343,7 @@ msgstr "Tvítak %s fílur"
msgid "dashboard.export-binary-multi"
msgstr "Heinta %s Penpot fílur (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Útflyt borð sum PDF"
@@ -359,7 +359,7 @@ msgstr "Útflyt Penpot %s fílur"
msgid "dashboard.export-multiple.selected"
msgstr "%s av %s lutum eru valdir"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Útflyt"
@@ -452,11 +452,11 @@ msgstr "Sendur upp dátur til ambætara (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Innleggur fílu: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Bjóða við í toymi"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Far úr toymu"
@@ -484,7 +484,7 @@ msgstr "Flyt til eitt annað toymi"
msgid "dashboard.new-file"
msgstr "+ Nýggja fílu"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Nýggja fílu"
@@ -492,7 +492,7 @@ msgstr "Nýggja fílu"
msgid "dashboard.new-project"
msgstr "+ Nýggj verkætlan"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Nýggj verkætlan"
@@ -500,7 +500,7 @@ msgstr "Nýggj verkætlan"
msgid "dashboard.no-matches-for"
msgstr "Onki samsvar funnið fyri \"%\""
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Festar verkætlanir verða víst her"
@@ -516,7 +516,7 @@ msgstr "Tín teldupostadressa er váttta"
msgid "dashboard.notifications.password-saved"
msgstr "Loyniorði er goymt!"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s limir"
@@ -532,7 +532,7 @@ msgstr "Valmøguleikar"
msgid "dashboard.password-change"
msgstr "Broyt loyniorð"
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Fest/Loys"
@@ -553,7 +553,7 @@ msgstr "Strikað sum Deilt Savn"
msgid "dashboard.save-settings"
msgstr "Goym stillingar"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Leita…"
@@ -581,7 +581,7 @@ msgstr "Tín fíla er strikað"
msgid "dashboard.success-delete-project"
msgstr "Tín verkætlan er strikað"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Tín fíla er flutt"
@@ -593,15 +593,15 @@ msgstr "Tínar fílur eru fluttar"
msgid "dashboard.success-move-project"
msgstr "Tín verkætlan er flutt"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Toymisupplýsingar"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Toymislimir"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Toymisverkætlanir"
@@ -621,7 +621,7 @@ msgstr "Skriva fyri at leita eftir úrslitum"
msgid "ds.alert-ok"
msgstr "Ókey"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Ókey"
@@ -637,7 +637,7 @@ msgstr "Strikað %s fílur"
msgid "labels.edit-file"
msgstr "Broyt fílu"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "1 fíla"
@@ -715,6 +715,6 @@ msgstr "%s - Penpot"
msgid "title.settings.profile"
msgstr "Vangamynd - Penpot"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "Fílu"
diff --git a/frontend/translations/fr.po b/frontend/translations/fr.po
index 4f0678b5ff..470e559128 100644
--- a/frontend/translations/fr.po
+++ b/frontend/translations/fr.po
@@ -1,19 +1,19 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-28 10:46+0000\n"
-"Last-Translator: Ingrid Pigueron \n"
-"Language-Team: French "
-" \n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
+"Last-Translator: Pablo Alba \n"
+"Language-Team: French \n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
-"X-Generator: Weblate 5.13\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
-msgstr "Avez-vous déjà un compte ?"
+msgstr "Vous avez déjà un compte ?"
#: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:238
msgid "auth.check-mail"
@@ -23,7 +23,7 @@ msgstr "Vérifiez vos emails"
#, unused
msgid "auth.check-your-email"
msgstr ""
-"Vérifiez votre email et cliquez sur le lien pour vérifier et commencer à "
+"Vérifiez votre e-mail et cliquez sur le lien pour vérifier et commencer à "
"utiliser Penpot."
#: src/app/main/ui/auth/recovery.cljs:67
@@ -147,7 +147,7 @@ msgstr "Pas encore de compte ?"
msgid "auth.register-account-tagline"
msgstr ""
"Faites nous savoir ce que nous devons vous montrer sur le tableau de bord "
-"et dans les emails."
+"et dans les e-mails."
#: src/app/main/ui/auth/register.cljs:350
msgid "auth.register-account-title"
@@ -181,7 +181,7 @@ msgstr ""
"J'accepte les [termes du service](%s) et la [politique de "
"confidentialité](%s)."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Conditions générales d'utilisation"
@@ -208,7 +208,7 @@ msgstr "...image de marque, illustrations, supports marketing, etc."
msgid "comments.mentions.not-found"
msgstr "Aucun membre trouvé avec @%s"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Publier"
@@ -280,7 +280,7 @@ msgstr "Partager les prototypes"
msgid "common.share-link.view-all"
msgstr "Tout sélectionner"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Dépublier"
@@ -403,7 +403,7 @@ msgstr "Le jeton n'a pas de date d'expiration"
msgid "dashboard.add-file"
msgstr "Ajouter un fichier"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Ajouter une bibliothèque partagée"
@@ -411,31 +411,31 @@ msgstr "Ajouter une bibliothèque partagée"
msgid "dashboard.change-email"
msgstr "Changer l'adresse e‑mail"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(copie)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "+ Créer une nouvelle équipe"
-#: src/app/main/ui/workspace/main_menu.cljs:631
+#: src/app/main/ui/workspace/main_menu.cljs:659
msgid "dashboard.create-version-menu"
msgstr "Sauvegarder cette version"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Votre Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Supprimer l’équipe"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Télécharger le fichier Penpot (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Télécharger le fichier standard (.svg + .json)"
@@ -519,7 +519,7 @@ msgstr "Commencez à fabriquer des choses géniales"
msgid "dashboard.export-binary-multi"
msgstr "Télécharger %s fichiers Penpot (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Exporter les plans de travail au format PDF"
@@ -535,7 +535,7 @@ msgstr "Exporter %s fichiers"
msgid "dashboard.export-multiple.selected"
msgstr "%s éléments sur les %s sélectionnés"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Exporter"
@@ -759,11 +759,11 @@ msgstr "Envoi des données au serveur (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Envoi du fichier : %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Inviter des personnes"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Quitter l’équipe"
@@ -771,7 +771,7 @@ msgstr "Quitter l’équipe"
msgid "dashboard.libraries-and-templates"
msgstr "Bibliothèques et Modèles"
-#: src/app/main/ui/dashboard/templates.cljs:259
+#: src/app/main/ui/dashboard/templates.cljs:267
msgid "dashboard.libraries-and-templates.description"
msgstr ""
"Voici quelques bibliothèques et modèles que vous pouvez ajouter à votre "
@@ -781,7 +781,7 @@ msgstr ""
msgid "dashboard.libraries-and-templates.explore"
msgstr "En explorez plus et découvrir comment contribuer"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr ""
"Il y avait un problème pendant l'importation de la modèle. La modèle n'est "
@@ -819,7 +819,7 @@ msgstr "Déplacer vers une autre équipe"
msgid "dashboard.new-file"
msgstr "+ Nouveau fichier"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Nouveau fichier"
@@ -827,7 +827,7 @@ msgstr "Nouveau fichier"
msgid "dashboard.new-project"
msgstr "+ Nouveau projet"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Nouveau projet"
@@ -835,11 +835,11 @@ msgstr "Nouveau projet"
msgid "dashboard.no-matches-for"
msgstr "Aucune correspondance pour « %s »"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Les projets épinglés apparaîtront ici"
-#: src/app/main/ui/dashboard/comments.cljs:90
+#: src/app/main/ui/dashboard/comments.cljs:91
msgid "dashboard.notifications"
msgstr "Notifications"
@@ -851,7 +851,7 @@ msgstr "Votre adresse e‑mail a bien été mise à jour"
msgid "dashboard.notifications.email-verified-successfully"
msgstr "Votre adresse e‑mail a bien été vérifiée"
-#: src/app/main/data/profile.cljs:272
+#: src/app/main/data/profile.cljs:273
msgid "dashboard.notifications.notifications-saved"
msgstr "Les paramètres des notifications ont été mis à jour"
@@ -859,11 +859,11 @@ msgstr "Les paramètres des notifications ont été mis à jour"
msgid "dashboard.notifications.password-saved"
msgstr "Mot de passe enregistré avec succès !"
-#: src/app/main/ui/dashboard/comments.cljs:44
+#: src/app/main/ui/dashboard/comments.cljs:45
msgid "dashboard.notifications.view"
msgstr "Voir les notifications"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s membres"
@@ -895,7 +895,7 @@ msgstr "Vous êtes maintenant propriétaire dans cette équipe."
msgid "dashboard.permissions-change.viewer"
msgstr "Vous êtes maintenant lecteur dans cette équipe."
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Épingler/Désépingler"
@@ -932,7 +932,7 @@ msgstr "Vous ne faites plus partie de l'équipe « %s »."
msgid "dashboard.save-settings"
msgstr "Enregistrer les paramètres"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Rechercher…"
@@ -1024,7 +1024,7 @@ msgstr "Notifications"
msgid "dashboard.show-all-files"
msgstr "Voir tous les fichiers"
-#: src/app/main/ui/workspace/main_menu.cljs:638
+#: src/app/main/ui/workspace/main_menu.cljs:666
msgid "dashboard.show-version-history"
msgstr "Historique des versions"
@@ -1048,7 +1048,7 @@ msgstr[1] "Vos fichiers ont bien été dupliqués"
msgid "dashboard.success-duplicate-project"
msgstr "Votre projet a bien été dupliqué"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Votre fichier a été déplacé avec succès"
@@ -1060,15 +1060,15 @@ msgstr "Vos fichiers ont bien été déplacés"
msgid "dashboard.success-move-project"
msgstr "Votre projet a bien été déplacé"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Information de l’équipe"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Membres de l’équipe"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Projets de l’équipe"
@@ -1088,7 +1088,7 @@ msgstr "Résultats de recherche"
msgid "dashboard.type-something"
msgstr "Écrivez pour rechercher"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Retirer la Bibliothèque"
@@ -1096,41 +1096,41 @@ msgstr "Retirer la Bibliothèque"
msgid "dashboard.update-settings"
msgstr "Mettre à jour les paramètres"
-#: src/app/main/ui/dashboard/sidebar.cljs:856
+#: src/app/main/ui/dashboard/sidebar.cljs:976
msgid "dashboard.upgrade-plan.no-limits"
msgstr "Aucune limite à la créativité"
-#: src/app/main/ui/dashboard/sidebar.cljs:854
+#: src/app/main/ui/dashboard/sidebar.cljs:974
msgid "dashboard.upgrade-plan.penpot-free"
msgstr "Penpot Gratuit"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "Actif"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "Quand ce webhook sera activé, les détails de l'évènement seront envoyés"
-#: src/app/main/ui/dashboard/team.cljs:982
+#: src/app/main/ui/dashboard/team.cljs:1160
msgid "dashboard.webhooks.cant-edit"
msgstr ""
"Uniquement vous pouvez supprimer ou modifier les webhooks que vous avez "
"créés."
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "Type de contenu"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "Créer un webhook"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "Webhook créé avec succès."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"Les webhooks sont une manière simple de permettre à d'autres site web et "
@@ -1138,11 +1138,11 @@ msgstr ""
"dans Penpot. Nous enverrons une requête POST à toutes les URLs que vous "
"avez indiquées."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "Appuyez sur le bouton « Ajouter un webhook » pour en ajouter un."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "Aucun webhook créé jusqu’à présent."
@@ -1162,7 +1162,7 @@ msgstr "E‑mail"
msgid "dashboard.your-name"
msgstr "Votre nom complet"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Votre Penpot"
@@ -1178,15 +1178,15 @@ msgstr "Attention"
msgid "ds.component-subtitle"
msgstr "Composants à mettre à jour :"
-#: src/app/main/ui/workspace/plugins.cljs:338, src/app/main/ui/workspace/plugins.cljs:392
+#: src/app/main/ui/workspace/plugins.cljs:339, src/app/main/ui/workspace/plugins.cljs:393
msgid "ds.confirm-allow"
msgstr "Autoriser"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Annuler"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "OK"
@@ -1194,6 +1194,26 @@ msgstr "OK"
msgid "ds.confirm-title"
msgstr "Voulez-vous vraiment ?"
+#: src/app/main/ui/ds/controls/numeric_input.cljs:98
+msgid "ds.inputs.numeric-input.no-applicable-tokens"
+msgstr "Aucun token n'est applicable dans la collection ou le thème actif."
+
+#: src/app/main/ui/ds/controls/numeric_input.cljs:99
+msgid "ds.inputs.numeric-input.no-matches"
+msgstr "Aucune correspondance."
+
+#: src/app/main/ui/ds/controls/numeric_input.cljs:641, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:138
+msgid "ds.inputs.numeric-input.open-token-list-dropdown"
+msgstr "Ouvrir la liste des tokens"
+
+#: src/app/main/ui/ds/controls/utilities/token_field.cljs:85, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:133
+msgid "ds.inputs.token-field.detach-token"
+msgstr "Détacher le token"
+
+#: src/app/main/ui/ds/controls/utilities/token_field.cljs:40, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:96, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:103
+msgid "ds.inputs.token-field.no-active-token-option"
+msgstr "Ce token n'est pas disponible dans la collection ou le thème actif."
+
#: src/app/main/data/auth.cljs:314
msgid "errors.auth-provider-not-allowed"
msgstr "Le fournisseur d'authentification n'est pas autorisé pour ce profil"
@@ -1248,7 +1268,7 @@ msgstr "Même si Penpot ne prend plus en charge ce type de ressource, vous pouve
msgid "errors.deprecated.contact.text"
msgstr "nous contacter"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:266
+#: src/app/main/data/workspace/tokens/library_edit.cljs:274
msgid "errors.drop-token-set-parent-to-child"
msgstr ""
"Impossible de mettre une collection parent dans le chemin d'un de ses "
@@ -1274,11 +1294,11 @@ msgstr "L'adresse e-mail ne correspond pas à celle de l'invitation."
msgid "errors.email-domain-not-allowed"
msgstr "Domaine non autorisé"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "L'adresse e-mail « %s » a un taux de rebond trop élevé."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "L'e-mail \"%s\" a été signalé comme spam ou a été rejeté."
@@ -1292,10 +1312,9 @@ msgstr ""
msgid "errors.feature-not-supported"
msgstr "La fonctionnalité '%s' n'est pas prise en charge."
-#: src/app/main/ui/auth/register.cljs, src/app/main/ui/dashboard/team_form.cljs, src/app/main/ui/onboarding/team_choice.cljs, src/app/main/ui/setti ngs/access_tokens.cljs, src/app/main/ui/settings/feedback.cljs, src/app/main/ui/settings/profile.cljs, src/app/main/ui/workspace/sidebar/assets.cljs
-#, unused
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs
msgid "errors.field-max-length"
-msgstr "Doit contenir au plus 1 caractère."
+msgstr "Doit contenir au plus %s caractères."
#, unused
msgid "errors.field-min-length"
@@ -1317,7 +1336,7 @@ msgstr ""
"celles du fichier que tentez d'ouvrir. Vous devez activer les migrations "
"pour '%s' avant de pouvoir ouvrir le fichier."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Un problème s’est produit."
@@ -1367,13 +1386,13 @@ msgstr "Cette invitation est peut-être été annulée ou a expiré."
msgid "errors.ldap-disabled"
msgstr "Authentification LDAP désactivée."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr ""
"Vous avez atteint le quota maximal de « %s ». Contactez l'assistance "
"technique."
-#: src/app/main/ui/dashboard/team.cljs:185, src/app/main/ui/onboarding/team_choice.cljs:101
+#: src/app/main/ui/dashboard/team.cljs:187, src/app/main/ui/dashboard/team.cljs:849, src/app/main/ui/onboarding/team_choice.cljs:101
msgid "errors.maximum-invitations-by-request-reached"
msgstr ""
"Le nombre maximum (%s) d'e-mails qui peuvent être invités dans une seule "
@@ -1393,7 +1412,7 @@ msgstr ""
msgid "errors.media-type-not-allowed"
msgstr "L’image ne semble pas être valide."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"L'adresse e-mail du profil que vous invitez est ignorée (signalée comme "
@@ -1429,7 +1448,7 @@ msgstr "Données dans le presse-papier non valides"
msgid "errors.profile-blocked"
msgstr "Le profil est bloqué"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr ""
"L'adresse e-mail de votre profil est ignorée (signalée comme spam ou taux "
@@ -1447,23 +1466,23 @@ msgstr "Le fichier SVG n'est pas valide ou est mal formé"
msgid "errors.team-feature-mismatch"
msgstr "Fonctionnalité incompatible détectée '%s'"
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr ""
"Il n'y a pas assez de membres pour quitter l'équipe, vous voulez "
"probablement la supprimer."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "Le membre que vous essayez d'assigner n'existe pas."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr ""
"Le propriétaire ne peut pas quitter l'équipe, vous devez réassigner le rôle "
"de propriétaire."
-#: src/app/main/data/workspace/tokens/library_edit.cljs:153, src/app/main/data/workspace/tokens/library_edit.cljs:183
+#: src/app/main/data/workspace/tokens/library_edit.cljs:150, src/app/main/data/workspace/tokens/library_edit.cljs:180
msgid "errors.token-set-already-exists"
msgstr "Une collection avec le même nom existe déjà"
@@ -1472,13 +1491,13 @@ msgstr "Une collection avec le même nom existe déjà"
msgid "errors.token-set-doesnt-exists"
msgstr "Impossible de dupliquer une collection inconnue"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:265
+#: src/app/main/data/workspace/tokens/library_edit.cljs:273
msgid "errors.token-set-exists-on-drop"
msgstr ""
"Impossible de déposer, une collection avec le même nom existe déjà dans ce "
"chemin."
-#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:99
+#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:95
msgid "errors.token-theme-already-exists"
msgstr "Une option de thème avec le même nom existe déjà"
@@ -1488,7 +1507,7 @@ msgstr "Une erreur inattendue s’est produite."
#: src/app/main/ui/auth/verify_token.cljs:62
msgid "errors.unexpected-token"
-msgstr "Token inconnu"
+msgstr "Jeton inconnu"
#, unused
msgid "errors.validation"
@@ -1508,31 +1527,31 @@ msgstr ""
msgid "errors.version-not-supported"
msgstr "Le numéro de version du fichier est incompatible"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "Erreur de connexion, URL inaccessible"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "L'URL ne passe pas la validation."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "Il y a eu une erreur dans le dernier envoi."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "Erreur lors de la validation SSL."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "Délai d'attente dépassé"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "Erreur inattendue lors de la validation"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "Statut inattendu %s"
@@ -1575,7 +1594,7 @@ msgstr ""
#: src/app/main/ui/settings/feedback.cljs:65
msgid "feedback.title"
-msgstr "Email"
+msgstr "E-mail"
#: src/app/main/ui/settings/feedback.cljs:102
msgid "feedback.twitter-go-to"
@@ -1597,7 +1616,7 @@ msgstr "Une erreur s’est produite"
msgid "inspect.attributes.blur"
msgstr "Flou"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Valeur"
@@ -1605,15 +1624,15 @@ msgstr "Valeur"
msgid "inspect.attributes.color"
msgstr "Couleur"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1621,7 +1640,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Remplir"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Télécharger l’image source"
@@ -1715,35 +1734,37 @@ msgstr "Solide"
msgid "inspect.attributes.stroke.width"
msgstr "Épaisseur"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Typographie"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Police de caractères"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Taille de police"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Style de police"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "Graisse de la police"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Interlettrage"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Interlignage"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Décoration de texte"
@@ -1751,35 +1772,36 @@ msgstr "Décoration de texte"
msgid "inspect.attributes.typography.text-decoration.line-through"
msgstr "Barré"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Aucune"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Souligné"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Transformation de texte"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "Première lettre en capitale"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "Minuscule"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Aucune"
-#: src/app/main/ui/inspect/attributes/text.cljs:159
+#: src/app/main/ui/inspect/attributes/text.cljs:152
msgid "inspect.attributes.typography.text-transform.unset"
msgstr "Non assigné"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "Majuscules"
@@ -1791,15 +1813,15 @@ msgstr "Propriétés de la variante"
msgid "inspect.attributes.variants"
msgstr "Propriétés des variantes"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr "Pour en savoir plus sur l'inspection, visitez le centre d'aide de Penpot"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "Plus d'informations sur l'inspection"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr ""
"Sélectionnez une forme, un plan de travail ou un groupe pour inspecter "
@@ -1865,15 +1887,23 @@ msgstr "SVG"
msgid "inspect.tabs.code.selected.text"
msgstr "Texte"
+#: src/app/main/ui/inspect/right_sidebar.cljs:109
+msgid "inspect.tabs.computed"
+msgstr "Calculé"
+
#: src/app/main/ui/inspect/right_sidebar.cljs:114
msgid "inspect.tabs.info"
msgstr "Information"
-#: src/app/main/ui/dashboard/comments.cljs:95
+#: src/app/main/ui/inspect/right_sidebar.cljs:165
+msgid "inspect.tabs.switcher.label"
+msgstr "Info sur la couche"
+
+#: src/app/main/ui/dashboard/comments.cljs:96
msgid "label.mark-all-as-read"
msgstr "Tout marquer comme lu"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Raccourcis"
@@ -1885,11 +1915,11 @@ msgstr "Accepter"
msgid "labels.access-tokens"
msgstr "Jetons d'accès"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "Activé"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.add"
msgstr "Ajouter"
@@ -1897,11 +1927,11 @@ msgstr "Ajouter"
msgid "labels.add-custom-font"
msgstr "Ajouter police personnalisée"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.adding"
msgstr "Ajout…"
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Administration"
@@ -1909,7 +1939,7 @@ msgstr "Administration"
msgid "labels.adobe-xd"
msgstr "Adobe XD"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Tous"
@@ -1932,7 +1962,7 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "Bad Gateway"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Annuler"
@@ -1940,11 +1970,11 @@ msgstr "Annuler"
msgid "labels.canva"
msgstr "Canevas"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Fermer"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:186
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:181
msgid "labels.collapse"
msgstr "Réduire"
@@ -1956,11 +1986,11 @@ msgstr "Commentaire"
msgid "labels.comment.mark-as-solved"
msgstr "Marquer comme résolu"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Commentaires"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Communauté"
@@ -1968,7 +1998,7 @@ msgstr "Communauté"
msgid "labels.confirm-password"
msgstr "Confirmer le mot de passe"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Continuer"
@@ -1984,11 +2014,11 @@ msgstr "Vous pouvez continuer avec un compte Penpot"
msgid "labels.copy"
msgstr "Copier"
-#: src/app/main/ui/inspect/attributes/common.cljs:118
+#: src/app/main/ui/inspect/attributes/common.cljs:99
msgid "labels.copy-color"
msgstr "Copier la couleur"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "Copier le lien"
@@ -1996,7 +2026,7 @@ msgstr "Copier le lien"
msgid "labels.copyright"
msgstr "Kaleidos @2024"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Créer"
@@ -2016,7 +2046,7 @@ msgstr "Polices personnalisées"
msgid "labels.dashboard"
msgstr "Tableau de bord"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Supprimer"
@@ -2028,7 +2058,7 @@ msgstr "Supprimer le commentaire"
msgid "labels.delete-comment-thread"
msgstr "Supprimer le fil"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Supprimer l'invitation"
@@ -2045,19 +2075,19 @@ msgstr "Développeur"
msgid "labels.director"
msgstr "Directeur"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "Rejeter"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Brouillons"
-#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:65
msgid "labels.duplicate"
msgstr "Dupliquer"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Modifier"
@@ -2065,11 +2095,11 @@ msgstr "Modifier"
msgid "labels.edit-file"
msgstr "Modifier le fichier"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Éditeur"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:302
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:301
msgid "labels.empty"
msgstr "Vide"
@@ -2082,11 +2112,11 @@ msgstr "Erreur"
msgid "labels.event"
msgstr "Événement"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Expirée"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Exporter"
@@ -2114,7 +2144,7 @@ msgstr "Fournisseurs de polices"
msgid "labels.font-variants"
msgstr "Styles"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Polices"
@@ -2128,11 +2158,11 @@ msgstr "Fondateur/Direction"
msgid "labels.freelancer"
msgstr "Je suis freelance"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "Référentiel GitHub"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Donnez votre avis"
@@ -2144,7 +2174,7 @@ msgstr "Retour"
msgid "labels.graphic-design"
msgstr "Designer graphique"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Centre d'aide"
@@ -2152,15 +2182,15 @@ msgstr "Centre d'aide"
msgid "labels.hide"
msgstr "Cacher"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Masquer les commentaires résolus"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:134
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:130
msgid "labels.import"
msgstr "Importer"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "Inactif"
@@ -2182,7 +2212,7 @@ msgstr "Erreur interne"
msgid "labels.invision"
msgstr "InVision"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Invitations"
@@ -2190,7 +2220,7 @@ msgstr "Invitations"
msgid "labels.language"
msgstr "Langue"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Bibliothèques et modèles"
@@ -2210,7 +2240,7 @@ msgstr "Se connecter ou s'inscrire"
msgid "labels.login"
msgstr "Connexion"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Se déconnecter"
@@ -2218,11 +2248,11 @@ msgstr "Se déconnecter"
msgid "labels.marketing"
msgstr "Marketing"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Membre"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Membres"
@@ -2230,23 +2260,27 @@ msgstr "Membres"
msgid "labels.mention"
msgstr "Mention"
+#: src/app/main/ui/ds/controls/numeric_input.cljs:619
+msgid "labels.mixed-values"
+msgstr "Mélangé"
+
#: src/app/main/ui/settings/password.cljs:84
msgid "labels.new-password"
msgstr "Nouveau mot de passe"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "Suivant"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "Vous n’avez aucune notification de commentaire en attente."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "Aucune invitation en attente."
-#: src/app/main/ui/dashboard/team.cljs:761
+#: src/app/main/ui/dashboard/team.cljs:739
msgid "labels.no-invitations-gather-people"
msgstr "Rassemblez votre équipe et créez de grandes choses ensemble."
@@ -2265,7 +2299,7 @@ msgstr "Oups !"
msgid "labels.notifications"
msgstr "Notifications"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "1 fichier"
@@ -2277,7 +2311,7 @@ msgid_plural "labels.num-of-frames"
msgstr[0] "1 plan de travail"
msgstr[1] "%s plans de travail"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "1 projet"
@@ -2296,7 +2330,7 @@ msgstr "Ancien mot de passe"
msgid "labels.only-yours"
msgstr "Seulement les vôtres"
-#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:309, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:338
+#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:310, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:339
msgid "labels.options"
msgstr "Options"
@@ -2312,7 +2346,7 @@ msgstr "Autres (précisez)"
msgid "labels.other-short"
msgstr "Autre"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Propriétaire"
@@ -2320,11 +2354,11 @@ msgstr "Propriétaire"
msgid "labels.password"
msgstr "Mot de passe"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "En attente"
-#: src/app/main/ui/dashboard/sidebar.cljs:750
+#: src/app/main/ui/dashboard/sidebar.cljs:751
msgid "labels.pinned-projects"
msgstr "Projets épinglés"
@@ -2348,7 +2382,7 @@ msgstr "Gestionnaire de produit ou de projet"
msgid "labels.profile"
msgstr "Profil"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Projets"
@@ -2356,7 +2390,7 @@ msgstr "Projets"
msgid "labels.refresh"
msgstr "Actualiser"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Notes de version"
@@ -2370,11 +2404,11 @@ msgstr "Actualiser le fichier"
msgid "labels.remove"
msgstr "Supprimer"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Retirer le membre"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Renommer"
@@ -2402,7 +2436,7 @@ msgstr "nouvelle réponse"
msgid "labels.reply.thread"
msgstr "Répondre"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "Renvoyer l'invitation"
@@ -2414,15 +2448,15 @@ msgstr "Restaurer"
msgid "labels.retry"
msgstr "Réessayer"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Rôle"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Enregistrer"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:715
+#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:730
msgid "labels.search"
msgstr "Rechercher"
@@ -2450,11 +2484,11 @@ msgstr "Nous sommes en maintenance planifiée de nos systèmes."
msgid "labels.service-unavailable.main-message"
msgstr "Service non disponible"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:79
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:75
msgid "labels.sets"
msgstr "Collections"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Configuration"
@@ -2466,7 +2500,7 @@ msgstr "Partager"
msgid "labels.share-prototype"
msgstr "Partager le prototype"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Bibliothèques"
@@ -2474,7 +2508,7 @@ msgstr "Bibliothèques"
msgid "labels.show"
msgstr "Afficher"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Afficher tous les commentaires"
@@ -2482,11 +2516,11 @@ msgstr "Afficher tous les commentaires"
msgid "labels.show-comments-list"
msgstr "Afficher la liste des commentaires"
-#: src/app/main/ui/workspace/comments.cljs:67, src/app/main/ui/workspace/comments.cljs:139
+#: src/app/main/ui/workspace/comments.cljs:68, src/app/main/ui/workspace/comments.cljs:140
msgid "labels.show-mentions"
msgstr "Afficher uniquement vos mentions"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Afficher uniquement vos commentaires"
@@ -2494,11 +2528,15 @@ msgstr "Afficher uniquement vos commentaires"
msgid "labels.sketch"
msgstr "Sketch"
+#: src/app/main/ui/dashboard/sidebar.cljs:730
+msgid "labels.sources"
+msgstr "Sources"
+
#: src/app/main/ui/onboarding/questions.cljs:55
msgid "labels.start"
msgstr "Commencer"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Statut"
@@ -2520,11 +2558,11 @@ msgstr "Membre d'une équipe"
msgid "labels.themes"
msgstr "Thèmes"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Tutoriels"
-#: src/app/main/data/workspace/tokens/errors.cljs:93
+#: src/app/main/data/workspace/tokens/errors.cljs:101
msgid "labels.unknown-error"
msgstr "Erreur inconnue"
@@ -2556,15 +2594,15 @@ msgstr "Télécharger des polices personnalisées"
msgid "labels.uploading"
msgstr "Téléchargement…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "Lecture seule"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Spectateur"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Webhooks"
@@ -2572,11 +2610,11 @@ msgstr "Webhooks"
msgid "labels.write-new-comment"
msgstr "Écrire un nouveau commentaire"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(vous)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "Votre compte"
@@ -2609,7 +2647,7 @@ msgstr "Concevez de manière agile en contrôlant la disposition comme avec du C
#: src/app/main/ui/ds/product/loader.cljs:24
msgid "loader.tips.03.title"
-msgstr "Disposition automatique comme avec le CSS"
+msgstr "Disposition comme avec le CSS"
#: src/app/main/ui/ds/product/loader.cljs:27
msgid "loader.tips.04.message"
@@ -2671,23 +2709,23 @@ msgstr ""
msgid "loader.tips.10.title"
msgstr "Gestion des extensions"
-#: src/app/main/ui/workspace/colorpicker.cljs:449, src/app/main/ui/workspace/colorpicker.cljs:450, src/app/main/ui/workspace/colorpicker.cljs:452
+#: src/app/main/ui/workspace/colorpicker.cljs:486, src/app/main/ui/workspace/colorpicker.cljs:487, src/app/main/ui/workspace/colorpicker.cljs:489
msgid "media.choose-image"
msgstr "Choisir image"
-#: src/app/main/ui/workspace/colorpicker.cljs:244
+#: src/app/main/ui/workspace/colorpicker.cljs:256
msgid "media.gradient"
msgstr "Dégradé"
-#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:44, src/app/main/ui/ds/utilities/swatch.cljs:57, src/app/main/ui/inspect/attributes/common.cljs:63, src/app/main/ui/workspace/colorpicker.cljs:246, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:251
+#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:45, src/app/main/ui/ds/utilities/swatch.cljs:58, src/app/main/ui/inspect/attributes/common.cljs:44, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:65, src/app/main/ui/workspace/colorpicker.cljs:258, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:395
msgid "media.image"
msgstr "Image"
-#: src/app/main/ui/inspect/attributes/common.cljs:74
+#: src/app/main/ui/inspect/attributes/common.cljs:55
msgid "media.image.short"
msgstr "img"
-#: src/app/main/ui/workspace/colorpicker.cljs:442
+#: src/app/main/ui/workspace/colorpicker.cljs:479
msgid "media.keep-aspect-ratio"
msgstr "Conserver le ratio"
@@ -2705,7 +2743,7 @@ msgstr "Chargement de l’image…"
msgid "media.radial"
msgstr "Radial"
-#: src/app/main/ui/workspace/colorpicker.cljs:242
+#: src/app/main/ui/workspace/colorpicker.cljs:254
msgid "media.solid"
msgstr "Solide"
@@ -2781,19 +2819,19 @@ msgstr "Créer un jeton"
msgid "modals.create-access-token.title"
msgstr "Générer un jeton d'accès"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "Créer un webhook"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "Créer un webhook"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "URL de charge utile"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://example.com/postreceive"
@@ -2841,11 +2879,11 @@ msgstr ""
msgid "modals.delete-comment-thread.title"
msgstr "Supprimer une conversation"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "Confirmez-vous vouloir supprimer cette note ?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "Supprimer la note"
@@ -2893,11 +2931,11 @@ msgstr ""
msgid "modals.delete-font.title"
msgstr "Suppression de la police"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Voulez-vous vraiment supprimer cette page ?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Supprimer une page"
@@ -2943,29 +2981,29 @@ msgid_plural "modals.delete-shared-confirm.title"
msgstr[0] "Suppression du fichier"
msgstr[1] "Suppression des fichiers"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Supprimer l’équipe"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Voulez-vous vraiment supprimer cette équipe ? Tous les projets et fichiers "
"associés à l’équipe seront définitivement supprimés."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Suppression d’une équipe"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Supprimer le membre"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Voulez-vous vraiment supprimer ce membre de l’équipe ?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Supprimer un membre d’équipe"
@@ -2979,57 +3017,57 @@ msgstr[1] ""
"Les éléments déjà utilisés dans ces fichiers resteront en place (aucun "
"design ne sera altéré)."
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "Supprimer le webhook"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "Vous confirmez vouloir supprimer le webhook ?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "Suppression du webhook en cours"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "Modifier le webhook"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "Modifier le webhook"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Envoyer l'invitation"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "Adresse e-mail, séparées par des virgules"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr ""
"Certains emails appartiennent à des membres actuels de l'équipe. Les "
"invitations ne leur seront pas envoyées."
-#: src/app/main/ui/dashboard/team.cljs:220
+#: src/app/main/ui/dashboard/team.cljs:222
msgid "modals.invite-team-member.text"
msgstr ""
"Vous pouvez inviter des membres dans l'équipe pour qu'ils accèdent à ce "
"fichier ainsi que tous les autres fichiers de l'équipe."
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "Inviter des membres dans l'équipe"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"Comme vous êtes le seul membre de l'équipe, celle-ci sera supprimée avec "
"ses projets et fichiers."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "Voulez-vous vraiment quitter l'équipe %s ?"
@@ -3057,15 +3095,15 @@ msgstr "Sélectionnez un membre à promouvoir"
msgid "modals.leave-and-reassign.title"
msgstr "Sélectionnez un membre à promouvoir"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Quitter l’équipe"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Voulez-vous vraiment quitter cette équipe ?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Quitter l’équipe"
@@ -3087,39 +3125,39 @@ msgid_plural "modals.move-shared-confirm.title"
msgstr[0] "Déplacer librairie"
msgstr[1] "Déplacer librairies"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "Taille du décalage"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Promouvoir"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"Si vous transférez la propriété, vous changerez votre rôle en Admin, "
"perdant ainsi certaines permissions sur cette équipe. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr ""
"Vous êtes le propriétaire actuel de cette équipe. Voulez-vous vraiment "
"promouvoir %s comme nouveau propriétaire de l'équipe ?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Promouvoir propriétaire"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "Publier"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "Votre bibliothèque est vide. Voulez-vous la publier quand même ?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "Publier la bibliothèque vide"
@@ -3174,21 +3212,21 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Mise à jour des composants dans une bibliothèque partagée"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Actualiser le composant"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Annuler"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"Vous êtes sur le point de mettre à jour le composant d’une bibliothèque "
"partagée. Cela peut affecter d’autres fichiers qui l’utilisent."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Actualiser le composant d’une bibliothèque"
@@ -3304,11 +3342,11 @@ msgstr ""
msgid "notifications.by-code.upgrade-version"
msgstr "Il y a une nouvelle version disponible. Rafraîchissez la page"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "L'e‑mail d'invitation a bien été envoyé"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "Lien d'invitation copié"
@@ -3468,7 +3506,7 @@ msgstr ""
"N'oubliez pas d'inclure tout le monde. Développeurs, concepteurs, "
"gestionnaires... la diversité fait la force :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "Inviter avec le rôle :"
@@ -3686,193 +3724,193 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "Aller à la page de connexion"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "Détacher"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "Divers"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:283
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:423
msgid "settings.remove-color"
msgstr "Supprimer la couleur"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:288
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:428
msgid "settings.select-this-color"
msgstr "Sélectionnez les éléments qui utilisent ce style"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Bases"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "Tableau de bord"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Spectateur"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Espace de travail"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Alignement"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Modifier"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "Générique"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "Générique"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Menu principal"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "Modifier les calques"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Navigation"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Navigation"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Navigation"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Panneaux"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Tracés"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Formes"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "Textes"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Outils"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Commentaires"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "Ajouter un nœud"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "Aligner en bas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "Aligner au centre"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "Aligner horizontalement au centre"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "Aligner justifié"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "Aligner à gauche"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "Aligner à droite"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "Aligner en haut"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "Aligner verticalement au centre"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "Créer un plan de travail à partir de la sélection"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "Basculer en gras"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "Soustraction booléenne"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "Exclusion booléenne"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "Intersection booléenne"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "Union booléenne"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "Mettre à l'arrière-plan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Déplacer en arrière"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "Déplacer vers l'avant"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "Mettre au premier plan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "Rétablir"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Copier"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
msgid "shortcuts.copy-link"
msgstr "Copier le lien"
@@ -3881,287 +3919,271 @@ msgstr "Copier le lien"
msgid "shortcuts.copy-props"
msgstr "Copier les propriétés"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "Créer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Couper"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "Dézoomer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Supprimer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "Supprimer le nœud"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "Détacher le composant"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Courbe"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "Ellipse"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Plan de travail"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "Dessiner un tracé"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Tracé"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Rectangle"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Texte"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Dupliquer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "Annuler"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "Exporter les formes"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "Zoom ajusté"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "Retourner horizontalement"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "Retourner verticalement"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "Réduire la taille de la police"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "Augmenter la taille de la police"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "Accéder aux brouillons"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "Accéder aux bibliothèques partagées"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Recherche"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Grouper"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "Répartir horizontalement"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "Afficher/masquer l'interface utilisateur"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "Zoom avant"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "Insérer une image"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "Basculer en italique"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "Joindre les nœuds"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
-msgid "shortcuts.letter-spacing-dec"
-msgstr "Réduire l'espacement entre les lettres"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "Augmenter l'espacement entre les lettres"
-
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
-msgid "shortcuts.line-height-dec"
-msgstr "Réduire la hauteur de ligne"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
-msgid "shortcuts.line-height-inc"
-msgstr "Augmenter la hauteur de ligne"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.line-through"
msgstr "Activer/désactiver texte barré"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "Créer un coin"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "Faire une courbe"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "Masque"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "Fusionner les nœuds"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "Déplacer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "Déplacement rapide vers le bas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "Déplacement rapide vers la gauche"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "Déplacez-vous rapidement vers la droite"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "Déplacement rapide vers le haut"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "Déplacer le nœud"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "Déplacer vers le bas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "Déplacer vers la gauche"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "Déplacer vers la droite"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "Déplacer vers le haut"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "Plan de travail suivant"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "Aucun raccourci trouvé"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "Définir l'opacité à 100%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "Définir l'opacité à 10%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "Définir l'opacité à 20%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "Définir l'opacité à 30%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "Définir l'opacité à 40%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "Définir l'opacité à 50%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "Définir l'opacité à 60%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "Définir l'opacité à 70%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "Définir l'opacité à 80%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "Définir l'opacité à 90%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "Sélecteur de couleurs"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "Accéder aux commentaires des spectateurs"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "Accéder au tableau de bord"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "Aller à l'inspecteur"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "Accéder aux interactions des spectateurs"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "Accéder aux interactions des spectateurs"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "Accéder à l’espace de travail"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " ou "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Coller"
@@ -4175,191 +4197,191 @@ msgstr "Coller les propriétés"
msgid "shortcuts.plugins"
msgstr "Gestionnaire d'extensions"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "Plan de travail précédent"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "Rétablir"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
msgid "shortcuts.rename"
msgstr "Renommer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "Réinitialiser le zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
msgid "shortcuts.scale"
msgstr "Échelle"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "Rechercher des raccourcis"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "Tout sélectionner"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
msgid "shortcuts.select-next"
msgstr "Sélectionner le calque suivant"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
msgid "shortcuts.select-parent-layer"
msgstr "Sélectionner le calque parent"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
msgid "shortcuts.select-prev"
msgstr "Sélectionner le calque précédent"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "Séparer les nœuds"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "Afficher/masquer la grille de pixels"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "Afficher/masquer les raccourcis"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "Aligner sur les nœuds"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "Aligner sur la grille de pixels"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "Commencer l'édition"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "Commencer la mesure"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "Arrêter la mesure"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "Définir les vignettes"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "Raccourcis clavier"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "Activer/désactiver l'alignement dynamique"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "Activer/désactiver les ressources"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "Activer/désactiver la palette de couleurs"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "Activer/désactiver le mode focus"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "Activer/désactiver le plein écran"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
msgid "shortcuts.toggle-guides"
msgstr "Afficher/Masquer les repères"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "Activer/désactiver l'historique"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "Activer/désactiver les calques"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "Ajouter/supprimer flex layout"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
msgid "shortcuts.toggle-layout-grid"
msgstr "Ajouter / Retirer grid layout"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "Verrou sélectionné"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "Verrouiller les proportions"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
msgid "shortcuts.toggle-rulers"
msgstr "Afficher/Masquer les règles"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
msgid "shortcuts.toggle-snap-guides"
msgstr "Aligner sur les repères"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
msgid "shortcuts.toggle-snap-ruler-guide"
msgstr "Aligner sur les repères de règles"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "Afficher/masquer la palette de texte"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
msgid "shortcuts.toggle-theme"
msgstr "Changer de thème"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "Afficher/Masquer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "Alterner le style de zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "Activer/désactiver le soulignement"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Annuler"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Dissocier"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Démasquer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "Distribuer verticalement"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "Réduire le zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "Augmenter le zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "Zoomer sur la sélection"
@@ -4415,7 +4437,7 @@ msgstr "Votre abonnement :"
msgid "subscription.dashboard.team-plan"
msgstr "Abonnement Équipe"
-#: src/app/main/ui/dashboard/sidebar.cljs:858
+#: src/app/main/ui/dashboard/sidebar.cljs:978
msgid "subscription.dashboard.upgrade-plan.power-up"
msgstr "Mise à niveau"
@@ -4537,7 +4559,7 @@ msgstr "Illimité (essai)"
msgid "subscription.settings.unlimited.bill"
msgstr "Facture mensuelle plafonnée"
-#: src/app/main/ui/dashboard/subscription.cljs:147, src/app/main/ui/workspace/main_menu.cljs:933
+#: src/app/main/ui/dashboard/subscription.cljs:147, src/app/main/ui/workspace/main_menu.cljs:961
msgid "subscription.workspace.header.menu.option.power-up"
msgstr "Mettre à niveau votre abonnement"
@@ -4593,19 +4615,19 @@ msgstr "Mot de passe – Penpot"
msgid "title.settings.profile"
msgstr "Profil – Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "Invitations – %s – Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "Membres – %s – Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Paramètres – %s – Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "Webhooks – %s – Penpot"
@@ -4677,43 +4699,43 @@ msgstr "Afficher les interactions au clic"
msgid "viewer.header.sitemap"
msgstr "Plan du site"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "Le dernier envoi a réussi."
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Aligner horizontalement au centre (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "Répartir l’espacement horizontal (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Aligner à gauche (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Aligner à droite (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Aligner en bas (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Aligner verticalement au centre (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "Répartir l’espacement vertical (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Aligner en haut (%s)"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:163
+#: src/app/main/ui/workspace/sidebar/assets.cljs:172
msgid "workspace.assets.add-library"
msgstr "Ajouter une bibliothèque"
@@ -4722,19 +4744,19 @@ msgstr "Ajouter une bibliothèque"
msgid "workspace.assets.assets"
msgstr "Ressources"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "Toutes les ressources"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Couleurs"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:493
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:497
msgid "workspace.assets.colors.add-color"
msgstr "Ajouter une couleur"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Composants"
@@ -4742,25 +4764,25 @@ msgstr "Composants"
msgid "workspace.assets.components.add-component"
msgstr "Ajouter un composant"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:176, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:535
+#: src/app/main/ui/workspace/sidebar/assets/components.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:547
msgid "workspace.assets.components.num-variants"
msgstr "%s variantes"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "Créer un groupe"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr ""
"Vos éléments seront nommées automatiquement sous la forme « nom du groupe / "
"nom de l'élément »"
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Supprimer"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "Dupliquer"
@@ -4768,11 +4790,11 @@ msgstr "Dupliquer"
msgid "workspace.assets.duplicate-main"
msgstr "Dupliquer le principal"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Modifier"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:177
+#: src/app/main/ui/workspace/sidebar/assets.cljs:186
msgid "workspace.assets.filter"
msgstr "Filtrer"
@@ -4781,27 +4803,27 @@ msgstr "Filtrer"
msgid "workspace.assets.graphics"
msgstr "Graphiques"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:576
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:190, src/app/main/ui/workspace/sidebar/assets/components.cljs:576
msgid "workspace.assets.grid-view"
msgstr "Vue en grille"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Grouper"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "Nom du groupe"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:572
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:191, src/app/main/ui/workspace/sidebar/assets/components.cljs:572
msgid "workspace.assets.list-view"
msgstr "Vue en liste"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "Bibliothèque locale"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:168
+#: src/app/main/ui/workspace/sidebar/assets.cljs:177
msgid "workspace.assets.manage-library"
msgstr "Gérer la bibliothèque"
@@ -4813,15 +4835,15 @@ msgstr "Aucune ressource trouvée"
msgid "workspace.assets.open-library"
msgstr "Ouvrir le fichier de la bibliothèque"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Renommer"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "Renommer le groupe"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "Chercher des ressources"
@@ -4837,21 +4859,21 @@ msgstr[1] "%s éléments sélectionnés"
msgid "workspace.assets.shared-library"
msgstr "Bibliothèque partagée"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:237
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:235
msgid "workspace.assets.sidebar.components"
msgid_plural "workspace.assets.sidebar.components"
msgstr[0] "1 composant"
msgstr[1] "%s composants"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:193
+#: src/app/main/ui/workspace/sidebar/assets.cljs:204
msgid "workspace.assets.sort"
msgstr "Trier"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Typographies"
-#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:404
+#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:405
msgid "workspace.assets.typography.add-typography"
msgstr "Ajouter une typographie"
@@ -4876,7 +4898,7 @@ msgstr "Interlettrage"
msgid "workspace.assets.typography.line-height"
msgstr "Interlignage"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -4888,59 +4910,59 @@ msgstr "Styles de texte"
msgid "workspace.assets.typography.text-transform"
msgstr "Transformer le texte"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "Dissocier"
-#: src/app/main/ui/workspace/context_menu.cljs:791
+#: src/app/main/ui/workspace/context_menu.cljs:794
msgid "workspace.context-menu.grid-cells.area"
msgstr "Créer une zone"
-#: src/app/main/ui/workspace/context_menu.cljs:794
+#: src/app/main/ui/workspace/context_menu.cljs:797
msgid "workspace.context-menu.grid-cells.create-board"
msgstr "Créer un tableau"
-#: src/app/main/ui/workspace/context_menu.cljs:786
+#: src/app/main/ui/workspace/context_menu.cljs:789
msgid "workspace.context-menu.grid-cells.merge"
msgstr "Fusionner les cellules"
-#: src/app/main/ui/workspace/context_menu.cljs:749
+#: src/app/main/ui/workspace/context_menu.cljs:752
msgid "workspace.context-menu.grid-track.column.add-after"
msgstr "Ajouter une colonne à droite"
-#: src/app/main/ui/workspace/context_menu.cljs:748
+#: src/app/main/ui/workspace/context_menu.cljs:751
msgid "workspace.context-menu.grid-track.column.add-before"
msgstr "Ajouter une colonne à gauche"
-#: src/app/main/ui/workspace/context_menu.cljs:750
+#: src/app/main/ui/workspace/context_menu.cljs:753
msgid "workspace.context-menu.grid-track.column.delete"
msgstr "Supprimer la colonne"
-#: src/app/main/ui/workspace/context_menu.cljs:751
+#: src/app/main/ui/workspace/context_menu.cljs:754
msgid "workspace.context-menu.grid-track.column.delete-shapes"
msgstr "Supprimer la colonne et le contenu"
-#: src/app/main/ui/workspace/context_menu.cljs:747
+#: src/app/main/ui/workspace/context_menu.cljs:750
msgid "workspace.context-menu.grid-track.column.duplicate"
msgstr "Dupliquer la colonne"
-#: src/app/main/ui/workspace/context_menu.cljs:756
+#: src/app/main/ui/workspace/context_menu.cljs:759
msgid "workspace.context-menu.grid-track.row.add-after"
msgstr "Ajouter une ligne en-dessous"
-#: src/app/main/ui/workspace/context_menu.cljs:755
+#: src/app/main/ui/workspace/context_menu.cljs:758
msgid "workspace.context-menu.grid-track.row.add-before"
msgstr "Ajouter une ligne au-dessus"
-#: src/app/main/ui/workspace/context_menu.cljs:757
+#: src/app/main/ui/workspace/context_menu.cljs:760
msgid "workspace.context-menu.grid-track.row.delete"
msgstr "Supprimer la ligne"
-#: src/app/main/ui/workspace/context_menu.cljs:758
+#: src/app/main/ui/workspace/context_menu.cljs:761
msgid "workspace.context-menu.grid-track.row.delete-shapes"
msgstr "Supprimer la ligne et son contenu"
-#: src/app/main/ui/workspace/context_menu.cljs:754
+#: src/app/main/ui/workspace/context_menu.cljs:757
msgid "workspace.context-menu.grid-track.row.duplicate"
msgstr "Dupliquer la ligne"
@@ -4948,7 +4970,7 @@ msgstr "Dupliquer la ligne"
msgid "workspace.focus.focus-mode"
msgstr "Mode focus"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "Focus désactivé"
@@ -4968,11 +4990,11 @@ msgstr "Dégradé linéaire"
msgid "workspace.gradients.radial"
msgstr "Dégradé radial"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "Désactiver l’alignement dynamique"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "Désactiver l'échelle proportionnelle"
@@ -4981,23 +5003,23 @@ msgstr "Désactiver l'échelle proportionnelle"
msgid "workspace.header.menu.disable-scale-text"
msgstr "Désactiver la mise à l'échelle du texte"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "Désactiver l’alignement sur les repères"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "Désactiver l’accrochage au pixel"
-#: src/app/main/ui/workspace/main_menu.cljs:215
+#: src/app/main/ui/workspace/main_menu.cljs:243
msgid "workspace.header.menu.disable-snap-ruler-guides"
msgstr "Désactiver l'alignement sur les repères de règles"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "Activer l’alignement dynamique"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "Activer l'échelle proportionnelle"
@@ -5006,51 +5028,51 @@ msgstr "Activer l'échelle proportionnelle"
msgid "workspace.header.menu.enable-scale-text"
msgstr "Activer le redimensionnement du texte"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "Aligner sur les repères"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "Activer l’alignement au pixel"
-#: src/app/main/ui/workspace/main_menu.cljs:216
+#: src/app/main/ui/workspace/main_menu.cljs:244
msgid "workspace.header.menu.enable-snap-ruler-guides"
msgstr "Aligner sur les repères de règles"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "Masquer le nom des plans de travail"
-#: src/app/main/ui/workspace/main_menu.cljs:348
+#: src/app/main/ui/workspace/main_menu.cljs:376
msgid "workspace.header.menu.hide-guides"
msgstr "Masquer les repères"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "Masquer la palette de couleurs"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "Masquer la grille de pixels"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "Masquer les règles"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "Masquer la palette de polices"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Modifier"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "Fichier"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "Aide et information"
@@ -5059,63 +5081,63 @@ msgstr "Aide et information"
msgid "workspace.header.menu.option.power-up"
msgstr "Booster votre offre"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "Préférences"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "Vue"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "Rétablir"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "Tout sélectionner"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "Afficher le nom des plans de travail"
-#: src/app/main/ui/workspace/main_menu.cljs:349
+#: src/app/main/ui/workspace/main_menu.cljs:377
msgid "workspace.header.menu.show-guides"
msgstr "Afficher les repères"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "Afficher la palette de couleurs"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "Afficher la grille de pixels"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Afficher les règles"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "Afficher la palette des polices"
-#: src/app/main/ui/workspace/main_menu.cljs:288
+#: src/app/main/ui/workspace/main_menu.cljs:316
msgid "workspace.header.menu.toggle-dark-theme"
msgstr "Basculer vers le thème sombre"
-#: src/app/main/ui/workspace/main_menu.cljs:286, src/app/main/ui/workspace/main_menu.cljs:289
+#: src/app/main/ui/workspace/main_menu.cljs:314, src/app/main/ui/workspace/main_menu.cljs:317
msgid "workspace.header.menu.toggle-light-theme"
msgstr "Basculer vers le thème clair"
-#: src/app/main/ui/workspace/main_menu.cljs:287
+#: src/app/main/ui/workspace/main_menu.cljs:315
msgid "workspace.header.menu.toggle-system-theme"
msgstr "Activer le thème système"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "Annuler"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Réinitialiser"
@@ -5131,7 +5153,7 @@ msgstr "Enregistré"
msgid "workspace.header.saving"
msgstr "Enregistrement"
-#: src/app/main/ui/workspace/right_header.cljs:239
+#: src/app/main/ui/workspace/right_header.cljs:240
msgid "workspace.header.share"
msgstr "Partager"
@@ -5140,11 +5162,11 @@ msgstr "Partager"
msgid "workspace.header.unsaved"
msgstr "Modifications non enregistrées"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "Mode spectateur (%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "Zoom"
@@ -5156,7 +5178,7 @@ msgstr "Remplir l’écran"
msgid "workspace.header.zoom-fit"
msgstr "Ajuster à l’écran"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "Zoomer pour montrer tous les éléments"
@@ -5164,43 +5186,43 @@ msgstr "Zoomer pour montrer tous les éléments"
msgid "workspace.header.zoom-full-screen"
msgstr "Plein écran"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "Zoomer sur la sélection"
-#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:621
msgid "workspace.layout_grid.editor.options.edit-grid"
msgstr "Modifier la grille"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1300
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1301
msgid "workspace.layout_grid.editor.options.exit"
msgstr "Quitter"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:429, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:435
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:430, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:436
msgid "workspace.layout_grid.editor.padding.bottom"
msgstr "Marge intérieure du bas"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:491
msgid "workspace.layout_grid.editor.padding.expand"
msgstr "Afficher les options de marge intérieure sur les 4 côtés"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:354, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:355, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:362
msgid "workspace.layout_grid.editor.padding.horizontal"
msgstr "Marge intérieure horizontale"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:444, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:450
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:451
msgid "workspace.layout_grid.editor.padding.left"
msgstr "Marge intérieure de gauche"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:414, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:420
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:421
msgid "workspace.layout_grid.editor.padding.right"
msgstr "Marge intérieure de droite"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:406
msgid "workspace.layout_grid.editor.padding.top"
msgstr "Marge intérieure du haut"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:340, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:341, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:347
msgid "workspace.layout_grid.editor.padding.vertical"
msgstr "Marge intérieure verticale"
@@ -5216,7 +5238,7 @@ msgstr "Terminé"
msgid "workspace.layout_grid.editor.top-bar.locate"
msgstr "Montrer"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1326
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1327
msgid "workspace.layout_grid.editor.top-bar.locate.tooltip"
msgstr "Montrer la disposition en grille"
@@ -5225,10 +5247,6 @@ msgstr "Montrer la disposition en grille"
msgid "workspace.libraries.add"
msgstr "Ajouter"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s couleurs"
-
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
msgstr "Il n'y a pas encore de styles de couleur dans votre bibliothèque"
@@ -5255,45 +5273,37 @@ msgstr "Dernières couleurs utilisées"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "Couleurs complémentaires RVB"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RVBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Enregistrer le style de couleur"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s composants"
-
-#: src/app/main/ui/workspace/libraries.cljs:371
+#: src/app/main/ui/workspace/libraries.cljs:404
msgid "workspace.libraries.empty.add-some"
msgstr "Ou ajouter une parmi celles-ci pour essayer :"
-#: src/app/main/ui/workspace/libraries.cljs:365
+#: src/app/main/ui/workspace/libraries.cljs:398
msgid "workspace.libraries.empty.no-libraries"
msgstr ""
"Il n'y a pas de bibliothèque partagée dans votre équipe, vous pouvez "
"regarder"
-#: src/app/main/ui/workspace/libraries.cljs:369
+#: src/app/main/ui/workspace/libraries.cljs:402
msgid "workspace.libraries.empty.some-templates"
msgstr "quelques modèles par ici"
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Bibliothèque du fichier"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s graphiques"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "BIBLIOTHÈQUES DANS CE FICHIER"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "BIBLIOTHÈQUES"
@@ -5302,11 +5312,11 @@ msgstr "BIBLIOTHÈQUES"
msgid "workspace.libraries.library"
msgstr "BIBLIOTHÈQUE"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "MISES À JOUR DE LA BIBLIOTHÈQUE"
-#: src/app/main/ui/workspace/libraries.cljs:360
+#: src/app/main/ui/workspace/libraries.cljs:393
msgid "workspace.libraries.loading"
msgstr "Chargement…"
@@ -5315,51 +5325,47 @@ msgstr "Chargement…"
msgid "workspace.libraries.more-templates"
msgstr "Vous pouvez rechercher "
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "Aucune bibliothèque partagée n’a besoin d’être mise à jour"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "Aucune correspondance pour « %s »"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "Rechercher des bibliothèques partagées"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "BIBLIOTHÈQUES PARTAGÉES"
-#: src/app/main/ui/workspace/libraries.cljs:352
+#: src/app/main/ui/workspace/libraries.cljs:385
msgid "workspace.libraries.shared-library-btn"
msgstr "Connecter librairie"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Plusieurs typographies"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Dissocier toutes les typographies"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s typographies"
-
-#: src/app/main/ui/workspace/libraries.cljs:323
+#: src/app/main/ui/workspace/libraries.cljs:354
msgid "workspace.libraries.unlink-library-btn"
msgstr "Déconnecter librairie"
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Mettre à jour"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "Voir tous les changements"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "MISES À JOUR"
@@ -5367,31 +5373,31 @@ msgstr "MISES À JOUR"
msgid "workspace.notification-pill.detail"
msgstr "Détails"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "Cliquez sur le bouton « + » pour ajouter des interactions."
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:96
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:97
msgid "workspace.options.blur-options.add-blur"
msgstr "Ajouter du flou"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:117
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:118
msgid "workspace.options.blur-options.remove-blur"
msgstr "Supprimer le flou"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Flou"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "Flou de groupe"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "Flou de sélection"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:114
msgid "workspace.options.blur-options.toggle-blur"
msgstr "Activer/Désactiver le flou"
@@ -5399,83 +5405,83 @@ msgstr "Activer/Désactiver le flou"
msgid "workspace.options.canvas-background"
msgstr "Couleur de fond du canvas"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "Tronquer le contenu"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Composant"
-#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:193
+#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:196
msgid "workspace.options.component.annotation"
msgstr "Note"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "Copier"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:185
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:188
msgid "workspace.options.component.create-annotation"
msgstr "Créer une note"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "Modifier une note"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "Principal"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:706
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:721
msgid "workspace.options.component.swap"
msgstr "Échanger composant"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:765
msgid "workspace.options.component.swap.empty"
msgstr "Cette librairie ne contient aucun élément pour le moment"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:973
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:993
msgid "workspace.options.component.unlinked"
msgstr "Délié"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:264
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:265
msgid "workspace.options.component.variant.duplicated.single.one"
msgstr ""
"Cette variante possède des propriétés et des valeurs identiques à celles "
"d'une autre variante."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:270
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:271
msgid "workspace.options.component.variant.duplicated.single.some"
msgstr ""
"Certaines de ces variantes possèdent des propriétés et des valeurs "
"identiques."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1236
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1271
msgid "workspace.options.component.variant.malformed.group.locate"
msgstr "Chercher les variantes non valides"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1233
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1268
msgid "workspace.options.component.variant.malformed.group.title"
msgstr "Le nom de certaines variantes n'est pas valide"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:252
msgid "workspace.options.component.variant.malformed.single.all"
msgstr "Le nom de ces variantes n'est pas valide."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:247
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:249
msgid "workspace.options.component.variant.malformed.single.one"
msgstr "Le nom de cette variante n'est pas valide."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:253
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:255
msgid "workspace.options.component.variant.malformed.single.some"
msgstr "Le nom de certaines de ces variantes n'est pas valide."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:390
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:391
msgid "workspace.options.component.variant.malformed.structure.example"
msgstr "[propriété]=[valeur], [propriété]=[valeur]"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:389
msgid "workspace.options.component.variant.malformed.structure.title"
msgstr "Essayez d'utiliser la structure suivante :"
@@ -5497,7 +5503,7 @@ msgstr "Sont du même type"
msgid "workspace.options.component.variants-help-modal.rule3"
msgstr "Possèdent le même niveau hiérarchique"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:935, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1157, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:47
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:955, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1191, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:47
msgid "workspace.options.component.variants-help-modal.title"
msgstr "Comment les variantes restent connectées"
@@ -5541,7 +5547,7 @@ msgstr "Haut"
msgid "workspace.options.constraints.topbottom"
msgstr "Haut et bas"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Conception"
@@ -5554,21 +5560,21 @@ msgstr "Exporter"
msgid "workspace.options.export-multiple"
msgstr "Exporter la sélection"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "Exporter 1 élément"
msgstr[1] "Exporter %s éléments"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:188
+#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:214
msgid "workspace.options.export.add-export"
msgstr "Ajouter une exportation"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:235
+#: 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 "Supprimer l'exportation"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Suffixe"
@@ -5576,7 +5582,7 @@ msgstr "Suffixe"
msgid "workspace.options.exporting-complete"
msgstr "Exportation terminée"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "Exportation…"
@@ -5588,27 +5594,27 @@ msgstr "L'exportation a échoué"
msgid "workspace.options.exporting-object-slow"
msgstr "L'exportation est d'une lenteur inattendue"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Remplissage"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:194
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:234
msgid "workspace.options.fill.add-fill"
msgstr "Ajouter remplissage"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:208
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:248
msgid "workspace.options.fill.remove-fill"
msgstr "Supprimer la couleur de remplissage"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:392
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:474
msgid "workspace.options.fit-content"
msgstr "Ajuster la taille du plan de travail au contenu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "Indiquer le début du flux"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:178
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:179
msgid "workspace.options.flows.flow"
msgstr "Flux"
@@ -5617,19 +5623,19 @@ msgstr "Flux"
msgid "workspace.options.flows.flow-start"
msgstr "Début du flux"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "Début des flux"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:155
msgid "workspace.options.flows.remove-flow"
msgstr "Supprimer le flux"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Automatique"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "Colonnes"
@@ -5638,7 +5644,7 @@ msgstr "Colonnes"
msgid "workspace.options.grid.grid-title"
msgstr "Quadrillage"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Couleur"
@@ -5647,15 +5653,15 @@ msgstr "Couleur"
msgid "workspace.options.grid.params.columns"
msgstr "Colonnes"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "Gouttière"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Hauteur"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Marge"
@@ -5664,7 +5670,7 @@ msgstr "Marge"
msgid "workspace.options.grid.params.rows"
msgstr "Lignes"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "Définir par défaut"
@@ -5678,159 +5684,159 @@ msgstr "Taille"
msgid "workspace.options.grid.params.type"
msgstr "Type"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Bas"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Centre"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Gauche"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Droite"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "Étirer"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "Haut"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "Utiliser la valeur par défaut"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Largeur"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Lignes"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "Carré"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Remplissage de groupe"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Contour de groupe"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:326
msgid "workspace.options.guides.add-guide"
msgstr "Ajouter un repère"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:187
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:188
msgid "workspace.options.guides.remove-guide"
msgstr "Supprimer le repère"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:320
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
msgid "workspace.options.guides.title"
msgstr "Guides"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:183
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:184
msgid "workspace.options.guides.toggle-guide"
msgstr "Afficher/Masquer le repère"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "Hauteur"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "Inspecter"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "Action"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "Après un délai"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "Animation"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "Dissolution"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "Aucune"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "Pousser"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "Glissement"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "automatique"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "Ajouter une superposition d'arrière-plan"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "Fermer en cliquant a l'extérieur"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "Fermer la superposition"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "Fermer la superposition : %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "Délai"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "Destination"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "Durée"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "Easing"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "Ease"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "Ease in"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "Ease in out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "Ease out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "Linéaire"
@@ -5839,47 +5845,47 @@ msgstr "Linéaire"
msgid "workspace.options.interaction-in"
msgstr "Dans"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "Entrée de la souris"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "Sortie de la souris"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "ms"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "Naviguer vers"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "Naviguer vers : %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(non définie)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "Effet de décalage"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "Au clic"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "Ouvrir la superposition"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "Ouvrir la superposition : %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "Ouvrir l'URL"
@@ -5888,87 +5894,87 @@ msgstr "Ouvrir l'URL"
msgid "workspace.options.interaction-out"
msgstr "Sortie"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "Centré en bas"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "En bas à gauche"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "En bas à droite"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "Au centre"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "Manuel"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "Centrer en haut"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "En haut à gauche"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "En haut à droite"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "Position"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "Conserver la position du défilement"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "Écran précédent"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "Relatif à"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "soi"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "Activer/désactiver la superposition"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "Activer/désactiver la superposition : %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "Déclencheur"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "En survolant"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "En appuyant"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "Interactions"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:735
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:736
msgid "workspace.options.interactions.add-interaction"
msgstr "Ajouter une interaction"
@@ -5977,67 +5983,67 @@ msgstr "Ajouter une interaction"
msgid "workspace.options.interactions.remove-interaction"
msgstr "Supprimer l'interaction"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "Couleur"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "Densité plus forte"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "Densité plus faible"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "Assombrir"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "Différence"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "Exclusion"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Lumière crue"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Teinte"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Éclaircir"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "Luminosité"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "Produit"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "Normal"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "Incrustation"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "Saturation"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Superposition"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "Lumière tamisée"
@@ -6056,7 +6062,7 @@ msgstr "Grouper les calques"
msgid "workspace.options.layer-options.title.multiple"
msgstr "Calques sélectionnés"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:202
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:207, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:213
msgid "workspace.options.layer-options.toggle-layer"
msgstr "Afficher/Cacher le calque"
@@ -6065,19 +6071,19 @@ msgstr "Afficher/Cacher le calque"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "Options avancées"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "Hauteur max"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "Largeur max"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "Hauteur min"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "Largeur min"
@@ -6191,15 +6197,15 @@ msgstr "espace entre"
msgid "workspace.options.layout.top"
msgstr "En haut"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "Plus de couleurs"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "Plus de couleurs de la bibliothèque"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "Opacité"
@@ -6208,35 +6214,35 @@ msgstr "Opacité"
msgid "workspace.options.position"
msgstr "Position"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "Prototype"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "Rayon"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "En bas à gauche"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "En bas à droite"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "En haut à gauche"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "En haut à droite"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:152
msgid "workspace.options.radius.hide-all-corners"
msgstr "Cacher les rayons indépendants"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:136
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:153
msgid "workspace.options.radius.show-single-corners"
msgstr "Afficher les rayons indépendants"
@@ -6248,7 +6254,7 @@ msgstr "Récentes"
msgid "workspace.options.retry"
msgstr "Réessayer"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "Rotation"
@@ -6256,33 +6262,33 @@ msgstr "Rotation"
msgid "workspace.options.search-font"
msgstr "Rechercher une police"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr ""
"Sélectionnez une forme, un plan de travail ou un groupe pour faire glisser "
"une connexion vers un autre plan de travail."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "Couleurs sélectionnées"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "Remplissage de sélection"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "Contour de sélection"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:341
msgid "workspace.options.shadow-options.add-shadow"
msgstr "Ajouter une ombre"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "Flou"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "Couleur de l'ombre"
@@ -6294,63 +6300,64 @@ msgstr "Ombre portée"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "Ombre intérieure"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:348
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:183, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:354
msgid "workspace.options.shadow-options.remove-shadow"
msgstr "Supprimer l'ombre"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "Diffusion"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "Ombre"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "Ombre de groupe"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "Ombres de la sélection"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:174
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:179
msgid "workspace.options.shadow-options.toggle-shadow"
msgstr "Afficher/Cacher l'ombre"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "Afficher dans les exportations"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "Montrer en mode spectateur"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "Taille"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "Tailles prédéfinies"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:534
msgid "workspace.options.size.lock"
msgstr "Bloquer le ratio"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:534
msgid "workspace.options.size.unlock"
msgstr "Débloquer le ratio"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "Bordure"
@@ -6359,7 +6366,7 @@ msgstr "Bordure"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "Marqueur cercle"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "Cercle"
@@ -6368,7 +6375,7 @@ msgstr "Cercle"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "Marqueur diamant"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "Diamant"
@@ -6377,19 +6384,19 @@ msgstr "Diamant"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "Flèche de ligne"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "Flèche"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "Aucune"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "Rond"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "Carré"
@@ -6398,7 +6405,7 @@ msgstr "Carré"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "Marqueur carré"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "Rectangle"
@@ -6407,83 +6414,83 @@ msgstr "Rectangle"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "Flèche triangle"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "Triangle"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "Couleur du tracé"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "Largeur du tracé"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:180
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:189
msgid "workspace.options.stroke.add-stroke"
msgstr "Ajouter une couleur du tracé"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "Centre"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "Tirets"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "Pointillé"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "Intérieur"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "Mixte"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "Extérieur"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:193
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:202
msgid "workspace.options.stroke.remove-stroke"
msgstr "Supprimer la couleur du tracé"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "Solide"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "Aligner en bas"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "Aligner verticalement au milieu"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "Aligner en haut"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "Gauche à droite"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "Droite à gauche"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "Hauteur automatique"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "Largeur automatique"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "Fixe"
@@ -6505,35 +6512,35 @@ msgstr "Minuscule"
msgid "workspace.options.text-options.none"
msgstr "Aucune"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "Barré (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "Aligner au centre"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "Justifier"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "Aligner à gauche"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "Aligner à droite"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "Texte"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "Texte de groupe"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "Texte de la sélection"
@@ -6542,7 +6549,7 @@ msgstr "Texte de la sélection"
msgid "workspace.options.text-options.titlecase"
msgstr "Premières Lettres en Capitales"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "Soulignage (%s)"
@@ -6551,21 +6558,21 @@ msgstr "Soulignage (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "Majuscule"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr ""
"Utilisez le bouton de lecture dans l’en‑tête pour exécuter la vue du "
"prototype."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "Largeur"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "Axe X"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Axe Y"
@@ -6609,82 +6616,82 @@ msgstr "Dissocier les nœuds (%s)"
msgid "workspace.path.actions.snap-nodes"
msgstr "Aligner les nœuds (%s)"
-#: src/app/main/ui/workspace/plugins.cljs:83
+#: src/app/main/ui/workspace/plugins.cljs:84
msgid "workspace.plugins.button-open"
msgstr "Ouvrir"
-#: src/app/main/ui/workspace/plugins.cljs:197
+#: src/app/main/ui/workspace/plugins.cljs:198
#, markdown
msgid "workspace.plugins.discover"
msgstr "Découvrir [plus d'extensions](%s)"
-#: src/app/main/ui/workspace/plugins.cljs:204
+#: src/app/main/ui/workspace/plugins.cljs:205
msgid "workspace.plugins.empty-plugins"
msgstr "Aucune extension installée pour le moment"
-#: src/app/main/ui/workspace/plugins.cljs:191
+#: src/app/main/ui/workspace/plugins.cljs:192
msgid "workspace.plugins.error.manifest"
msgstr "Le fichier de définition de l'extension est incorrect."
-#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:755, src/app/main/ui/workspace/plugins.cljs:82
+#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:783, src/app/main/ui/workspace/plugins.cljs:83
msgid "workspace.plugins.error.need-editor"
msgstr "Vous devez être éditeur pour utiliser cette extension"
-#: src/app/main/ui/workspace/plugins.cljs:187
+#: src/app/main/ui/workspace/plugins.cljs:188
msgid "workspace.plugins.error.url"
msgstr "Cette extension n'existe pas ou l'URL n'est pas correcte."
-#: src/app/main/ui/workspace/plugins.cljs:183
+#: src/app/main/ui/workspace/plugins.cljs:184
msgid "workspace.plugins.install"
msgstr "Installer"
-#: src/app/main/ui/workspace/plugins.cljs:213
+#: src/app/main/ui/workspace/plugins.cljs:214
msgid "workspace.plugins.installed-plugins"
msgstr "Extensions installées"
-#: src/app/main/ui/workspace/main_menu.cljs:710
+#: src/app/main/ui/workspace/main_menu.cljs:738
msgid "workspace.plugins.menu.plugins-manager"
msgstr "Gestionnaire d'extensions"
-#: src/app/main/ui/workspace/main_menu.cljs:906
+#: src/app/main/ui/workspace/main_menu.cljs:934
msgid "workspace.plugins.menu.title"
msgstr "Extensions"
-#: src/app/main/ui/workspace/plugins.cljs:374
+#: src/app/main/ui/workspace/plugins.cljs:375
msgid "workspace.plugins.permissions-update.title"
msgstr "METTRE À JOUR CETTE EXTENSION"
-#: src/app/main/ui/workspace/plugins.cljs:378
+#: src/app/main/ui/workspace/plugins.cljs:379
msgid "workspace.plugins.permissions-update.warning"
msgstr ""
"Cette extension a été modifiée depuis que vous l'avez ouverte. Elle "
"souhaite maintenant accéder à :"
-#: src/app/main/ui/workspace/plugins.cljs:278
+#: src/app/main/ui/workspace/plugins.cljs:279
msgid "workspace.plugins.permissions.allow-download"
msgstr "Télécharger des fichiers."
-#: src/app/main/ui/workspace/plugins.cljs:285
+#: src/app/main/ui/workspace/plugins.cljs:286
msgid "workspace.plugins.permissions.allow-localstorage"
msgstr "Stockez les données dans le navigateur."
-#: src/app/main/ui/workspace/plugins.cljs:271
+#: src/app/main/ui/workspace/plugins.cljs:272
msgid "workspace.plugins.permissions.comment-read"
msgstr "Lire vos commentaires et réponses."
-#: src/app/main/ui/workspace/plugins.cljs:265
+#: src/app/main/ui/workspace/plugins.cljs:266
msgid "workspace.plugins.permissions.comment-write"
msgstr "Lire et modifier vos commentaires et répondre en votre nom."
-#: src/app/main/ui/workspace/plugins.cljs:238
+#: src/app/main/ui/workspace/plugins.cljs:239
msgid "workspace.plugins.permissions.content-read"
msgstr "Lire le contenu des fichiers dont l'utilisateur a accès."
-#: src/app/main/ui/workspace/plugins.cljs:232
+#: src/app/main/ui/workspace/plugins.cljs:233
msgid "workspace.plugins.permissions.content-write"
msgstr "Lire et modifier le contenu des fichiers dont l'utilisateur a accès."
-#: src/app/main/ui/workspace/plugins.cljs:325
+#: src/app/main/ui/workspace/plugins.cljs:326
msgid "workspace.plugins.permissions.disclaimer"
msgstr ""
"Notez que cette extension est créée par un utilisateur externe. Avant de "
@@ -6692,31 +6699,31 @@ msgstr ""
"confiance. La confidentialité de vos données et votre sécurité sont "
"importantes pour nous. Si vous avez des questions, contactez l'assistance."
-#: src/app/main/ui/workspace/plugins.cljs:258
+#: src/app/main/ui/workspace/plugins.cljs:259
msgid "workspace.plugins.permissions.library-read"
msgstr "Lire vos bibliothèques et composants."
-#: src/app/main/ui/workspace/plugins.cljs:252
+#: src/app/main/ui/workspace/plugins.cljs:253
msgid "workspace.plugins.permissions.library-write"
msgstr "Lire et modifier vos bibliothèques et composants."
-#: src/app/main/ui/workspace/plugins.cljs:318
+#: src/app/main/ui/workspace/plugins.cljs:319
msgid "workspace.plugins.permissions.title"
msgstr "L'EXTENSION « %s » SOUHAITE ACCÉDER À :"
-#: src/app/main/ui/workspace/plugins.cljs:245
+#: src/app/main/ui/workspace/plugins.cljs:246
msgid "workspace.plugins.permissions.user-read"
msgstr "Lire les informations du profil de l'utilisateur."
-#: src/app/main/ui/workspace/plugins.cljs:209
+#: src/app/main/ui/workspace/plugins.cljs:210
msgid "workspace.plugins.plugin-list-link"
msgstr "Liste des extensions"
-#: src/app/main/ui/workspace/plugins.cljs:86
+#: src/app/main/ui/workspace/plugins.cljs:87
msgid "workspace.plugins.remove-plugin"
msgstr "Supprimer l'extension"
-#: src/app/main/ui/workspace/plugins.cljs:178
+#: src/app/main/ui/workspace/plugins.cljs:179
msgid "workspace.plugins.search-placeholder"
msgstr "Entrez l'URL d'une extension"
@@ -6724,26 +6731,26 @@ msgstr "Entrez l'URL d'une extension"
msgid "workspace.plugins.success"
msgstr "Extension correctement chargée."
-#: src/app/main/ui/workspace/plugins.cljs:172
+#: src/app/main/ui/workspace/plugins.cljs:173
msgid "workspace.plugins.title"
msgstr "Extensions"
-#: src/app/main/ui/workspace/plugins.cljs:438
+#: src/app/main/ui/workspace/plugins.cljs:439
msgid "workspace.plugins.try-out.cancel"
msgstr "PAS MAINTENANT"
-#: src/app/main/ui/workspace/plugins.cljs:431
+#: src/app/main/ui/workspace/plugins.cljs:432
msgid "workspace.plugins.try-out.message"
msgstr ""
"Envie d'y jeter un œil ? Cela ouvrira un nouveau brouillon pour votre "
"équipe actuelle. (Si non, vous pouvez toujours le trouver dans les "
"extensions installés dans n'importe quel fichier.)"
-#: src/app/main/ui/workspace/plugins.cljs:427
+#: src/app/main/ui/workspace/plugins.cljs:428
msgid "workspace.plugins.try-out.title"
msgstr "L'EXTENSION « %s » EST INSTALLÉE POUR VOTRE UTILISATEUR !"
-#: src/app/main/ui/workspace/plugins.cljs:444
+#: src/app/main/ui/workspace/plugins.cljs:445
msgid "workspace.plugins.try-out.try"
msgstr "ESSAYER L'EXTENSION"
@@ -6755,15 +6762,15 @@ msgstr "Ajouter une disposition flex"
msgid "workspace.shape.menu.add-grid"
msgstr "Ajouter une disposition en grille"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1015, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1039
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1016, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1040
msgid "workspace.shape.menu.add-layout"
msgstr "Ajouter une disposition"
-#: src/app/main/ui/workspace/context_menu.cljs:608, src/app/main/ui/workspace/sidebar/assets/common.cljs:505, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:941, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1161
+#: src/app/main/ui/workspace/context_menu.cljs:610, src/app/main/ui/workspace/sidebar/assets/common.cljs:514, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:961, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1113, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1195
msgid "workspace.shape.menu.add-variant"
msgstr "Créer une variante"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:509, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:990, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1082, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1198
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:518, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1010, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1115, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1233
msgid "workspace.shape.menu.add-variant-property"
msgstr "Ajouter une nouvelle propriété"
@@ -6775,7 +6782,7 @@ msgstr "Envoyer au fond"
msgid "workspace.shape.menu.backward"
msgstr "Éloigner"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:640
+#: src/app/main/ui/workspace/sidebar/assets/components.cljs:636
msgid "workspace.shape.menu.combine-as-variants-error"
msgstr "Les composants doivent se trouver sur la même page"
@@ -6811,7 +6818,7 @@ msgstr "Copier sous forme de fichier SVG"
msgid "workspace.shape.menu.copy-text"
msgstr "Copier en texte"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "Créer une note"
@@ -6819,11 +6826,11 @@ msgstr "Créer une note"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "Créer un plan de travail depuis la sélection"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "Créer un composant"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "Créer plusieurs composants"
@@ -6831,7 +6838,7 @@ msgstr "Créer plusieurs composants"
msgid "workspace.shape.menu.cut"
msgstr "Couper"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "Supprimer"
@@ -6839,15 +6846,15 @@ msgstr "Supprimer"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "Supprimer le début du flux"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "Détacher l’instance"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "Détacher les instances"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "Différence"
@@ -6859,11 +6866,11 @@ msgstr "Dupliquer"
msgid "workspace.shape.menu.edit"
msgstr "Modifier"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "Exclure"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "Aplatir"
@@ -6896,19 +6903,19 @@ msgstr "Aller au fichier du composant principal"
msgid "workspace.shape.menu.group"
msgstr "Groupe"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "Masquer"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "Afficher/Masquer l'interface"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "Intersection"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "Bloquer"
@@ -6916,7 +6923,7 @@ msgstr "Bloquer"
msgid "workspace.shape.menu.mask"
msgstr "Masque"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "Coller"
@@ -6936,15 +6943,15 @@ msgstr "Retirer flex layout"
msgid "workspace.shape.menu.remove-grid"
msgstr "Supprimer la disposition en grille"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1033
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1034
msgid "workspace.shape.menu.remove-layout"
msgstr "Supprimer la disposition"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1222
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1257
msgid "workspace.shape.menu.remove-variant-property"
msgstr "Supprimer la propriété"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1221
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1256
msgid "workspace.shape.menu.remove-variant-property.last-property"
msgstr "La variante doit comporter au moins une propriété"
@@ -6952,15 +6959,15 @@ msgstr "La variante doit comporter au moins une propriété"
msgid "workspace.shape.menu.rename"
msgstr "Renommer"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "Annuler les modifications"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "Rétablir le composant principal"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:504
msgid "workspace.shape.menu.restore-variant"
msgstr "Rétablir la variante"
@@ -6968,15 +6975,15 @@ msgstr "Rétablir la variante"
msgid "workspace.shape.menu.select-layer"
msgstr "Sélectionner le calque"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "Montrer"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "Afficher dans le panneau des ressources"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "Afficher le composant principal"
@@ -6989,6 +6996,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "Définir comme miniature"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "Transformer en chemin"
@@ -6996,11 +7004,11 @@ msgstr "Transformer en chemin"
msgid "workspace.shape.menu.ungroup"
msgstr "Dissocier"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "Union"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "Débloquer"
@@ -7013,7 +7021,7 @@ msgstr "Supprimer le masque"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "Mettre à jour les composants"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "Actualiser le composant principal"
@@ -7025,11 +7033,11 @@ msgstr "Réduire la barre latérale"
msgid "workspace.sidebar.expand"
msgstr "Ouvrir la barre latérale"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "Historique"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "Calques"
@@ -7069,11 +7077,11 @@ msgstr "Textes"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "Attributs SVG importés"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "Pages"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:248
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:249
msgid "workspace.sidebar.sitemap.add-page"
msgstr "Ajouter une page"
@@ -7090,27 +7098,27 @@ msgstr "%s thèmes actifs"
msgid "workspace.tokens.add set"
msgstr "Ajouter une collection"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:329
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
msgid "workspace.tokens.add-new-theme"
msgstr "Ajouter un nouveau thème"
-#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:60
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:62
msgid "workspace.tokens.add-set-to-group"
-msgstr "Ajouter le composant à ce groupe"
+msgstr "Ajouter la collection à ce groupe"
-#: src/app/main/ui/workspace/tokens/management/group.cljs:113
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:197, src/app/main/ui/workspace/tokens/management/group.cljs:115
msgid "workspace.tokens.add-token"
msgstr "Ajouter un token : %s"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:161
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:136
msgid "workspace.tokens.applied-to"
msgstr "Appliqué à"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:315
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:316
msgid "workspace.tokens.axis"
msgstr "Axe"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:338
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:337
msgid "workspace.tokens.back-to-themes"
msgstr "Retour à la liste des thèmes"
@@ -7140,35 +7148,35 @@ msgstr "Couleur"
msgid "workspace.tokens.create-new-theme"
msgstr "Créez votre premier thème dès à présent."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:100, src/app/main/ui/workspace/tokens/themes.cljs:44
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:96, src/app/main/ui/workspace/tokens/themes.cljs:44
msgid "workspace.tokens.create-one"
msgstr "En créer un."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:534
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:552
msgid "workspace.tokens.create-token"
-msgstr "Créer une nouvelle unité de style %s"
+msgstr "Créer un nouveau token %s"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:337
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:338
msgid "workspace.tokens.delete"
-msgstr "Supprimer l'unité de style"
+msgstr "Supprimer le token"
#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:154
msgid "workspace.tokens.delete-theme-title"
msgstr "Supprimer le thème"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:334
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:335
msgid "workspace.tokens.duplicate"
-msgstr "Dupliquer l'unité de style"
+msgstr "Dupliquer le token"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:201, src/app/main/data/workspace/tokens/library_edit.cljs:405
+#: src/app/main/data/workspace/tokens/library_edit.cljs:197, src/app/main/data/workspace/tokens/library_edit.cljs:415
msgid "workspace.tokens.duplicate-suffix"
msgstr "copie"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:321
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:322
msgid "workspace.tokens.edit"
-msgstr "Modifier l'unité de style"
+msgstr "Modifier le token"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:327
msgid "workspace.tokens.edit-theme-title"
msgstr "Modifier le thème"
@@ -7176,17 +7184,17 @@ msgstr "Modifier le thème"
msgid "workspace.tokens.edit-themes"
msgstr "Modifier les thèmes"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:533
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:551
msgid "workspace.tokens.edit-token"
-msgstr "Modifier l'unité de style"
+msgstr "Modifier le token"
#: src/app/main/data/workspace/tokens/errors.cljs:41
msgid "workspace.tokens.empty-input"
msgstr "La valeur du token doit être renseignée"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:540
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:558
msgid "workspace.tokens.enter-token-name"
-msgstr "Entrez le nom de l'unité de style %s"
+msgstr "Entrez le nom du token %s"
#: src/app/main/data/workspace/tokens/errors.cljs:15
msgid "workspace.tokens.error-parse"
@@ -7216,7 +7224,11 @@ msgstr "Prévisualisation :"
msgid "workspace.tokens.export.single-file"
msgstr "Fichier unique"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:229
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1024, src/app/main/ui/workspace/tokens/management/create/form.cljs:1039
+msgid "workspace.tokens.font-weight-value-enter"
+msgstr "Font weight (300, Bold, Regular, Italic...) ou {alias}"
+
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:228
msgid "workspace.tokens.gaps"
msgstr "Intervalles"
@@ -7232,9 +7244,9 @@ msgstr "Nom du groupe"
#: src/app/main/ui/workspace/tokens/sets.cljs
#, unused
msgid "workspace.tokens.grouping-set-alert"
-msgstr "Le groupement des collections d'unité de style n'est pas encore supporté."
+msgstr "Le groupement des collections de tokens n'est pas encore supporté."
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:232
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:233
msgid "workspace.tokens.import-button-prefix"
msgstr "Importer %s"
@@ -7242,31 +7254,31 @@ msgstr "Importer %s"
msgid "workspace.tokens.import-error"
msgstr "Erreur d'importation :"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:272
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:273
msgid "workspace.tokens.import-menu-folder-option"
msgstr "Dossier"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:271
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:272
msgid "workspace.tokens.import-menu-json-option"
msgstr "Fichier JSON unique"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:270
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:271
msgid "workspace.tokens.import-menu-zip-option"
msgstr "Fichier ZIP"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:240
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:241
msgid "workspace.tokens.import-multiple-files"
msgstr ""
"Dans plusieurs fichiers, le nom/chemin d'accès du fichier correspondent aux "
"noms définis."
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:239
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:240
msgid "workspace.tokens.import-single-file"
msgstr ""
"Dans un fichier JSON, les clés de premier niveau doivent correspondre aux "
"noms de collection des tokens."
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:236
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:237
msgid "workspace.tokens.import-tokens"
msgstr "Importer des tokens"
@@ -7274,10 +7286,10 @@ msgstr "Importer des tokens"
#, unused
msgid "workspace.tokens.import-tooltip"
msgstr ""
-"L'importation d'un fichier JSON remplacera toutes vos unités de style, "
-"collections et thèmes"
+"L'importation d'un fichier JSON remplacera tous vos tokens, collections et "
+"thèmes"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:246
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:247
msgid "workspace.tokens.import-warning"
msgstr ""
"L'importation des tokens va remplacer tous vos tokens, collections et "
@@ -7285,7 +7297,7 @@ msgstr ""
#: src/app/main/ui/workspace/tokens/management.cljs:141
msgid "workspace.tokens.inactive-set"
-msgstr "Inactif"
+msgstr "Inactive"
#: src/app/main/ui/workspace/tokens/management.cljs:132
msgid "workspace.tokens.inactive-set-description"
@@ -7299,19 +7311,17 @@ msgstr "Couleur non valide : %s"
#: src/app/main/data/workspace/tokens/errors.cljs:23
msgid "workspace.tokens.invalid-json"
-msgstr ""
-"Erreur d'importation : données de l'unité de style non valides dans le "
-"fichier JSON."
+msgstr "Erreur d'importation : données du token non valides dans le fichier JSON."
#: src/app/main/data/workspace/tokens/errors.cljs:27
msgid "workspace.tokens.invalid-json-token-name"
-msgstr "Erreur lors de l'importation : nom de token non valide au format JSON."
+msgstr "Erreur lors de l'importation : nom du token non valide au format JSON."
#: src/app/main/data/workspace/tokens/errors.cljs:28
msgid "workspace.tokens.invalid-json-token-name-detail"
msgstr ""
"« %s » n'est pas un nom de token valide.\n"
-"Les noms de tokens ne doivent pas comporter de lettres et de chiffres "
+"Les noms des tokens ne doivent pas comporter de lettres et de chiffres "
"séparés par des caractères « . » et ne doivent pas commencer par le symbole "
"« $ »."
@@ -7324,12 +7334,12 @@ msgstr ""
#: src/app/main/data/workspace/tokens/errors.cljs:85
msgid "workspace.tokens.invalid-text-decoration-token-value"
msgstr ""
-"Valeur du token non valide : seules les valeurs Aucune, Souligné et Barré "
-"sont acceptées"
+"Valeur du token non valide : seules les valeurs none, underline et "
+"strike-through sont acceptées"
#: src/app/main/data/workspace/tokens/errors.cljs:61, src/app/main/data/workspace/tokens/errors.cljs:73, src/app/main/data/workspace/tokens/errors.cljs:77
msgid "workspace.tokens.invalid-value"
-msgstr "Valeur de l'unité de style non valide : %s"
+msgstr "Valeur du token non valide : %s"
#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:191
msgid "workspace.tokens.label.group"
@@ -7347,23 +7357,23 @@ msgstr "Thème"
msgid "workspace.tokens.label.theme-placeholder"
msgstr "Ajouter un thème (ex : Clair)"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:221
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:220
msgid "workspace.tokens.margins"
msgstr "Marges"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:257
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:256
msgid "workspace.tokens.max-size"
msgstr "Taille max."
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:251
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:250
msgid "workspace.tokens.min-size"
msgstr "Taille min."
#: src/app/main/data/workspace/tokens/errors.cljs:57
msgid "workspace.tokens.missing-references"
-msgstr "Références de l'unité de style manquantes : "
+msgstr "Références du token manquantes : "
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:148
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:123
msgid "workspace.tokens.more-options"
msgstr "Cliquez avec le bouton droit pour afficher les options"
@@ -7375,7 +7385,7 @@ msgstr "Aucune collection active"
msgid "workspace.tokens.no-active-theme"
msgstr "Aucun thème actif"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:76
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:72
msgid "workspace.tokens.no-permisions-set"
msgstr "Vous devez être éditeur pour activer/désactiver des collections"
@@ -7383,11 +7393,11 @@ msgstr "Vous devez être éditeur pour activer/désactiver des collections"
msgid "workspace.tokens.no-permission-themes"
msgstr "Vous devez être éditeur pour utiliser des thèmes"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:480
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:483
msgid "workspace.tokens.no-sets-create"
msgstr "Aucune collection n'est définie. Créez-en d'abord une."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:97, src/app/main/ui/workspace/tokens/sets/lists.cljs:103
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:93, src/app/main/ui/workspace/tokens/sets/lists.cljs:99
msgid "workspace.tokens.no-sets-yet"
msgstr "Il n'y a pas encore de collections."
@@ -7399,13 +7409,17 @@ msgstr "Aucun thème."
msgid "workspace.tokens.no-themes-currently"
msgstr "Vous n'avez actuellement aucun thème."
+#: src/app/main/data/workspace/tokens/errors.cljs:19
+msgid "workspace.tokens.no-token-files-found"
+msgstr "Aucun token, collection ou thème n'ont été trouvés dans ce fichier."
+
#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:148
msgid "workspace.tokens.num-active-sets"
msgstr "%s collections actives"
#: src/app/main/data/workspace/tokens/errors.cljs:53
msgid "workspace.tokens.number-too-large"
-msgstr "Valeur de l'unité de style non valide. La valeur est trop grande : %s"
+msgstr "Valeur du token non valide. La valeur est trop grande : %s"
#: src/app/main/data/workspace/tokens/errors.cljs:73, src/app/main/data/workspace/tokens/warnings.cljs:15
msgid "workspace.tokens.opacity-range"
@@ -7413,12 +7427,12 @@ msgstr ""
"L'opacité doit être comprise entre 0 % et 100 % ou entre 0 et 1 (ex : 50 % "
"ou 0.5)."
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:145
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:120
#, fuzzy
msgid "workspace.tokens.original-value"
msgstr "Valeur initiale : %s"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:205
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:204
msgid "workspace.tokens.paddings"
msgstr "Marges intérieures"
@@ -7426,7 +7440,7 @@ msgstr "Marges intérieures"
msgid "workspace.tokens.radius"
msgstr "Rayons"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:153
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:128
msgid "workspace.tokens.ref-not-valid"
msgstr "La référence n'est pas valide ou n'est pas dans une collection active"
@@ -7435,7 +7449,7 @@ msgstr "La référence n'est pas valide ou n'est pas dans une collection active"
msgid "workspace.tokens.reference-error"
msgstr "Erreurs de référence : "
-#: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:39, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:44, src/app/main/ui/workspace/tokens/management/token_pill.cljs:146
+#: 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:100, 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 "Valeur déduite : %s"
@@ -7444,28 +7458,26 @@ msgstr "Valeur déduite : %s"
msgid "workspace.tokens.save-theme"
msgstr "Enregistrer le thème"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:209, src/app/main/ui/workspace/tokens/sets/lists.cljs:315
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:204, src/app/main/ui/workspace/tokens/sets/lists.cljs:309
msgid "workspace.tokens.select-set"
msgstr "Sélectionner la collection."
#: src/app/main/data/workspace/tokens/errors.cljs:45
msgid "workspace.tokens.self-reference"
-msgstr "L'unité de style s'auto-référence"
+msgstr "Le token s'auto-référence"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:64
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:60
msgid "workspace.tokens.set-edit-placeholder"
msgstr "Entrez le nom (utilisez « / » pour les groupes)"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:343
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:342
msgid "workspace.tokens.set-selection-theme"
-msgstr ""
-"Définissez les collections d'unité de style à utiliser pour cette option du "
-"thème :"
+msgstr "Définissez les collections de tokens à utiliser pour cette option du thème :"
#: src/app/main/ui/workspace/tokens/token_pill.cljs:47
#, unused
msgid "workspace.tokens.set.not-active"
-msgstr "La collection de l'unité de style n'est pas active"
+msgstr "La collection de tokens n'est pas active"
#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:143
msgid "workspace.tokens.sets-hint"
@@ -7481,7 +7493,7 @@ msgstr ""
msgid "workspace.tokens.settings"
msgstr "Paramètres des tokens"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:245
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:244
msgid "workspace.tokens.size"
msgstr "Taille"
@@ -7489,9 +7501,9 @@ msgstr "Taille"
msgid "workspace.tokens.stroke-width-range"
msgstr "La largueur du tracé doit être plus grand ou égal à 0."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:871, src/app/main/ui/workspace/tokens/management/create/form.cljs:898
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1018, src/app/main/ui/workspace/tokens/management/create/form.cljs:1055
msgid "workspace.tokens.text-decoration-value-enter"
-msgstr "Entrez la décoration de texte : Aucune | Souligné | Barré"
+msgstr "none | underline | strike-through ou {alias}"
#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:130
msgid "workspace.tokens.theme-name"
@@ -7507,52 +7519,52 @@ msgstr ""
msgid "workspace.tokens.themes-list"
msgstr "Liste des thèmes"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:589, src/app/main/ui/workspace/tokens/management/create/form.cljs:590
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:608, src/app/main/ui/workspace/tokens/management/create/form.cljs:609
#, fuzzy
msgid "workspace.tokens.token-description"
msgstr "Description"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:827
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:973
msgid "workspace.tokens.token-font-family-select"
msgstr "Sélectionner une famille de polices"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:834, src/app/main/ui/workspace/tokens/management/create/form.cljs:885
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1029
msgid "workspace.tokens.token-font-family-value"
msgstr "Famille de polices"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:833, src/app/main/ui/workspace/tokens/management/create/form.cljs:886
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:979, src/app/main/ui/workspace/tokens/management/create/form.cljs:1031
msgid "workspace.tokens.token-font-family-value-enter"
msgstr "Famille de polices ou liste de polices séparées par une virgule (,)"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:539
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:83, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:109, src/app/main/ui/workspace/tokens/management/create/form.cljs:557
msgid "workspace.tokens.token-name"
msgstr "Nom"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:66
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:69
msgid "workspace.tokens.token-name-validation-error"
msgstr ""
-" n'est pas un nom d'unité de style valide.\n"
-"Les noms des unités de style doivent contenir uniquement des lettres et "
-"chiffres séparés par des caractères . et ne doivent pas commencer par $."
+" n'est pas un nom de token valide.\n"
+"Les noms des tokens doivent contenir uniquement des lettres et chiffres "
+"séparés par des caractères . et ne doivent pas commencer par $."
#: src/app/main/ui/workspace/tokens/style_dictionary.cljs:259
#, unused
msgid "workspace.tokens.token-not-resolved"
-msgstr "Impossible de trouver une référence d'unité de style ayant comme nom : %s"
+msgstr "Impossible de trouver une référence de token ayant comme nom : %s"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:567
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:585
msgid "workspace.tokens.token-value"
msgstr "Valeur"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:566, src/app/main/ui/workspace/tokens/management/create/form.cljs:883, src/app/main/ui/workspace/tokens/management/create/form.cljs:892
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:584, src/app/main/ui/workspace/tokens/management/create/form.cljs:1035
msgid "workspace.tokens.token-value-enter"
msgstr "Entrez une valeur ou un alias avec {alias}"
#: src/app/main/ui/workspace/tokens/management.cljs:131
msgid "workspace.tokens.tokens-section-title"
-msgstr "UNITÉS DE STYLE - %s"
+msgstr "TOKENS - %s"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:125
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:121
msgid "workspace.tokens.tools"
msgstr "Outils"
@@ -7564,7 +7576,7 @@ msgstr "L'importation a réussi. Certains tokens n'ont pas été inclus."
msgid "workspace.tokens.unknown-token-type-section"
msgstr "Le type « %s » n'est pas pris en charge (%s)\n"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:156
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:131
msgid "workspace.tokens.value-not-valid"
msgstr "La valeur n'est pas valide"
@@ -7572,11 +7584,11 @@ msgstr "La valeur n'est pas valide"
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/form.cljs:563
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:581
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:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "Ressources"
@@ -7584,7 +7596,7 @@ msgstr "Ressources"
msgid "workspace.toolbar.color-palette"
msgstr "Palette de couleurs (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "Commentaires (%s)"
@@ -7795,19 +7807,19 @@ msgstr "Opération sur %s"
msgid "workspace.undo.title"
msgstr "Historique"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "Ignorer"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "Plus d'information"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "Il y a des mises à jour dans les Bibliothèques Partagées"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "Mettre à jour"
@@ -7875,11 +7887,11 @@ msgstr "Voulez-vous rétablir cette version ?"
msgid "workspace.versions.snapshot-menu"
msgstr "Ouvrir le menu des instantanés"
-#: src/app/main/ui/workspace/sidebar.cljs:236
+#: src/app/main/ui/workspace/sidebar.cljs:237
msgid "workspace.versions.tab.actions"
msgstr "Actions"
-#: src/app/main/ui/workspace/sidebar.cljs:234
+#: src/app/main/ui/workspace/sidebar.cljs:235
msgid "workspace.versions.tab.history"
msgstr "Historique"
diff --git a/frontend/translations/gl.po b/frontend/translations/gl.po
index cd336a4929..b49b74433d 100644
--- a/frontend/translations/gl.po
+++ b/frontend/translations/gl.po
@@ -142,7 +142,7 @@ msgstr "Crea unha conta"
msgid "auth.sidebar-tagline"
msgstr "A solución de código aberto para deseñar e crear prototipos."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Condicións de servizo"
@@ -150,7 +150,7 @@ msgstr "Condicións de servizo"
msgid "auth.verification-email-sent"
msgstr "Enviamos un correo electrónico de verificación a"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Publicar"
@@ -222,7 +222,7 @@ msgstr "Compartir prototipos"
msgid "common.share-link.view-all"
msgstr "Seleccionar todas"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Cancelar publicación"
@@ -268,7 +268,7 @@ msgstr "Comeza a visita"
msgid "dasboard.walkthrough-hero.title"
msgstr "Percorrido pola interface"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Engadir como Biblioteca Compartida"
@@ -276,27 +276,27 @@ msgstr "Engadir como Biblioteca Compartida"
msgid "dashboard.change-email"
msgstr "Cambiar correo electrónico"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(copia)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Crear novo equipo"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "O teu Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Eliminar equipo"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Descargar ficheiro Penpot (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Descargar ficheiro estándar (.svg + .json)"
@@ -312,7 +312,7 @@ msgstr "Duplicar % ficheiros"
msgid "dashboard.export-binary-multi"
msgstr "Descargar %s ficheiros Penpot (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Exportar marcos a PDF"
@@ -328,7 +328,7 @@ msgstr "Exportar % ficheiros Penpot"
msgid "dashboard.export-multiple.selected"
msgstr "% de % elementos seleccionados"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Exportar"
@@ -488,11 +488,11 @@ msgstr "Enviando datos ao servidor (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Enviando ficheiro: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Invitar ao equipo"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Abandonar o equipo"
@@ -504,7 +504,7 @@ msgstr "Bibliotecas e Modelos"
msgid "dashboard.libraries-and-templates.explore"
msgstr "Explora máis e descubre como contribuír"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "Ocorreu un problema ao importar o modelo. Non se importou o modelo."
@@ -536,7 +536,7 @@ msgstr "Mover a outro equipo"
msgid "dashboard.new-file"
msgstr "+ Novo ficheiro"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Novo ficheiro"
@@ -544,7 +544,7 @@ msgstr "Novo ficheiro"
msgid "dashboard.new-project"
msgstr "+ Novo proxecto"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Novo proxecto"
@@ -552,7 +552,7 @@ msgstr "Novo proxecto"
msgid "dashboard.no-matches-for"
msgstr "Non se atoparon resultados para “%s“"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Os proxectos fixados aparecerán aquí"
@@ -568,7 +568,7 @@ msgstr "Verificouse a túa dirección de correo"
msgid "dashboard.notifications.password-saved"
msgstr "Contrasinal gardado correctamente!"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s integrantes"
@@ -601,7 +601,7 @@ msgstr "Eliminar das bibliotecas compartidas"
msgid "dashboard.save-settings"
msgstr "Gardar configuración"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Buscar…"
@@ -637,7 +637,7 @@ msgstr "Duplicouse o ficheiro"
msgid "dashboard.success-duplicate-project"
msgstr "Duplicouse o proxecto"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Moveuse o ficheiro"
@@ -649,15 +649,15 @@ msgstr "Movéronse os ficheiros"
msgid "dashboard.success-move-project"
msgstr "Moveuse o proxecto"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Información do equipo"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Integrantes do equipo"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Proxectos do equipo"
@@ -673,7 +673,7 @@ msgstr "Resultados da procura"
msgid "dashboard.type-something"
msgstr "Escribe algo para procurar"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Cancelar publicación da Biblioteca"
@@ -693,7 +693,7 @@ msgstr "Correo electrónico"
msgid "dashboard.your-name"
msgstr "Nome"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "O teu Penpot"
@@ -709,11 +709,11 @@ msgstr "Atención"
msgid "ds.component-subtitle"
msgstr "Compoñentes para actualizar:"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Cancelar"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Ok"
@@ -745,19 +745,19 @@ msgstr "Correo electrónico"
msgid "inspect.attributes.blur"
msgstr "Desenfoque"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Valor"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -851,19 +851,19 @@ msgstr "Sólido"
msgid "inspect.attributes.stroke.width"
msgstr "Ancho"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Tipografía"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Ningunha"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Suliñar"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Ningunha"
@@ -919,7 +919,7 @@ msgstr "Texto"
msgid "inspect.tabs.info"
msgstr "Información"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Atallos do teclado"
@@ -927,11 +927,11 @@ msgstr "Atallos do teclado"
msgid "labels.accept"
msgstr "Aceptar"
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Administración"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Todo"
@@ -944,23 +944,23 @@ msgstr "e"
msgid "labels.back"
msgstr "Volver"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Cancelar"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Pechar"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Comentarios"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Continuar"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Crear"
@@ -968,27 +968,27 @@ msgstr "Crear"
msgid "labels.dashboard"
msgstr "Panel"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Eliminar"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Borradores"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Editar"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Editor"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Caducada"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Exportar"
@@ -996,11 +996,11 @@ msgstr "Exportar"
msgid "labels.font-variants"
msgstr "Estilos"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Fontes"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Invitacións"
@@ -1008,15 +1008,15 @@ msgstr "Invitacións"
msgid "labels.language"
msgstr "Lingua"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Pechar sesión"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Integrante"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Integrantes"
@@ -1032,7 +1032,7 @@ msgstr "ou"
msgid "labels.password"
msgstr "Contrasinal"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "Pendente"
@@ -1040,7 +1040,7 @@ msgstr "Pendente"
msgid "labels.profile"
msgstr "Perfil"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Proxectos"
@@ -1049,7 +1049,7 @@ msgstr "Proxectos"
msgid "labels.remove"
msgstr "Retirar"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Mudar o nome"
@@ -1057,11 +1057,11 @@ msgstr "Mudar o nome"
msgid "labels.retry"
msgstr "Volver tentar"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Rol"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Gardar"
@@ -1073,19 +1073,19 @@ msgstr "Enviar"
msgid "labels.sending"
msgstr "Enviando…"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Configuración"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Bibliotecas"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Estado"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Titoriales"
@@ -1101,19 +1101,19 @@ msgstr "Cargar"
msgid "labels.uploading"
msgstr "Cargando…"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Visor"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(ti)"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Actualizar"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Cancelar"
@@ -1122,156 +1122,156 @@ msgid "onboarding.welcome.alt"
msgstr "Penpot"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Básicos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "Panel"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Visor"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Espazo de traballo"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Aliñamento"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Editar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "Xenérico"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "Xenérico"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Navegación"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Navegación"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Navegación"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Paneis"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Ruta"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Formas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Ferramentas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Comentarios"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Copiar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Cortar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Eliminar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Curva"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "Elipse"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Taboleiro"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Ruta"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Rectángulo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Texto"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Duplicar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "Cancelar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Buscar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Agrupar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "Máscara"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "Mover"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Pegar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "Refacer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Desfacer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Dispersar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Quitar máscara"
@@ -1293,23 +1293,23 @@ msgstr "Mapa do sitio"
msgid "workspace.assets.assets"
msgstr "Recursos"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Cores"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Compoñentes"
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Eliminar"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "Duplicar"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Editar"
@@ -1318,15 +1318,15 @@ msgstr "Editar"
msgid "workspace.assets.graphics"
msgstr "Gráficos"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Agrupar"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Mudar o nome"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Tipografías"
@@ -1339,11 +1339,11 @@ msgstr "Fonte"
msgid "workspace.assets.typography.font-size"
msgstr "Tamaño"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "Dispersar"
@@ -1351,19 +1351,19 @@ msgstr "Dispersar"
msgid "workspace.focus.selection"
msgstr "Selección"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Editar"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "Ficheiro"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "Preferencias"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Restablecer"
@@ -1385,11 +1385,11 @@ msgstr "Engadir"
msgid "workspace.libraries.colors.hsv"
msgstr "HSV"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "BIBLIOTECAS"
@@ -1398,19 +1398,19 @@ msgstr "BIBLIOTECAS"
msgid "workspace.libraries.library"
msgstr "BIBLIOTECA"
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Actualizar"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "Actualizacións"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Desenfoque"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Compoñente"
@@ -1446,7 +1446,7 @@ msgstr "Enriba"
msgid "workspace.options.constraints.topbottom"
msgstr "Enriba e Embaixo"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Deseño"
@@ -1459,13 +1459,13 @@ msgstr "Exportar"
msgid "workspace.options.export-multiple"
msgstr "Exportar selección"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "Exportar 1 elemento"
msgstr[1] "Exportar %s elementos"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Sufixo"
@@ -1473,7 +1473,7 @@ msgstr "Sufixo"
msgid "workspace.options.exporting-complete"
msgstr "Exportación completada"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "Exportando…"
@@ -1481,15 +1481,15 @@ msgstr "Exportando…"
msgid "workspace.options.exporting-object-error"
msgstr "Erro na exportación"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Recheo"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Automático"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "Columna"
@@ -1498,7 +1498,7 @@ msgstr "Columna"
msgid "workspace.options.grid.grid-title"
msgstr "Grade"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Cor"
@@ -1507,35 +1507,35 @@ msgstr "Cor"
msgid "workspace.options.grid.params.columns"
msgstr "Columnas"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Marxe"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Embaixo"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Centro"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Esquerda"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Dereita"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "Enriba"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "Ningún"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "Centro"
@@ -1564,11 +1564,11 @@ msgstr "Dereita"
msgid "workspace.options.layout.top"
msgstr "Enriba"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "Ningún"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "Centro"
diff --git a/frontend/translations/ha.po b/frontend/translations/ha.po
index b7d6f9dbd0..78d00af183 100644
--- a/frontend/translations/ha.po
+++ b/frontend/translations/ha.po
@@ -1,15 +1,15 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-11 07:21+0000\n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
"Last-Translator: Alejandro Alonso \n"
-"Language-Team: Hausa "
-" \n"
+"Language-Team: Hausa \n"
"Language: ha\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.13-dev\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -126,7 +126,7 @@ msgstr "qirqiri sabon kundi"
msgid "auth.sidebar-tagline"
msgstr "samun hanyar magance matsalar zane-zane."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "dokokin aiki"
@@ -145,7 +145,7 @@ msgstr "mun aika maka da saqon tantancewa ta imel"
msgid "branding-illustrations-marketing-pieces"
msgstr "...branding, illustrations, marketing pieces, etc."
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "wallafawa"
@@ -215,7 +215,7 @@ msgstr "fenfot"
msgid "common.share-link.view-all"
msgstr "zavi duka"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "maras wallafa"
@@ -333,7 +333,7 @@ msgstr "lambar tsaron za ta gama aiki %s"
msgid "dashboard.access-tokens.token-will-not-expire"
msgstr "lambar tsaron ba ta da lokacin daina aiki"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "tura tamkar fenfot"
@@ -341,27 +341,27 @@ msgstr "tura tamkar fenfot"
msgid "dashboard.change-email"
msgstr "canza imel"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(kwafi)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "yi sabuwar tawaga"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "manhajar fenfot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "goge tawaga"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "sauke manhajar fenfot(.manhajar fenfot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "sauke cikakken kundi(.svg + .json)"
@@ -377,7 +377,7 @@ msgstr "kwafi %s kundaye"
msgid "dashboard.export-binary-multi"
msgstr "sauke %s kundayen manhajar fenfot(.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Allon fitarwa na PDF"
@@ -393,7 +393,7 @@ msgstr "fitar da fenfot %s kundaye"
msgid "dashboard.export-multiple.selected"
msgstr "%s of %s tubullan da aka zava"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Fitarwa"
@@ -558,11 +558,11 @@ msgstr "xora bayani akan sabis (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "xora kundaye: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "neman mutane"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "fita tawaga"
@@ -574,7 +574,7 @@ msgstr "taska da shaidar kamfanoni"
msgid "dashboard.libraries-and-templates.explore"
msgstr "bincika su da kyau kasan ta yadda za ka bayar da gudunmawa"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "akwai matsala wurin shigo da fejin talla. fejin tallar ba ya xauko."
@@ -606,7 +606,7 @@ msgstr "tura ma sauran tawaga"
msgid "dashboard.new-file"
msgstr "+ sabon kundi"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "sabon kundi"
@@ -614,7 +614,7 @@ msgstr "sabon kundi"
msgid "dashboard.new-project"
msgstr "+ sabon aiki"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "sabon aiki"
@@ -622,7 +622,7 @@ msgstr "sabon aiki"
msgid "dashboard.no-matches-for"
msgstr "ba wanda ya yi daidai da “%s“"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "nan za a ga bayanin aiki"
@@ -638,7 +638,7 @@ msgstr "an tantance adireshinka na imel"
msgid "dashboard.notifications.password-saved"
msgstr "an tsare maka shaidar tsaro!"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s memba"
@@ -654,7 +654,7 @@ msgstr "zavi"
msgid "dashboard.password-change"
msgstr "sauya lambar tsaro"
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "rufewa/buxewa"
@@ -675,7 +675,7 @@ msgstr "cire matattarar kundate"
msgid "dashboard.save-settings"
msgstr "wurin ajiyar saiti"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "nema …"
@@ -715,7 +715,7 @@ msgstr[1] "an kwafi kundayenka"
msgid "dashboard.success-duplicate-project"
msgstr "an kwafi aikinka"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "an tura aikinka"
@@ -727,15 +727,15 @@ msgstr "an tura kundayenka"
msgid "dashboard.success-move-project"
msgstr "an tura aikinka"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "bayanin tawaga"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "mambobin tawaga"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "aiyukan tawaga"
@@ -751,7 +751,7 @@ msgstr "neman sakamako"
msgid "dashboard.type-something"
msgstr "rubuta neman sakamako"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "wallafa taska"
@@ -759,37 +759,37 @@ msgstr "wallafa taska"
msgid "dashboard.update-settings"
msgstr "zamanartarwa wurin gyara"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "ya na amfani"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "idan an sami sauyi a nan ake kawo shi"
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "irin ra'ayi"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "yin webhook"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "an gina Webhook."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"Webhooks hanyar sanar da manhajoji da addireshi intanet idan wani ya faru a "
"Penpot. za a tura maka da saqon talla URLs ka samar da."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "danna qasa \"sanya webhook\" qara xaya."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "ba a gina wani webhooks ba."
@@ -809,7 +809,7 @@ msgstr "imel"
msgid "dashboard.your-name"
msgstr "sunanka"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "fenfot na ka"
@@ -825,11 +825,11 @@ msgstr "natsu"
msgid "ds.component-subtitle"
msgstr "zamanantar da sassa:"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "goge"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "haka"
@@ -873,11 +873,11 @@ msgstr "an farfaxo da imel."
msgid "errors.email-as-password"
msgstr "ba za ka iya amfani da imel ba a matsayin lambar tsaro ba"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "imel «%s» na da bayanan matsaloli na dindindin."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "saqonni marasa amfani na imel «%s»."
@@ -891,7 +891,7 @@ msgstr ""
msgid "errors.feature-not-supported"
msgstr "sassa '%s' ba za su yi aiki ba."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "wata matsala ta faru."
@@ -924,7 +924,7 @@ msgstr "za a iya soke gayyata ko ta ki aiki."
msgid "errors.ldap-disabled"
msgstr "LDAP ya gaza tantancewa."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "kammala adadin '%s' madogara. gyara."
@@ -940,7 +940,7 @@ msgstr "hoton da aka sanya bai yi daidai da kundin da ake son faxaxawa ba."
msgid "errors.media-type-not-allowed"
msgstr "wannan hoton ba ya aiki."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr "bayanan da ka nema imel din su ya suma (bayanan matsaloli)."
@@ -958,7 +958,7 @@ msgstr "lambar tsaro dole ta kai yawan alamu 8"
msgid "errors.profile-blocked"
msgstr "bayanan a rufe suke"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr "bayananka su na da imel maras motsi (baiyana matsaloli)."
@@ -966,15 +966,15 @@ msgstr "bayananka su na da imel maras motsi (baiyana matsaloli)."
msgid "errors.registration-disabled"
msgstr "rigitar ba ta yi ba."
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr "ba sauran masu fita daga tawaga, ba bu tabbacin gogewa."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "mamban da ka ke son sanyawa ba ya a ciki."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr "mai abu ba ya barin tawaga, dole adubi matsayin mai abu."
@@ -986,31 +986,31 @@ msgstr "afkuwar kuskuren da ba a zata ba."
msgid "errors.unexpected-token"
msgstr "tukuicin da ba a san da shi ba"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "hadin bai yi ba, ba a iya samun URL"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "URL bai gyaru ba."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "saqon qarshe bai je ba."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "kuskure kan farfaxo da SSL."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "dakatarwa"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "matsalar da ba zata ba lokacin farfaxowa"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "matsayin da ba zato %s"
@@ -1074,19 +1074,19 @@ msgstr "afkuwar matsala"
msgid "inspect.attributes.blur"
msgstr "xige-xige"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "muhimmanci"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1094,7 +1094,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "cika"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "sauke hanyar hoto"
@@ -1188,75 +1188,78 @@ msgstr "tauri"
msgid "inspect.attributes.stroke.width"
msgstr "fadi"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "tsara rubutu"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "gidan salo"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "girman salo"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "tsarin salo"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "kaurin salon"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "tazarar harafi"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "tsawon layi"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "kwalliyar rubutu"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "babu"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "jan layi"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "masarrafin rubu,manya ko qanana"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "yadda ake rubuta batu"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "qananan baqaqe"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "babu"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "manyan baqaqe"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr "domin neman qarin bayani game da fenfot a tuntubi sashen agaji"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "qarin bayani a fagen lura"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr "zabar zubi, hukumar masu sa ido akan bangarorinsu da lambobinsu"
@@ -1316,7 +1319,7 @@ msgstr "rubutu"
msgid "inspect.tabs.info"
msgstr "bayani"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "yanke"
@@ -1328,7 +1331,7 @@ msgstr "karva"
msgid "labels.access-tokens"
msgstr "lambobi masu xauke da bayani"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "mai amfani"
@@ -1336,7 +1339,7 @@ msgstr "mai amfani"
msgid "labels.add-custom-font"
msgstr "inganta font"
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "shugaba"
@@ -1344,7 +1347,7 @@ msgstr "shugaba"
msgid "labels.adobe-xd"
msgstr "Adobe XD"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "duk"
@@ -1367,7 +1370,7 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "akwai matsala"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "sokewa"
@@ -1375,15 +1378,15 @@ msgstr "sokewa"
msgid "labels.canva"
msgstr "Canva"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "rufewa"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "yabo"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "matattara"
@@ -1391,7 +1394,7 @@ msgstr "matattara"
msgid "labels.confirm-password"
msgstr "tabbatar da lambar tsaro"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "ci gaba"
@@ -1403,11 +1406,11 @@ msgstr "ci gaba da"
msgid "labels.continue-with-penpot"
msgstr "za ka iya ci gaba a idanka na fenfot"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "kwafar hanya"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "yi"
@@ -1427,7 +1430,7 @@ msgstr "kwalliya da fenfot"
msgid "labels.dashboard"
msgstr "dashbod"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "goge"
@@ -1439,7 +1442,7 @@ msgstr "goge yabo"
msgid "labels.delete-comment-thread"
msgstr "goge rubutu"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "goge gayyata"
@@ -1451,15 +1454,15 @@ msgstr "goge %s kundaye"
msgid "labels.developer"
msgstr "ma su qirqira"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "vatar"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "adana"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "gyara"
@@ -1467,15 +1470,15 @@ msgstr "gyara"
msgid "labels.edit-file"
msgstr "gyara kundi"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "maigyara"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "daina aiki"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "fitarwa"
@@ -1503,7 +1506,7 @@ msgstr "ma su fenfot"
msgid "labels.font-variants"
msgstr "salo"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Font"
@@ -1517,11 +1520,11 @@ msgstr "mawallafi/VP"
msgid "labels.freelancer"
msgstr "ni mai zaman kansa ne"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "taskar rubuce-rubuce"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "bada bayani"
@@ -1529,15 +1532,15 @@ msgstr "bada bayani"
msgid "labels.go-back"
msgstr "koma baya"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "sashen taimako"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "voye saqon da aka buxa"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "maras amfani"
@@ -1559,7 +1562,7 @@ msgstr "kuskuren ciki"
msgid "labels.invision"
msgstr "teburin aiki"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "gayyata"
@@ -1567,7 +1570,7 @@ msgstr "gayyata"
msgid "labels.language"
msgstr "harshe"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "taskoki & allunan talla"
@@ -1575,7 +1578,7 @@ msgstr "taskoki & allunan talla"
msgid "labels.log-or-sign"
msgstr "yi ko shiga"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "fita"
@@ -1583,11 +1586,11 @@ msgstr "fita"
msgid "labels.marketing"
msgstr "kasuwanci"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "mamba"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "mambobi"
@@ -1595,15 +1598,15 @@ msgstr "mambobi"
msgid "labels.new-password"
msgstr "sabuwar lambar tsaro"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "na gaba"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "an dakatar da kai duka! Alamar sabon sharhi za ta fito nan."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "ba saqon da ba a buxa ba."
@@ -1616,7 +1619,7 @@ msgstr "babu wannan fagen, ko ba ka da izinin shiga."
msgid "labels.not-found.main-message"
msgstr "alama!"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "kundi 1"
@@ -1628,7 +1631,7 @@ msgid_plural "labels.num-of-frames"
msgstr[0] "allo 1"
msgstr[1] "alluna %s"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "aiki"
@@ -1651,7 +1654,7 @@ msgstr "ko"
msgid "labels.other"
msgstr "idan akwai qari (bayyana)"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "mai"
@@ -1659,7 +1662,7 @@ msgstr "mai"
msgid "labels.password"
msgstr "lambar tsaro"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "tukuna"
@@ -1675,11 +1678,11 @@ msgstr "shugaban aiki"
msgid "labels.profile"
msgstr "kundi"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "aiyuka"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "bayar da bayani"
@@ -1693,11 +1696,11 @@ msgstr "qara dora kundi"
msgid "labels.remove"
msgstr "cire"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "cire mamba"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "sake suna"
@@ -1705,7 +1708,7 @@ msgstr "sake suna"
msgid "labels.rename-team"
msgstr "sake suna tawaga"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "sake aika saqon gayyata"
@@ -1713,11 +1716,11 @@ msgstr "sake aika saqon gayyata"
msgid "labels.retry"
msgstr "sake gwadawa"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "matsayi"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "ajiye"
@@ -1745,7 +1748,7 @@ msgstr "mu na cikin kula a tsarinka."
msgid "labels.service-unavailable.main-message"
msgstr "ba sabis"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "gyara"
@@ -1753,11 +1756,11 @@ msgstr "gyara"
msgid "labels.share-prototype"
msgstr "tura manhajar rubutu"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "taskoki"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "fito da yabo"
@@ -1765,7 +1768,7 @@ msgstr "fito da yabo"
msgid "labels.show-comments-list"
msgstr "jerin ire-iren yabo"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "bayyana na ka ra’ayin"
@@ -1777,7 +1780,7 @@ msgstr "zana"
msgid "labels.start"
msgstr "fara"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "daraja"
@@ -1785,7 +1788,7 @@ msgstr "daraja"
msgid "labels.student-teacher"
msgstr "malami ko dalibi"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "koyarwa"
@@ -1813,15 +1816,15 @@ msgstr "Upload custom fonts"
msgid "labels.uploading"
msgstr "ana dorawa…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "gani kaxai"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "ma su kallo"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Webhooks"
@@ -1829,11 +1832,11 @@ msgstr "Webhooks"
msgid "labels.write-new-comment"
msgstr "rubuta s abon yabo"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(kai)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "fagenka"
@@ -1911,19 +1914,19 @@ msgstr "yi sabuwar alama"
msgid "modals.create-access-token.title"
msgstr "samar da alamar shiga"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "qirqirar webhook"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "qirqirar webhook"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "farashin URL"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://misali.com/postreceive"
@@ -1967,11 +1970,11 @@ msgstr "ka tabbata ka na son goge fira? duk sharhi a nan za a goge matsaloli."
msgid "modals.delete-comment-thread.title"
msgstr "goge tattaunawa"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "ka tabbata kana son goge wannan bayanin?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "goge bayani"
@@ -2019,11 +2022,11 @@ msgstr ""
msgid "modals.delete-font.title"
msgstr "goge font"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "ka tabbata kana son goge wannan shafin?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "goge shafi"
@@ -2069,29 +2072,29 @@ msgid_plural "modals.delete-shared-confirm.title"
msgstr[0] "goge kundi"
msgstr[1] "goge kundaye"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "goge tawaga"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"ka tabbata kana son goge wannan tawagar? Duk aiyukanka na kundayen da suka "
"danganci tawagar za su yi gogewar dindindin."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "gogewar tawaga"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "goge memba"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "ka tabbata kana son cire wannan memban a wannan tawaar?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "cire memban tawaga"
@@ -2105,51 +2108,51 @@ msgstr[1] ""
"duk aikin da aka yi a waxancan kundayen, can za a same su (ba zane da za "
"iya tsinkawa)."
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "goge webhook"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "ka tabbata ka na son goge webhook?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "gogewa webhook"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "gyara webhook"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "gyara webhook"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "aika saqon"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "imel, rabawar waqafi"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr ""
"waxansu imel daga membobin qungiyar na yanzu. ba za a aikawa da gayyatarsu "
"ba ."
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "gayyato membobi zuwa ga tawaga"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"ka tabbata memban tawaga kaxai, za ya iya goge tawaga tare da aikinta da "
"kundaye."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "ka tabbata ka na son fita daga %s tawaga?"
@@ -2177,49 +2180,49 @@ msgstr "zavi memba domin havakawa"
msgid "modals.leave-and-reassign.title"
msgstr "kafin ka fita"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "barin tawaga"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "ka tabbata ka na son barin wannan tawagar?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "barin tawaga"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "adadin jan hankali"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "canza wurin mallaka"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"idan ka canza wurin mallaka, ba za ka iya sauya matsayin shugaba ba, "
"gazawar wasu dokokin wannan tawaagar. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr "kai ke da wannan tawagar yanzu. ka tabbata kana son yin %s sabon mai tawaga?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "mallakar tawaga"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "wallafa"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "ba komai a taskarka. ka na son wallafa ta?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "wallafa taska maras komai"
@@ -2269,21 +2272,21 @@ msgstr ""
"ka kusa sabunta taskar ajiyar shir-shirye. zai iya shafar sauran kundayen "
"da ke amfani da ita."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "sabunta"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "soke"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"ka kusa sabunta sashe a babbar taska. wannan za ya iya aiki a sauran "
"kundayen da ke amfani da ita."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "sabunta sashe a babbar taska"
@@ -2291,11 +2294,11 @@ msgstr "sabunta sashe a babbar taska"
msgid "notifications.by-code.upgrade-version"
msgstr "akwai sabon yayi, fatan za a sabunta fage"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "an aika da saqon"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "kwafar hanyar gayya"
@@ -2411,7 +2414,7 @@ msgstr ""
"ka tuna da kowa. masu qirqira, masu tsarawa, shuwagabanniS... daban-daban "
"ya qara :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "gayyata tare da bayar da matsayi:"
@@ -2512,621 +2515,605 @@ msgstr "fenfot"
msgid "profile.recovery.go-to-login"
msgstr "je ka hanyar shiga"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "cire"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "gauraya"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "shikashikai"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "allon kallo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Dankallo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "fagen aiki"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "kwaskwarima"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Tace"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "gamayya"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "gamayya"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Babbar kumshiya"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "gyara shimfida"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "shawagi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "shawagi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "shawagi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "allon sarrarfav naura"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Hanya"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Siffa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "Rubutu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Kayan aiki"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Zukowa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Zukowa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Bayyana Ra'ayi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "kara Girma"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "tsarin kasa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "tsarin tsakiya"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "tsarin tsakiya ko ina"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "Tabbataccan tsari"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "tsarin hagu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "tsarin dama"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "tsarin sama"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "tsarin tsakiya a tsaye"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "kirkiri allo daga zabi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "fito da shi barobaro"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "ma'auni mabanbanci"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "kebentaccan ma'auni"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "ma'aunin abubuwa daban daban"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "ma'auni hadaka"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "tura zuwa baya"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "komawa baya"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "tura gaba"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "kawo zuwa gaba"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "goge sake"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "kwafi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "samar da sabo abu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "cire"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "fito da shi waje"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "goge"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "fita da ga cikin net wok"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "rarraba abubuwan da su ke a ware"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Ratse"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "siffar kwai"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Allo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "samar da hanya"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Hanya"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Ractangula"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "rubutaccan sako"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "maimaita"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "kubuta"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "samar da sabbabbin abubuwa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "fitar da abubuwan da zai dace da ko wane abu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "kifa shi dai dai"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "kifa ta tsaye"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "rage girman rubutu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "kara gaban yanayi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "ta fi rumbu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "ta fi zuwa rabbabben ma'ajiya"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "gajeran sako"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "rukuni"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "raba ta tsaye"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "fito / boye UI"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "zuko ciki"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "sa hoto"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "juya zuwa kwantaccen rubuyu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "hada abubuwan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
-msgid "shortcuts.letter-spacing-dec"
-msgstr "rage filin harafin"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "kara filin harafin"
-
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
-msgid "shortcuts.line-height-dec"
-msgstr "rage tsawon layi"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
-msgid "shortcuts.line-height-inc"
-msgstr "kara tsawon layi"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.line-through"
msgstr "danna layin duk"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "kirkiri kwana"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "kirkiri lankwasa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "takunkumi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "hada da kauri"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "matsa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "Matsa kasa da sauri"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "Matsa hagu da sauri"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "matsa dama da sauri"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "Matsa sama da sauri"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "matsa a hade"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "Matsa da sashin kasa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "Matsa da sashin hagu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "Matsa da sashin dama"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "Matsa da sashin samu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "wani tsari"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "babu gajeriyar hanya"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "Saita dishi dishi zuwa kashi 100"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "saita dishi dishi zuwa kashi 10"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "Saita dishi dishi zuwa kashi 20"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "Seta dashi dashi zuwa kashi 50"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "Saita dishi dishi zuwa kashi 40"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "Saita dishi dishi zuwa kashi 50"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "Saita dishi dishi zuwa kashi 60"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "Saita dishi dishi zuwa kashi 70"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "seta dishi dishin zuwa kashi 8o"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "Seta dish dishi zuwa 90"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "abin daukan kala"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "tafi inda 'yan kallo za su bayyana ra'ayi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "tafi gaban allon"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "tafi sashin da 'yan kallo za su duba"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "tafi sashin da masu kallo suke hulda"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "tafi sashin da masu kallo suke hulda"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "tafi fagen aiki"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " ko "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "manna"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "allon da ya gabata"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "gyara"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "zake zukowa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "takaitaccen sako yanken"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "zabi duka"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
msgid "shortcuts.select-next"
msgstr "zabi wani shafi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
msgid "shortcuts.select-parent-layer"
msgstr "zabi ainihin shafi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
msgid "shortcuts.select-prev"
msgstr "zabi shafin da ya gabata"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "raba kauri"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "nuna / boye akwatin pixel"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "nuna / boye yanken"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "yanke kauri"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "yanke zuwa ga akwatin pixel"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "fara gyarawa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "fara aunawa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "dena aunawa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "saita babban yatsa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "allon harufa yanke"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "Danna a jere"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "Danna kadara"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "Danna launukan kala"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "Danna yanayin maida hankali"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "Danna fuskar ta cika duka"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "Danna tarihi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "Danna shimfida"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "Tara/fitar da lankwasashhiyar shimfida"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "Rufe/bude"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "Rufe rabo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "Juya zuwa launukan rubutu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "Nuna/boye"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "Danna salon zukowa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "Danna ta layi a kasa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Cire"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Fita daka rukuni"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Cire takunkumi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "Rarraba ta tsaye"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "Zuko raguwar ido"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "Zuko karuwar ido"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "Zuko wanda aka zaba"
@@ -3178,19 +3165,19 @@ msgstr "Nambobin sirri - Mazubin biruka"
msgid "title.settings.profile"
msgstr "Karin bayani - Mazubin biruka"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "Gayyata - %s - Mazubin biruka"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "Yan kungiya - %s - Mazubin biruka"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Saiti - %s - Mazubin biruka"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "gidan yanar gizo - %s - Mazubin biruka"
@@ -3262,39 +3249,39 @@ msgstr "Nuna hulda da an danna"
msgid "viewer.header.sitemap"
msgstr "taswirar wuri"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "Sakon karshe ya isa."
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Daidaita tsakiya a kwance (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "rarraba filin kwance (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Daidaita hagu (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Daidaita dama (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Daidaita kasa (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Daidaita a kwance tsakiya (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "rarraba filin tsaye (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Daidaita sama(%s)"
@@ -3303,31 +3290,31 @@ msgstr "Daidaita sama(%s)"
msgid "workspace.assets.assets"
msgstr "kadara"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "duka kadara"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "kala"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Bangarori"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "kirkiri rukuni"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr "abubuwanka za a samu su suna nan take kamar \"sunan kungiya/ sunan abubuwan\""
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "goge"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "maimaita"
@@ -3335,7 +3322,7 @@ msgstr "maimaita"
msgid "workspace.assets.duplicate-main"
msgstr "maimaita ainihin"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "tace"
@@ -3344,15 +3331,15 @@ msgstr "tace"
msgid "workspace.assets.graphics"
msgstr "zane zane"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "rukuni"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "sunan kungiya"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "dakin karatun gida"
@@ -3364,15 +3351,15 @@ msgstr "ba'a samu kadara ba"
msgid "workspace.assets.open-library"
msgstr "bude fiyal din dakin karatu"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "sake suna"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "sake sunan kungiyar"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "nemo kadarar"
@@ -3388,7 +3375,7 @@ msgstr[1] "%s zababbun abubuwan"
msgid "workspace.assets.shared-library"
msgstr "rababben dakin karatu"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "rubutun rubutu"
@@ -3413,7 +3400,7 @@ msgstr "fili a tsakanin haruffa"
msgid "workspace.assets.typography.line-height"
msgstr "tsawon layi"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -3425,7 +3412,7 @@ msgstr "salon rubutu"
msgid "workspace.assets.typography.text-transform"
msgstr "canja rubutu"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "kashe daga kungiya"
@@ -3433,7 +3420,7 @@ msgstr "kashe daga kungiya"
msgid "workspace.focus.focus-mode"
msgstr "tsarin maida hankali"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "karka maida hankali"
@@ -3453,11 +3440,11 @@ msgstr "a layi mikakke"
msgid "workspace.gradients.radial"
msgstr "a da'ira"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "kashe daidaitawa mai canjawa"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "kashe sikelin rabo"
@@ -3466,19 +3453,19 @@ msgstr "kashe sikelin rabo"
msgid "workspace.header.menu.disable-scale-text"
msgstr "kashe sikelin rubutu"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "kashe tsinkewa zuwa mai jagora"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "kashe tsinkewa zuwa pixel"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "bada damar daidaitawa mai canjawa"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "bada damar sikelin rabo"
@@ -3487,87 +3474,87 @@ msgstr "bada damar sikelin rabo"
msgid "workspace.header.menu.enable-scale-text"
msgstr "bada damar sikelin rubutu"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "Tsinke zuwa mai jagora"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "Bda damar tsinkewa zuwa akwatin pixel"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "Boye allom suna"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "farantin launuka"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "boye pixel akwati"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "boye ma'auni"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "boye launukan yanayin tsarin rubutu"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Tace"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "fayil"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "taimako & bayani"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "fifiko"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "gani"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "sake"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "zabi duka"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "Nuna sunayen allo"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "nuna launukan kala"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "Nuna akwatin pixel"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Nuna ma'auni"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "Nuna launukan tsarin rubutu"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "Cire"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Kara saitawa"
@@ -3588,11 +3575,11 @@ msgstr "Adanawa"
msgid "workspace.header.unsaved"
msgstr "Canja canjan da ba'a adana ba"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "yanayin kallo (%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "Zuko"
@@ -3604,7 +3591,7 @@ msgstr "cike - cika sikeli"
msgid "workspace.header.zoom-fit"
msgstr "dace - ja sikeli ya dace da shi"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "zuko yayi daidai da ko'ina"
@@ -3612,7 +3599,7 @@ msgstr "zuko yayi daidai da ko'ina"
msgid "workspace.header.zoom-full-screen"
msgstr "Cika allon"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "zuko zababbe"
@@ -3625,10 +3612,6 @@ msgstr "tace akwati"
msgid "workspace.libraries.add"
msgstr "tarawa"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s kala"
-
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
msgstr "Babu salon kaloli a ma'ajiya yanzu"
@@ -3655,31 +3638,23 @@ msgstr "kalar yanzu"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "Jituwar RGB"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Adana salon kala"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s bangarori"
-
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Ma'adanar fiyal"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s zane zane"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "Ma'adana a wanna fiyal"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "ma'adanai"
@@ -3688,63 +3663,59 @@ msgstr "ma'adanai"
msgid "workspace.libraries.library"
msgstr "ma'adana"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "sabunta ma'adana"
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "Babu rabben ma'adanai da suke bukatar sabuntawa"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "Babu daidaituwa da aka samu na “%s“"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "Duba rabbaun ma'adanai"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "Rabban ma'adanai"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Rubutun rubutu dayawa"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Cire mahadar duka rabutun rubutu"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s Rubutun rubutu"
-
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Sabuntawa"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "Aga duka canjin"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "sabuntawa"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "Danna wannan madannin + domin saka hulda."
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Dishi dishi"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "rukuni"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "zabin dishi dishi"
@@ -3752,31 +3723,31 @@ msgstr "zabin dishi dishi"
msgid "workspace.options.canvas-background"
msgstr "bayan zane"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "Matse abun ciki"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Bangarori"
-#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:193
+#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:196
msgid "workspace.options.component.annotation"
msgstr "Yin sharhin rubutu"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "Kwafa"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:185
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:188
msgid "workspace.options.component.create-annotation"
msgstr "Kirkiri sharhin rubuta"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "Tace sharhin rubutu"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "Ainahin"
@@ -3820,7 +3791,7 @@ msgstr "sama"
msgid "workspace.options.constraints.topbottom"
msgstr "sama & kasa"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "zane"
@@ -3833,13 +3804,13 @@ msgstr "fitarwa"
msgid "workspace.options.export-multiple"
msgstr "Fitar da zababbun"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "Fitarwa 1 Sashi"
msgstr[1] "Fitarwa %s sashi-sashi"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Kari na bayan baki"
@@ -3847,7 +3818,7 @@ msgstr "Kari na bayan baki"
msgid "workspace.options.exporting-complete"
msgstr "An gama fitarwa"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "Ana fitarwa"
@@ -3859,11 +3830,11 @@ msgstr "An gaza fitarwa"
msgid "workspace.options.exporting-object-slow"
msgstr "Fitarwa ba tsammani ta sami tsaiko"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Cikawa"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "Kara gudun farko"
@@ -3872,15 +3843,15 @@ msgstr "Kara gudun farko"
msgid "workspace.options.flows.flow-start"
msgstr "Gudun farko"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "gudun farko"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "da kanshi"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "shafi"
@@ -3889,7 +3860,7 @@ msgstr "shafi"
msgid "workspace.options.grid.grid-title"
msgstr "Akwati"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Kala"
@@ -3898,15 +3869,15 @@ msgstr "Kala"
msgid "workspace.options.grid.params.columns"
msgstr "shafi"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "mahada"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "tsawo"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "gefe"
@@ -3915,7 +3886,7 @@ msgstr "gefe"
msgid "workspace.options.grid.params.rows"
msgstr "jere"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "saita a tsoho"
@@ -3929,143 +3900,143 @@ msgstr "girma"
msgid "workspace.options.grid.params.type"
msgstr "Nau'i"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Kasa"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Tsakiya"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Hagu"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Dama"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "mikewa"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "sama"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "yi amfani da tsoho"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "fadi"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "layuka"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "murabba'i"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Cika rukuni"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Ja layi a rukuni"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "Tsawo"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "Duba"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "aiki"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "Bayan jinkiri"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "hotuna masu motsi"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "narkewa"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "Babu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "Tura"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "Ja"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "da kanshi"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "kara mai rufin bayan"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "rufe yayin matsewa ta waje"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "kulle mai rufi"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "kulle mai rufi %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "jinkiri"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "makoma"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "tsahon lokaci"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "saukakawa"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "sauki"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "sauki ciki"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "sauki ciki waje"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "sauki waje"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "mikakke"
@@ -4074,47 +4045,47 @@ msgstr "mikakke"
msgid "workspace.options.interaction-in"
msgstr "ciki"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "linzamin kwamfuter ya shiga"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "linzamin kwamfutar ya fita"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "ms"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "kewayawa zuwa"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "kewayawa zywa: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(ba'a saita ba )"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "cire tasiri"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "da an danna"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "bude mai rufi"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "bude mai rufi: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "bude URL"
@@ -4123,147 +4094,147 @@ msgstr "bude URL"
msgid "workspace.options.interaction-out"
msgstr "fita"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "kasa tsakiya"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "kasa hagu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "kasa dama"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "tsakiya"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "Yi da kanka"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "sama tsakiya"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "sama hagu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "sama dama"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "Mataki"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "adana komawa sama da kasa"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "allon daya gabata"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "alaka zuwa"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "kai/ni"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "Juya mai murfi"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "Juya mai murfi: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "Jawo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "yayin shawagi"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "yayin dannawa"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "yayin hulda"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "kala"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "kala konanniya"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "kala gudajjiya"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "kara masa duhu"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "banbanci"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "warewa"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Haske mai muya"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Haske haske"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "kara masa haske"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "warewa"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "sau"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "na kullum"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "mai rufi"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "jikewa"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "allo"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "haske mai sauki"
@@ -4287,19 +4258,19 @@ msgstr "dayawa"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "zabi na ci gaba"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "tsawo mafi yawa"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "fadi mafi yawa"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "tsawo mafi kankanta"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "fadi mafi kankanta"
@@ -4413,15 +4384,15 @@ msgstr "sarari tsakani"
msgid "workspace.options.layout.top"
msgstr "sama"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "kaloli masu yawa"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "Ma'ajiyar kaloli masu yawa"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "dishi dishi"
@@ -4430,27 +4401,27 @@ msgstr "dishi dishi"
msgid "workspace.options.position"
msgstr "matsayi"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "samfur"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "digon tsakiyar da'ira"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "kasan hagu"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "kasan dama"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "saman hagu"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "saman dama"
@@ -4462,7 +4433,7 @@ msgstr "da dimi dimi"
msgid "workspace.options.retry"
msgstr "sake"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "juyawa"
@@ -4470,27 +4441,27 @@ msgstr "juyawa"
msgid "workspace.options.search-font"
msgstr "nemo jerin harufa"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr "zabi surar allo, ko rukuni ta hadu da daya allon."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "zababbabbin kaloli"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "cika zabi"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "gigciye zabi"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "dishi dishi"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "inuwar kala"
@@ -4502,47 +4473,48 @@ msgstr "ajiye inuwa"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "Inuwar ciki"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "bazu"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "inuwa"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "rukunin inuwa"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "inuwar zabi"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "fito da shi a ga"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "fito da kaurin sosai"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "girma"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "yanayin girman yanayin"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "gigciye"
@@ -4551,7 +4523,7 @@ msgstr "gigciye"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "da'irar kasuwa"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "da'ira"
@@ -4560,7 +4532,7 @@ msgstr "da'ira"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "darajar kasuwa"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "mai daraja"
@@ -4569,19 +4541,19 @@ msgstr "mai daraja"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "layin mashiw"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "mashi"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "ba komai"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "da'ira"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "murabba'i"
@@ -4590,7 +4562,7 @@ msgstr "murabba'i"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "murabba'in kasuwa"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "Rectangle"
@@ -4599,75 +4571,75 @@ msgstr "Rectangle"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "Triangle mashi"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "Triangle"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "gigciye kalar"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "gigciye fadin"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "tsakiya"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "layin raba abu"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "digo digo"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "ciki"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "gauraya"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "waje"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "mai tauri"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "jerin kasa"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "jerin tsakiya"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "jerin sama"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "LTR"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "RTL"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "sarrafaffan tsaho"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "sarrafaffen fadi"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "dasa"
@@ -4689,35 +4661,35 @@ msgstr "yanayin kasa"
msgid "workspace.options.text-options.none"
msgstr "babu"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "gigciye ta cikinsa (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "jerin tsakiya"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "tabbatarwa"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "jera hagu"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "jera dama"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "rubutu"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "rukunin rubutu"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "zababbun rubutu"
@@ -4726,7 +4698,7 @@ msgstr "zababbun rubutu"
msgid "workspace.options.text-options.titlecase"
msgstr "yanayin lakani"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "ja layi (%s)"
@@ -4735,19 +4707,19 @@ msgstr "ja layi (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "yanayin sama"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr "yi amfani da madanneta ta sama ki tafi da samfuri."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "fadi"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "X layi"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Y layi"
@@ -4811,7 +4783,7 @@ msgstr "tura zuwa baya"
msgid "workspace.shape.menu.copy"
msgstr "kwafi"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "kirkiri hoto mai motsi"
@@ -4819,11 +4791,11 @@ msgstr "kirkiri hoto mai motsi"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "zababban allo"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "kirkiri abubuwa"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "kirkiri abubuwa da yawa"
@@ -4831,7 +4803,7 @@ msgstr "kirkiri abubuwa da yawa"
msgid "workspace.shape.menu.cut"
msgstr "cire"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "goge"
@@ -4839,15 +4811,15 @@ msgstr "goge"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "goge kwararar farko"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "raba yanayin abin"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "raba yanayin abin"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "bambanci"
@@ -4859,11 +4831,11 @@ msgstr "maimaita"
msgid "workspace.shape.menu.edit"
msgstr "tace"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "kebe"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "mikad da abu"
@@ -4896,19 +4868,19 @@ msgstr "tafi ainihin wurin fal"
msgid "workspace.shape.menu.group"
msgstr "rukuni"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "boye"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "nuna / boye UI"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "mahada"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "kulle"
@@ -4916,7 +4888,7 @@ msgstr "kulle"
msgid "workspace.shape.menu.mask"
msgstr "takunkumik"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "manna"
@@ -4928,11 +4900,11 @@ msgstr "hanya"
msgid "workspace.shape.menu.remove-flex"
msgstr "cire sassaukan tsari"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "sake saita sokewa"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "saita ainihin wurin"
@@ -4940,15 +4912,15 @@ msgstr "saita ainihin wurin"
msgid "workspace.shape.menu.select-layer"
msgstr "zabi shimfida"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "nuna"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "nuna ta kusuwar kadara"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "nuna ainihin wurin"
@@ -4961,6 +4933,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "kara kamar girman babban yatsa"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "sauya zuwa hanya"
@@ -4968,11 +4941,11 @@ msgstr "sauya zuwa hanya"
msgid "workspace.shape.menu.ungroup"
msgstr "raba rukunin"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "hadakan"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "bude"
@@ -4985,7 +4958,7 @@ msgstr "bude takunkumi"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "sabunta ainihin wurin"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "sabunta ainihin wurin"
@@ -4997,11 +4970,11 @@ msgstr "ruguza a'ajiyar bayani"
msgid "workspace.sidebar.expand"
msgstr "kara yankin ma'agiyar bayani"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "labari"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "shafi"
@@ -5041,7 +5014,7 @@ msgstr "rubutu"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "shigo da shi SVG halaye"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "shafi"
@@ -5049,7 +5022,7 @@ msgstr "shafi"
msgid "workspace.sitemap"
msgstr "taswirar wuri"
-#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "kadara"
@@ -5057,7 +5030,7 @@ msgstr "kadara"
msgid "workspace.toolbar.color-palette"
msgstr "farantin kala (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "ra'ayi (%s)"
@@ -5247,19 +5220,19 @@ msgstr "yanayi fiye da %s"
msgid "workspace.undo.title"
msgstr "labari"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "watsar"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "bayanai masu yawa"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "a kwai na zamani a rababban ma'ajiya"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "sabintawas"
diff --git a/frontend/translations/he.po b/frontend/translations/he.po
index 4b2bc21544..ffed01bc3f 100644
--- a/frontend/translations/he.po
+++ b/frontend/translations/he.po
@@ -1,16 +1,16 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-28 10:46+0000\n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
"Last-Translator: Yaron Shahrabani \n"
-"Language-Team: Hebrew "
-" \n"
+"Language-Team: Hebrew \n"
"Language: he\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && "
-"n % 10 == 0) ? 2 : 3));\n"
-"X-Generator: Weblate 5.13\n"
+"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : "
+"((n > 10 && n % 10 == 0) ? 2 : 3));\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -171,7 +171,7 @@ msgstr "הפתרון בקוד פתוח לעיצוב ויצירת אבטיפוס.
msgid "auth.terms-and-privacy-agreement"
msgstr "[תנאי השירות](%s) ו[מדיניות הפרטיות](%s) מקובלים עליי."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "תנאי השירות"
@@ -196,7 +196,7 @@ msgstr "…מיתוג, איורים, חומרים שיווקיים ועוד."
msgid "comments.mentions.not-found"
msgstr "לא נמצאו אנשים עבור @%s"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "פרסום"
@@ -268,7 +268,7 @@ msgstr "שיתוף אבות טיפוס"
msgid "common.share-link.view-all"
msgstr "בחירה בהכול"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "ביטול פרסום"
@@ -388,7 +388,7 @@ msgstr "לאסימון אין תאריך תפוגה"
msgid "dashboard.add-file"
msgstr "הוספת קובץ"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "הוספת ספריה משותפת"
@@ -396,31 +396,31 @@ msgstr "הוספת ספריה משותפת"
msgid "dashboard.change-email"
msgstr "החלפת דוא״ל"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(עותק)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "יצירת צוות חדש"
-#: src/app/main/ui/workspace/main_menu.cljs:631
+#: src/app/main/ui/workspace/main_menu.cljs:659
msgid "dashboard.create-version-menu"
msgstr "נעיצת הגרסה הזאת"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "ה־Penpot שלך"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "מחיקת צוות"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "הורדת קובץ Penpot (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "הורדת קובץ תקני (.svg + .json)"
@@ -502,7 +502,7 @@ msgstr "נתחיל לבנות דברים מדהימים"
msgid "dashboard.export-binary-multi"
msgstr "הורדת %s קובצי Penpot (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "ייצוא לוחות אומנות כ־PDF"
@@ -518,7 +518,7 @@ msgstr "ייצוא קובצי %s של Penpot"
msgid "dashboard.export-multiple.selected"
msgstr "נבחרו %s מתוך %s רכיבים"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "ייצוא"
@@ -720,11 +720,11 @@ msgstr "הנתונים נשלחים לשרת (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "נשלח קובץ: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "הזמנת אנשים"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "עזיבת הצוות"
@@ -732,7 +732,7 @@ msgstr "עזיבת הצוות"
msgid "dashboard.libraries-and-templates"
msgstr "ספריות ותבניות"
-#: src/app/main/ui/dashboard/templates.cljs:259
+#: src/app/main/ui/dashboard/templates.cljs:267
msgid "dashboard.libraries-and-templates.description"
msgstr "כאן יש כמה ספריות ותבניות שאפשר להוסיף למיזם שלך"
@@ -740,7 +740,7 @@ msgstr "כאן יש כמה ספריות ותבניות שאפשר להוסיף
msgid "dashboard.libraries-and-templates.explore"
msgstr "עיון ביותר כאלה והסברים כיצד לתרום להן"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "אירעה שגיאה בייבוא התבנית והיא לא ייובאה."
@@ -776,7 +776,7 @@ msgstr "העברה לצוות אחר"
msgid "dashboard.new-file"
msgstr "+ קובץ חדש"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "קובץ חדש"
@@ -784,7 +784,7 @@ msgstr "קובץ חדש"
msgid "dashboard.new-project"
msgstr "+ מיזם חדש"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "מיזם חדש"
@@ -792,11 +792,11 @@ msgstr "מיזם חדש"
msgid "dashboard.no-matches-for"
msgstr "לא נמצאו תוצאות לחיפוש אחר „%s”"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "מיזמים נעוצים יופיעו כאן"
-#: src/app/main/ui/dashboard/comments.cljs:90
+#: src/app/main/ui/dashboard/comments.cljs:91
msgid "dashboard.notifications"
msgstr "התראות"
@@ -808,7 +808,7 @@ msgstr "כתובת הדוא״ל שלך עודכנה בהצלחה"
msgid "dashboard.notifications.email-verified-successfully"
msgstr "כתובת הדוא״ל שלך אומתה בהצלחה"
-#: src/app/main/data/profile.cljs:272
+#: src/app/main/data/profile.cljs:273
msgid "dashboard.notifications.notifications-saved"
msgstr "הגדרות ההתראות עודכנו"
@@ -816,11 +816,11 @@ msgstr "הגדרות ההתראות עודכנו"
msgid "dashboard.notifications.password-saved"
msgstr "הסיסמה נשמרה בהצלחה!"
-#: src/app/main/ui/dashboard/comments.cljs:44
+#: src/app/main/ui/dashboard/comments.cljs:45
msgid "dashboard.notifications.view"
msgstr "הצגת התראות"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s חברים"
@@ -852,7 +852,7 @@ msgstr "מונית לבעלי הצוות הזה."
msgid "dashboard.permissions-change.viewer"
msgstr "מונית לצפות בצוות הזה."
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "נעיצה/שחרור"
@@ -889,7 +889,7 @@ msgstr "נגרעת מהצוות „%s”."
msgid "dashboard.save-settings"
msgstr "שמירת ההגדרות"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "חיפוש…"
@@ -981,7 +981,7 @@ msgstr "התראות"
msgid "dashboard.show-all-files"
msgstr "הצגת כל הקבצים"
-#: src/app/main/ui/workspace/main_menu.cljs:638
+#: src/app/main/ui/workspace/main_menu.cljs:666
msgid "dashboard.show-version-history"
msgstr "היסטוריית גרסאות"
@@ -1009,7 +1009,7 @@ msgstr[3] "הקבצים שלך שוכפלו בהצלחה"
msgid "dashboard.success-duplicate-project"
msgstr "המיזם שלך שוכפל בהצלחה"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "הקובץ שלך הועבר בהצלחה"
@@ -1021,15 +1021,15 @@ msgstr "הקבצים שלך הועברו בהצלחה"
msgid "dashboard.success-move-project"
msgstr "המיזם שלך הועבר בהצלחה"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "פרטי הצוות"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "חברי הצוות"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "מיזמי הצוות"
@@ -1049,7 +1049,7 @@ msgstr "תוצאות חיפוש"
msgid "dashboard.type-something"
msgstr "נא להקליד כדי לחפש"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "ביטול פרסום ספרייה"
@@ -1057,49 +1057,49 @@ msgstr "ביטול פרסום ספרייה"
msgid "dashboard.update-settings"
msgstr "עדכון הגדרות"
-#: src/app/main/ui/dashboard/sidebar.cljs:856
+#: src/app/main/ui/dashboard/sidebar.cljs:976
msgid "dashboard.upgrade-plan.no-limits"
msgstr "ללא מגבלות על יצירתיות"
-#: src/app/main/ui/dashboard/sidebar.cljs:854
+#: src/app/main/ui/dashboard/sidebar.cljs:974
msgid "dashboard.upgrade-plan.penpot-free"
msgstr "Penpot חינמי"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "פעילה"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "כאשר ההתליה הזאת מופעלת פרטי האירוע יישלחו"
-#: src/app/main/ui/dashboard/team.cljs:982
+#: src/app/main/ui/dashboard/team.cljs:1160
msgid "dashboard.webhooks.cant-edit"
msgstr "אפשר למחוק או לשנות את ההתליות שיצרת."
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "סוג תוכן"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "יצירת התליית רשת"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "התליית הרשת נוצרה בהצלחה."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"התליות רשת הן דרך פשוטה לאפשר לאתרים אחרים לקבל הודעות כשאירועים מסוימים "
"מתרחשים ב־Penpot. אנו נשלח בקשת POST לכל אחת מהכתובות שתצויינה."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "לחיצה על הכפתור „הוספת התליית רשת” תוסיף אחת."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "לא נוצרו התליות רשת עדיין."
@@ -1119,7 +1119,7 @@ msgstr "דוא״ל"
msgid "dashboard.your-name"
msgstr "שמך"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "ה־Penpot שלך"
@@ -1135,15 +1135,15 @@ msgstr "תשומת לב"
msgid "ds.component-subtitle"
msgstr "רכיבים לעדכון:"
-#: src/app/main/ui/workspace/plugins.cljs:338, src/app/main/ui/workspace/plugins.cljs:392
+#: src/app/main/ui/workspace/plugins.cljs:339, src/app/main/ui/workspace/plugins.cljs:393
msgid "ds.confirm-allow"
msgstr "לאפשר"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "ביטול"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "אישור"
@@ -1151,6 +1151,26 @@ msgstr "אישור"
msgid "ds.confirm-title"
msgstr "להמשיך?"
+#: src/app/main/ui/ds/controls/numeric_input.cljs:98
+msgid "ds.inputs.numeric-input.no-applicable-tokens"
+msgstr "אין אסימונים תקפים בערכות או בערכות העיצוב הפעילות."
+
+#: src/app/main/ui/ds/controls/numeric_input.cljs:99
+msgid "ds.inputs.numeric-input.no-matches"
+msgstr "לא נמצאו תוצאות."
+
+#: src/app/main/ui/ds/controls/numeric_input.cljs:641, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:138
+msgid "ds.inputs.numeric-input.open-token-list-dropdown"
+msgstr "פתיחת רשימת אסימונים"
+
+#: src/app/main/ui/ds/controls/utilities/token_field.cljs:85, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:133
+msgid "ds.inputs.token-field.detach-token"
+msgstr "ניתוק אסימון"
+
+#: src/app/main/ui/ds/controls/utilities/token_field.cljs:40, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:96, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:103
+msgid "ds.inputs.token-field.no-active-token-option"
+msgstr "האסימון הזה לא זמין באף ערכה או שהערך שלו שגוי."
+
#: src/app/main/data/auth.cljs:314
msgid "errors.auth-provider-not-allowed"
msgstr "ספק האימות לא מורשה לפרופיל הזה"
@@ -1205,7 +1225,7 @@ msgstr "למרות ש־Penpot לא תומך יותר בסוג המשאבים ה
msgid "errors.deprecated.contact.text"
msgstr "ליצור איתנו קשר"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:266
+#: src/app/main/data/workspace/tokens/library_edit.cljs:274
msgid "errors.drop-token-set-parent-to-child"
msgstr "לא ניתן לגרור סדרת הורה לתוך נתיב צאצא של עצמה."
@@ -1229,11 +1249,11 @@ msgstr "כתובת הדוא״ל לא תואמת את ההזמנה."
msgid "errors.email-domain-not-allowed"
msgstr "שם התחום לא מורשה"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "לכתובת הדוא״ל „%s” יש יותר מדי דוחות החזרה קבועים."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "כתובת הדוא״ל „%s” דווחה כספאם או שההודעות תוקפצנה לצמיתות."
@@ -1247,11 +1267,6 @@ msgstr ""
msgid "errors.feature-not-supported"
msgstr "אין תמיכה ביכולת ‚%s’."
-#: src/app/main/ui/auth/register.cljs, src/app/main/ui/dashboard/team_form.cljs, src/app/main/ui/onboarding/team_choice.cljs, src/app/main/ui/setti ngs/access_tokens.cljs, src/app/main/ui/settings/feedback.cljs, src/app/main/ui/settings/profile.cljs, src/app/main/ui/workspace/sidebar/assets.cljs
-#, unused
-msgid "errors.field-max-length"
-msgstr "חייב להיות באורך של תו אחד לכל היותר."
-
#, unused
msgid "errors.field-min-length"
msgstr "חייב להיות באורך של תו אחד לפחות."
@@ -1271,7 +1286,7 @@ msgstr ""
"נראה שאין התאמ בין היכולות הפעילות לבין הקובץ שניסית לפתוח. יש להחיל הסבות "
"עבור ‚%s’ לפני שיתאפשר לפתוח את הקובץ הזה."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "קרה משהו לא טוב."
@@ -1321,11 +1336,11 @@ msgstr "ההזמנה כנראה בוטלה או שתוקפה פג."
msgid "errors.ldap-disabled"
msgstr "אימות מול LDAP הושבת."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "הגעת למיכסת ה־‚%s’. נא ליצור קשר עם התמיכה."
-#: src/app/main/ui/dashboard/team.cljs:185, src/app/main/ui/onboarding/team_choice.cljs:101
+#: src/app/main/ui/dashboard/team.cljs:187, src/app/main/ui/dashboard/team.cljs:849, src/app/main/ui/onboarding/team_choice.cljs:101
msgid "errors.maximum-invitations-by-request-reached"
msgstr "הגעת למספר הכתובות המרבי (%s) שאפשר להזמין בבקשה אחת"
@@ -1341,7 +1356,7 @@ msgstr "נראה כי תוכן התמונה לא תואם לסיומת הקוב
msgid "errors.media-type-not-allowed"
msgstr "נראה כי זאת תמונה שגויה."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr "הודעות הדוא״ל לפרופיל שהזמנת מושתקות (דיווחים על דואר זבל או הרבה החזרות)."
@@ -1375,7 +1390,7 @@ msgstr "נתונים שגויים בלוח הגזירים"
msgid "errors.profile-blocked"
msgstr "הפרופיל חסום"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr "הודעות הדוא״ל לפרופיל שלך מושתקות (דיווחי דואר זבל או הרבה החזרות)."
@@ -1391,19 +1406,19 @@ msgstr "ה־SVG שגוי או פגום"
msgid "errors.team-feature-mismatch"
msgstr "התגלתה יכולת לא תואמת ‚%s’"
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr "אין מספיק חברים כדי לעזוב את הצוות, כנראה יהיה עליך למחוק אותו."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "החבר שניסית להקצות לא קיים."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr "הבעלים לא יכולים לעזוב את הקבוצה, עליך להעביר את תפקיד הבעלות."
-#: src/app/main/data/workspace/tokens/library_edit.cljs:153, src/app/main/data/workspace/tokens/library_edit.cljs:183
+#: src/app/main/data/workspace/tokens/library_edit.cljs:150, src/app/main/data/workspace/tokens/library_edit.cljs:180
msgid "errors.token-set-already-exists"
msgstr "כבר קיימת סדרה בשם הזה"
@@ -1412,11 +1427,11 @@ msgstr "כבר קיימת סדרה בשם הזה"
msgid "errors.token-set-doesnt-exists"
msgstr "אי אפשר לשכפל ערכה לא ידועה"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:265
+#: src/app/main/data/workspace/tokens/library_edit.cljs:273
msgid "errors.token-set-exists-on-drop"
msgstr "לא ניתן להשלים את החיתוך, כבר קיימת סדרה באותו השם בנתיב."
-#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:99
+#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:95
msgid "errors.token-theme-already-exists"
msgstr "כבר קיימת אפשרות ערכת עיצוב באותו השם"
@@ -1444,31 +1459,31 @@ msgstr "הגרסה הזאת נעולה ואחרים לא יכולים למחוק
msgid "errors.version-not-supported"
msgstr "מספר גרסת הקובץ לא תואם"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "שגיאת תקשורת, הכתובת אינה נגישה"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "הכתובת לא מעבירה תיקוף."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "ההעברה האחרונה לא הצליחה."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "שגיאה בתיקוף SSL."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "תום זמן המתנה"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "שגיאה לא צפויה בעת תיקוף"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "המצב %s לא צפוי"
@@ -1530,7 +1545,7 @@ msgstr "אירעה שגיאה"
msgid "inspect.attributes.blur"
msgstr "טשטוש"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "ערך"
@@ -1538,15 +1553,15 @@ msgstr "ערך"
msgid "inspect.attributes.color"
msgstr "צבע"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "הקסדצימלי"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1554,7 +1569,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "מילוי"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "הורדת תמונת מקור"
@@ -1648,35 +1663,37 @@ msgstr "אחיד"
msgid "inspect.attributes.stroke.width"
msgstr "רוחב"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "טיפוגרפיה"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "משפחת גופנים"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "גודל גופן"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "סגנון גופן"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "משקל גופן"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "ריווח תווים"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "גובה שורה"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "עיטור טקסט"
@@ -1684,35 +1701,36 @@ msgstr "עיטור טקסט"
msgid "inspect.attributes.typography.text-decoration.line-through"
msgstr "קו חוצה"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "ללא"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "קו תחתי"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "התמרת טקסט"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "ראשונות גדולות"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "אותיות קטנות"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "ללא"
-#: src/app/main/ui/inspect/attributes/text.cljs:159
+#: src/app/main/ui/inspect/attributes/text.cljs:152
msgid "inspect.attributes.typography.text-transform.unset"
msgstr "ביטול הגדרה"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "אותיות גדולות"
@@ -1724,15 +1742,15 @@ msgstr "מאפייני הגוון"
msgid "inspect.attributes.variants"
msgstr "מאפייני הגוונים"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr "למידע נוסף על חקירת עיצוב אפשר לבקר במרכז העזרה של Penpot"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "מידע נוסף על חקירה"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr "ניתן לבחור צורה, לוח או קבוצה ולראות את המאפיינים והקוד שלהם"
@@ -1796,15 +1814,23 @@ msgstr "SVG"
msgid "inspect.tabs.code.selected.text"
msgstr "טקסט"
+#: src/app/main/ui/inspect/right_sidebar.cljs:109
+msgid "inspect.tabs.computed"
+msgstr "מחושב"
+
#: src/app/main/ui/inspect/right_sidebar.cljs:114
msgid "inspect.tabs.info"
msgstr "מידע"
-#: src/app/main/ui/dashboard/comments.cljs:95
+#: src/app/main/ui/inspect/right_sidebar.cljs:165
+msgid "inspect.tabs.switcher.label"
+msgstr "פרטי שכבה"
+
+#: src/app/main/ui/dashboard/comments.cljs:96
msgid "label.mark-all-as-read"
msgstr "לסמן הכול כנקרא"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "קיצורי דרך"
@@ -1816,11 +1842,11 @@ msgstr "מקובל"
msgid "labels.access-tokens"
msgstr "אסימוני גישה"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "פעיל"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.add"
msgstr "הוספה"
@@ -1828,11 +1854,11 @@ msgstr "הוספה"
msgid "labels.add-custom-font"
msgstr "הוספת גופן משלך"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.adding"
msgstr "מתווסף…"
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "ניהול"
@@ -1840,7 +1866,7 @@ msgstr "ניהול"
msgid "labels.adobe-xd"
msgstr "Adobe XD"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "הכול"
@@ -1863,7 +1889,7 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "שער גישה שגוי"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "ביטול"
@@ -1871,11 +1897,11 @@ msgstr "ביטול"
msgid "labels.canva"
msgstr "Canva"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "סגירה"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:186
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:181
msgid "labels.collapse"
msgstr "צמצום"
@@ -1887,11 +1913,11 @@ msgstr "הערה"
msgid "labels.comment.mark-as-solved"
msgstr "סימון כפתור"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "הערות"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "קהילה"
@@ -1899,7 +1925,7 @@ msgstr "קהילה"
msgid "labels.confirm-password"
msgstr "אישור סיסמה"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "להמשיך"
@@ -1915,11 +1941,11 @@ msgstr "אפשר להמשיך עם חשבון Penpot"
msgid "labels.copy"
msgstr "העתקה"
-#: src/app/main/ui/inspect/attributes/common.cljs:118
+#: src/app/main/ui/inspect/attributes/common.cljs:99
msgid "labels.copy-color"
msgstr "העתקת צבע"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "העתקת קישור"
@@ -1927,7 +1953,7 @@ msgstr "העתקת קישור"
msgid "labels.copyright"
msgstr "Kaleidos @2024"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "יצירה"
@@ -1947,7 +1973,7 @@ msgstr "גופנים משלך"
msgid "labels.dashboard"
msgstr "לוח בקרה"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "מחיקה"
@@ -1959,7 +1985,7 @@ msgstr "מחיקת הערה"
msgid "labels.delete-comment-thread"
msgstr "מחיקת שרשור"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "מחיקת הזמנה"
@@ -1976,19 +2002,19 @@ msgstr "פיתוח"
msgid "labels.director"
msgstr "הנהלה בכירה"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "התעלמות"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "טיוטות"
-#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:65
msgid "labels.duplicate"
msgstr "שכפול"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "עריכה"
@@ -1996,11 +2022,11 @@ msgstr "עריכה"
msgid "labels.edit-file"
msgstr "עריכת קובץ"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "עורך"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:302
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:301
msgid "labels.empty"
msgstr "ריקה"
@@ -2013,11 +2039,11 @@ msgstr "שגיאה"
msgid "labels.event"
msgstr "אירוע"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "התוקף פג"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "ייצוא"
@@ -2045,7 +2071,7 @@ msgstr "ספקי גופנים"
msgid "labels.font-variants"
msgstr "סגנונות"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "גופנים"
@@ -2059,11 +2085,11 @@ msgstr "מייסד/סגן נשיא"
msgid "labels.freelancer"
msgstr "יש לי עסק משלי"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "מאגר GitHub"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "הגשת משוב"
@@ -2075,7 +2101,7 @@ msgstr "חזרה"
msgid "labels.graphic-design"
msgstr "עיצוב גרפי"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "מרכז העזרה"
@@ -2083,15 +2109,15 @@ msgstr "מרכז העזרה"
msgid "labels.hide"
msgstr "הסתרה"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "הסתרת הערות שנפתרו"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:134
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:130
msgid "labels.import"
msgstr "ייבוא"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "בלתי פעיל"
@@ -2113,7 +2139,7 @@ msgstr "שגיאה פנימית"
msgid "labels.invision"
msgstr "InVision"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "הזמנות"
@@ -2121,7 +2147,7 @@ msgstr "הזמנות"
msgid "labels.language"
msgstr "שפה"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "ספריות ותבניות"
@@ -2141,7 +2167,7 @@ msgstr "כניסה או הרשמה"
msgid "labels.login"
msgstr "כניסה"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "יציאה"
@@ -2149,11 +2175,11 @@ msgstr "יציאה"
msgid "labels.marketing"
msgstr "שיווק"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "חבר"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "חברים"
@@ -2161,23 +2187,27 @@ msgstr "חברים"
msgid "labels.mention"
msgstr "אזכור"
+#: src/app/main/ui/ds/controls/numeric_input.cljs:619
+msgid "labels.mixed-values"
+msgstr "מעורבב"
+
#: src/app/main/ui/settings/password.cljs:84
msgid "labels.new-password"
msgstr "סיסמה חדשה"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "הבאה"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "עברת על הכול! התראות על הערות חדשות תופענה כאן."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "אין הזמנות ממתינות."
-#: src/app/main/ui/dashboard/team.cljs:761
+#: src/app/main/ui/dashboard/team.cljs:739
msgid "labels.no-invitations-gather-people"
msgstr "אוספים יחד את האנשים ויוצרים דברים מדהימים."
@@ -2194,7 +2224,7 @@ msgstr "אופס!"
msgid "labels.notifications"
msgstr "התראות"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "קובץ"
@@ -2210,7 +2240,7 @@ msgstr[1] "%s לוחות"
msgstr[2] "%s לוחות"
msgstr[3] "%s לוחות"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "מיזם"
@@ -2231,7 +2261,7 @@ msgstr "סיסמה ישנה"
msgid "labels.only-yours"
msgstr "שלך בלבד"
-#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:309, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:338
+#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:310, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:339
msgid "labels.options"
msgstr "אפשרויות"
@@ -2247,7 +2277,7 @@ msgstr "אחר (נא לפרט)"
msgid "labels.other-short"
msgstr "אחר"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "בעלים"
@@ -2255,11 +2285,11 @@ msgstr "בעלים"
msgid "labels.password"
msgstr "סיסמה"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "בהמתנה"
-#: src/app/main/ui/dashboard/sidebar.cljs:750
+#: src/app/main/ui/dashboard/sidebar.cljs:751
msgid "labels.pinned-projects"
msgstr "מיזמים נעוצים"
@@ -2283,7 +2313,7 @@ msgstr "ניהול מוצר"
msgid "labels.profile"
msgstr "פרופיל"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "מיזמים"
@@ -2291,7 +2321,7 @@ msgstr "מיזמים"
msgid "labels.refresh"
msgstr "ריענון"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "הודעות מהדורה"
@@ -2305,11 +2335,11 @@ msgstr "רענון קובץ"
msgid "labels.remove"
msgstr "הסרה"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "הסרת חבר"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "שינוי שם"
@@ -2337,7 +2367,7 @@ msgstr "תגובה חדשה"
msgid "labels.reply.thread"
msgstr "תגובה"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "שליחת ההזמנה מחדש"
@@ -2349,15 +2379,15 @@ msgstr "שחזור"
msgid "labels.retry"
msgstr "ניסיון חוזר"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "תפקיד"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "שמירה"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:715
+#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:730
msgid "labels.search"
msgstr "חיפוש"
@@ -2385,11 +2415,11 @@ msgstr "אנחנו בהפוגת תחזוקה מתוכננת של המערכות
msgid "labels.service-unavailable.main-message"
msgstr "השירות אינו זמין"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:79
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:75
msgid "labels.sets"
msgstr "סדרות"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "הגדרות"
@@ -2401,7 +2431,7 @@ msgstr "שיתוף"
msgid "labels.share-prototype"
msgstr "שיתוף אבטיפוס"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "ספריות משותפות"
@@ -2409,7 +2439,7 @@ msgstr "ספריות משותפות"
msgid "labels.show"
msgstr "הצגה"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "הצגת כל ההערות"
@@ -2417,11 +2447,11 @@ msgstr "הצגת כל ההערות"
msgid "labels.show-comments-list"
msgstr "הצגת רשימת הערות"
-#: src/app/main/ui/workspace/comments.cljs:67, src/app/main/ui/workspace/comments.cljs:139
+#: src/app/main/ui/workspace/comments.cljs:68, src/app/main/ui/workspace/comments.cljs:140
msgid "labels.show-mentions"
msgstr "הצגת האזכורים שלך בלבד"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "הצגת ההערות שלך בלבד"
@@ -2429,7 +2459,7 @@ msgstr "הצגת ההערות שלך בלבד"
msgid "labels.sketch"
msgstr "Sketch"
-#: src/app/main/ui/dashboard/sidebar.cljs:729
+#: src/app/main/ui/dashboard/sidebar.cljs:730
msgid "labels.sources"
msgstr "מקורות"
@@ -2437,7 +2467,7 @@ msgstr "מקורות"
msgid "labels.start"
msgstr "התחלה"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "מצב"
@@ -2459,11 +2489,11 @@ msgstr "חבר או חברת צוות"
msgid "labels.themes"
msgstr "ערכות עיצוב"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "מדריכים"
-#: src/app/main/data/workspace/tokens/errors.cljs:93
+#: src/app/main/data/workspace/tokens/errors.cljs:101
msgid "labels.unknown-error"
msgstr "שגיאה לא ידועה"
@@ -2495,15 +2525,15 @@ msgstr "העלאת גופנים משלך"
msgid "labels.uploading"
msgstr "מתבצעת העלאה…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "תצוגה בלבד"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "מציג"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "התליות"
@@ -2511,11 +2541,11 @@ msgstr "התליות"
msgid "labels.write-new-comment"
msgstr "כתיבת הערה חדשה"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(אני)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "החשבון שלך"
@@ -2606,23 +2636,23 @@ msgstr "אפשר להרחיב את Penpot עם תוספים מובנים שנב
msgid "loader.tips.10.title"
msgstr "תמיכה בתוספים"
-#: src/app/main/ui/workspace/colorpicker.cljs:449, src/app/main/ui/workspace/colorpicker.cljs:450, src/app/main/ui/workspace/colorpicker.cljs:452
+#: src/app/main/ui/workspace/colorpicker.cljs:486, src/app/main/ui/workspace/colorpicker.cljs:487, src/app/main/ui/workspace/colorpicker.cljs:489
msgid "media.choose-image"
msgstr "בחירת תמונה"
-#: src/app/main/ui/workspace/colorpicker.cljs:244
+#: src/app/main/ui/workspace/colorpicker.cljs:256
msgid "media.gradient"
msgstr "מדרג"
-#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:44, src/app/main/ui/ds/utilities/swatch.cljs:57, src/app/main/ui/inspect/attributes/common.cljs:63, src/app/main/ui/workspace/colorpicker.cljs:246, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:251
+#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:45, src/app/main/ui/ds/utilities/swatch.cljs:58, src/app/main/ui/inspect/attributes/common.cljs:44, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:65, src/app/main/ui/workspace/colorpicker.cljs:258, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:395
msgid "media.image"
msgstr "תמונה"
-#: src/app/main/ui/inspect/attributes/common.cljs:74
+#: src/app/main/ui/inspect/attributes/common.cljs:55
msgid "media.image.short"
msgstr "תמונה"
-#: src/app/main/ui/workspace/colorpicker.cljs:442
+#: src/app/main/ui/workspace/colorpicker.cljs:479
msgid "media.keep-aspect-ratio"
msgstr "שמירה על יחס גובה־רוחב"
@@ -2640,7 +2670,7 @@ msgstr "התמונה נטענת…"
msgid "media.radial"
msgstr "מעגלי"
-#: src/app/main/ui/workspace/colorpicker.cljs:242
+#: src/app/main/ui/workspace/colorpicker.cljs:254
msgid "media.solid"
msgstr "אחיד"
@@ -2712,19 +2742,19 @@ msgstr "יצירת אסימון"
msgid "modals.create-access-token.title"
msgstr "יצירת אסימון גישה"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "יצירת התליה"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "יצירת התליה"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "כתובת מטען"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://example.com/postreceive"
@@ -2768,11 +2798,11 @@ msgstr "למחוק את הדיון הזה? כל התגובות בשרשור תי
msgid "modals.delete-comment-thread.title"
msgstr "מחיקת דיון"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "למחוק את הסימון הזה?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "מחיקת סימון"
@@ -2816,11 +2846,11 @@ msgstr "למחוק את הגופן הזה? הוא לא ייטען אם נעשה
msgid "modals.delete-font.title"
msgstr "גופן נמחק"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "למחוק את העמוד הזה?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "מחיקת עמוד"
@@ -2876,27 +2906,27 @@ msgstr[1] "מחיקת קבצים"
msgstr[2] "מחיקת קבצים"
msgstr[3] "מחיקת קבצים"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "מחיקת צוות"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr "למחוק את הצוות הזה? כל המיזמים והקבצים שמשויכים לצוות יימחקו לצמיתות."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "צוות נמחק"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "מחיקת חבר"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "למחוק את החבר הזה מהצוות?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "למחוק חבר בצוות"
@@ -2908,53 +2938,53 @@ msgstr[1] "נכסים שכבר נעשה בהם שימוש בקבצים האלה
msgstr[2] "נכסים שכבר נעשה בהם שימוש בקבצים האלה יישארו שם (אף עיצוב לא ייפגע)."
msgstr[3] "נכסים שכבר נעשה בהם שימוש בקבצים האלה יישארו שם (אף עיצוב לא ייפגע)."
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "מחיקת התליה"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "למחוק את ההתליה?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "מחיקת התליה"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "עריכת התליה"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "עריכת התליה"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "שליחת הזמנה"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "כתובות דוא״ל, מופרדות בפסיקים"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr "חלק מהחברים כבר נמצאים בצוות. נזמין את השאר."
-#: src/app/main/ui/dashboard/team.cljs:220
+#: src/app/main/ui/dashboard/team.cljs:222
msgid "modals.invite-team-member.text"
msgstr ""
"אפשר להזמין חברים לצוות כדי שיוכלו לגשת לקובץ הזה ולהיחשף לכל שאר קובצי "
"הצוות."
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "הזמנת חברים לצוות"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr "כיוון שאין עוד חברים בצוות הזה מלבדך, הצוות יימחק על כל המיזמים והקבצים שלו."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "ברצונך לעזוב את הצוות %s?"
@@ -2980,15 +3010,15 @@ msgstr "נא לבחור חבר לקידום"
msgid "modals.leave-and-reassign.title"
msgstr "בטרם עזיבתך"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "עזיבת צוות"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "לעזוב את הצוות הזה?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "עזיבת הצוות"
@@ -3016,37 +3046,37 @@ msgstr[1] "העברת ספריות"
msgstr[2] "העברת ספריות"
msgstr[3] "העברת ספריות"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "כמות ההינד"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "העברת בעלות"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"העברת בעלות תשנה את תפקידך לחלק מההנהלה תוך אובדן חלק מההרשאות שלך על הצוות "
"הזה. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr "הצוות הזה הוא כרגע בבעלותך. להפוך את %s לבעלים החדשים של הצוות?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "בעלים חדשים לצוות"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "פרסום"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "הספרייה שלך ריקה. לפרסם אותה בכל זאת?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "פרסום ספרייה ריקה"
@@ -3107,21 +3137,21 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "עדכון רכיבים בספרייה משותפת"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "עדכון"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "ביטול"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"פעולה זו תעדכן רכיב בספריה משותפת. זה עשוי להשפיע על הקבצים האחרים שמשתמשים "
"בה."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "עדכון רכיב בספריה משותפת"
@@ -3225,11 +3255,11 @@ msgstr "הפסקת תחזוקה: המערכת תושבת לעבודת תחזוק
msgid "notifications.by-code.upgrade-version"
msgstr "יש גרסה חדשה, נא לרענן את העמוד"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "ההזמנה נשלחה בהצלחה"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "קישור ההזמנה הועתק"
@@ -3372,7 +3402,7 @@ msgstr "הזמנת חברים"
msgid "onboarding.choice.team-up.invite-members-info"
msgstr "רצוי לזכור לכלול את כולם. מפתחים, מעצבים, מנהלים… גיוון מעשיר :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "הזמנה עם התפקיד:"
@@ -3590,193 +3620,193 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "מעבר למסך הכניסה"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "ניתוק"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "מעורב"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:283
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:423
msgid "settings.remove-color"
msgstr "הסרת צבע"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:288
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:428
msgid "settings.select-this-color"
msgstr "בחירת פריטים שמשתמשים בסגנון הזה"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "יסודות"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "לוח בקרה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "מציג"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "סביבת עבודה"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "יישור"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "עריכה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "כללי"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "כללי"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "תפריט ראשי"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "שינוי שכבות"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "ניווט"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "ניווט"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "ניווט"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "לוחות"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "נתיבים"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "צורות"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "טקסטים"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "כלים"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "תקריב"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "תקריב"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "הערות"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "הוספת מפרק"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "יישור לתחתית"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "יישור למרכז"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "יישור למרכז אופקית"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "יישור משני הצדדים"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "יישור שמאלה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "יישור ימינה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "יישור לראש"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "יישור למרכז אנכית"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "יצירת לוח מהבחירה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "החלפת מצב מודגש"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "הבדל בוליאני"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "החרגה בוליאנית"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "הצלבה בוליאנית"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "איחוד בוליאני"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "שליחה אחורה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "הרחקה לאחור"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "קידום"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "הבאה לחזית"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "פינוי ביטול"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "העתקה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
msgid "shortcuts.copy-link"
msgstr "העתקת קישור ללוח הגזירים"
@@ -3785,287 +3815,271 @@ msgstr "העתקת קישור ללוח הגזירים"
msgid "shortcuts.copy-props"
msgstr "העתקת מאפיינים"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "יצירת חדש"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "גזירה"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "התרחקות"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "מחיקה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "מחיקת מפרק"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "ניתוק רכיב"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "עיקול"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "אליפסה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "לוח"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "ציור נתיב"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "נתיב"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "מרובע"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "טקסט"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "שכפול"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "ביטול"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "ייצוא צורות"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "כיוון תקריב כדי להציג הכול"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "היפוך אופקי"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "היפוך אנכי"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "הקטנת גודל הכתב"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "הגדלת גודל הכתב"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "מעבר לטיוטות"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "מעבר לספריות המשותפות"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "חיפוש"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "קבוצה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "פיזור אופקית"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "הצגת/הסתרת מנשק משתמש"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "התקרבות"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "הוספת תמונה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "החלפת מצב נטוי"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "צירוף מפרקים"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
-msgid "shortcuts.letter-spacing-dec"
-msgstr "הקטנת ריווח תווים"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "הגדלת ריווח תווים"
-
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
-msgid "shortcuts.line-height-dec"
-msgstr "הנמכת שורה"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
-msgid "shortcuts.line-height-inc"
-msgstr "הגבהת שורה"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.line-through"
msgstr "החלפת מצב קו חוצה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "הפיכה לפינה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "הפיכה לעיקול"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "מסכה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "מיזוג מפרקים"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "העברה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "העברה למטה מהר"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "העברה שמאלה מהר"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "העברה ימינה מהר"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "העברה למעלה מהר"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "העברת מפרק"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "העברה למטה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "העברה שמאלה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "העברה ימינה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "העברה למעלה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "הלוח הבא"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "לא נמצאו קיצורי דרך"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "הגדרת אטימות ל־100%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "הגדרת אטימות ל־10%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "הגדרת אטימות ל־20%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "הגדרת אטימות ל־30%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "הגדרת אטימות ל־40%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "הגדרת אטימות ל־50%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "הגדרת אטימות ל־60%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "הגדרת אטימות ל־70%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "הגדרת אטימות ל־80%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "הגדרת אטימות ל־90%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "בוחר צבעים"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "מעבר לסעיף הערות צופים"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "מעבר ללוח בקרה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "מעבר לסעיף חקירת צופה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "מעבר לסעיף תפעול משתמש"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "מעבר לסעיף תפעול צופה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "מעבר לסביבת עבודה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " או "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "הדבקה"
@@ -4079,191 +4093,191 @@ msgstr "הדבקת מאפיינים"
msgid "shortcuts.plugins"
msgstr "מנהל תוספים"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "לוח קודם"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "ביצוע חוזר"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
msgid "shortcuts.rename"
msgstr "שינוי שם"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "איפוס תקריב"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
msgid "shortcuts.scale"
msgstr "התאמת גודל"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "חיפוש בקיצורי הדרך"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "בחירה בהכול"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
msgid "shortcuts.select-next"
msgstr "בחירת השכבה הבאה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
msgid "shortcuts.select-parent-layer"
msgstr "בחירת שכבת הורה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
msgid "shortcuts.select-prev"
msgstr "בחירת השכבה הקודמת"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "הפרדת מפרקים"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "הצגת/הסתרת רשת פיקסלים"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "הצגת/הסתרת קיצורי דרך"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "הצמדה למפרקים"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "הצמדה לרשת פיקסלים"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "התחלת עריכה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "התחלת מדידה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "עצירת מדידה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "הגדרת תמונות ממוזערות"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "קיצורי מקלדת"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "החלפת מצב יישור דינמי"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "החלפת מצב נכסים"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "החלפת מצב לוח צבעים"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "החלפת מצב מיקוד"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "החלפת מילוי מסך"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
msgid "shortcuts.toggle-guides"
msgstr "הצגת / הסתרת קווים מנחים"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "החלפת הצגת היסטוריה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "החלפת הצגת שכבות"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "הוספת/הסרת פריסת flex"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
msgid "shortcuts.toggle-layout-grid"
msgstr "הוספת/הסרת פריסת רשת"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "נעילת הנבחרים"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "נעילת יחסים"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
msgid "shortcuts.toggle-rulers"
msgstr "הצגת / הסתרת סרגלים"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
msgid "shortcuts.toggle-snap-guides"
msgstr "הצמדה לקווים מנחים"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
msgid "shortcuts.toggle-snap-ruler-guide"
msgstr "הצמדה לקווים מנחים סרגלים"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "החלפת לוח טקסט"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
msgid "shortcuts.toggle-theme"
msgstr "החלפת ערכת עיצוב"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "החלפת מצב הצגה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "החלפת סגנון תקריב"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "החלפת מצב קו תחתי"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "ביטול"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "פירוק קבוצה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "ביטול מסכה"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "פיזור אנכי"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "הקטנת עדשת תקריב"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "הגדלת עדשת תקריב"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "התמקדות על הנבחר"
@@ -4275,6 +4289,13 @@ msgstr "תוכנית מסחרית"
msgid "subscription.dashboard.power-up.enterprise-trial.top-title"
msgstr "תוכנית מסחרית (ניסיון)"
+#: src/app/main/ui/dashboard/subscription.cljs:64
+#, markdown
+msgid "subscription.dashboard.power-up.professional.bottom-text"
+msgstr ""
+"קבלת יותר מקום אחסון, שחזור קבצים ועוד עבור הצוותים שלך עם התוכנית ללא "
+"הגבלה. [להשתדרג!|target:self](%s)"
+
#: src/app/main/ui/dashboard/subscription.cljs:63
msgid "subscription.dashboard.power-up.professional.top-title"
msgstr "תוכנית מקצועית"
@@ -4318,11 +4339,41 @@ msgstr "עורכים נוספים, אחסון וגרסאות שמורות אוט
msgid "subscription.dashboard.power-up.your-subscription"
msgstr "המינוי שלך:"
+#: src/app/main/ui/dashboard/subscription.cljs:168
+msgid "subscription.dashboard.professional-dashboard-cta-title"
+msgstr ""
+"יש לך %s עורכים על פני הצוותים שבבעלותך, בעוד שהתוכנית המקצועית שלך מכסה עד "
+"8."
+
+#: src/app/main/ui/dashboard/subscription.cljs:176
+#, markdown
+msgid "subscription.dashboard.professional-dashboard-cta-upgrade-owner"
+msgstr ""
+"נא לשדרג כעת לתוכנית הבלתי מוגבלת או למסחרית כדי לאפשר יותר עורכים, אחסון "
+"ושחזור קבצים. [להירשם כעת.|target:self](%s)"
+
#: src/app/main/ui/dashboard/subscription.cljs:111
msgid "subscription.dashboard.team-plan"
msgstr "תוכנית צוותית"
-#: src/app/main/ui/dashboard/sidebar.cljs:858
+#: src/app/main/ui/dashboard/subscription.cljs:171
+msgid "subscription.dashboard.unlimited-dashboard-cta-title"
+msgstr ""
+"הצוות שלך לא מפסיק לגדול! התוכנית ללא הגבלה מכסה עד %s עורכים, אך כעת יש לך "
+"%s."
+
+#: src/app/main/ui/dashboard/subscription.cljs:179
+#, markdown
+msgid "subscription.dashboard.unlimited-dashboard-cta-upgrade-owner"
+msgstr ""
+"נא לשדרג כעת כדי לעמוד במכסת העורכים הנוכחית שלך. [להירשם "
+"כעת.|target:self](%s)"
+
+#: src/app/main/ui/dashboard/subscription.cljs:152
+msgid "subscription.dashboard.unlimited-members-extra-editors-cta-title"
+msgstr "הזמנת אנשים תוך השתתפות בתוכנית הבלתי מוגבלת"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:978
msgid "subscription.dashboard.upgrade-plan.power-up"
msgstr "שדרוג"
@@ -4362,19 +4413,45 @@ msgstr "90 ימי שמירת גרסאות אוטומטית ושחזור קבצי
msgid "subscription.settings.enterprise.capped-bill"
msgstr "חשבונית חודשית מוגבלת"
+#: src/app/main/ui/settings/subscription.cljs:392, src/app/main/ui/settings/subscription.cljs:402, src/app/main/ui/settings/subscription.cljs:454
+msgid "subscription.settings.enterprise.unlimited-storage-benefit"
+msgstr "אחסון בלתי מוגבל"
+
#: src/app/main/ui/dashboard/subscription.cljs:124, src/app/main/ui/settings/subscription.cljs:371, src/app/main/ui/settings/subscription.cljs:383, src/app/main/ui/settings/subscription.cljs:395, src/app/main/ui/settings/subscription.cljs:405
msgid "subscription.settings.manage-your-subscription"
msgstr "ניהול המינוי שלך"
+#: src/app/main/ui/settings/subscription.cljs:131
+msgid "subscription.settings.management.dialog.currently-editors-title"
+msgid_plural "subscription.settings.management.dialog.currently-editors-title"
+msgstr[0] "נכון לעכשיו, יש משתמש/ת %s על פני הצוותים שלך שיכולים לערוך."
+msgstr[1] "נכון לעכשיו, יש %s משתמשים/ות על פני הצוותים שלך שיכולים לערוך."
+msgstr[2] "נכון לעכשיו, יש %s משתמשים/ות על פני הצוותים שלך שיכולים לערוך."
+msgstr[3] "נכון לעכשיו, יש %s משתמשים/ות על פני הצוותים שלך שיכולים לערוך."
+
#: src/app/main/ui/settings/subscription.cljs:149
msgid "subscription.settings.management.dialog.downgrade"
msgstr ""
"חשוב לציין: שנמוך לתוכנית נמוכה יותר תפחית את מקום האחסון ותקצר את "
"היסטוריית הגיבויים והגרסאות."
+#: src/app/main/ui/settings/subscription.cljs:133
+msgid "subscription.settings.management.dialog.editors"
+msgstr "עורכים"
+
+#: src/app/main/ui/settings/subscription.cljs:138
+msgid "subscription.settings.management.dialog.editors-explanation"
+msgstr "[בעלים, מנהלים ועורכים. צופים לא נספרים כעורכים)"
+
+#: src/app/main/ui/settings/subscription.cljs:181
+msgid "subscription.settings.management.dialog.input-error"
+msgstr ""
+"אי אפשר להגדיר פחות עורכים ממה שיש לך כרגע. יש לשנות את התפקיד (עריכה/הנהלה "
+"לצפייה) לאנשים שלא עורכים קבצים בפועל דרך הגדרות הצוות."
+
#: src/app/main/ui/settings/subscription.cljs:177
msgid "subscription.settings.management.dialog.payment-explanation"
-msgstr "(לא יבוצע שום תשלום כעת)"
+msgstr "יחויב אחרי הניסיון. לא צריך כרגע כרטיס אשראי."
#: src/app/main/ui/settings/subscription.cljs:170, src/app/main/ui/settings/subscription.cljs:174
#, markdown
@@ -4409,6 +4486,18 @@ msgstr "ארגון לחודש"
msgid "subscription.settings.professional"
msgstr "מקצועי"
+#: src/app/main/ui/settings/subscription.cljs:360, src/app/main/ui/settings/subscription.cljs:427
+msgid "subscription.settings.professional.autosave-benefit"
+msgstr "גרסאות שנשמרות אוטומטית 7 ימים אחורה ושחזור קבצים"
+
+#: src/app/main/ui/settings/subscription.cljs:359, src/app/main/ui/settings/subscription.cljs:426
+msgid "subscription.settings.professional.storage-benefit"
+msgstr "10 ג״ב אחסון"
+
+#: src/app/main/ui/settings/subscription.cljs:361, src/app/main/ui/settings/subscription.cljs:428
+msgid "subscription.settings.professional.teams-editors-benefit"
+msgstr "צוותים ללא הגבלה. עד 7 עורכים על פני הצוותים בבעלותך."
+
#: src/app/main/ui/settings/subscription.cljs:355
msgid "subscription.settings.section-plan"
msgstr "המינוי שלך"
@@ -4425,6 +4514,10 @@ msgstr "הרשמה למינוי"
msgid "subscription.settings.success.dialog.description"
msgstr "אפשר לערוך את המינוי שלך בכל עת מעמוד ‚מינוי’ בפרטי החשבון שלך."
+#: src/app/main/ui/settings/subscription.cljs:238
+msgid "subscription.settings.success.dialog.thanks"
+msgstr "תודה על הבחירה בתוכנית %s של Penpot!"
+
#: src/app/main/ui/settings/subscription.cljs:240
msgid "subscription.settings.sucess.dialog.footer"
msgstr "מאחלים לך הנאה מהתוכנית שלך!"
@@ -4434,7 +4527,6 @@ msgid "subscription.settings.sucess.dialog.title"
msgstr "התוכנית שלך היא %s!"
#: src/app/main/ui/settings/subscription.cljs:413
-#, fuzzy
msgid "subscription.settings.support-us-since"
msgstr "תמכת בנו עם התוכנית הזאת מאז: %s"
@@ -4450,11 +4542,19 @@ msgstr "ללא הגבלה"
msgid "subscription.settings.unlimited-trial"
msgstr "ללא הגבלה (התנסות)"
+#: src/app/main/ui/settings/subscription.cljs:369, src/app/main/ui/settings/subscription.cljs:381, src/app/main/ui/settings/subscription.cljs:441
+msgid "subscription.settings.unlimited.autosave-benefit"
+msgstr "גרסאות שנשמרות אוטומטית 30 ימים אחורה ושחזור קבצים"
+
#: src/app/main/ui/settings/subscription.cljs:370, src/app/main/ui/settings/subscription.cljs:382, src/app/main/ui/settings/subscription.cljs:442
msgid "subscription.settings.unlimited.bill"
msgstr "חשבון חודשי מוגבל"
-#: src/app/main/ui/dashboard/subscription.cljs:147, src/app/main/ui/workspace/main_menu.cljs:933
+#: src/app/main/ui/settings/subscription.cljs:368, src/app/main/ui/settings/subscription.cljs:380, src/app/main/ui/settings/subscription.cljs:440
+msgid "subscription.settings.unlimited.storage-benefit"
+msgstr "25 ג״ב אחסון"
+
+#: src/app/main/ui/dashboard/subscription.cljs:147, src/app/main/ui/workspace/main_menu.cljs:961
msgid "subscription.workspace.header.menu.option.power-up"
msgstr "שדרוג התוכנית"
@@ -4525,19 +4625,19 @@ msgstr "סיסמה - Penpot"
msgid "title.settings.profile"
msgstr "פרופיל - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "הזמנות - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "חברים - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "הגדרות - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "התליות - %s - Penpot"
@@ -4609,43 +4709,43 @@ msgstr "הצגת פעילויות בקליק"
msgid "viewer.header.sitemap"
msgstr "מפת אתר"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "ההעברה האחרונה הצליחה."
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "(%s) יישור למרכז האופקי"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "(%s) פיזור ריווח אופקי"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "(%s) יישור שמאלה"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "(%s) יישור ימינה"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "(%s) יישור למטה"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "(%s) יישור למרכז אנכית"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "(%s) פיזור בריווח אנכי"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "(%s) יישור למעלה"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:163
+#: src/app/main/ui/workspace/sidebar/assets.cljs:172
msgid "workspace.assets.add-library"
msgstr "הוספת ספרייה"
@@ -4654,19 +4754,23 @@ msgstr "הוספת ספרייה"
msgid "workspace.assets.assets"
msgstr "משאבים"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "כל המשאבים"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "צבעים"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:493
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:497
msgid "workspace.assets.colors.add-color"
msgstr "הוספת צבע"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:81
+msgid "workspace.assets.component-group-options"
+msgstr "אפשרויות קבוצת רכיבים"
+
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "רכיבים"
@@ -4674,23 +4778,23 @@ msgstr "רכיבים"
msgid "workspace.assets.components.add-component"
msgstr "הוספת רכיב"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:176, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:535
+#: src/app/main/ui/workspace/sidebar/assets/components.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:547
msgid "workspace.assets.components.num-variants"
msgstr "%s הגוונים"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "יצירת קבוצה"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr "הפריטים שלך יקבלו אוטומטית שם בסגנון „שם קבוצה / שם פריט”"
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "מחיקה"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "שכפול"
@@ -4698,11 +4802,11 @@ msgstr "שכפול"
msgid "workspace.assets.duplicate-main"
msgstr "שכפול הראשי"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "עריכה"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:177
+#: src/app/main/ui/workspace/sidebar/assets.cljs:186
msgid "workspace.assets.filter"
msgstr "סינון"
@@ -4711,27 +4815,27 @@ msgstr "סינון"
msgid "workspace.assets.graphics"
msgstr "גרפיקה"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:576
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:190, src/app/main/ui/workspace/sidebar/assets/components.cljs:576
msgid "workspace.assets.grid-view"
msgstr "תצוגת טבלה"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "קבוצה"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "שם קבוצה"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:572
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:191, src/app/main/ui/workspace/sidebar/assets/components.cljs:572
msgid "workspace.assets.list-view"
msgstr "תצוגת רשימה"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "ספרייה מקומית"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:168
+#: src/app/main/ui/workspace/sidebar/assets.cljs:177
msgid "workspace.assets.manage-library"
msgstr "ניהול ספרייה"
@@ -4743,15 +4847,15 @@ msgstr "לא נמצאו משאבים"
msgid "workspace.assets.open-library"
msgstr "פתיחת קובץ ספרייה"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "שינוי שם"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "שינוי שם קבוצה"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "חיפוש במשאבים"
@@ -4769,7 +4873,7 @@ msgstr[3] "%s פריטים נבחרו"
msgid "workspace.assets.shared-library"
msgstr "ספרייה משותפת"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:237
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:235
msgid "workspace.assets.sidebar.components"
msgid_plural "workspace.assets.sidebar.components"
msgstr[0] "רכיב"
@@ -4777,15 +4881,15 @@ msgstr[1] "שני רכיבים"
msgstr[2] "%s רכיבים"
msgstr[3] "%s רכיבים"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:193
+#: src/app/main/ui/workspace/sidebar/assets.cljs:204
msgid "workspace.assets.sort"
msgstr "מיון"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "טיפוגרפיות"
-#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:404
+#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:405
msgid "workspace.assets.typography.add-typography"
msgstr "הוספת טיפוגרפיה"
@@ -4810,7 +4914,7 @@ msgstr "ריווח תווים"
msgid "workspace.assets.typography.line-height"
msgstr "גובה שורה"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "שצ"
@@ -4822,59 +4926,59 @@ msgstr "סגנונות טקסט"
msgid "workspace.assets.typography.text-transform"
msgstr "התמרת טקסט"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "פירוק קבוצה"
-#: src/app/main/ui/workspace/context_menu.cljs:791
+#: src/app/main/ui/workspace/context_menu.cljs:794
msgid "workspace.context-menu.grid-cells.area"
msgstr "יצירת שטח"
-#: src/app/main/ui/workspace/context_menu.cljs:794
+#: src/app/main/ui/workspace/context_menu.cljs:797
msgid "workspace.context-menu.grid-cells.create-board"
msgstr "יצירת לוח"
-#: src/app/main/ui/workspace/context_menu.cljs:786
+#: src/app/main/ui/workspace/context_menu.cljs:789
msgid "workspace.context-menu.grid-cells.merge"
msgstr "מיזוג תאים"
-#: src/app/main/ui/workspace/context_menu.cljs:749
+#: src/app/main/ui/workspace/context_menu.cljs:752
msgid "workspace.context-menu.grid-track.column.add-after"
msgstr "הוספת עמודה מימין"
-#: src/app/main/ui/workspace/context_menu.cljs:748
+#: src/app/main/ui/workspace/context_menu.cljs:751
msgid "workspace.context-menu.grid-track.column.add-before"
msgstr "הוספת עמודה משמאל"
-#: src/app/main/ui/workspace/context_menu.cljs:750
+#: src/app/main/ui/workspace/context_menu.cljs:753
msgid "workspace.context-menu.grid-track.column.delete"
msgstr "מחיקת עמודה"
-#: src/app/main/ui/workspace/context_menu.cljs:751
+#: src/app/main/ui/workspace/context_menu.cljs:754
msgid "workspace.context-menu.grid-track.column.delete-shapes"
msgstr "מחיקת עמודה וצורות"
-#: src/app/main/ui/workspace/context_menu.cljs:747
+#: src/app/main/ui/workspace/context_menu.cljs:750
msgid "workspace.context-menu.grid-track.column.duplicate"
msgstr "שכפול עמודה"
-#: src/app/main/ui/workspace/context_menu.cljs:756
+#: src/app/main/ui/workspace/context_menu.cljs:759
msgid "workspace.context-menu.grid-track.row.add-after"
msgstr "הוספת שורה מתחת"
-#: src/app/main/ui/workspace/context_menu.cljs:755
+#: src/app/main/ui/workspace/context_menu.cljs:758
msgid "workspace.context-menu.grid-track.row.add-before"
msgstr "הוספת שורה למעלה"
-#: src/app/main/ui/workspace/context_menu.cljs:757
+#: src/app/main/ui/workspace/context_menu.cljs:760
msgid "workspace.context-menu.grid-track.row.delete"
msgstr "מחיקת שורה"
-#: src/app/main/ui/workspace/context_menu.cljs:758
+#: src/app/main/ui/workspace/context_menu.cljs:761
msgid "workspace.context-menu.grid-track.row.delete-shapes"
msgstr "מחיקת שורה וצורות"
-#: src/app/main/ui/workspace/context_menu.cljs:754
+#: src/app/main/ui/workspace/context_menu.cljs:757
msgid "workspace.context-menu.grid-track.row.duplicate"
msgstr "שכפול שורה"
@@ -4882,7 +4986,7 @@ msgstr "שכפול שורה"
msgid "workspace.focus.focus-mode"
msgstr "מצב מיקוד"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "מיקוד כבוי"
@@ -4902,11 +5006,11 @@ msgstr "מדרג קווי"
msgid "workspace.gradients.radial"
msgstr "מדרג מעגלי"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "השבתת יישור דינמי"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "השבתת קנה מידה יחסי"
@@ -4915,23 +5019,23 @@ msgstr "השבתת קנה מידה יחסי"
msgid "workspace.header.menu.disable-scale-text"
msgstr "השבתת שינוי גודל טקסט"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "השבתת הצמדה לקווים המנחים"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "השבתת הצמדה לפיקסל"
-#: src/app/main/ui/workspace/main_menu.cljs:215
+#: src/app/main/ui/workspace/main_menu.cljs:243
msgid "workspace.header.menu.disable-snap-ruler-guides"
msgstr "השבתת הצמדה לקווים מנחים סרגלים"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "הפעלת יישור דינמי"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "הפעלת קנה מידה יחסי"
@@ -4940,51 +5044,51 @@ msgstr "הפעלת קנה מידה יחסי"
msgid "workspace.header.menu.enable-scale-text"
msgstr "הפעלת שינוי גודל טקסט"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "הצמדה לקווים מנחים"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "הפעלת הצמדה לפיקסל"
-#: src/app/main/ui/workspace/main_menu.cljs:216
+#: src/app/main/ui/workspace/main_menu.cljs:244
msgid "workspace.header.menu.enable-snap-ruler-guides"
msgstr "הצמדה לקווים מנחים סרגלים"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "הסתרת שמות לוחות"
-#: src/app/main/ui/workspace/main_menu.cljs:348
+#: src/app/main/ui/workspace/main_menu.cljs:376
msgid "workspace.header.menu.hide-guides"
msgstr "הסתרת קווים מנחים"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "הסתרת ערכת צבעים"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "הסתרת רשת פיקסלים"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "הסתרת סרגלים"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "הסתרת לוח גופנים"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "עריכה"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "קובץ"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "עזרה ומידע"
@@ -4993,63 +5097,63 @@ msgstr "עזרה ומידע"
msgid "workspace.header.menu.option.power-up"
msgstr "חיזוק התוכנית שלך"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "העדפות"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "תצוגה"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "ביצוע מחדש"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "לבחור הכול"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "הצגת שמות לוחות"
-#: src/app/main/ui/workspace/main_menu.cljs:349
+#: src/app/main/ui/workspace/main_menu.cljs:377
msgid "workspace.header.menu.show-guides"
msgstr "הצגת קווים מנחים"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "הצגת ערכת צבעים"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "הצגת רשת פיקסלים"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "הצגת סרגלים"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "הצגת לוח גופנים"
-#: src/app/main/ui/workspace/main_menu.cljs:288
+#: src/app/main/ui/workspace/main_menu.cljs:316
msgid "workspace.header.menu.toggle-dark-theme"
msgstr "החלפה לערכת עיצוב כהה"
-#: src/app/main/ui/workspace/main_menu.cljs:286, src/app/main/ui/workspace/main_menu.cljs:289
+#: src/app/main/ui/workspace/main_menu.cljs:314, src/app/main/ui/workspace/main_menu.cljs:317
msgid "workspace.header.menu.toggle-light-theme"
msgstr "החלפה לערכת עיצוב בהירה"
-#: src/app/main/ui/workspace/main_menu.cljs:287
+#: src/app/main/ui/workspace/main_menu.cljs:315
msgid "workspace.header.menu.toggle-system-theme"
msgstr "החלפה לערכת עיצוב כמו המערכת"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "החזרה"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "איפוס"
@@ -5065,7 +5169,7 @@ msgstr "נשמר"
msgid "workspace.header.saving"
msgstr "בשמירה"
-#: src/app/main/ui/workspace/right_header.cljs:239
+#: src/app/main/ui/workspace/right_header.cljs:240
msgid "workspace.header.share"
msgstr "שיתוף"
@@ -5074,11 +5178,11 @@ msgstr "שיתוף"
msgid "workspace.header.unsaved"
msgstr "שינויים שלא נשמרו"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "מצב תצוגה (%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "תקריב"
@@ -5090,7 +5194,7 @@ msgstr "מילוי - שינוי גודל כדי למלא"
msgid "workspace.header.zoom-fit"
msgstr "התאמה - שינוי גודל כדי להתאים"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "כיוון תקריב כדי להציג הכול"
@@ -5098,43 +5202,43 @@ msgstr "כיוון תקריב כדי להציג הכול"
msgid "workspace.header.zoom-full-screen"
msgstr "מסך מלא"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "התמקדות על הנבחר"
-#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:621
msgid "workspace.layout_grid.editor.options.edit-grid"
msgstr "עריכת רשת"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1300
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1301
msgid "workspace.layout_grid.editor.options.exit"
msgstr "יציאה מהמערכת"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:429, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:435
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:430, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:436
msgid "workspace.layout_grid.editor.padding.bottom"
msgstr "ריפוד מלמטה"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:491
msgid "workspace.layout_grid.editor.padding.expand"
msgstr "הצגת אפשרויות ריפוד עם 4 צדדים"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:354, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:355, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:362
msgid "workspace.layout_grid.editor.padding.horizontal"
msgstr "ריפוד אופקי"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:444, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:450
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:451
msgid "workspace.layout_grid.editor.padding.left"
msgstr "ריפוד משמאל"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:414, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:420
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:421
msgid "workspace.layout_grid.editor.padding.right"
msgstr "ריפוד מימין"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:406
msgid "workspace.layout_grid.editor.padding.top"
msgstr "ריפוד מלמעלה"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:340, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:341, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:347
msgid "workspace.layout_grid.editor.padding.vertical"
msgstr "ריפוד אנכי"
@@ -5150,7 +5254,7 @@ msgstr "בוצע"
msgid "workspace.layout_grid.editor.top-bar.locate"
msgstr "איתור"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1326
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1327
msgid "workspace.layout_grid.editor.top-bar.locate.tooltip"
msgstr "איתור פריסת הרשת"
@@ -5159,10 +5263,6 @@ msgstr "איתור פריסת הרשת"
msgid "workspace.libraries.add"
msgstr "הוספה"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s צבעים"
-
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
msgstr "אין עדיין סגנונות צבע בספרייה שלך"
@@ -5189,43 +5289,35 @@ msgstr "צבעים אחרונים"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "RGB משלים"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "שמירת סגנון צבע"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s רכיבים"
-
-#: src/app/main/ui/workspace/libraries.cljs:371
+#: src/app/main/ui/workspace/libraries.cljs:404
msgid "workspace.libraries.empty.add-some"
msgstr "או להוסיף כמה מאלה לניסיון:"
-#: src/app/main/ui/workspace/libraries.cljs:365
+#: src/app/main/ui/workspace/libraries.cljs:398
msgid "workspace.libraries.empty.no-libraries"
msgstr "אין ספריות משותפות בצוות שלך, אפשר לחפש אחר"
-#: src/app/main/ui/workspace/libraries.cljs:369
+#: src/app/main/ui/workspace/libraries.cljs:402
msgid "workspace.libraries.empty.some-templates"
msgstr "כל מיני תבניות כאן"
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "ספריית קבצים"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s גרפיקה"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "ספריות בקובץ הזה"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "ספריות"
@@ -5234,11 +5326,11 @@ msgstr "ספריות"
msgid "workspace.libraries.library"
msgstr "ספרייה"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "עדכוני ספרייה"
-#: src/app/main/ui/workspace/libraries.cljs:360
+#: src/app/main/ui/workspace/libraries.cljs:393
msgid "workspace.libraries.loading"
msgstr "בטעינה…"
@@ -5247,51 +5339,47 @@ msgstr "בטעינה…"
msgid "workspace.libraries.more-templates"
msgstr "אפשר לחפש "
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "אין ספריות משותפות שדורשות עדכון"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "לא נמצאו תוצאות לחיפוש אחר „%s”"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "חיפוש בספריות המשותפות"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "ספריות משותפות"
-#: src/app/main/ui/workspace/libraries.cljs:352
+#: src/app/main/ui/workspace/libraries.cljs:385
msgid "workspace.libraries.shared-library-btn"
msgstr "חיבור ספרייה"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "מגוון טיפוגרפיות"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "ניתוק כל הטיפוגרפיות"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s טיפוגרפיות"
-
-#: src/app/main/ui/workspace/libraries.cljs:323
+#: src/app/main/ui/workspace/libraries.cljs:354
msgid "workspace.libraries.unlink-library-btn"
msgstr "ניתוק ספרייה"
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "עדכון"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "הצגת כל השינויים"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "עדכונים"
@@ -5299,31 +5387,31 @@ msgstr "עדכונים"
msgid "workspace.notification-pill.detail"
msgstr "פרטים"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "יש ללחוץ על הכפתור + כדי להוסיף אינטראקציות."
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:96
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:97
msgid "workspace.options.blur-options.add-blur"
msgstr "הוספת טשטוש"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:117
+#: 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/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "טשטוש"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "טשטוש קבוצה"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "טשטוש בחירה"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:114
msgid "workspace.options.blur-options.toggle-blur"
msgstr "החלת/הסרת טשטוש"
@@ -5331,101 +5419,111 @@ msgstr "החלת/הסרת טשטוש"
msgid "workspace.options.canvas-background"
msgstr "רקע משטח ציור"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "חיתוך התוכן"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "רכיב"
-#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:193
+#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:196
msgid "workspace.options.component.annotation"
msgstr "הסבר"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "העתקה"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:185
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:188
msgid "workspace.options.component.create-annotation"
msgstr "יצירת הסבר"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "עריכת הסבר"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "ראשי"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:706
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:721
msgid "workspace.options.component.swap"
msgstr "החלפת רכיב"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:765
msgid "workspace.options.component.swap.empty"
msgstr "עדיין אין נכסים בתיקייה הזאת"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:973
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:993
msgid "workspace.options.component.unlinked"
msgstr "לא מקושר"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:512
msgid "workspace.options.component.variant.duplicated.copy.locate"
msgstr "מעבר לרכיב הראשי"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:496
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:509
msgid "workspace.options.component.variant.duplicated.copy.title"
msgstr ""
"לרכיב הזה יש הגוונים סותרים. נא לוודא שלכל אחד מההגוונים יש סדרה ייחודית של "
"ערכי מאפיינים."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1246
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1281
msgid "workspace.options.component.variant.duplicated.group.locate"
msgstr "איתור הגוונים כפולים"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1243
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1278
msgid "workspace.options.component.variant.duplicated.group.title"
msgstr "לחלק מההגוונים יש מאפיינים וערכים זהים"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:267
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:268
msgid "workspace.options.component.variant.duplicated.single.all"
msgstr "להגוונים האלה יש מאפיינים וערכים זהים."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:264
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:265
msgid "workspace.options.component.variant.duplicated.single.one"
msgstr "להגוון הזה יש מאפיינים וערכים זהים להגוון אחר."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:270
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:271
msgid "workspace.options.component.variant.duplicated.single.some"
msgstr "לחלק מההגוונים האלה יש מאפיינים וערכים זהים."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1236
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:499
+msgid "workspace.options.component.variant.malformed.copy"
+msgstr ""
+"לרכיב הזה יש הגוונים עם שמות שגויים. נא לוודא שכל אחד מההגוונים מיושר עם "
+"המבנה הנכון."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1271
msgid "workspace.options.component.variant.malformed.group.locate"
msgstr "איתור הגוונים שגויים"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1233
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1268
msgid "workspace.options.component.variant.malformed.group.title"
msgstr "לחלק מההגוונים יש שמות שגויים"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:502
+msgid "workspace.options.component.variant.malformed.locate"
+msgstr "איתור הגוונים שגויים"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:252
msgid "workspace.options.component.variant.malformed.single.all"
msgstr "להגוונים האלה יש שמות שגויים."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:247
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:249
msgid "workspace.options.component.variant.malformed.single.one"
msgstr "להגוון הזה יש שם שגוי."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:253
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:255
msgid "workspace.options.component.variant.malformed.single.some"
msgstr "לחלק מההגוונים האלה יש שם שגוי."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:390
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:391
msgid "workspace.options.component.variant.malformed.structure.example"
msgstr "[מאפיין]=[ערך], [מאפיין]=[ערך]"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:389
msgid "workspace.options.component.variant.malformed.structure.title"
msgstr "לנסות להשתמש במבנה הבא:"
@@ -5445,7 +5543,7 @@ msgstr "חולקים את אותו השם."
#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:76
msgid "workspace.options.component.variants-help-modal.rule2"
-msgstr "הם מאותו הסוג"
+msgstr "הם מאותו הסוג."
#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:77
msgid "workspace.options.component.variants-help-modal.rule2.detail"
@@ -5453,13 +5551,13 @@ msgstr "מרובע, אליפסה, נתיבים ופעולות בוליאניות
#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:87
msgid "workspace.options.component.variants-help-modal.rule3"
-msgstr "יש את אותה רמת ההיררכיה"
+msgstr "יש את אותה רמת ההיררכיה."
#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:88
msgid "workspace.options.component.variants-help-modal.rule3.detail"
msgstr "קבוצות, לוחות ופריסות נחשבים לשווי ערך."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:935, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1157, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:47
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:955, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1191, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:47
msgid "workspace.options.component.variants-help-modal.title"
msgstr "איך הגוונים נשארים מחוברים"
@@ -5503,7 +5601,7 @@ msgstr "עליון"
msgid "workspace.options.constraints.topbottom"
msgstr "עליון ותחתון"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "עיצוב"
@@ -5516,7 +5614,7 @@ msgstr "ייצוא"
msgid "workspace.options.export-multiple"
msgstr "ייצוא הבחירה"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "ייצוא רכיב"
@@ -5524,15 +5622,15 @@ msgstr[1] "ייצוא %s רכיבים"
msgstr[2] "ייצוא %s רכיבים"
msgstr[3] "ייצוא %s רכיבים"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:188
+#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:214
msgid "workspace.options.export.add-export"
msgstr "הוספת ייצוא"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:235
+#: 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/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "סיומת"
@@ -5540,7 +5638,7 @@ msgstr "סיומת"
msgid "workspace.options.exporting-complete"
msgstr "הייצוא הושלם"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "מתבצע ייצוא…"
@@ -5552,27 +5650,27 @@ msgstr "הייצוא נכשל"
msgid "workspace.options.exporting-object-slow"
msgstr "הייצוא אטי בהגזמה"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "מילוי"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:194
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:234
msgid "workspace.options.fill.add-fill"
msgstr "הוספת מילוי"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:208
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:248
msgid "workspace.options.fill.remove-fill"
msgstr "הסרת מילוי"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:392
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:474
msgid "workspace.options.fit-content"
msgstr "שינוי גודל הלוח כדי שיתאים לתוכן"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "הוספת תחילת זרימה"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:178
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:179
msgid "workspace.options.flows.flow"
msgstr "זרימה"
@@ -5581,19 +5679,19 @@ msgstr "זרימה"
msgid "workspace.options.flows.flow-start"
msgstr "התחלת זרימה"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "הזרימה מתחילה"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:155
msgid "workspace.options.flows.remove-flow"
msgstr "הסרת זרימה"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "אוטומטי"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "עמודות"
@@ -5602,7 +5700,7 @@ msgstr "עמודות"
msgid "workspace.options.grid.grid-title"
msgstr "טבלה"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "צבע"
@@ -5611,15 +5709,15 @@ msgstr "צבע"
msgid "workspace.options.grid.params.columns"
msgstr "עמודות"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "מרזב"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "גובה"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "שול"
@@ -5628,7 +5726,7 @@ msgstr "שול"
msgid "workspace.options.grid.params.rows"
msgstr "שורות"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "הגדרה כבררת מחדל"
@@ -5642,159 +5740,159 @@ msgstr "גודל"
msgid "workspace.options.grid.params.type"
msgstr "סוג"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "תחתון"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "מרכז"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "שמאל"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "ימין"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "מתיחה"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "עליון"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "להשתמש בבררת המחדל"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "רוחב"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "שורות"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "ריבוע"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "מילוי קבוצה"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "מתאר קבוצה"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:326
msgid "workspace.options.guides.add-guide"
msgstr "הוספת קו מנחה"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:187
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:188
msgid "workspace.options.guides.remove-guide"
msgstr "הסרת קו מנחה"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:320
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
msgid "workspace.options.guides.title"
msgstr "קווים מנחים"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:183
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:184
msgid "workspace.options.guides.toggle-guide"
msgstr "הצגת/הסתרת קו מנחה"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "גובה"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "חקירה"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "פעולה"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "לאחר השהיה"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "הנפשה"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "התמוססות"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "ללא"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "דחיפה"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "גלישה"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "אוטו"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "הוספת שכבת רקע"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "תיסגר בלחיצה מחוצה לה"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "סגירת שכבת על"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "סגירת שכבת על: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "השהיה"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "יעד"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "משך"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "החלקה"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "קלה"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "החלקה פנימה"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "החלקה פנימה החוצה"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "החלקה החוצה"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "קווי"
@@ -5803,47 +5901,47 @@ msgstr "קווי"
msgid "workspace.options.interaction-in"
msgstr "פנימה"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "כניסת עכבר"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "יציאת עכבר"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "מילישניות"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "ניווט אל"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "ניווט אל: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(לא הוגדר)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "אפקט הזחה"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "בלחיצה"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "פתיחת שכבת על"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "פתיחת שכבת על: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "פתיחת כתובת"
@@ -5852,87 +5950,87 @@ msgstr "פתיחת כתובת"
msgid "workspace.options.interaction-out"
msgstr "החוצה"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "בתחתית במרכז"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "בתחתית משמאל"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "בתחתית מימין"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "מרכז"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "ידני"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "בראש באמצע"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "בראש משמאל"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "בראש מימין"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "מיקום"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "שימור מיקום גלילה"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "המסך הקודם"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "יחסי אל"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "עצמי"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "החלפת מצב שכבת על"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "החלפת מצב שכבת על: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "הקפצה"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "כתובת"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "בזמן ריחוף"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "בזמן לחיצה"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "אינטראקציות"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:735
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:736
msgid "workspace.options.interactions.add-interaction"
msgstr "הוספת אינטראקציה"
@@ -5941,67 +6039,67 @@ msgstr "הוספת אינטראקציה"
msgid "workspace.options.interactions.remove-interaction"
msgstr "הסרת אינטראקציה"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "צבע"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "צריבת צבע"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "בריחת צבע"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "החשכה"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "הבדל"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "הדרה"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "אור קשיח"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "גוון"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "הבהרה"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "תאורה"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "הכפלה"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "רגיל"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "שכבת על"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "רוויה"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "מסך"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "אור רך"
@@ -6020,7 +6118,7 @@ msgstr "קיבוץ שכבות"
msgid "workspace.options.layer-options.title.multiple"
msgstr "שכבות נבחרות"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:202
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:207, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:213
msgid "workspace.options.layer-options.toggle-layer"
msgstr "הצגת/הסתרת שכבה"
@@ -6029,19 +6127,19 @@ msgstr "הצגת/הסתרת שכבה"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "אפשרויות מתקדמות"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "גובה מר."
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "רוחב מר."
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "גובה מז."
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "רוחב מז."
@@ -6155,15 +6253,15 @@ msgstr "רווח בין לבין"
msgid "workspace.options.layout.top"
msgstr "עליון"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "צבעים נוספים"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "צבעי ספרייה נוספים"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "אטימות"
@@ -6172,35 +6270,35 @@ msgstr "אטימות"
msgid "workspace.options.position"
msgstr "מיקום"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "אבטיפוס"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "רדיוס"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "בתחתית משמאל"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "בתחתית מימין"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "בראש משמאל"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "בראש מימין"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:152
msgid "workspace.options.radius.hide-all-corners"
msgstr "צמצום רדיוס עצמאי"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:136
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:153
msgid "workspace.options.radius.show-single-corners"
msgstr "הצגת רדיוס עצמאי"
@@ -6212,7 +6310,7 @@ msgstr "אחרונים"
msgid "workspace.options.retry"
msgstr "לנסות שוב"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "סיבוב"
@@ -6220,31 +6318,31 @@ msgstr "סיבוב"
msgid "workspace.options.search-font"
msgstr "חיפוש גופן"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr "נא לבחור צורה, לוח או קבוצה כדי לגרור חיבור ללוח אחר."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "צבעים נבחרים"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "מילוי בחירה"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "מתאר בחירה"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:341
msgid "workspace.options.shadow-options.add-shadow"
msgstr "הוספת הצללה"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "טשטוש"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "צבע הצללה"
@@ -6256,63 +6354,64 @@ msgstr "הטלת צל"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "צל פנימי"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:348
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:183, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:354
msgid "workspace.options.shadow-options.remove-shadow"
msgstr "הסרת הצללה"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "פיזור"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "צל"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "צל של קבוצה"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "צללים של בחירה"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:174
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:179
msgid "workspace.options.shadow-options.toggle-shadow"
msgstr "הצגת/הסתרת הצללה"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "הצגה בייצואים"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "להציג במצב הצגה"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "גודל"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "תבניות גודל"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:534
msgid "workspace.options.size.lock"
msgstr "נעילת יחס"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:534
msgid "workspace.options.size.unlock"
msgstr "שחרור יחס"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "מתאר"
@@ -6321,7 +6420,7 @@ msgstr "מתאר"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "סמן עגול"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "עיגול"
@@ -6330,7 +6429,7 @@ msgstr "עיגול"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "סמן יהלום"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "יהלום"
@@ -6339,19 +6438,19 @@ msgstr "יהלום"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "חץ קו"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "חץ"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "ללא"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "עגול"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "ריבוע"
@@ -6360,7 +6459,7 @@ msgstr "ריבוע"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "סמן ריבוע"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "מרובע"
@@ -6369,83 +6468,83 @@ msgstr "מרובע"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "חץ משולש"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "משולש"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "צבע מתאר"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "עובי מתאר"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:180
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:189
msgid "workspace.options.stroke.add-stroke"
msgstr "הוספת צבע מתאר"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "מרכז"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "מקווקוו"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "מנוקד"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "בפנים"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "מעורב"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "בחוץ"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:193
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:202
msgid "workspace.options.stroke.remove-stroke"
msgstr "הסרת מתאר"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "אחיד"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "יישור לתחתית"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "יישור לאמצע"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "יישור לראש"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "משמאל לימין"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "מימין לשמאל"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "גובה אוטומטי"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "רוחב אוטומטי"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "קבוע"
@@ -6467,35 +6566,35 @@ msgstr "אותיות קטנות"
msgid "workspace.options.text-options.none"
msgstr "ללא"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "קו חוצה (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "יישור למרכז"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "יישור לשני הצדדים"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "יישור שמאלה"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "יישור ימינה"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "טקסט"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "קיבוץ טקסט"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "טקסט בחירה"
@@ -6504,7 +6603,7 @@ msgstr "טקסט בחירה"
msgid "workspace.options.text-options.titlecase"
msgstr "רישיות כותרת"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "קו תחתי (%s)"
@@ -6513,19 +6612,19 @@ msgstr "קו תחתי (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "אותיות גדולות"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr "ניתן להשתמש בכפתור הנגינה שבכותרת כדי להריץ את תצוגת האבטיפוס."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "עובי"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "ציר X"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "ציר Y"
@@ -6569,111 +6668,111 @@ msgstr "הפרדת מפרקים (%s)"
msgid "workspace.path.actions.snap-nodes"
msgstr "הצמדת מפרקים (%s)"
-#: src/app/main/ui/workspace/plugins.cljs:83
+#: src/app/main/ui/workspace/plugins.cljs:84
msgid "workspace.plugins.button-open"
msgstr "פתיחה"
-#: src/app/main/ui/workspace/plugins.cljs:197
+#: src/app/main/ui/workspace/plugins.cljs:198
#, markdown
msgid "workspace.plugins.discover"
msgstr "חשיפת [תוספים נוספים](%s)"
-#: src/app/main/ui/workspace/plugins.cljs:204
+#: src/app/main/ui/workspace/plugins.cljs:205
msgid "workspace.plugins.empty-plugins"
msgstr "עדיין לא מותקן אף תוסף"
-#: src/app/main/ui/workspace/plugins.cljs:191
+#: src/app/main/ui/workspace/plugins.cljs:192
msgid "workspace.plugins.error.manifest"
msgstr "המצהר/מניפסט של התוסף שגוי."
-#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:755, src/app/main/ui/workspace/plugins.cljs:82
+#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:783, src/app/main/ui/workspace/plugins.cljs:83
msgid "workspace.plugins.error.need-editor"
msgstr "צריך הרשאות עריכה כדי להשתמש בתוסף הזה"
-#: src/app/main/ui/workspace/plugins.cljs:187
+#: src/app/main/ui/workspace/plugins.cljs:188
msgid "workspace.plugins.error.url"
msgstr "התוסף לא קיים או שהכתובת שגויה."
-#: src/app/main/ui/workspace/plugins.cljs:183
+#: src/app/main/ui/workspace/plugins.cljs:184
msgid "workspace.plugins.install"
msgstr "התקנה"
-#: src/app/main/ui/workspace/plugins.cljs:213
+#: src/app/main/ui/workspace/plugins.cljs:214
msgid "workspace.plugins.installed-plugins"
msgstr "תוספים מותקנים"
-#: src/app/main/ui/workspace/main_menu.cljs:710
+#: src/app/main/ui/workspace/main_menu.cljs:738
msgid "workspace.plugins.menu.plugins-manager"
msgstr "מנהל תוספים"
-#: src/app/main/ui/workspace/main_menu.cljs:906
+#: src/app/main/ui/workspace/main_menu.cljs:934
msgid "workspace.plugins.menu.title"
msgstr "תוספים"
-#: src/app/main/ui/workspace/plugins.cljs:374
+#: src/app/main/ui/workspace/plugins.cljs:375
msgid "workspace.plugins.permissions-update.title"
msgstr "לעדכן את התוסף הזה"
-#: src/app/main/ui/workspace/plugins.cljs:378
+#: src/app/main/ui/workspace/plugins.cljs:379
msgid "workspace.plugins.permissions-update.warning"
msgstr "התוסף הזה השתנה מאז שפתחת אותו. עכשיו הוא רוצה גם לגשת אל:"
-#: src/app/main/ui/workspace/plugins.cljs:278
+#: src/app/main/ui/workspace/plugins.cljs:279
msgid "workspace.plugins.permissions.allow-download"
msgstr "התחלת הורדות קבצים."
-#: src/app/main/ui/workspace/plugins.cljs:285
+#: src/app/main/ui/workspace/plugins.cljs:286
msgid "workspace.plugins.permissions.allow-localstorage"
msgstr "אחסון נתונים בדפדפן."
-#: src/app/main/ui/workspace/plugins.cljs:271
+#: src/app/main/ui/workspace/plugins.cljs:272
msgid "workspace.plugins.permissions.comment-read"
msgstr "קריאת התגובות שלך ומתן מענה עליהן."
-#: src/app/main/ui/workspace/plugins.cljs:265
+#: src/app/main/ui/workspace/plugins.cljs:266
msgid "workspace.plugins.permissions.comment-write"
msgstr "לקרוא ולשנות את ההערות שלך ולהגיב בשמך."
-#: src/app/main/ui/workspace/plugins.cljs:238
+#: src/app/main/ui/workspace/plugins.cljs:239
msgid "workspace.plugins.permissions.content-read"
msgstr "קריאת התוכן של קבצים שלמשתמשים יש גישה אליהם."
-#: src/app/main/ui/workspace/plugins.cljs:232
+#: src/app/main/ui/workspace/plugins.cljs:233
msgid "workspace.plugins.permissions.content-write"
msgstr "קריאה ושינוי התוכן של קבצים שלמשתמשים יש גישה אליהם."
-#: src/app/main/ui/workspace/plugins.cljs:325
+#: src/app/main/ui/workspace/plugins.cljs:326
msgid "workspace.plugins.permissions.disclaimer"
msgstr ""
"נא לשים לב שהתוסף הזה נוצר על ידי גוף חיצוני, לכן כדאי לוודא שהוא אמין לפי "
"שמעניקים לו גישה. פרטיות ואבטחת המידע שלך חשובים לנו. במקרה של ספק נא ליצור "
"קשר עם התמיכה."
-#: src/app/main/ui/workspace/plugins.cljs:258
+#: src/app/main/ui/workspace/plugins.cljs:259
msgid "workspace.plugins.permissions.library-read"
msgstr "קריאת הספריות והמשאבים שלך."
-#: src/app/main/ui/workspace/plugins.cljs:252
+#: src/app/main/ui/workspace/plugins.cljs:253
msgid "workspace.plugins.permissions.library-write"
msgstr "קריאה ושינוי הספריות והמשאבים שלך."
-#: src/app/main/ui/workspace/plugins.cljs:318
+#: src/app/main/ui/workspace/plugins.cljs:319
msgid "workspace.plugins.permissions.title"
msgstr "התוסף ‚%s’ רוצה לגשת אל:"
-#: src/app/main/ui/workspace/plugins.cljs:245
+#: src/app/main/ui/workspace/plugins.cljs:246
msgid "workspace.plugins.permissions.user-read"
msgstr "קריאת פרטי הפרופיל של המשתמש הנוכחי."
-#: src/app/main/ui/workspace/plugins.cljs:209
+#: src/app/main/ui/workspace/plugins.cljs:210
msgid "workspace.plugins.plugin-list-link"
msgstr "רשימת תוספים"
-#: src/app/main/ui/workspace/plugins.cljs:86
+#: src/app/main/ui/workspace/plugins.cljs:87
msgid "workspace.plugins.remove-plugin"
msgstr "הסרת תוסף"
-#: src/app/main/ui/workspace/plugins.cljs:178
+#: src/app/main/ui/workspace/plugins.cljs:179
msgid "workspace.plugins.search-placeholder"
msgstr "נא למלא כתובת תוסף"
@@ -6681,25 +6780,25 @@ msgstr "נא למלא כתובת תוסף"
msgid "workspace.plugins.success"
msgstr "התוסף נטען כראוי."
-#: src/app/main/ui/workspace/plugins.cljs:172
+#: src/app/main/ui/workspace/plugins.cljs:173
msgid "workspace.plugins.title"
msgstr "תוספים"
-#: src/app/main/ui/workspace/plugins.cljs:438
+#: src/app/main/ui/workspace/plugins.cljs:439
msgid "workspace.plugins.try-out.cancel"
msgstr "לא עכשיו"
-#: src/app/main/ui/workspace/plugins.cljs:431
+#: src/app/main/ui/workspace/plugins.cljs:432
msgid "workspace.plugins.try-out.message"
msgstr ""
"מעניין אותך להציץ? בחירה בזה תיפתח בטיוטה חדשה לצוות הנוכחי שלך. (אם לא, "
"תמיד אפשר למצוא אותו בתוספים המותקנים של כל קובץ שהוא.)"
-#: src/app/main/ui/workspace/plugins.cljs:427
+#: src/app/main/ui/workspace/plugins.cljs:428
msgid "workspace.plugins.try-out.title"
msgstr "תוסף ‚%s’ מותקן למשתמש שלך!"
-#: src/app/main/ui/workspace/plugins.cljs:444
+#: src/app/main/ui/workspace/plugins.cljs:445
msgid "workspace.plugins.try-out.try"
msgstr "התנסות בתוסף"
@@ -6711,15 +6810,15 @@ msgstr "הוספת פריסת flex"
msgid "workspace.shape.menu.add-grid"
msgstr "הוספת פריסת רשת"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1015, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1039
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1016, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1040
msgid "workspace.shape.menu.add-layout"
msgstr "הוספת פריסה"
-#: src/app/main/ui/workspace/context_menu.cljs:608, src/app/main/ui/workspace/sidebar/assets/common.cljs:505, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:941, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1161
+#: src/app/main/ui/workspace/context_menu.cljs:610, src/app/main/ui/workspace/sidebar/assets/common.cljs:514, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:961, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1113, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1195
msgid "workspace.shape.menu.add-variant"
msgstr "יצירת הגוון"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:509, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:990, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1082, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1198
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:518, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1010, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1115, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1233
msgid "workspace.shape.menu.add-variant-property"
msgstr "הוספת מאפיין חדש"
@@ -6731,11 +6830,11 @@ msgstr "הרחקה"
msgid "workspace.shape.menu.backward"
msgstr "הרחקה לאחור"
-#: src/app/main/ui/workspace/context_menu.cljs:615, src/app/main/ui/workspace/sidebar/assets/components.cljs:638, src/app/main/ui/workspace/sidebar/assets/groups.cljs:74, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1021
+#: src/app/main/ui/workspace/context_menu.cljs:617, src/app/main/ui/workspace/sidebar/assets/components.cljs:634, src/app/main/ui/workspace/sidebar/assets/groups.cljs:75, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1041
msgid "workspace.shape.menu.combine-as-variants"
msgstr "שילוב כהגוון"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:640
+#: src/app/main/ui/workspace/sidebar/assets/components.cljs:636
msgid "workspace.shape.menu.combine-as-variants-error"
msgstr "הרכיבים צריכים להיות באותו העמוד"
@@ -6771,7 +6870,7 @@ msgstr "העתקה כ־SVG"
msgid "workspace.shape.menu.copy-text"
msgstr "העתקה כטקסט"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "יצירת הסבר"
@@ -6779,11 +6878,11 @@ msgstr "יצירת הסבר"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "בחירה ללוח"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "יצירת רכיב"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "יצירת מגוון רכיבים"
@@ -6791,7 +6890,7 @@ msgstr "יצירת מגוון רכיבים"
msgid "workspace.shape.menu.cut"
msgstr "גזירה"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "מחיקה"
@@ -6799,15 +6898,15 @@ msgstr "מחיקה"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "מחיקת התחלת זרימה"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "ניתוק מופע"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "הפרדת מופעים"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "הבדל"
@@ -6819,11 +6918,11 @@ msgstr "שכפול"
msgid "workspace.shape.menu.edit"
msgstr "עריכה"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "החרגה"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "שיטוח"
@@ -6856,19 +6955,19 @@ msgstr "מעבר לקובץ הרכיב הראשי"
msgid "workspace.shape.menu.group"
msgstr "קבוצה"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "הסתרה"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "הצגת/הסתרת מנשק משתמש"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "הצלבה"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "נעילה"
@@ -6876,7 +6975,7 @@ msgstr "נעילה"
msgid "workspace.shape.menu.mask"
msgstr "מסכה"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "הדבקה"
@@ -6896,15 +6995,15 @@ msgstr "הסרת פריסת flex"
msgid "workspace.shape.menu.remove-grid"
msgstr "הסרת פריסת רשת"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1033
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1034
msgid "workspace.shape.menu.remove-layout"
msgstr "הסרת פריסה"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1222
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1257
msgid "workspace.shape.menu.remove-variant-property"
msgstr "הסרת מאפיין"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1221
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1256
msgid "workspace.shape.menu.remove-variant-property.last-property"
msgstr "להגוון חייב להיות מאפיין אחד לפחות"
@@ -6912,15 +7011,15 @@ msgstr "להגוון חייב להיות מאפיין אחד לפחות"
msgid "workspace.shape.menu.rename"
msgstr "שינוי שם"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "איפוס מעקפים"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "שחזור הרכיב הראשי"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:504
msgid "workspace.shape.menu.restore-variant"
msgstr "שחזור הגוון"
@@ -6928,15 +7027,15 @@ msgstr "שחזור הגוון"
msgid "workspace.shape.menu.select-layer"
msgstr "בחירת שכבה"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "הצגה"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "הצגה בלוח משאבים"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "הצגת הרכיב הראשי"
@@ -6949,6 +7048,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "הגדרה כתמונה ממוזערת"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "המרה לנתיב"
@@ -6956,11 +7056,11 @@ msgstr "המרה לנתיב"
msgid "workspace.shape.menu.ungroup"
msgstr "פירוק קבוצה"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "איחוד"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "שחרור נעילה"
@@ -6973,7 +7073,7 @@ msgstr "ביטול מסכה"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "עדכון הרכיבים הראשיים"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "עדכון הרכיב הראשי"
@@ -6985,11 +7085,11 @@ msgstr "צמצום סרגל צד"
msgid "workspace.sidebar.expand"
msgstr "הרחבת סרגל צד"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "היסטוריה"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "שכבות"
@@ -7029,11 +7129,11 @@ msgstr "טקסטים"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "מאפייני SVG יובאו"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "עמודים"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:248
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:249
msgid "workspace.sidebar.sitemap.add-page"
msgstr "הוספת עמוד"
@@ -7050,27 +7150,27 @@ msgstr "%s ערכות עיצוב פעילות"
msgid "workspace.tokens.add set"
msgstr "הוספת סדרה"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:329
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
msgid "workspace.tokens.add-new-theme"
msgstr "הוספת ערכת עיצוב חדשה"
-#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:60
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:62
msgid "workspace.tokens.add-set-to-group"
msgstr "הוספת סדרה לקבוצה הזאת"
-#: src/app/main/ui/workspace/tokens/management/group.cljs:113
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:197, src/app/main/ui/workspace/tokens/management/group.cljs:115
msgid "workspace.tokens.add-token"
msgstr "הוספת אסימון: %s"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:161
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:136
msgid "workspace.tokens.applied-to"
msgstr "חל על"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:315
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:316
msgid "workspace.tokens.axis"
msgstr "ציר"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:338
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:337
msgid "workspace.tokens.back-to-themes"
msgstr "חזרה לרשימת ערכות העיצוב"
@@ -7100,15 +7200,15 @@ msgstr "צבע"
msgid "workspace.tokens.create-new-theme"
msgstr "אפשר ליצור את ערכת העיצוב הראשונה שלך עכשיו."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:100, src/app/main/ui/workspace/tokens/themes.cljs:44
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:96, src/app/main/ui/workspace/tokens/themes.cljs:44
msgid "workspace.tokens.create-one"
msgstr "ליצור אחד."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:534
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:552
msgid "workspace.tokens.create-token"
msgstr "יצירת אסימון %s חדש"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:337
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:338
msgid "workspace.tokens.delete"
msgstr "מחיקת אסימון"
@@ -7116,19 +7216,19 @@ msgstr "מחיקת אסימון"
msgid "workspace.tokens.delete-theme-title"
msgstr "מחיקת ערכת עיצוב"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:334
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:335
msgid "workspace.tokens.duplicate"
msgstr "שכפול אסימון"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:201, src/app/main/data/workspace/tokens/library_edit.cljs:405
+#: src/app/main/data/workspace/tokens/library_edit.cljs:197, src/app/main/data/workspace/tokens/library_edit.cljs:415
msgid "workspace.tokens.duplicate-suffix"
msgstr "עותק"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:321
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:322
msgid "workspace.tokens.edit"
msgstr "עריכת אסימון"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:327
msgid "workspace.tokens.edit-theme-title"
msgstr "עריכת ערכת עיצוב"
@@ -7136,15 +7236,11 @@ msgstr "עריכת ערכת עיצוב"
msgid "workspace.tokens.edit-themes"
msgstr "עריכת ערכות עיצוב"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:533
-msgid "workspace.tokens.edit-token"
-msgstr "עריכת אסימון"
-
#: src/app/main/data/workspace/tokens/errors.cljs:41
msgid "workspace.tokens.empty-input"
msgstr "ערך האסימון לא יכול להישאר ריק"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:540
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:558
msgid "workspace.tokens.enter-token-name"
msgstr "נא למלא את שם האסימון %s"
@@ -7176,7 +7272,11 @@ msgstr "תצוגה מקדימה:"
msgid "workspace.tokens.export.single-file"
msgstr "קובץ בודד"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:229
+#: src/app/main/data/workspace/tokens/application.cljs:292
+msgid "workspace.tokens.font-variant-not-found"
+msgstr "שגיאה בהגדרת משקל/סגנון גופן. סגנון הגופן הזה לא קיים בגופן הנוכחי"
+
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:228
msgid "workspace.tokens.gaps"
msgstr "רווחים"
@@ -7194,7 +7294,7 @@ msgstr "שם קבוצה"
msgid "workspace.tokens.grouping-set-alert"
msgstr "אין עדיין תמיכה בקיבוץ סדרות אסימונים."
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:232
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:233
msgid "workspace.tokens.import-button-prefix"
msgstr "ייבוא %s"
@@ -7202,27 +7302,27 @@ msgstr "ייבוא %s"
msgid "workspace.tokens.import-error"
msgstr "שגיאת ייבוא:"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:272
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:273
msgid "workspace.tokens.import-menu-folder-option"
msgstr "תיקייה"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:271
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:272
msgid "workspace.tokens.import-menu-json-option"
msgstr "קובץ JSON יחיד"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:270
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:271
msgid "workspace.tokens.import-menu-zip-option"
msgstr "קובץ ZIP"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:240
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:241
msgid "workspace.tokens.import-multiple-files"
msgstr "בריבוי קבצים, שם / נתיב הקובץ הם השמות המוגדרים."
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:239
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:240
msgid "workspace.tokens.import-single-file"
msgstr "בקובץ JSON יחיד, המפתחות ברמה העליונה חייבים להיות שמות הסדרה של האסימונים."
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:236
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:237
msgid "workspace.tokens.import-tokens"
msgstr "ייבוא אסימונים"
@@ -7231,7 +7331,7 @@ msgstr "ייבוא אסימונים"
msgid "workspace.tokens.import-tooltip"
msgstr "ייבוא קובץ JSON ידרוס את כל האסימונים, הסדרות וערכות העיצוב הנוכחיים שלך"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:246
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:247
msgid "workspace.tokens.import-warning"
msgstr "ייבוא אסימונים ידרוס את כל האסימונים הנוכחיים, הסדרות וערכות העיצוב שלך."
@@ -7284,15 +7384,15 @@ msgstr "ערכת עיצוב"
msgid "workspace.tokens.label.theme-placeholder"
msgstr "הוספת ערכת עיצוב (למשל: בהירה)"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:221
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:220
msgid "workspace.tokens.margins"
msgstr "שוליים"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:257
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:256
msgid "workspace.tokens.max-size"
msgstr "גודל מרבי"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:251
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:250
msgid "workspace.tokens.min-size"
msgstr "גודל מזערי"
@@ -7300,7 +7400,7 @@ msgstr "גודל מזערי"
msgid "workspace.tokens.missing-references"
msgstr "חסרות הפניות אסימונים: "
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:148
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:123
msgid "workspace.tokens.more-options"
msgstr "אפשר לראות את האפשרויות בלחיצה על כפתור העכבר הימני"
@@ -7312,7 +7412,7 @@ msgstr "אין סדרות פעילות"
msgid "workspace.tokens.no-active-theme"
msgstr "אין ערכת עיצוב פעילה"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:76
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:72
msgid "workspace.tokens.no-permisions-set"
msgstr "נדרשות הרשאות עריכה כדי להפעיל / להשבית סדרות"
@@ -7320,11 +7420,11 @@ msgstr "נדרשות הרשאות עריכה כדי להפעיל / להשבית
msgid "workspace.tokens.no-permission-themes"
msgstr "נדרשות הרשאות עריכה כדי להשתמש בערכות עיצוב"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:480
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:483
msgid "workspace.tokens.no-sets-create"
msgstr "עדיין לא מוגדרות סדרות. נא ליצור אחת קודם."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:97, src/app/main/ui/workspace/tokens/sets/lists.cljs:103
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:93, src/app/main/ui/workspace/tokens/sets/lists.cljs:99
msgid "workspace.tokens.no-sets-yet"
msgstr "אין סדרות עדיין."
@@ -7352,12 +7452,11 @@ msgstr "ערך אסימון שגוי. הערך הפתור גדול מדי: %s"
msgid "workspace.tokens.opacity-range"
msgstr "שקיפות צריכה להיות בין 0 ל־100% או 0 ו־1 (כלומר 50% או 0.5)."
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:145
-#, fuzzy
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:120
msgid "workspace.tokens.original-value"
msgstr "ערך מקורי: %s"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:205
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:204
msgid "workspace.tokens.paddings"
msgstr "ריפודים"
@@ -7365,7 +7464,7 @@ msgstr "ריפודים"
msgid "workspace.tokens.radius"
msgstr "רדיוס"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:153
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:128
msgid "workspace.tokens.ref-not-valid"
msgstr "ההפניה לא תקפה או שאינה באף סדרה פעילה"
@@ -7374,8 +7473,7 @@ msgstr "ההפניה לא תקפה או שאינה באף סדרה פעילה"
msgid "workspace.tokens.reference-error"
msgstr "שגיאות הפניה: "
-#: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:39, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:44, src/app/main/ui/workspace/tokens/management/token_pill.cljs:146
-#, fuzzy
+#: 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:100, 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
msgid "workspace.tokens.resolved-value"
msgstr "ערך פתור: %s"
@@ -7383,7 +7481,7 @@ msgstr "ערך פתור: %s"
msgid "workspace.tokens.save-theme"
msgstr "שמירת ערכת עיצוב"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:209, src/app/main/ui/workspace/tokens/sets/lists.cljs:315
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:204, src/app/main/ui/workspace/tokens/sets/lists.cljs:309
msgid "workspace.tokens.select-set"
msgstr "בחירה ערכה."
@@ -7391,11 +7489,11 @@ msgstr "בחירה ערכה."
msgid "workspace.tokens.self-reference"
msgstr "לאסימון יש הפניה עצמית"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:64
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:60
msgid "workspace.tokens.set-edit-placeholder"
msgstr "נא למלא שם (להשתמש ב־‚/’ לקבוצות)"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:343
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:342
msgid "workspace.tokens.set-selection-theme"
msgstr "נא להגדיר באילו סדרות אסימונים להשתמש כחלק מאפשרות ערכת העיצוב הזאת:"
@@ -7416,7 +7514,7 @@ msgstr "כאן אפשר להגדיר את גודל הכתב הבסיסי, שמג
msgid "workspace.tokens.settings"
msgstr "הגדרות אסימונים"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:245
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:244
msgid "workspace.tokens.size"
msgstr "גודל"
@@ -7424,10 +7522,6 @@ msgstr "גודל"
msgid "workspace.tokens.stroke-width-range"
msgstr "עובי הקו חייב להיות גדול או שווה ל־0."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:871, src/app/main/ui/workspace/tokens/management/create/form.cljs:898
-msgid "workspace.tokens.text-decoration-value-enter"
-msgstr "נא למלא עיצוב טקסט: none | underline | strike-through"
-
#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:130
msgid "workspace.tokens.theme-name"
msgstr "ערכת עיצוב %s"
@@ -7442,28 +7536,27 @@ msgstr ""
msgid "workspace.tokens.themes-list"
msgstr "רשימת ערכות עיצוב"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:589, src/app/main/ui/workspace/tokens/management/create/form.cljs:590
-#, fuzzy
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:608, src/app/main/ui/workspace/tokens/management/create/form.cljs:609
msgid "workspace.tokens.token-description"
msgstr "תיאור"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:827
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:973
msgid "workspace.tokens.token-font-family-select"
msgstr "בחירת משפחת גופנים"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:834, src/app/main/ui/workspace/tokens/management/create/form.cljs:885
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1029
msgid "workspace.tokens.token-font-family-value"
msgstr "משפחת גופנים"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:833, src/app/main/ui/workspace/tokens/management/create/form.cljs:886
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:979, src/app/main/ui/workspace/tokens/management/create/form.cljs:1031
msgid "workspace.tokens.token-font-family-value-enter"
msgstr "משפחת גופנים או רשימת גופנים מופרדת בפסיקים (,)"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:539
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:83, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:109, src/app/main/ui/workspace/tokens/management/create/form.cljs:557
msgid "workspace.tokens.token-name"
msgstr "שם"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:66
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:69
msgid "workspace.tokens.token-name-validation-error"
msgstr ""
" הוא לא שם תקף לאסימון.\n"
@@ -7475,11 +7568,11 @@ msgstr ""
msgid "workspace.tokens.token-not-resolved"
msgstr "לא ניתן לפתור אסימון הפניה עם השם: %s"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:567
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:585
msgid "workspace.tokens.token-value"
msgstr "ערך"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:566, src/app/main/ui/workspace/tokens/management/create/form.cljs:883, src/app/main/ui/workspace/tokens/management/create/form.cljs:892
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:584, src/app/main/ui/workspace/tokens/management/create/form.cljs:1035
msgid "workspace.tokens.token-value-enter"
msgstr "נא למלא ערך או כינוי עם {alias}"
@@ -7487,7 +7580,7 @@ msgstr "נא למלא ערך או כינוי עם {alias}"
msgid "workspace.tokens.tokens-section-title"
msgstr "אסימונים - %s"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:125
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:121
msgid "workspace.tokens.tools"
msgstr "כלים"
@@ -7499,19 +7592,23 @@ msgstr "הייבוא הצליח. חלק מהאסימונים לא נכללו."
msgid "workspace.tokens.unknown-token-type-section"
msgstr "הסוג ‚%s’ לא נתמך (%s)\n"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:156
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:131
msgid "workspace.tokens.value-not-valid"
msgstr "הערך לא תקף"
+#: src/app/main/data/workspace/tokens/errors.cljs:69
+msgid "workspace.tokens.value-with-percent"
+msgstr "ערך שגוי: אסור %."
+
#: src/app/main/data/workspace/tokens/errors.cljs:65
msgid "workspace.tokens.value-with-units"
msgstr "ערך שגוי: אסור יחידות."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:563
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:581
msgid "workspace.tokens.warning-name-change"
msgstr "שינוי שם האסימון הזה יפגע בכל הפניה לשם הישן שלו."
-#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "משאבים"
@@ -7519,7 +7616,7 @@ msgstr "משאבים"
msgid "workspace.toolbar.color-palette"
msgstr "ערכת צבעים (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "הערות (%s)"
@@ -7730,19 +7827,19 @@ msgstr "פעולה על %s"
msgid "workspace.undo.title"
msgstr "היסטוריה"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "התעלמות"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "מידע נוסף"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "יש עדכונים בספריות המשותפות"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "עדכון"
@@ -7810,11 +7907,11 @@ msgstr "לשחזר את הגרסה הזאת?"
msgid "workspace.versions.snapshot-menu"
msgstr "פתיחת תפריט תמונת מצב"
-#: src/app/main/ui/workspace/sidebar.cljs:236
+#: src/app/main/ui/workspace/sidebar.cljs:237
msgid "workspace.versions.tab.actions"
msgstr "פעולות"
-#: src/app/main/ui/workspace/sidebar.cljs:234
+#: src/app/main/ui/workspace/sidebar.cljs:235
msgid "workspace.versions.tab.history"
msgstr "היסטוריה"
@@ -7838,3 +7935,208 @@ msgstr "גרסאות שנשמרו אוטומטית תישמרנה למשך %s י
#, unused
msgid "workspace.viewport.click-to-close-path"
msgstr "לחיצה תסגור את הנתיב"
+
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:98, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:105
+msgid "color-row.token-color-row.deleted-token"
+msgstr "האסימון הזה לא קיים או שנמחק."
+
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:35
+msgid "color-token.empty-state"
+msgstr ""
+"אין אסימוני צבע זמינים. נא לבדוק ערכות/ערכות עיצוב פעילות או להוסיף אסימונים "
+"חדשים."
+
+#: src/app/main/ui/dashboard/team.cljs:765
+msgid "dashboard.invitation-modal.delete"
+msgstr "תימחקנה ההזמנות שמיועדות אל:"
+
+#: src/app/main/ui/dashboard/team.cljs:766
+msgid "dashboard.invitation-modal.resend"
+msgstr "תישלחנה מחדש ההזמנות שמיועדות אל:"
+
+#: src/app/main/ui/dashboard/team.cljs:756
+msgid "dashboard.invitation-modal.title.delete-invitations"
+msgstr "מחיקת הזמנות"
+
+#: src/app/main/ui/dashboard/team.cljs:757
+msgid "dashboard.invitation-modal.title.resend-invitations"
+msgstr "שליחת הזמנות מחדש"
+
+#: src/app/main/ui/dashboard/team.cljs:949
+msgid "dashboard.order-invitations-by-role"
+msgstr "סידור לפי תפקיד"
+
+#: src/app/main/ui/dashboard/team.cljs:958
+msgid "dashboard.order-invitations-by-status"
+msgstr "סידור לפי מצב"
+
+#: src/app/main/ui/inspect/styles/property_detail_copiable.cljs:52
+msgid "inspect.tabs.styles.panel.copy-to-clipboard"
+msgstr "העתקה ללוח הגזירים"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:22
+msgid "inspect.tabs.styles.panel.geometry"
+msgstr "גודל ומקום"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:59, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:179
+msgid "inspect.tabs.styles.panel.toggle-style"
+msgstr "החלפת חשיפת הלוח %s"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:21
+msgid "inspect.tabs.styles.panel.token"
+msgstr "ערכות אסימונים וערכות עיצוב"
+
+#: src/app/main/ui/inspect/styles/panels/tokens_panel.cljs:26
+msgid "inspect.tabs.styles.panel.tokens.active-sets"
+msgstr "ערכות פעילות"
+
+#: src/app/main/ui/inspect/styles/panels/tokens_panel.cljs:21
+msgid "inspect.tabs.styles.panel.tokens.active-themes"
+msgstr "ערכות עיצוב פעילות"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:20
+msgid "inspect.tabs.styles.panel.variant"
+msgstr "מאפייני הגוון"
+
+#: src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:102, src/app/main/ui/inspect/styles/rows/properties_row.cljs:53
+msgid "inspect.tabs.styles.token.resolved-value"
+msgstr "ערך פתור:"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:1043
+msgid "labels.about-penpot"
+msgstr "על Penpot"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:26
+msgid "labels.blur"
+msgstr "טשטוש"
+
+#: src/app/main/ui/workspace/colorpicker.cljs:427
+msgid "labels.color"
+msgstr "צבע"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:1030
+msgid "labels.community-contributions"
+msgstr "קהילה ותרומות"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:23
+msgid "labels.fill"
+msgstr "מילוי"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:1019
+msgid "labels.help-learning"
+msgstr "עזרה ולמידה"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:28
+msgid "labels.layout"
+msgstr "פריסה"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:798
+msgid "labels.learning-center"
+msgstr "מרכז הלמידה"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:878
+msgid "labels.penpot-changelog"
+msgstr "יומן השינויים של Penpot"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:804
+msgid "labels.penpot-hub"
+msgstr "המרכז של Penpot"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:644
+msgid "labels.reference"
+msgstr "הפניה"
+
+#: src/app/main/ui/dashboard/team.cljs:788
+msgid "labels.resend"
+msgstr "שליחה מחדש"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:27
+msgid "labels.shadow"
+msgstr "צל"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:24, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:46
+msgid "labels.stroke"
+msgstr "קו מתאר"
+
+#: src/app/main/ui/inspect/right_sidebar.cljs:107, src/app/main/ui/inspect/styles.cljs:107
+msgid "labels.styles"
+msgstr "סגנונות"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:33
+msgid "labels.svg"
+msgstr "SVG"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:25
+msgid "labels.text"
+msgstr "טקסט"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1148
+msgid "labels.typography"
+msgstr "טיפוגרפיה"
+
+#: src/app/main/ui/inspect/right_sidebar.cljs:65, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:949, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:518
+msgid "labels.variant"
+msgstr "הגוון"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:872
+msgid "labels.version-notes"
+msgstr "הערות לגרסה %s"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:32
+msgid "labels.visibility"
+msgstr "חשיפה"
+
+#: src/app/main/ui/dashboard/team.cljs:825
+msgid "notifications.invitation-deleted"
+msgstr "ההזמנה נמחקה בהצלחה"
+
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+msgid "shortcuts.create-component-variant"
+msgstr "יצירת רכיב / הגוון"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:715
+msgid "workspace.tokens.use-reference"
+msgstr "להשתמש בהפניה"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:744
+msgid "workspace.tokens.reference-composite"
+msgstr "נא למלא כינוי לטיפוגרפיית אסימון"
+
+#: src/app/main/data/workspace/tokens/errors.cljs:93
+msgid "workspace.tokens.invalid-token-value-typography"
+msgstr "ערך שגוי: חייב להפנות לאסימון טיפוגרפיה מרוכב."
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:711
+msgid "workspace.tokens.individual-tokens"
+msgstr "להשתמש באסימונים עצמאיים"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:551
+msgid "workspace.tokens.edit-token"
+msgstr "עריכת אסימון %s"
+
+#: src/app/main/data/workspace/tokens/errors.cljs:97
+msgid "workspace.tokens.composite-line-height-needs-font-size"
+msgstr ""
+"גובה השורה תלוי בגודל הגופן. יש להוסיף גודל גופן כדי לקבל את הערך הפתור."
+
+#: src/app/main/ui/workspace/libraries.cljs:349
+msgid "workspace.libraries.connected-to"
+msgstr "מחובר אל"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:463
+msgid "workspace.component.switch.loop-error-multi"
+msgstr "לא ניתן לכבות/להדליק חלק מהעותקים. אי אפשר לקנן את הרכיבים בתוך עצמם."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:464
+msgid "workspace.component.swap.loop-error"
+msgstr "אי אפשר לקנן את הרכיבים בתוך עצמם."
+
+#: src/app/main/ui/workspace/colorpicker.cljs:431, src/app/main/ui/workspace/colorpicker.cljs:443
+msgid "workspace.colorpicker.color-tokens"
+msgstr "אסימוני צבע"
+
+#: src/app/main/ui/dashboard/subscription.cljs:156
+msgid "subscription.dashboard.unlimited-members-extra-editors-cta-text"
+msgstr ""
+"רק עורכים חדשים על פני הצוותים שבבעלותך מחושבים בחיובים העתידיים. 175$ בחודש "
+"בלי תוספות עדיין חלים על 25+ עורכים."
diff --git a/frontend/translations/hi.po b/frontend/translations/hi.po
index 275a057406..f6c5ccb8cf 100644
--- a/frontend/translations/hi.po
+++ b/frontend/translations/hi.po
@@ -1,15 +1,15 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-28 10:46+0000\n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
"Last-Translator: VKing9 \n"
-"Language-Team: Hindi "
-" \n"
+"Language-Team: Hindi \n"
"Language: hi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 5.13\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -175,7 +175,7 @@ msgstr "डिजाइन और प्रोटोटाइपिंग के
msgid "auth.terms-and-privacy-agreement"
msgstr "मैं [सेवा की शर्तें](%s) और [गोपनीयता नीति](%s) से सहमत हूँ।"
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "सेवा की शर्तें"
@@ -202,7 +202,7 @@ msgstr "...ब्रांडिंग, चित्रण, मार्के
msgid "comments.mentions.not-found"
msgstr "@%s के लिए कोई व्यक्ति नहीं मिला"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "प्रकाशित"
@@ -274,7 +274,7 @@ msgstr "प्रोटोटाइप्स साझा करें"
msgid "common.share-link.view-all"
msgstr "सभी चुनें"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "अप्रकाशित"
@@ -399,7 +399,7 @@ msgstr "टोकन की कोई समाप्ति तिथि नह
msgid "dashboard.add-file"
msgstr "फ़ाइल जोड़ें"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "साझी लाइब्रेरी के रूप में जोड़ें"
@@ -407,31 +407,31 @@ msgstr "साझी लाइब्रेरी के रूप में ज
msgid "dashboard.change-email"
msgstr "ईमेल बदलें"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(कॉपी)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "नई टीम बनाएं"
-#: src/app/main/ui/workspace/main_menu.cljs:631
+#: src/app/main/ui/workspace/main_menu.cljs:659
msgid "dashboard.create-version-menu"
msgstr "इस संस्करण को पिन करें"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "आपका पेनपॉट"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "टीम हटाएं"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "पेनपोट फ़ाइल (.penpot) डाउनलोड करें"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "मानक फ़ाइल डाउनलोड करें (.svg + .json)"
@@ -515,7 +515,7 @@ msgstr "शानदार चीज़ें बनाना शुरू क
msgid "dashboard.export-binary-multi"
msgstr "%s Penpot फ़ाइलें (.penpot) डाउनलोड करें"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "बोर्ड्स को PDF के रूप में निर्यात करें"
@@ -531,7 +531,7 @@ msgstr "पेनपोट %s फ़ाइलें निर्यात कर
msgid "dashboard.export-multiple.selected"
msgstr "%s में से %s तत्व चयनित किए गए"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "निर्यात"
@@ -744,11 +744,11 @@ msgstr "सर्वर पर डेटा अपलोड किया जा
msgid "dashboard.import.progress.upload-media"
msgstr "फ़ाइल अपलोड हो रही है: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "लोगों को आमंत्रित करें"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "टीम छोड़ें"
@@ -756,7 +756,7 @@ msgstr "टीम छोड़ें"
msgid "dashboard.libraries-and-templates"
msgstr "लाइब्रेरी और टेम्पलेट्स"
-#: src/app/main/ui/dashboard/templates.cljs:259
+#: src/app/main/ui/dashboard/templates.cljs:267
msgid "dashboard.libraries-and-templates.description"
msgstr ""
"यहाँ कुछ लाइब्रेरीज़ और टेम्पलेट्स हैं जिन्हें आप अपने प्रोजेक्ट में जोड़ "
@@ -766,7 +766,7 @@ msgstr ""
msgid "dashboard.libraries-and-templates.explore"
msgstr "इनमें से और अधिक एक्सप्लोर करें और जानें कि आप कैसे योगदान दे सकते हैं"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "टेम्पलेट आयात करने में समस्या आई। टेम्पलेट आयात नहीं किया गया।"
@@ -802,7 +802,7 @@ msgstr "दूसरी टीम में स्थानांतरित
msgid "dashboard.new-file"
msgstr "+ नई फ़ाइल"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "नई फ़ाइल"
@@ -810,7 +810,7 @@ msgstr "नई फ़ाइल"
msgid "dashboard.new-project"
msgstr "+ नया प्रोजेक्ट"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "नया प्रोजेक्ट"
@@ -818,11 +818,11 @@ msgstr "नया प्रोजेक्ट"
msgid "dashboard.no-matches-for"
msgstr "“%s“ के लिए कोई मेल नहीं मिला"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "पिन किए गए प्रोजेक्ट यहां दिखाई देंगे"
-#: src/app/main/ui/dashboard/comments.cljs:90
+#: src/app/main/ui/dashboard/comments.cljs:91
msgid "dashboard.notifications"
msgstr "सूचनाएँ"
@@ -834,7 +834,7 @@ msgstr "आपका ईमेल पता सफलतापूर्वक
msgid "dashboard.notifications.email-verified-successfully"
msgstr "आपका ईमेल पता सफलतापूर्वक सत्यापित हो गया है"
-#: src/app/main/data/profile.cljs:272
+#: src/app/main/data/profile.cljs:273
msgid "dashboard.notifications.notifications-saved"
msgstr "सूचना सेटिंग्स अपडेट कर दी गई हैं"
@@ -842,11 +842,11 @@ msgstr "सूचना सेटिंग्स अपडेट कर दी
msgid "dashboard.notifications.password-saved"
msgstr "पासवर्ड सफलतापूर्वक सहेजा गया!"
-#: src/app/main/ui/dashboard/comments.cljs:44
+#: src/app/main/ui/dashboard/comments.cljs:45
msgid "dashboard.notifications.view"
msgstr "सूचनाएं देखें"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s सदस्य"
@@ -878,7 +878,7 @@ msgstr "आप अब इस टीम के मालिक (Owner) बन ग
msgid "dashboard.permissions-change.viewer"
msgstr "आप अब इस टीम के दृश्यकर्ता (Viewer) बन गए हैं।"
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "पिन/अनपिन"
@@ -915,7 +915,7 @@ msgstr "अब आप टीम “%s“ का हिस्सा नहीं
msgid "dashboard.save-settings"
msgstr "सेटिंग्स सहेजें"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "खोजना…"
@@ -1007,7 +1007,7 @@ msgstr "सूचनाएं"
msgid "dashboard.show-all-files"
msgstr "सभी फ़ाइलें दिखाएँ"
-#: src/app/main/ui/workspace/main_menu.cljs:638
+#: src/app/main/ui/workspace/main_menu.cljs:666
msgid "dashboard.show-version-history"
msgstr "संस्करण इतिहास"
@@ -1031,7 +1031,7 @@ msgstr[1] "आपकी फ़ाइलों को सफलतापूर्
msgid "dashboard.success-duplicate-project"
msgstr "आपका प्रोजेक्ट सफलतापूर्वक डुप्लिकेट किया गया है"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "आपकी फ़ाइल सफलतापूर्वक स्थानांतरित कर दी गई है"
@@ -1043,15 +1043,15 @@ msgstr "आपकी फ़ाइलें सफलतापूर्वक स
msgid "dashboard.success-move-project"
msgstr "आपका प्रोजेक्ट सफलतापूर्वक स्थानांतरित कर दिया गया है"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "टीम जानकारी"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "टीम के सदस्यगण"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "टीम प्रोजेक्ट्स"
@@ -1071,7 +1071,7 @@ msgstr "खोज के परिणाम"
msgid "dashboard.type-something"
msgstr "परिणाम खोजने के लिए टाइप करें"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "लाइब्रेरी अप्रकाशित करें"
@@ -1079,50 +1079,50 @@ msgstr "लाइब्रेरी अप्रकाशित करें"
msgid "dashboard.update-settings"
msgstr "सेटिंग्स अपडेट करें"
-#: src/app/main/ui/dashboard/sidebar.cljs:856
+#: src/app/main/ui/dashboard/sidebar.cljs:976
msgid "dashboard.upgrade-plan.no-limits"
msgstr "रचनात्मकता पर कोई सीमा नहीं"
-#: src/app/main/ui/dashboard/sidebar.cljs:854
+#: src/app/main/ui/dashboard/sidebar.cljs:974
msgid "dashboard.upgrade-plan.penpot-free"
msgstr "पेनपॉट मुफ़्त"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "सक्रिय है"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "जब यह हुक ट्रिगर होगा, तो घटना विवरण भेजा जाएगा"
-#: src/app/main/ui/dashboard/team.cljs:982
+#: src/app/main/ui/dashboard/team.cljs:1160
msgid "dashboard.webhooks.cant-edit"
msgstr "आप केवल वेबहुक्स को हटा या संशोधित कर सकते हैं जो आपने बनाए हैं।"
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "सामग्री प्रकार"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "वेबहुक बनाएं"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "वेबहुक सफलतापूर्वक बनाया गया।"
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"वेबहुक्स एक सरल तरीका हैं जिससे अन्य वेबसाइटें और ऐप्स Penpot में कुछ "
"घटनाएँ होने पर सूचित हो सकें। हम आपके द्वारा दिए गए प्रत्येक URL पर POST "
"अनुरोध भेजेंगे।"
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "\"वेबहुक जोड़ें\" बटन दबाएं एक जोड़ने के लिए।"
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "अभी तक कोई वेबहुक नहीं बनाया गया है।"
@@ -1142,7 +1142,7 @@ msgstr "ईमेल"
msgid "dashboard.your-name"
msgstr "आपका नाम"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "आपका पेनपॉट"
@@ -1158,15 +1158,15 @@ msgstr "ध्यान दें"
msgid "ds.component-subtitle"
msgstr "अपडेट करने के लिए घटक:"
-#: src/app/main/ui/workspace/plugins.cljs:338, src/app/main/ui/workspace/plugins.cljs:392
+#: src/app/main/ui/workspace/plugins.cljs:339, src/app/main/ui/workspace/plugins.cljs:393
msgid "ds.confirm-allow"
msgstr "अनुमति देना"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "रद्द करें"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "ठीक है"
@@ -1228,7 +1228,7 @@ msgstr "हालाँकि पेनपॉट अब इस प्रका
msgid "errors.deprecated.contact.text"
msgstr "हमसे संपर्क करें"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:266
+#: src/app/main/data/workspace/tokens/library_edit.cljs:274
msgid "errors.drop-token-set-parent-to-child"
msgstr "किसी पैरेंट को उसकी स्वयं की चाइल्ड पथ पर ड्रॉप नहीं किया जा सकता।"
@@ -1248,11 +1248,11 @@ msgstr "आप अपना ईमेल पासवर्ड के रूप
msgid "errors.email-domain-not-allowed"
msgstr "डोमेन की अनुमति नहीं है"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "ईमेल «%s» के कई स्थायी बाउंस रिपोर्ट्स हैं।"
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr ""
"ईमेल «%s» को स्पैम के रूप में रिपोर्ट किया गया है या स्थायी रूप से बाउंस "
@@ -1269,11 +1269,6 @@ msgstr ""
msgid "errors.feature-not-supported"
msgstr "फीचर '%s' समर्थित नहीं है।"
-#: src/app/main/ui/auth/register.cljs, src/app/main/ui/dashboard/team_form.cljs, src/app/main/ui/onboarding/team_choice.cljs, src/app/main/ui/setti ngs/access_tokens.cljs, src/app/main/ui/settings/feedback.cljs, src/app/main/ui/settings/profile.cljs, src/app/main/ui/workspace/sidebar/assets.cljs
-#, unused
-msgid "errors.field-max-length"
-msgstr "इसमें अधिकतम 1 अक्षर होना चाहिए।"
-
#, unused
msgid "errors.field-min-length"
msgstr "इसमें कम से कम 1 अक्षर अवश्य होना चाहिए।"
@@ -1294,7 +1289,7 @@ msgstr ""
"आप खोलने का प्रयास कर रहे हैं। फ़ाइल खोलने से पहले '%s' के लिए माइग्रेशन "
"लागू करना आवश्यक है।"
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "कुछ ग़लत हुआ है।"
@@ -1344,11 +1339,11 @@ msgstr "यह आमंत्रण रद्द हो सकता है य
msgid "errors.ldap-disabled"
msgstr "LDAP प्रमाणीकरण अक्षम है।"
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "आप '%s' सीमा तक पहुंच चुके हैं। सहायता से संपर्क करें।"
-#: src/app/main/ui/dashboard/team.cljs:185, src/app/main/ui/onboarding/team_choice.cljs:101
+#: src/app/main/ui/dashboard/team.cljs:187, src/app/main/ui/dashboard/team.cljs:849, src/app/main/ui/onboarding/team_choice.cljs:101
msgid "errors.maximum-invitations-by-request-reached"
msgstr ""
"एक ही अनुरोध में निमंत्रित किए जा सकने वाले अधिकतम (%s) ईमेल की संख्या "
@@ -1366,7 +1361,7 @@ msgstr "ऐसा लगता है कि छवि की सामग्र
msgid "errors.media-type-not-allowed"
msgstr "ऐसा लगता है कि यह एक मान्य छवि नहीं है।"
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"जिस प्रोफाइल को आप निमंत्रित कर रहे हैं उसके ईमेल म्यूट किए गए हैं (स्पैम "
@@ -1394,7 +1389,7 @@ msgstr "क्लिपबोर्ड में अमान्य डेटा
msgid "errors.profile-blocked"
msgstr "प्रोफ़ाइल अवरुद्ध है"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr ""
"आपकी प्रोफ़ाइल के ईमेल म्यूट किए गए हैं (स्पैम रिपोर्ट्स या उच्च बाउंस के "
@@ -1412,21 +1407,21 @@ msgstr "SVG अमान्य या त्रुटिपूर्ण है"
msgid "errors.team-feature-mismatch"
msgstr "असंगत सुविधा '%s' का पता चला"
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr ""
"टीम छोड़ने के लिए सदस्यों की संख्या अपर्याप्त है, शायद आप इसे हटाना चाहते "
"हैं।"
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "जिस सदस्य को आप असाइन करने की कोशिश कर रहे हैं वह मौजूद नहीं है।"
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr "मालिक टीम नहीं छोड़ सकता, आपको मालिक की भूमिका पुनः असाइन करनी होगी।"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:153, src/app/main/data/workspace/tokens/library_edit.cljs:183
+#: src/app/main/data/workspace/tokens/library_edit.cljs:150, src/app/main/data/workspace/tokens/library_edit.cljs:180
msgid "errors.token-set-already-exists"
msgstr "एक समान नाम वाला सेट पहले से मौजूद है"
@@ -1435,11 +1430,11 @@ msgstr "एक समान नाम वाला सेट पहले से
msgid "errors.token-set-doesnt-exists"
msgstr "एक अज्ञात सेट को डुप्लिकेट नहीं किया जा सकता"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:265
+#: src/app/main/data/workspace/tokens/library_edit.cljs:273
msgid "errors.token-set-exists-on-drop"
msgstr "ड्रॉप पूरा नहीं किया जा सकता, उसी नाम का सेट पथ पर पहले से मौजूद है।"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:99
+#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:95
msgid "errors.token-theme-already-exists"
msgstr "समान नाम वाला थीम विकल्प मौजूद है"
@@ -1459,31 +1454,31 @@ msgstr "सत्यापन त्रुटि"
msgid "errors.version-not-supported"
msgstr "फ़ाइल का संस्करण संख्या असंगत है"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "कनेक्शन त्रुटि, URL उपलब्ध नहीं"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "URL सत्यापन पास नहीं करता है।"
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "अंतिम डिलीवरी सफल नहीं रही।"
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "SSL सत्यापन में त्रुटि हुई है।"
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "समय समाप्त"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "सत्यापन के दौरान अप्रत्याशित त्रुटि हुई"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "अप्रत्याशित स्थिति %s"
@@ -1547,7 +1542,7 @@ msgstr "एक त्रुटि हुई है"
msgid "inspect.attributes.blur"
msgstr "धुंधला"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "मान"
@@ -1555,15 +1550,15 @@ msgstr "मान"
msgid "inspect.attributes.color"
msgstr "रंग"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1571,7 +1566,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "भरना"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "स्रोत छवि डाउनलोड करें"
@@ -1665,63 +1660,66 @@ msgstr "ठोस"
msgid "inspect.attributes.stroke.width"
msgstr "चौड़ाई"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "टाइपोग्राफी"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "फ़ॉन्ट परिवार"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "फ़ॉन्ट आकार"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "फ़ॉन्ट शैली"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "फ़ॉन्ट वजन"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "अक्षरांतर"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "लाइन ऊँचाई"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "पाठ सजावट"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "कोई नहीं"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "रेखांकित (अंडरलाइन)"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "पाठ रूपांतरण"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "छोटे अक्षर"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "कोई नहीं"
-#: src/app/main/ui/inspect/attributes/text.cljs:159
+#: src/app/main/ui/inspect/attributes/text.cljs:152
msgid "inspect.attributes.typography.text-transform.unset"
msgstr "अप्रयुक्त करें"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "बड़े अक्षर"
@@ -1733,17 +1731,17 @@ msgstr "वेरिएंट गुणधर्म"
msgid "inspect.attributes.variants"
msgstr "वेरिएंट्स गुणधर्म"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr ""
"यदि आप डिजाइन निरीक्षण के बारे में अधिक जानना चाहते हैं, तो कृपया पेनपॉट के "
"हेल्प सेंटर पर जाएं"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "निरीक्षण के बारे में अधिक जानकारी"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr "उनके गुणधर्म और कोड का निरीक्षण करने के लिए कोई आकृति, बोर्ड या समूह चुनें"
@@ -1811,11 +1809,11 @@ msgstr "पाठ"
msgid "inspect.tabs.info"
msgstr "जानकारी"
-#: src/app/main/ui/dashboard/comments.cljs:95
+#: src/app/main/ui/dashboard/comments.cljs:96
msgid "label.mark-all-as-read"
msgstr "सभी को पढ़ा हुआ मार्क करें"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "शॉर्टकट्स"
@@ -1827,11 +1825,11 @@ msgstr "स्वीकार करें"
msgid "labels.access-tokens"
msgstr "एक्सेस टोकन"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "सक्रिय"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.add"
msgstr "जोड़ें"
@@ -1839,11 +1837,11 @@ msgstr "जोड़ें"
msgid "labels.add-custom-font"
msgstr "कस्टम फ़ॉन्ट जोड़ें"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.adding"
msgstr "जोड़ा जा रहा है..।"
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "प्रशासक"
@@ -1851,7 +1849,7 @@ msgstr "प्रशासक"
msgid "labels.adobe-xd"
msgstr "एडोब XD"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "सभी"
@@ -1874,7 +1872,7 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "खराब गेटवे"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "रद्द करें"
@@ -1882,11 +1880,11 @@ msgstr "रद्द करें"
msgid "labels.canva"
msgstr "Canva"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "बंद करें"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:186
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:181
msgid "labels.collapse"
msgstr "संकुचित करें"
@@ -1898,11 +1896,11 @@ msgstr "टिप्पणी"
msgid "labels.comment.mark-as-solved"
msgstr "समाधान के रूप में चिह्नित करें"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "टिप्पणियाँ"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "समुदाय"
@@ -1910,7 +1908,7 @@ msgstr "समुदाय"
msgid "labels.confirm-password"
msgstr "पासवर्ड पुष्टि करें"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "जारी रखें"
@@ -1926,11 +1924,11 @@ msgstr "आप पेनपॉट खाते के साथ जारी र
msgid "labels.copy"
msgstr "कापी"
-#: src/app/main/ui/inspect/attributes/common.cljs:118
+#: src/app/main/ui/inspect/attributes/common.cljs:99
msgid "labels.copy-color"
msgstr "रंग कॉपी करें"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "लिंक कॉपी"
@@ -1938,7 +1936,7 @@ msgstr "लिंक कॉपी"
msgid "labels.copyright"
msgstr "Kaleidos @2024"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "निर्माण"
@@ -1958,7 +1956,7 @@ msgstr "कस्टम फ़ॉन्ट्स"
msgid "labels.dashboard"
msgstr "डैशबोर्ड"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "मिटाना"
@@ -1970,7 +1968,7 @@ msgstr "टिप्पणी हटाएं"
msgid "labels.delete-comment-thread"
msgstr "थ्रेड हटाएं"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "निमंत्रण हटाएं"
@@ -1987,19 +1985,19 @@ msgstr "विकास"
msgid "labels.director"
msgstr "निदेशक"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "छोड़ना"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "ड्राफ्ट्स"
-#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:65
msgid "labels.duplicate"
msgstr "नक़ल"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "संपादन करें"
@@ -2007,11 +2005,11 @@ msgstr "संपादन करें"
msgid "labels.edit-file"
msgstr "फ़ाइल संपादित करें"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "संपादक"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:302
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:301
msgid "labels.empty"
msgstr "रिक्त"
@@ -2024,11 +2022,11 @@ msgstr "त्रुटि"
msgid "labels.event"
msgstr "कार्यक्रम"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "अवधि समाप्त"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "निर्यात"
@@ -2056,7 +2054,7 @@ msgstr "फ़ॉन्ट प्रदाता"
msgid "labels.font-variants"
msgstr "शैलियाँ"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "फ़ॉन्ट्स"
@@ -2070,11 +2068,11 @@ msgstr "CEO और संस्थापक"
msgid "labels.freelancer"
msgstr "फ्रीलांसर"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "GitHub रिपॉज़िटरी"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "प्रतिक्रिया दें"
@@ -2086,7 +2084,7 @@ msgstr "वापस जाएँ"
msgid "labels.graphic-design"
msgstr "ग्राफ़िक डिज़ाइन"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "सहायता केंद्र"
@@ -2094,15 +2092,15 @@ msgstr "सहायता केंद्र"
msgid "labels.hide"
msgstr "छुपाएँ"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "सुलझाए गए टिप्पणियाँ छुपाएँ"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:134
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:130
msgid "labels.import"
msgstr "आयात"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "निष्क्रिय"
@@ -2124,7 +2122,7 @@ msgstr "आंतरिक त्रुटि"
msgid "labels.invision"
msgstr "InVision(इंविज़न)"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "आमंत्रण"
@@ -2132,7 +2130,7 @@ msgstr "आमंत्रण"
msgid "labels.language"
msgstr "भाषा"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "लाइब्रेरी और टेम्पलेट्स"
@@ -2148,7 +2146,7 @@ msgstr "लॉग इन या साइन अप"
msgid "labels.login"
msgstr "लॉग इन करें"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "लॉग आउट"
@@ -2156,11 +2154,11 @@ msgstr "लॉग आउट"
msgid "labels.marketing"
msgstr "मार्केटिंग"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "सदस्य"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "सदस्यों"
@@ -2172,19 +2170,19 @@ msgstr "उल्लेख"
msgid "labels.new-password"
msgstr "नया पासवर्ड"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "अगला"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "आप पूरी तरह से अपडेट हैं! नई टिप्पणी सूचनाएँ यहाँ दिखेंगी।"
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "कोई लंबित निमंत्रण नहीं है।"
-#: src/app/main/ui/dashboard/team.cljs:761
+#: src/app/main/ui/dashboard/team.cljs:739
msgid "labels.no-invitations-gather-people"
msgstr "अपने लोगों को इकट्ठा करें और साथ मिलकर महान चीजें बनाएं।"
@@ -2201,7 +2199,7 @@ msgstr "उफ!"
msgid "labels.notifications"
msgstr "सूचनाएं"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "1 फ़ाइल"
@@ -2213,7 +2211,7 @@ msgid_plural "labels.num-of-frames"
msgstr[0] "1 बोर्ड"
msgstr[1] "%s बोर्ड्स"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "1 परियोजना"
@@ -2232,7 +2230,7 @@ msgstr "पुराना पासवर्ड"
msgid "labels.only-yours"
msgstr "केवल तुम्हारा"
-#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:309, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:338
+#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:310, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:339
msgid "labels.options"
msgstr "विकल्प"
@@ -2248,7 +2246,7 @@ msgstr "अन्य (स्पष्ट करें)"
msgid "labels.other-short"
msgstr "अन्य"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "स्वामी"
@@ -2256,7 +2254,7 @@ msgstr "स्वामी"
msgid "labels.password"
msgstr "पासवर्ड"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "लंबित"
@@ -2280,7 +2278,7 @@ msgstr "उत्पाद प्रबंधन"
msgid "labels.profile"
msgstr "प्रोफ़ाइल"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "परियोजनाओं"
@@ -2288,7 +2286,7 @@ msgstr "परियोजनाओं"
msgid "labels.refresh"
msgstr "ताज़ा करें"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "रिलीज़ नोट्स"
@@ -2302,11 +2300,11 @@ msgstr "फ़ाइल पुनः लोड करें"
msgid "labels.remove"
msgstr "हटाना"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "सदस्य निकालें"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "नाम बदलें"
@@ -2334,7 +2332,7 @@ msgstr "नया उत्तर"
msgid "labels.reply.thread"
msgstr "उत्तर"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "आमंत्रण पुनः भेजें"
@@ -2346,15 +2344,15 @@ msgstr "पुनः स्थापित करें"
msgid "labels.retry"
msgstr "पुन: प्रयास करें"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "भूमिका"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "सहेजें"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:715
+#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:730
msgid "labels.search"
msgstr "खोज"
@@ -2382,11 +2380,11 @@ msgstr "हमारे सिस्टम्स की निर्धारि
msgid "labels.service-unavailable.main-message"
msgstr "सेवा अनुपलब्ध है"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:79
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:75
msgid "labels.sets"
msgstr "सेट्स"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "सेटिंग्स"
@@ -2398,7 +2396,7 @@ msgstr "साझा करें"
msgid "labels.share-prototype"
msgstr "प्रोटोटाइप साझा करें"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "लाइब्रेरीज़"
@@ -2406,7 +2404,7 @@ msgstr "लाइब्रेरीज़"
msgid "labels.show"
msgstr "दिखाएँ"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "सभी टिप्पणियाँ दिखाएँ"
@@ -2414,11 +2412,11 @@ msgstr "सभी टिप्पणियाँ दिखाएँ"
msgid "labels.show-comments-list"
msgstr "टिप्पणियाँ सूची दिखाएँ"
-#: src/app/main/ui/workspace/comments.cljs:67, src/app/main/ui/workspace/comments.cljs:139
+#: src/app/main/ui/workspace/comments.cljs:68, src/app/main/ui/workspace/comments.cljs:140
msgid "labels.show-mentions"
msgstr "सिर्फ आपके उल्लेख दिखाएँ"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "सिर्फ आपकी टिप्पणियाँ दिखाएँ"
@@ -2430,7 +2428,7 @@ msgstr "रेखाचित्र"
msgid "labels.start"
msgstr "प्रारंभ"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "स्थिति"
@@ -2452,11 +2450,11 @@ msgstr "टीम के सदस्य"
msgid "labels.themes"
msgstr "थीम्स"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "ट्यूटोरियल्स"
-#: src/app/main/data/workspace/tokens/errors.cljs:93
+#: src/app/main/data/workspace/tokens/errors.cljs:101
msgid "labels.unknown-error"
msgstr "अज्ञात त्रुटि"
@@ -2484,15 +2482,15 @@ msgstr "कस्टम फ़ॉन्ट्स अपलोड करें"
msgid "labels.uploading"
msgstr "अपलोड हो रहा है…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "केवल देखें"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "दर्शक"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "वेबहुक"
@@ -2500,11 +2498,11 @@ msgstr "वेबहुक"
msgid "labels.write-new-comment"
msgstr "नई टिप्पणी लिखें"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(आप)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "आपका खाता"
@@ -2597,23 +2595,23 @@ msgstr ""
msgid "loader.tips.10.title"
msgstr "प्लगइन्स समर्थन"
-#: src/app/main/ui/workspace/colorpicker.cljs:449, src/app/main/ui/workspace/colorpicker.cljs:450, src/app/main/ui/workspace/colorpicker.cljs:452
+#: src/app/main/ui/workspace/colorpicker.cljs:486, src/app/main/ui/workspace/colorpicker.cljs:487, src/app/main/ui/workspace/colorpicker.cljs:489
msgid "media.choose-image"
msgstr "छवि चुनें"
-#: src/app/main/ui/workspace/colorpicker.cljs:244
+#: src/app/main/ui/workspace/colorpicker.cljs:256
msgid "media.gradient"
msgstr "ग्रेडिएंट"
-#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:44, src/app/main/ui/ds/utilities/swatch.cljs:57, src/app/main/ui/inspect/attributes/common.cljs:63, src/app/main/ui/workspace/colorpicker.cljs:246, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:251
+#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:45, src/app/main/ui/ds/utilities/swatch.cljs:58, src/app/main/ui/inspect/attributes/common.cljs:44, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:65, src/app/main/ui/workspace/colorpicker.cljs:258, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:395
msgid "media.image"
msgstr "छवि"
-#: src/app/main/ui/inspect/attributes/common.cljs:74
+#: src/app/main/ui/inspect/attributes/common.cljs:55
msgid "media.image.short"
msgstr "img"
-#: src/app/main/ui/workspace/colorpicker.cljs:442
+#: src/app/main/ui/workspace/colorpicker.cljs:479
msgid "media.keep-aspect-ratio"
msgstr "आकार अनुपात बनाए रखें"
@@ -2631,7 +2629,7 @@ msgstr "छवि लोड हो रही है…"
msgid "media.radial"
msgstr "विकिरणीय"
-#: src/app/main/ui/workspace/colorpicker.cljs:242
+#: src/app/main/ui/workspace/colorpicker.cljs:254
msgid "media.solid"
msgstr "ठोस"
@@ -2706,19 +2704,19 @@ msgstr "टोकन बनाएं"
msgid "modals.create-access-token.title"
msgstr "एक्सेस टोकन उत्पन्न करें"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "वेबहुक बनाएं"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "वेबहुक बनाएं"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "पेलोड URL"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://example.com/postreceive"
@@ -2764,11 +2762,11 @@ msgstr ""
msgid "modals.delete-comment-thread.title"
msgstr "बातचीत हटाएँ"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "क्या आप वाकई इस एनोटेशन को हटाना चाहते हैं?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "एनोटेशन हटाएँ"
@@ -2816,11 +2814,11 @@ msgstr ""
msgid "modals.delete-font.title"
msgstr "फ़ॉन्ट हटाया जा रहा है"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "क्या आप वाकई इस पृष्ठ को हटाना चाहते हैं?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "पृष्ठ हटाएँ"
@@ -2866,29 +2864,29 @@ msgid_plural "modals.delete-shared-confirm.title"
msgstr[0] "फ़ाइल हटाई जा रही है"
msgstr[1] "फ़ाइलें हटाई जा रही हैं"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "टीम हटाएँ"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"क्या आप वाकई इस टीम को हटाना चाहते हैं? टीम से जुड़ी सभी परियोजनाएँ और "
"फ़ाइलें स्थायी रूप से हटा दी जाएंगी।"
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "टीम हटाई जा रही है"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "सदस्य हटाएँ"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "क्या आप वाकई इस सदस्य को टीम से हटाना चाहते हैं?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "टीम सदस्य हटाएँ"
@@ -2902,55 +2900,55 @@ msgstr[1] ""
"उन फ़ाइलों में पहले से उपयोग किए गए एसेट्स वहीं रहेंगे (कोई डिज़ाइन टूटेगा "
"नहीं)।"
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "वेबहुक हटाएँ"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "क्या आप वाकई इस वेबहुक को हटाना चाहते हैं?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "वेबहुक हटाया जा रहा है"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "वेबहुक संपादित करें"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "वेबहुक संपादित करें"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "निमंत्रण भेजना"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "ईमेल, अल्पविराम से अलग किए गए"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr "कुछ ईमेल वर्तमान टीम के सदस्यों के हैं। उनकी निमंत्रण नहीं भेजी जाएगी।"
-#: src/app/main/ui/dashboard/team.cljs:220
+#: src/app/main/ui/dashboard/team.cljs:222
msgid "modals.invite-team-member.text"
msgstr ""
"आप टीम के सदस्यों को आमंत्रित कर सकते हैं ताकि वे इस फ़ाइल और सभी टीम "
"फ़ाइलों तक पहुंच सकें।"
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "सदस्यों को टीम में आमंत्रित करें"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"चूंकि आप इस टीम के एकमात्र सदस्य हैं, टीम अपने परियोजनाओं और फ़ाइलों के साथ "
"हटा दी जाएगी।"
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "क्या आप वाकई %s टीम छोड़ना चाहते हैं?"
@@ -2978,15 +2976,15 @@ msgstr "पदोन्नति के लिए सदस्य चुने
msgid "modals.leave-and-reassign.title"
msgstr "छोड़ने से पहले"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "टीम छोड़ें"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "क्या आप सचमुच इस टीम को छोड़ना चाहते हैं?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "टीम छोड़ रहे हैं"
@@ -3008,39 +3006,39 @@ msgid_plural "modals.move-shared-confirm.title"
msgstr[0] "लाइब्रेरी स्थानांतरित करें"
msgstr[1] "लाइब्रेरियाँ स्थानांतरित करें"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "झटका मात्रा"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "स्थानांतरण स्वामित्व"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"यदि आप स्वामित्व स्थानांतरित करते हैं, तो आपकी भूमिका एडमिन में बदल जाएगी, "
"और इस टीम पर कुछ अनुमतियाँ आप खो देंगे। "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr ""
"आप इस टीम के वर्तमान स्वामी हैं। क्या आप वाकई %s को टीम का नया स्वामी बनाना "
"चाहते हैं?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "नई टीम स्वामी"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "प्रकाशित"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "आपकी लाइब्रेरी खाली है। क्या आप वाकई इसे प्रकाशित करना चाहते हैं?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "खाली लाइब्रेरी प्रकाशित करें"
@@ -3095,21 +3093,21 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "साझा लाइब्रेरी में घटकों को अद्यतन करें"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "अद्यतन"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "रद्द"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"आप साझा लाइब्रेरी में एक घटक को अपडेट करने वाले हैं। इससे अन्य फ़ाइलों पर "
"असर पड़ सकता है जो इसका उपयोग करती हैं।"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "साझा लाइब्रेरी में एक घटक अपडेट करें"
@@ -3221,11 +3219,11 @@ msgstr "रखरखाव विराम: हम 5 मिनट के भी
msgid "notifications.by-code.upgrade-version"
msgstr "एक नया संस्करण उपलब्ध है, कृपया पृष्ठ को रिफ्रेश करें"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "आमंत्रण सफलतापूर्वक भेज दिया गया"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "आमंत्रण लिंक कॉपी किया गया"
@@ -3379,7 +3377,7 @@ msgstr ""
"सभी को शामिल करना याद रखें — डेवलपर्स, डिज़ाइनर्स, मैनेजर्स... विविधता से "
"शक्ति बढ़ती है 🙂"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "भूमिका के साथ आमंत्रित करें:"
@@ -3597,193 +3595,193 @@ msgstr "पेनपॉट"
msgid "profile.recovery.go-to-login"
msgstr "लॉगइन पर जाएं"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "अलग करें"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "मिश्रित"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:283
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:423
msgid "settings.remove-color"
msgstr "रंग हटाओ"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:288
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:428
msgid "settings.select-this-color"
msgstr "इस शैली का उपयोग करके आइटम चुनें"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "बुनियादी बातें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "डैशबोर्ड"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "दर्शक"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "कार्यस्थान"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "संतुलन"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "संपादन"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "सार्वभौमिक"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "सार्वभौमिक"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "मुख्य मेन्यू"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "परतें संशोधित करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "मार्गदर्शन"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "मार्गदर्शन"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "मार्गदर्शन"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "पैनल्स"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "रास्ते"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "आकृतियाँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "टेक्स्ट"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "औजार"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "ज़ूम"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "ज़ूम"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "टिप्पणियाँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "नोड जोड़ें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "नीचे संरेखित करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "मध्य में संरेखित करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "क्षैतिज रूप से केंद्र संरेखित करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "पूर्ण संरेखण करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "बाएँ संरेखित करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "दाएँ संरेखित करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "ऊपर संरेखित करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "ऊर्ध्वाधर रूप से केंद्र संरेखित करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "चयन से बोर्ड बनाएं"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "बोल्ड टॉगल करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "बूलियन अंतर"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "बूलियन बहिष्कृत"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "बूलियन चौराहा"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "बूलियन संघ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "पीछे भेजो"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "पीछे भेजें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "आगे लाओ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "सामने लाओ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "पूर्ववत साफ़ करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "कापी"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
msgid "shortcuts.copy-link"
msgstr "लिंक कॉपी करें"
@@ -3792,287 +3790,271 @@ msgstr "लिंक कॉपी करें"
msgid "shortcuts.copy-props"
msgstr "गुण कॉपी करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "नया निर्माण"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "काटना"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "ज़ूम आउट"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "मिटाना"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "नोड हटाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "घटक अलग करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "वक्र"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "अंडाकार"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "बोर्ड"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "पथ बनाएं"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "पथ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "आयत"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "पाठ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "नकल करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "रद्द करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "आकृतियाँ निर्यात करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "सभी को फिट करने के लिए ज़ूम करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "क्षैतिज फ्लिप"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "लंबवत पलटें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "फ़ॉन्ट का आकार घटाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "फ़ॉन्ट आकार बढ़ाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "ड्राफ्ट पर जाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "साझा लाइब्रेरीज़ पर जाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "खोज"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "समूह"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "क्षैतिज रूप से वितरित करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "UI दिखाएँ/छिपाएँ"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "ज़ूम इन करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "चित्र डालें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "इटैलिक टॉगल करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "नोड्स जोड़ें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
-msgid "shortcuts.letter-spacing-dec"
-msgstr "अक्षर अंतर घटाएँ"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "अक्षर अंतर बढ़ाएँ"
-
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
-msgid "shortcuts.line-height-dec"
-msgstr "रेखा की ऊंचाई घटाएँ"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
-msgid "shortcuts.line-height-inc"
-msgstr "लाइन की ऊंचाई बढ़ाएँ"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.line-through"
msgstr "लाइन को टॉगल करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "कोना बनाओ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "वक्र बनाओ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "मास्क"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "नोड्स को जोड़ें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "हिलाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "तेज़ी से नीचे ले जाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "तेज़ी से बाएँ ले जाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "तेज़ी से दाएँ ले जाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "तेज़ी से ऊपर ले जाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "नोड को स्थानांतरित करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "नीचे ले जाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "बाएँ ले जाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "दाएँ ले जाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "ऊपर ले जाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "अगला बोर्ड"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "कोई शॉर्टकट नहीं मिला"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "अपारदर्शिता 100% करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "अपारदर्शिता 10% करे"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "अपारदर्शिता 20% करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "अपारदर्शिता 30% करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "अपारदर्शिता 40% करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "अपारदर्शिता 50% करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "अपारदर्शिता 60% करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "अपारदर्शिता 70% करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "अपारदर्शिता 80% करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "अपारदर्शिता 90% करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "रंग चयनकर्ता"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "दर्शक टिप्पणी अनुभाग पर जाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "डैशबोर्ड पर जाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "दर्शक निरीक्षण अनुभाग पर जाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "दर्शक इंटरैक्शन अनुभाग पर जाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "दर्शक इंटरैक्शन अनुभाग में जाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "वर्कस्पेस पर जाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " अथवा "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "चिपकाएँ"
@@ -4086,191 +4068,191 @@ msgstr "गुण चिपकाएँ"
msgid "shortcuts.plugins"
msgstr "प्लगइन्स प्रबंधक"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "पिछला बोर्ड"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "फिर से करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
msgid "shortcuts.rename"
msgstr "नाम बदलें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "ज़ूम रीसेट करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
msgid "shortcuts.scale"
msgstr "आकार बदलना"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "शॉर्टकट खोजें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "सभी चुनें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
msgid "shortcuts.select-next"
msgstr "अगली परत चुनें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
msgid "shortcuts.select-parent-layer"
msgstr "मुख्य परत चुनें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
msgid "shortcuts.select-prev"
msgstr "पिछली परत का चयन करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "अलग नोड्स"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "पिक्सेल ग्रिड दिखाएँ / छिपाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "शॉर्टकट दिखाएँ / छुपाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "नोड्स से चिपकाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "पिक्सेल ग्रिड से चिपकाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "संपादन शुरू करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "मापन शुरू करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "मापन बंद करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "थंबनेल सेट करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "कीबोर्ड शॉर्टकट्स"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "डायनामिक अलाइनमेंट टॉगल करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "एसेट्स टॉगल करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "रंग पैलेट टॉगल करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "फ़ोकस मोड टॉगल करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "संपूर्ण स्क्रीन टॉगल करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
msgid "shortcuts.toggle-guides"
msgstr "गाइड दिखाएँ/छिपाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "इतिहास टॉगल करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "लेयर्स टॉगल करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "फ्लेक्स लेआउट जोड़ें / हटाएं"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
msgid "shortcuts.toggle-layout-grid"
msgstr "ग्रिड लेआउट जोड़ें/हटाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "ताला लगाएं / ताला खोलें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "अनुपात लॉक करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
msgid "shortcuts.toggle-rulers"
msgstr "रूलर दिखाएँ / छिपाएँ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
msgid "shortcuts.toggle-snap-guides"
msgstr "गाइड्स से चिपकाएं"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
msgid "shortcuts.toggle-snap-ruler-guide"
msgstr "रूलर गाइड्स से चिपकाएं"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "टेक्स्ट पैलेट चालू/बंद करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
msgid "shortcuts.toggle-theme"
msgstr "थीम बदलें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "दिखाएं / छिपाएं"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "ज़ूम शैली टॉगल करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "रेखांकन चालू/बंद करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "पूर्ववत"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "असमूहीकृत"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "मास्क हटाएं"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "ऊर्ध्वाधर समान वितरण करें"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "ज़ूम लेंस घटाएं"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "ज़ूम लेंस बढ़ाएं"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "चयनित पर ज़ूम करें"
@@ -4320,7 +4302,7 @@ msgstr "आपकी सदस्यता:"
msgid "subscription.dashboard.team-plan"
msgstr "टीम योजना"
-#: src/app/main/ui/dashboard/sidebar.cljs:858
+#: src/app/main/ui/dashboard/sidebar.cljs:978
msgid "subscription.dashboard.upgrade-plan.power-up"
msgstr "शक्तिप्रापक"
@@ -4442,7 +4424,7 @@ msgstr "असीमित (परीक्षण)"
msgid "subscription.settings.unlimited.bill"
msgstr "मासिक बिल की सीमा"
-#: src/app/main/ui/dashboard/subscription.cljs:147, src/app/main/ui/workspace/main_menu.cljs:933
+#: src/app/main/ui/dashboard/subscription.cljs:147, src/app/main/ui/workspace/main_menu.cljs:961
msgid "subscription.workspace.header.menu.option.power-up"
msgstr "अपनी योजना को सशक्त बनाएं"
@@ -4498,19 +4480,19 @@ msgstr "पासवर्ड - पेनपॉट"
msgid "title.settings.profile"
msgstr "प्रोफ़ाइल - पेनपॉट"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "निमंत्रण - %s - पेनपॉट"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "सदस्य - %s - पेनपॉट"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "सेटिंग्स - %s - पेनपॉट"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "वेबहुक - %s - पेनपोट"
@@ -4582,43 +4564,43 @@ msgstr "क्लिक पर इंटरैक्शन दिखाएं"
msgid "viewer.header.sitemap"
msgstr "साइटमैप"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "पिछली डिलीवरी सफल रही।"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "क्षैतिज केंद्र पर संरेखित करें (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "क्षैतिज अंतराल वितरित करें (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "बाएँ संरेखित करें (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "दाएँ संरेखित करें (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "नीचे संरेखित करें (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "ऊर्ध्वाधर केंद्र पर संरेखित करें (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "ऊर्ध्वाधर अंतराल वितरित करें (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "ऊपर संरेखित करें (%s)"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:163
+#: src/app/main/ui/workspace/sidebar/assets.cljs:172
msgid "workspace.assets.add-library"
msgstr "लाइब्रेरी जोड़ें"
@@ -4627,19 +4609,19 @@ msgstr "लाइब्रेरी जोड़ें"
msgid "workspace.assets.assets"
msgstr "एसेट्स"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "सभी एसेट्स"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "रंगों"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:493
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:497
msgid "workspace.assets.colors.add-color"
msgstr "रंग जोड़ें"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "घटकों"
@@ -4647,23 +4629,23 @@ msgstr "घटकों"
msgid "workspace.assets.components.add-component"
msgstr "घटक जोड़ें"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:176, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:535
+#: src/app/main/ui/workspace/sidebar/assets/components.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:547
msgid "workspace.assets.components.num-variants"
msgstr "%s प्रकार"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "एक समूह बनाएं"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr "आपके आइटम अपने आप “ग्रुप नाम / आइटम नाम” के रूप में नामित किए जाएंगे"
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "मिटाना"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "नकल करें"
@@ -4671,11 +4653,11 @@ msgstr "नकल करें"
msgid "workspace.assets.duplicate-main"
msgstr "मुख्य की नकल करें"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "संपादन"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:177
+#: src/app/main/ui/workspace/sidebar/assets.cljs:186
msgid "workspace.assets.filter"
msgstr "फिल्टर"
@@ -4684,27 +4666,27 @@ msgstr "फिल्टर"
msgid "workspace.assets.graphics"
msgstr "ग्राफ़िक्स"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:576
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:190, src/app/main/ui/workspace/sidebar/assets/components.cljs:576
msgid "workspace.assets.grid-view"
msgstr "जाल दृश्य"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "समूह"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "समूह नाम"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:572
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:191, src/app/main/ui/workspace/sidebar/assets/components.cljs:572
msgid "workspace.assets.list-view"
msgstr "सूची दृश्य"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "स्थानीय लाइब्रेरी"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:168
+#: src/app/main/ui/workspace/sidebar/assets.cljs:177
msgid "workspace.assets.manage-library"
msgstr "लाइब्रेरी मैनेज करें"
@@ -4716,15 +4698,15 @@ msgstr "कोई एसेट्स नहीं मिले"
msgid "workspace.assets.open-library"
msgstr "लाइब्रेरी फ़ाइल खोलें"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "नाम बदलें"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "समूह का नाम बदलें"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "एसेट्स खोजें"
@@ -4740,21 +4722,21 @@ msgstr[1] "%s आइटम चुने गए हैं"
msgid "workspace.assets.shared-library"
msgstr "साझा लाइब्रेरी"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:237
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:235
msgid "workspace.assets.sidebar.components"
msgid_plural "workspace.assets.sidebar.components"
msgstr[0] "1 घटक"
msgstr[1] "%s घटकों"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:193
+#: src/app/main/ui/workspace/sidebar/assets.cljs:204
msgid "workspace.assets.sort"
msgstr "क्रमबद्ध"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "टाइपोग्राफ़ी"
-#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:404
+#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:405
msgid "workspace.assets.typography.add-typography"
msgstr "टाइपोग्राफी जोड़ें"
@@ -4779,7 +4761,7 @@ msgstr "पत्र अंतराल"
msgid "workspace.assets.typography.line-height"
msgstr "रेखा ऊँचाई"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -4791,59 +4773,59 @@ msgstr "पाठ शैलियाँ"
msgid "workspace.assets.typography.text-transform"
msgstr "पाठ रूपांतरण"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "असमूहीकृत"
-#: src/app/main/ui/workspace/context_menu.cljs:791
+#: src/app/main/ui/workspace/context_menu.cljs:794
msgid "workspace.context-menu.grid-cells.area"
msgstr "क्षेत्र बनाएं"
-#: src/app/main/ui/workspace/context_menu.cljs:794
+#: src/app/main/ui/workspace/context_menu.cljs:797
msgid "workspace.context-menu.grid-cells.create-board"
msgstr "बोर्ड बनाएं"
-#: src/app/main/ui/workspace/context_menu.cljs:786
+#: src/app/main/ui/workspace/context_menu.cljs:789
msgid "workspace.context-menu.grid-cells.merge"
msgstr "कोष्ठक जोड़ें"
-#: src/app/main/ui/workspace/context_menu.cljs:749
+#: src/app/main/ui/workspace/context_menu.cljs:752
msgid "workspace.context-menu.grid-track.column.add-after"
msgstr "दाईं ओर 1 कॉलम जोड़ें"
-#: src/app/main/ui/workspace/context_menu.cljs:748
+#: src/app/main/ui/workspace/context_menu.cljs:751
msgid "workspace.context-menu.grid-track.column.add-before"
msgstr "बाईं ओर 1 कॉलम जोड़ें"
-#: src/app/main/ui/workspace/context_menu.cljs:750
+#: src/app/main/ui/workspace/context_menu.cljs:753
msgid "workspace.context-menu.grid-track.column.delete"
msgstr "कॉलम हटाएँ"
-#: src/app/main/ui/workspace/context_menu.cljs:751
+#: src/app/main/ui/workspace/context_menu.cljs:754
msgid "workspace.context-menu.grid-track.column.delete-shapes"
msgstr "स्तंभ और आकृतियाँ हटाएँ"
-#: src/app/main/ui/workspace/context_menu.cljs:747
+#: src/app/main/ui/workspace/context_menu.cljs:750
msgid "workspace.context-menu.grid-track.column.duplicate"
msgstr "डुप्लिकेट कॉलम"
-#: src/app/main/ui/workspace/context_menu.cljs:756
+#: src/app/main/ui/workspace/context_menu.cljs:759
msgid "workspace.context-menu.grid-track.row.add-after"
msgstr "नीचे 1 पंक्ति जोड़ें"
-#: src/app/main/ui/workspace/context_menu.cljs:755
+#: src/app/main/ui/workspace/context_menu.cljs:758
msgid "workspace.context-menu.grid-track.row.add-before"
msgstr "ऊपर 1 पंक्ति जोड़ें"
-#: src/app/main/ui/workspace/context_menu.cljs:757
+#: src/app/main/ui/workspace/context_menu.cljs:760
msgid "workspace.context-menu.grid-track.row.delete"
msgstr "पंक्ति हटाएँ"
-#: src/app/main/ui/workspace/context_menu.cljs:758
+#: src/app/main/ui/workspace/context_menu.cljs:761
msgid "workspace.context-menu.grid-track.row.delete-shapes"
msgstr "पंक्ति और आकृतियाँ हटाएँ"
-#: src/app/main/ui/workspace/context_menu.cljs:754
+#: src/app/main/ui/workspace/context_menu.cljs:757
msgid "workspace.context-menu.grid-track.row.duplicate"
msgstr "डुप्लिकेट पंक्ति"
@@ -4851,7 +4833,7 @@ msgstr "डुप्लिकेट पंक्ति"
msgid "workspace.focus.focus-mode"
msgstr "फोकस मोड"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "ध्यान हटाएँ"
@@ -4871,11 +4853,11 @@ msgstr "रैखिक ग्रेडिएंट"
msgid "workspace.gradients.radial"
msgstr "वृत्तीय ग्रेडिएंट"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "गतिशील संरेखण अक्षम करें"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "अनुपातिक स्केल अक्षम करें"
@@ -4884,23 +4866,23 @@ msgstr "अनुपातिक स्केल अक्षम करें"
msgid "workspace.header.menu.disable-scale-text"
msgstr "स्केल टेक्स्ट अक्षम करें"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "मार्गदर्शकों से स्नैप बंद करें"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "पिक्सेल से स्नैप अक्षम करें"
-#: src/app/main/ui/workspace/main_menu.cljs:215
+#: src/app/main/ui/workspace/main_menu.cljs:243
msgid "workspace.header.menu.disable-snap-ruler-guides"
msgstr "रूलर गाइड से स्नैप अक्षम करें"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "डायनामिक संरेखण सक्षम करें"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "आनुपातिक पैमाना सक्षम करें"
@@ -4909,51 +4891,51 @@ msgstr "आनुपातिक पैमाना सक्षम करें
msgid "workspace.header.menu.enable-scale-text"
msgstr "स्केल टेक्स्ट सक्षम करें"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "गाइड्स से स्नैप"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "पिक्सेल पर स्नैप सक्षम करें"
-#: src/app/main/ui/workspace/main_menu.cljs:216
+#: src/app/main/ui/workspace/main_menu.cljs:244
msgid "workspace.header.menu.enable-snap-ruler-guides"
msgstr "रूलर गाइड पर स्नैप करें"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "बोर्ड के नाम छिपाएँ"
-#: src/app/main/ui/workspace/main_menu.cljs:348
+#: src/app/main/ui/workspace/main_menu.cljs:376
msgid "workspace.header.menu.hide-guides"
msgstr "गाइड छिपाएँ"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "रंग पैलेट छिपाएँ"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "पिक्सेल ग्रिड छिपाएँ"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "रूलर छुपाएं"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "फ़ॉन्ट पैलेट छुपाएं"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "संपादन"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "फ़ाइल"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "सहायता और जानकारी"
@@ -4962,63 +4944,63 @@ msgstr "सहायता और जानकारी"
msgid "workspace.header.menu.option.power-up"
msgstr "अपनी योजना को सशक्त बनाएं"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "प्राथमिकताएँ"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "देखना"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "फिर से करें"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "सबका चयन करें"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "बोर्डों के नाम दिखाएँ"
-#: src/app/main/ui/workspace/main_menu.cljs:349
+#: src/app/main/ui/workspace/main_menu.cljs:377
msgid "workspace.header.menu.show-guides"
msgstr "गाइड दिखाएँ"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "रंग पैलेट दिखाएँ"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "पिक्सेल ग्रिड दिखाएँ"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "रूलर दिखाएं"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "फ़ॉन्ट पैलेट दिखाएं"
-#: src/app/main/ui/workspace/main_menu.cljs:288
+#: src/app/main/ui/workspace/main_menu.cljs:316
msgid "workspace.header.menu.toggle-dark-theme"
msgstr "डार्क थीम पर स्विच करें"
-#: src/app/main/ui/workspace/main_menu.cljs:286, src/app/main/ui/workspace/main_menu.cljs:289
+#: src/app/main/ui/workspace/main_menu.cljs:314, src/app/main/ui/workspace/main_menu.cljs:317
msgid "workspace.header.menu.toggle-light-theme"
msgstr "लाइट थीम पर स्विच करें"
-#: src/app/main/ui/workspace/main_menu.cljs:287
+#: src/app/main/ui/workspace/main_menu.cljs:315
msgid "workspace.header.menu.toggle-system-theme"
msgstr "सिस्टम थीम पर स्विच करें"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "पूर्ववत"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "रीसेट करें"
@@ -5034,7 +5016,7 @@ msgstr "सहेजा गया"
msgid "workspace.header.saving"
msgstr "सहेजा जा रहा है"
-#: src/app/main/ui/workspace/right_header.cljs:239
+#: src/app/main/ui/workspace/right_header.cljs:240
msgid "workspace.header.share"
msgstr "शेयर"
@@ -5043,11 +5025,11 @@ msgstr "शेयर"
msgid "workspace.header.unsaved"
msgstr "सहेजे न गए परिवर्तन"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "दृश्य मोड (%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "ज़ूम"
@@ -5059,7 +5041,7 @@ msgstr "भरें - भरने के लिए पैमाना"
msgid "workspace.header.zoom-fit"
msgstr "फिट - फिट करने के लिए स्केल डाउन करें"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "सभी को फिट करने के लिए ज़ूम करें"
@@ -5067,43 +5049,43 @@ msgstr "सभी को फिट करने के लिए ज़ूम
msgid "workspace.header.zoom-full-screen"
msgstr "पूर्ण स्क्रीन"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "चयनित पर ज़ूम करें"
-#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:621
msgid "workspace.layout_grid.editor.options.edit-grid"
msgstr "ग्रिड संपादित करें"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1300
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1301
msgid "workspace.layout_grid.editor.options.exit"
msgstr "प्रस्थान"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:429, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:435
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:430, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:436
msgid "workspace.layout_grid.editor.padding.bottom"
msgstr "नीचे पैडिंग"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:491
msgid "workspace.layout_grid.editor.padding.expand"
msgstr "4 ओर के पैडिंग विकल्प दिखाएं"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:354, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:355, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:362
msgid "workspace.layout_grid.editor.padding.horizontal"
msgstr "क्षैतिज पैडिंग"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:444, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:450
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:451
msgid "workspace.layout_grid.editor.padding.left"
msgstr "बाएँ पैडिंग"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:414, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:420
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:421
msgid "workspace.layout_grid.editor.padding.right"
msgstr "दाएँ पैडिंग"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:406
msgid "workspace.layout_grid.editor.padding.top"
msgstr "ऊपर पैडिंग"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:340, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:341, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:347
msgid "workspace.layout_grid.editor.padding.vertical"
msgstr "लंबवत पैडिंग"
@@ -5119,7 +5101,7 @@ msgstr "पूर्ण"
msgid "workspace.layout_grid.editor.top-bar.locate"
msgstr "स्थान खोजें"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1326
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1327
msgid "workspace.layout_grid.editor.top-bar.locate.tooltip"
msgstr "ग्रिड लेआउट का स्थान खोजें"
@@ -5128,10 +5110,6 @@ msgstr "ग्रिड लेआउट का स्थान खोजें"
msgid "workspace.libraries.add"
msgstr "जोड़ना"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s रंग"
-
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
msgstr "आपकी लाइब्रेरी में अभी कोई रंग शैली नहीं है"
@@ -5158,43 +5136,35 @@ msgstr "हाल के रंग"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "RGB पूरक"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "रंग शैली सहेजें"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s घटक"
-
-#: src/app/main/ui/workspace/libraries.cljs:371
+#: src/app/main/ui/workspace/libraries.cljs:404
msgid "workspace.libraries.empty.add-some"
msgstr "या इनमें से कुछ को जोड़कर देखें:"
-#: src/app/main/ui/workspace/libraries.cljs:365
+#: src/app/main/ui/workspace/libraries.cljs:398
msgid "workspace.libraries.empty.no-libraries"
msgstr "आपकी टीम में कोई साझा लाइब्रेरी नहीं है, आप खोज सकते हैं"
-#: src/app/main/ui/workspace/libraries.cljs:369
+#: src/app/main/ui/workspace/libraries.cljs:402
msgid "workspace.libraries.empty.some-templates"
msgstr "यहाँ कुछ टेम्पलेट्स हैं"
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "फ़ाइल लाइब्रेरी"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s ग्राफ़िक्स"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "इस फ़ाइल में लाइब्रेरीज़"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "लाइब्रेरीज़"
@@ -5203,11 +5173,11 @@ msgstr "लाइब्रेरीज़"
msgid "workspace.libraries.library"
msgstr "लाइब्रेरी"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "लाइब्रेरी अपडेट"
-#: src/app/main/ui/workspace/libraries.cljs:360
+#: src/app/main/ui/workspace/libraries.cljs:393
msgid "workspace.libraries.loading"
msgstr "लोड हो रहा है…"
@@ -5216,51 +5186,47 @@ msgstr "लोड हो रहा है…"
msgid "workspace.libraries.more-templates"
msgstr "आप ढूंढ सकते हैं "
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "ऐसी कोई साझा लाइब्रेरी नहीं है जिसे अद्यतन करने की आवश्यकता हो"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "“%s“ के लिए कोई मिलान नहीं मिला"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "साझा लाइब्रेरी खोजें"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "साझा लाइब्रेरीज़"
-#: src/app/main/ui/workspace/libraries.cljs:352
+#: src/app/main/ui/workspace/libraries.cljs:385
msgid "workspace.libraries.shared-library-btn"
msgstr "लाइब्रेरी कनेक्ट करें"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "एकाधिक टाइपोग्राफी"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "सभी टाइपोग्राफ़ी अनलिंक करें"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s टाइपोग्राफी"
-
-#: src/app/main/ui/workspace/libraries.cljs:323
+#: src/app/main/ui/workspace/libraries.cljs:354
msgid "workspace.libraries.unlink-library-btn"
msgstr "लाइब्रेरी डिस्कनेक्ट करें"
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "अद्यतन"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "सभी परिवर्तन देखें"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "अपडेट"
@@ -5268,31 +5234,31 @@ msgstr "अपडेट"
msgid "workspace.notification-pill.detail"
msgstr "विवरण"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "इंटरैक्शन जोड़ने के लिए + बटन पर क्लिक करें।"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:96
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:97
msgid "workspace.options.blur-options.add-blur"
msgstr "धुंधलापन जोड़ें"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:117
+#: 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/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "धुंधला"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "समूह धुंधला"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "चयन धुंधला"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:114
msgid "workspace.options.blur-options.toggle-blur"
msgstr "धुंधलापन टॉगल करें"
@@ -5300,71 +5266,71 @@ msgstr "धुंधलापन टॉगल करें"
msgid "workspace.options.canvas-background"
msgstr "कैनवास पृष्ठभूमि"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "क्लिप सामग्री"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "घटक"
-#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:193
+#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:196
msgid "workspace.options.component.annotation"
msgstr "व्याख्या"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "कापी"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:185
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:188
msgid "workspace.options.component.create-annotation"
msgstr "एक व्याख्या बनाएं"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "व्याख्या संपादित करें"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "मुख्य"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:706
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:721
msgid "workspace.options.component.swap"
msgstr "स्वैप घटक"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:765
msgid "workspace.options.component.swap.empty"
msgstr "इस लाइब्रेरी में अभी तक कोई संपत्ति नहीं है"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:973
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:993
msgid "workspace.options.component.unlinked"
msgstr "अनलिंक"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1236
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1271
msgid "workspace.options.component.variant.malformed.group.locate"
msgstr "अमान्य वेरिएंट का पता लगाएं"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1233
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1268
msgid "workspace.options.component.variant.malformed.group.title"
msgstr "कुछ वेरिएंट के नाम अमान्य हैं"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:252
msgid "workspace.options.component.variant.malformed.single.all"
msgstr "इन वेरिएंट के नाम अमान्य हैं।"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:247
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:249
msgid "workspace.options.component.variant.malformed.single.one"
msgstr "इस संस्करण का नाम अमान्य है।"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:253
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:255
msgid "workspace.options.component.variant.malformed.single.some"
msgstr "इनमें से कुछ रूपों के नाम अमान्य हैं।"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:390
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:391
msgid "workspace.options.component.variant.malformed.structure.example"
msgstr "[संपत्ति]=[मूल्य], [संपत्ति]=[मूल्य]"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:389
msgid "workspace.options.component.variant.malformed.structure.title"
msgstr "निम्नलिखित संरचना का उपयोग करने का प्रयास करें:"
@@ -5408,7 +5374,7 @@ msgstr "शीर्ष"
msgid "workspace.options.constraints.topbottom"
msgstr "शीर्ष और तल"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "डिज़ाइन"
@@ -5421,21 +5387,21 @@ msgstr "निर्यात"
msgid "workspace.options.export-multiple"
msgstr "निर्यात चयन"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "1 तत्व निर्यात करें"
msgstr[1] "%s तत्व निर्यात करें"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:188
+#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:214
msgid "workspace.options.export.add-export"
msgstr "निर्यात जोड़ें"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:235
+#: 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/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "प्रत्यय"
@@ -5443,7 +5409,7 @@ msgstr "प्रत्यय"
msgid "workspace.options.exporting-complete"
msgstr "निर्यात पूर्ण"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "निर्यात हो रहा है…"
@@ -5455,27 +5421,27 @@ msgstr "निर्यात विफल"
msgid "workspace.options.exporting-object-slow"
msgstr "निर्यात अप्रत्याशित रूप से धीमा"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "भरना"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:194
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:234
msgid "workspace.options.fill.add-fill"
msgstr "भरण जोड़ें"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:208
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:248
msgid "workspace.options.fill.remove-fill"
msgstr "भराव हटाएँ"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:392
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:474
msgid "workspace.options.fit-content"
msgstr "सामग्री को फिट करने के लिए बोर्ड का आकार बदलें"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "प्रवाह प्रारंभ जोड़ें"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:178
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:179
msgid "workspace.options.flows.flow"
msgstr "प्रवाह"
@@ -5484,19 +5450,19 @@ msgstr "प्रवाह"
msgid "workspace.options.flows.flow-start"
msgstr "प्रवाह प्रारंभ"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "प्रवाह प्रारंभ हो जाता है"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:155
msgid "workspace.options.flows.remove-flow"
msgstr "प्रवाह हटाएँ"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "स्वत:"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "कॉलम"
@@ -5505,7 +5471,7 @@ msgstr "कॉलम"
msgid "workspace.options.grid.grid-title"
msgstr "ग्रिड"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "रंग"
@@ -5514,15 +5480,15 @@ msgstr "रंग"
msgid "workspace.options.grid.params.columns"
msgstr "कॉलम"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "मध्य अंतराल"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "ऊंचाई"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "मार्जिन"
@@ -5531,7 +5497,7 @@ msgstr "मार्जिन"
msgid "workspace.options.grid.params.rows"
msgstr "पंक्तियाँ"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "डिफ़ॉल्ट के रूप में सेट करें"
@@ -5545,159 +5511,159 @@ msgstr "आकार"
msgid "workspace.options.grid.params.type"
msgstr "प्रकार"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "तल"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "केंद्र"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "बाएं"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "दाहिने"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "खींचना"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "शीर्ष"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "डिफ़ॉल्ट उपयोग करें"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "चौड़ाई"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "पंक्तियाँ"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "चौकोर"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "समूह भरण"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "समूह स्ट्रोक"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:326
msgid "workspace.options.guides.add-guide"
msgstr "मार्गदर्शक जोड़ें"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:187
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:188
msgid "workspace.options.guides.remove-guide"
msgstr "मार्गदर्शक हटाएँ"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:320
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
msgid "workspace.options.guides.title"
msgstr "मार्गदर्शक"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:183
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:184
msgid "workspace.options.guides.toggle-guide"
msgstr "मार्गदर्शक टॉगल करें"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "ऊंचाई"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "निरीक्षण करें"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "क्रिया"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "विलंब के बाद"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "एनिमेशन"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "विघटन करना"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "कोई नहीं"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "धकेलना"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "स्लाइड"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "स्वत:"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "पृष्ठभूमि ओवरले जोड़ें"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "बाहर क्लिक करने पर बंद"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "ओवरले बंद करें"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "ओवरले बंद करें: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "देरी"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "गंतव्य"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "अवधि"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "सरलीकरण"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "सरलता"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "धीमे से शुरुआत"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "धीमे-धीमे शुरू और खत्म होना"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "धीरे-धीरे समाप्त होना"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "रेखीय"
@@ -5706,47 +5672,47 @@ msgstr "रेखीय"
msgid "workspace.options.interaction-in"
msgstr "में"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "माउस प्रवेश"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "माउस बाहर"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "ms"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "नेविगेशन करना"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "यहाँ जाएँ: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(सेट नहीं)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "ऑफसेट प्रभाव"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "क्लिक पर"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "ओवरले खोलें"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "खुला ओवरले: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "URL खोलें"
@@ -5755,87 +5721,87 @@ msgstr "URL खोलें"
msgid "workspace.options.interaction-out"
msgstr "बाहर"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "नीचे केंद्र"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "नीचे बाएं"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "नीचे दाएं"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "केंद्र"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "मैनुअल"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "शीर्ष केंद्र"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "शीर्ष बाएं"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "ऊपर दाएं"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "स्थान"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "स्क्रॉल स्थिति सुरक्षित रखें"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "पिछली स्क्रीन"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "के सापेक्ष"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "स्व"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "ओवरले टॉगल करें"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "ओवरले टॉगल करें: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "ट्रिगर"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "माउस कर्सर hover करते समय"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "दबाते समय"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "इंटरैक्शन"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:735
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:736
msgid "workspace.options.interactions.add-interaction"
msgstr "इंटरैक्शन जोड़ें"
@@ -5844,67 +5810,67 @@ msgstr "इंटरैक्शन जोड़ें"
msgid "workspace.options.interactions.remove-interaction"
msgstr "इंटरैक्शन हटाएं"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "रंग"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "रंग जलना"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "रंग डॉज"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "अंधेरा करना"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "भेद"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "बहिष्करण"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "हार्ड लाइट"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Hue"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "हल्का"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "प्रकाशीयता"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "गुणा करना"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "सामान्य"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "ओवरले"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "संतृप्ति"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "स्क्रीन"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "कोमल प्रकाश"
@@ -5923,7 +5889,7 @@ msgstr "समूह परतें"
msgid "workspace.options.layer-options.title.multiple"
msgstr "चयनित परतें"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:202
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:207, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:213
msgid "workspace.options.layer-options.toggle-layer"
msgstr "परत दृश्यता टॉगल करें"
@@ -5932,19 +5898,19 @@ msgstr "परत दृश्यता टॉगल करें"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "उन्नत विकल्प"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "अधिकतम.ऊंचाई"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "अधिकतम.चौड़ाई"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "न्यूनतम.ऊंचाई"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "न्यूनतम.चौड़ाई"
@@ -6058,15 +6024,15 @@ msgstr "बीच का स्थान"
msgid "workspace.options.layout.top"
msgstr "शीर्ष"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "और अधिक रंग"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "और लाइब्रेरी रंग"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "ओपेसिटी"
@@ -6075,35 +6041,35 @@ msgstr "ओपेसिटी"
msgid "workspace.options.position"
msgstr "स्थान"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "प्रोटोटाइप"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "त्रिज्या"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "नीचे बाएं"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "नीचे दाएं"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "शीर्ष बाएं"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "ऊपर दाएं"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:152
msgid "workspace.options.radius.hide-all-corners"
msgstr "स्वतंत्र त्रिज्या को संक्षिप्त करें"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:136
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:153
msgid "workspace.options.radius.show-single-corners"
msgstr "स्वतंत्र त्रिज्या दिखाएँ"
@@ -6115,7 +6081,7 @@ msgstr "हाल ही का"
msgid "workspace.options.retry"
msgstr "पुन: प्रयास करें"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "चक्कर"
@@ -6123,31 +6089,31 @@ msgstr "चक्कर"
msgid "workspace.options.search-font"
msgstr "फ़ॉन्ट खोजें"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr "किसी कनेक्शन को दूसरे बोर्ड तक ले जाने के लिए एक शेप, बोर्ड या ग्रुप चुनें।"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "चयनित रंग"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "चयन भरें"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "चयन स्ट्रोक"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:341
msgid "workspace.options.shadow-options.add-shadow"
msgstr "छाया जोड़ें"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "धुंधला"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "छाया रंग"
@@ -6159,63 +6125,64 @@ msgstr "परछाई डालना"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "भीतरी छाया"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:348
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:183, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:354
msgid "workspace.options.shadow-options.remove-shadow"
msgstr "छाया हटाओ"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "फैलाना"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "छाया"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "समूह छाया"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "चयन छाया"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:174
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:179
msgid "workspace.options.shadow-options.toggle-shadow"
msgstr "छाया टॉगल करें"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "निर्यात में दिखाएँ"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "दृश्य मोड में दिखाएँ"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "आकार"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "आकार प्रीसेट"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:534
msgid "workspace.options.size.lock"
msgstr "लॉक अनुपात"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:534
msgid "workspace.options.size.unlock"
msgstr "अनलॉक अनुपात"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "स्ट्रोक"
@@ -6224,7 +6191,7 @@ msgstr "स्ट्रोक"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "चक्र मार्कर"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "चक्र"
@@ -6233,7 +6200,7 @@ msgstr "चक्र"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "हीरा मार्कर"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "हीरा"
@@ -6242,19 +6209,19 @@ msgstr "हीरा"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "रेखा तीर"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "तीर"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "कोई नहीं"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "गोल"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "चौकोर"
@@ -6263,7 +6230,7 @@ msgstr "चौकोर"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "चौकोर मार्कर"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "आयत"
@@ -6272,83 +6239,83 @@ msgstr "आयत"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "त्रिकोण तीर"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "त्रिकोण"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "स्ट्रोक का रंग"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "स्ट्रोक की चौड़ाई"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:180
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:189
msgid "workspace.options.stroke.add-stroke"
msgstr "स्ट्रोक रंग जोड़ें"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "केंद्र"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "टूटी रेखा"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "बिंदुदार"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "अंदर"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "मिश्रित"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "बाहर की ओर"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:193
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:202
msgid "workspace.options.stroke.remove-stroke"
msgstr "स्ट्रोक हटाओ"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "ठोस"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "नीचे संरेखित करें"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "मध्य संरेखित करें"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "ऊपर संरेखित करें"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "LTR"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "RTL"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "ऑटो ऊंचाई"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "ऑटो चौड़ाई"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "निश्चित"
@@ -6370,35 +6337,35 @@ msgstr "निम्नाक्षर"
msgid "workspace.options.text-options.none"
msgstr "कोई नहीं"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "स्ट्राइकथ्रू (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "केंद्र संरेखित करें"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "जस्टिफ़ाई"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "बाएँ संरेखित करें"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "दाएँ संरेखित करें"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "पाठ"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "समूह पाठ"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "चयन पाठ"
@@ -6407,7 +6374,7 @@ msgstr "चयन पाठ"
msgid "workspace.options.text-options.titlecase"
msgstr "टाइटल केस"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "अंडरलाइन (%s)"
@@ -6416,19 +6383,19 @@ msgstr "अंडरलाइन (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "बड़ेअक्षर"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr "प्रोटोटाइप व्यू चलाने के लिए हेडर में प्ले बटन का उपयोग करें।"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "चौड़ाई"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "X अक्ष"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Y अक्ष"
@@ -6472,80 +6439,80 @@ msgstr "अलग नोड्स (%s)"
msgid "workspace.path.actions.snap-nodes"
msgstr "स्नैप नोड्स (%s)"
-#: src/app/main/ui/workspace/plugins.cljs:83
+#: src/app/main/ui/workspace/plugins.cljs:84
msgid "workspace.plugins.button-open"
msgstr "खुला"
-#: src/app/main/ui/workspace/plugins.cljs:197
+#: src/app/main/ui/workspace/plugins.cljs:198
#, markdown
msgid "workspace.plugins.discover"
msgstr "खोजें [अधिक प्लगइन्स](%s)"
-#: src/app/main/ui/workspace/plugins.cljs:204
+#: src/app/main/ui/workspace/plugins.cljs:205
msgid "workspace.plugins.empty-plugins"
msgstr "अभी तक कोई प्लगइन्स इंस्टॉल नहीं है"
-#: src/app/main/ui/workspace/plugins.cljs:191
+#: src/app/main/ui/workspace/plugins.cljs:192
msgid "workspace.plugins.error.manifest"
msgstr "प्लगइन मैनिफेस्ट गलत है।"
-#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:755, src/app/main/ui/workspace/plugins.cljs:82
+#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:783, src/app/main/ui/workspace/plugins.cljs:83
msgid "workspace.plugins.error.need-editor"
msgstr "इस प्लगइन का उपयोग करने के लिए आपको एक संपादक होना आवश्यक है"
-#: src/app/main/ui/workspace/plugins.cljs:187
+#: src/app/main/ui/workspace/plugins.cljs:188
msgid "workspace.plugins.error.url"
msgstr "प्लगइन मौजूद नहीं है या URL सही नहीं है।"
-#: src/app/main/ui/workspace/plugins.cljs:183
+#: src/app/main/ui/workspace/plugins.cljs:184
msgid "workspace.plugins.install"
msgstr "इंस्टॉल"
-#: src/app/main/ui/workspace/plugins.cljs:213
+#: src/app/main/ui/workspace/plugins.cljs:214
msgid "workspace.plugins.installed-plugins"
msgstr "इंस्टॉल किए गए प्लगइन्स"
-#: src/app/main/ui/workspace/main_menu.cljs:710
+#: src/app/main/ui/workspace/main_menu.cljs:738
msgid "workspace.plugins.menu.plugins-manager"
msgstr "प्लगइन्स मैनेजर"
-#: src/app/main/ui/workspace/main_menu.cljs:906
+#: src/app/main/ui/workspace/main_menu.cljs:934
msgid "workspace.plugins.menu.title"
msgstr "प्लग-इन"
-#: src/app/main/ui/workspace/plugins.cljs:374
+#: src/app/main/ui/workspace/plugins.cljs:375
msgid "workspace.plugins.permissions-update.title"
msgstr "इस प्लगइन को अद्यतन करें"
-#: src/app/main/ui/workspace/plugins.cljs:378
+#: src/app/main/ui/workspace/plugins.cljs:379
msgid "workspace.plugins.permissions-update.warning"
msgstr ""
"आपके द्वारा पिछली बार खोलने के बाद से इस प्लगइन में बदलाव किए गए हैं। अब यह "
"निम्न तक पहुँच प्राप्त करना चाहता है:"
-#: src/app/main/ui/workspace/plugins.cljs:278
+#: src/app/main/ui/workspace/plugins.cljs:279
msgid "workspace.plugins.permissions.allow-download"
msgstr "फ़ाइल डाउनलोड प्रारंभ करें।"
-#: src/app/main/ui/workspace/plugins.cljs:271
+#: src/app/main/ui/workspace/plugins.cljs:272
msgid "workspace.plugins.permissions.comment-read"
msgstr "अपनी टिप्पणियाँ और उत्तर पढ़ें।"
-#: src/app/main/ui/workspace/plugins.cljs:265
+#: src/app/main/ui/workspace/plugins.cljs:266
msgid "workspace.plugins.permissions.comment-write"
msgstr "आपकी टिप्पणियाँ पढ़ें और उनमें संशोधन करें, और आपके नाम से उत्तर दें।"
-#: src/app/main/ui/workspace/plugins.cljs:238
+#: src/app/main/ui/workspace/plugins.cljs:239
msgid "workspace.plugins.permissions.content-read"
msgstr "उन फ़ाइलों की सामग्री पढ़ें जिन तक उपयोगकर्ताओं को पहुँच प्राप्त है।"
-#: src/app/main/ui/workspace/plugins.cljs:232
+#: src/app/main/ui/workspace/plugins.cljs:233
msgid "workspace.plugins.permissions.content-write"
msgstr ""
"उन फ़ाइलों की सामग्री पढ़ें और संशोधित करें जिन तक उपयोगकर्ताओं को पहुँच "
"प्राप्त है।"
-#: src/app/main/ui/workspace/plugins.cljs:325
+#: src/app/main/ui/workspace/plugins.cljs:326
msgid "workspace.plugins.permissions.disclaimer"
msgstr ""
"कृपया ध्यान दें कि यह प्लगइन किसी बाहरी पक्ष द्वारा बनाया गया है, इसलिए "
@@ -6553,31 +6520,31 @@ msgstr ""
"आपकी डेटा गोपनीयता और सुरक्षा हमारे लिए महत्वपूर्ण है। यदि आपको कोई चिंता "
"हो, तो कृपया सहायता केंद्र से संपर्क करें।"
-#: src/app/main/ui/workspace/plugins.cljs:258
+#: src/app/main/ui/workspace/plugins.cljs:259
msgid "workspace.plugins.permissions.library-read"
msgstr "आपकी लाइब्रेरी और संसाधनों को पढ़ें।"
-#: src/app/main/ui/workspace/plugins.cljs:252
+#: src/app/main/ui/workspace/plugins.cljs:253
msgid "workspace.plugins.permissions.library-write"
msgstr "आपकी लाइब्रेरी और संसाधनों को पढ़ें और संशोधित करें।"
-#: src/app/main/ui/workspace/plugins.cljs:318
+#: src/app/main/ui/workspace/plugins.cljs:319
msgid "workspace.plugins.permissions.title"
msgstr "'%s' प्लगइन को निम्न तक पहुँच चाहिए:"
-#: src/app/main/ui/workspace/plugins.cljs:245
+#: src/app/main/ui/workspace/plugins.cljs:246
msgid "workspace.plugins.permissions.user-read"
msgstr "वर्तमान उपयोगकर्ता की प्रोफ़ाइल जानकारी पढ़ें।"
-#: src/app/main/ui/workspace/plugins.cljs:209
+#: src/app/main/ui/workspace/plugins.cljs:210
msgid "workspace.plugins.plugin-list-link"
msgstr "प्लगइन्स सूची"
-#: src/app/main/ui/workspace/plugins.cljs:86
+#: src/app/main/ui/workspace/plugins.cljs:87
msgid "workspace.plugins.remove-plugin"
msgstr "प्लगइन हटाएँ"
-#: src/app/main/ui/workspace/plugins.cljs:178
+#: src/app/main/ui/workspace/plugins.cljs:179
msgid "workspace.plugins.search-placeholder"
msgstr "एक प्लगइन URLलिखें"
@@ -6585,26 +6552,26 @@ msgstr "एक प्लगइन URLलिखें"
msgid "workspace.plugins.success"
msgstr "प्लगइन सही ढंग से लोड हो गया।"
-#: src/app/main/ui/workspace/plugins.cljs:172
+#: src/app/main/ui/workspace/plugins.cljs:173
msgid "workspace.plugins.title"
msgstr "प्लग-इन"
-#: src/app/main/ui/workspace/plugins.cljs:438
+#: src/app/main/ui/workspace/plugins.cljs:439
msgid "workspace.plugins.try-out.cancel"
msgstr "अभी नहीं"
-#: src/app/main/ui/workspace/plugins.cljs:431
+#: src/app/main/ui/workspace/plugins.cljs:432
msgid "workspace.plugins.try-out.message"
msgstr ""
"देखना चाहेंगे? यह आपकी वर्तमान टीम के लिए एक नए ड्राफ्ट में खुलेगा। (यदि "
"नहीं, तो आप इसे किसी भी फ़ाइल के इंस्टॉल किए गए प्लगइन्स में हमेशा पा सकते "
"हैं।)"
-#: src/app/main/ui/workspace/plugins.cljs:427
+#: src/app/main/ui/workspace/plugins.cljs:428
msgid "workspace.plugins.try-out.title"
msgstr "%s' प्लगइन आपके उपयोगकर्ता के लिए इंस्टॉल हो चुका है!"
-#: src/app/main/ui/workspace/plugins.cljs:444
+#: src/app/main/ui/workspace/plugins.cljs:445
msgid "workspace.plugins.try-out.try"
msgstr "प्लगइन आज़माएँ"
@@ -6616,15 +6583,15 @@ msgstr "फ्लेक्स लेआउट जोड़ें"
msgid "workspace.shape.menu.add-grid"
msgstr "ग्रिड लेआउट जोड़ें"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1015, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1039
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1016, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1040
msgid "workspace.shape.menu.add-layout"
msgstr "लेआउट जोड़ें"
-#: src/app/main/ui/workspace/context_menu.cljs:608, src/app/main/ui/workspace/sidebar/assets/common.cljs:505, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:941, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1161
+#: src/app/main/ui/workspace/context_menu.cljs:610, src/app/main/ui/workspace/sidebar/assets/common.cljs:514, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:961, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1113, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1195
msgid "workspace.shape.menu.add-variant"
msgstr "वैरिएंट बनाएं"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:509, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:990, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1082, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1198
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:518, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1010, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1115, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1233
msgid "workspace.shape.menu.add-variant-property"
msgstr "नई संपत्ति जोड़ें"
@@ -6668,7 +6635,7 @@ msgstr "SVGG के रूप में कॉपी करें"
msgid "workspace.shape.menu.copy-text"
msgstr "पाठ के रूप में कॉपी करें"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "एनोटेशन बनाएं"
@@ -6676,11 +6643,11 @@ msgstr "एनोटेशन बनाएं"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "बोर्ड के लिए चयन"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "घटक बनाएँ"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "अनेक घटक बनाएँ"
@@ -6688,7 +6655,7 @@ msgstr "अनेक घटक बनाएँ"
msgid "workspace.shape.menu.cut"
msgstr "काटना"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "मिटाना"
@@ -6696,15 +6663,15 @@ msgstr "मिटाना"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "प्रवाह प्रारंभ हटाएँ"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "उदाहरण अलग करें"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "उदाहरणों को अलग करें"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "भेद"
@@ -6716,11 +6683,11 @@ msgstr "नकल करें"
msgid "workspace.shape.menu.edit"
msgstr "संपादन"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "बहिष्कृत"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "समतल"
@@ -6753,19 +6720,19 @@ msgstr "मुख्य घटक फ़ाइल पर जाएँ"
msgid "workspace.shape.menu.group"
msgstr "समूह"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "छुपाएँ"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "UI दिखाएँ / छिपाएँ"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "चौराहा"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "ताला"
@@ -6773,7 +6740,7 @@ msgstr "ताला"
msgid "workspace.shape.menu.mask"
msgstr "मास्क"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "चिपकाएँ"
@@ -6793,11 +6760,11 @@ msgstr "फ्लेक्स लेआउट हटाएँ"
msgid "workspace.shape.menu.remove-grid"
msgstr "ग्रिड लेआउट हटाएँ"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1033
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1034
msgid "workspace.shape.menu.remove-layout"
msgstr "लेआउट हटाएँ"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1222
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1257
msgid "workspace.shape.menu.remove-variant-property"
msgstr "संपत्ति हटाएं"
@@ -6805,15 +6772,15 @@ msgstr "संपत्ति हटाएं"
msgid "workspace.shape.menu.rename"
msgstr "नाम बदलें"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "ओवरराइड रीसेट करें"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "मुख्य घटक पुनर्स्थापित करें"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:504
msgid "workspace.shape.menu.restore-variant"
msgstr "वैरिएंट पुनर्स्थापित करें"
@@ -6821,15 +6788,15 @@ msgstr "वैरिएंट पुनर्स्थापित करें"
msgid "workspace.shape.menu.select-layer"
msgstr "परत चुनें"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "दिखाएँ"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "संपत्ति पैनल में दिखाएँ"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "मुख्य घटक दिखाएं"
@@ -6842,6 +6809,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "थंबनेल के रूप में सेट करें"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "पथ में परिवर्तन"
@@ -6849,11 +6817,11 @@ msgstr "पथ में परिवर्तन"
msgid "workspace.shape.menu.ungroup"
msgstr "असमूहीकृत"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "संघ"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "अनलॉक"
@@ -6866,7 +6834,7 @@ msgstr "मास्क हटाएं"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "मुख्य घटकों को अद्यतन करें"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "मुख्य घटक अद्यतन करें"
@@ -6878,11 +6846,11 @@ msgstr "साइडबार को संक्षिप्त करें"
msgid "workspace.sidebar.expand"
msgstr "साइडबार का विस्तार करें"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "इतिहास"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "परतें"
@@ -6922,11 +6890,11 @@ msgstr "टेक्स्ट"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "आयातित SVG गुण"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "पृष्ठों"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:248
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:249
msgid "workspace.sidebar.sitemap.add-page"
msgstr "पृष्ठ जोड़ें"
@@ -6943,27 +6911,27 @@ msgstr "%s सक्रिय थीम"
msgid "workspace.tokens.add set"
msgstr "सेट जोड़ें"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:329
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
msgid "workspace.tokens.add-new-theme"
msgstr "नई थीम जोड़ें"
-#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:60
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:62
msgid "workspace.tokens.add-set-to-group"
msgstr "इस समूह में सेट जोड़ें"
-#: src/app/main/ui/workspace/tokens/management/group.cljs:113
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:197, src/app/main/ui/workspace/tokens/management/group.cljs:115
msgid "workspace.tokens.add-token"
msgstr "टोकन जोड़ें: %s"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:161
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:136
msgid "workspace.tokens.applied-to"
msgstr "के लिए आवेदन किया"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:315
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:316
msgid "workspace.tokens.axis"
msgstr "अक्ष"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:338
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:337
msgid "workspace.tokens.back-to-themes"
msgstr "थीम सूची पर वापस जाएँ"
@@ -6993,15 +6961,15 @@ msgstr "रंग"
msgid "workspace.tokens.create-new-theme"
msgstr "अभी अपनी पहली थीम बनाएं।"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:100, src/app/main/ui/workspace/tokens/themes.cljs:44
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:96, src/app/main/ui/workspace/tokens/themes.cljs:44
msgid "workspace.tokens.create-one"
msgstr "एक बनाएं।"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:534
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:552
msgid "workspace.tokens.create-token"
msgstr "नया %s टोकन बनाएं"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:337
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:338
msgid "workspace.tokens.delete"
msgstr "टोकन हटाएँ"
@@ -7009,19 +6977,19 @@ msgstr "टोकन हटाएँ"
msgid "workspace.tokens.delete-theme-title"
msgstr "थीम हटाएँ"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:334
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:335
msgid "workspace.tokens.duplicate"
msgstr "डुप्लीकेट टोकन"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:201, src/app/main/data/workspace/tokens/library_edit.cljs:405
+#: src/app/main/data/workspace/tokens/library_edit.cljs:197, src/app/main/data/workspace/tokens/library_edit.cljs:415
msgid "workspace.tokens.duplicate-suffix"
msgstr "कापी"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:321
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:322
msgid "workspace.tokens.edit"
msgstr "टोकन संपादित करें"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:327
msgid "workspace.tokens.edit-theme-title"
msgstr "थीम संपादित करें"
@@ -7029,15 +6997,11 @@ msgstr "थीम संपादित करें"
msgid "workspace.tokens.edit-themes"
msgstr "थीम्स संपादित करें"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:533
-msgid "workspace.tokens.edit-token"
-msgstr "टोकन संपादित करें"
-
#: src/app/main/data/workspace/tokens/errors.cljs:41
msgid "workspace.tokens.empty-input"
msgstr "टोकन मान रिक्त नहीं हो सकता"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:540
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:558
msgid "workspace.tokens.enter-token-name"
msgstr "%s टोकन नाम दर्ज करें"
@@ -7069,7 +7033,7 @@ msgstr "पूर्व दर्शन:"
msgid "workspace.tokens.export.single-file"
msgstr "एक फाइल"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:229
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:228
msgid "workspace.tokens.gaps"
msgstr "अंतराल"
@@ -7091,15 +7055,15 @@ msgstr "टोकन सेट ग्रुपिंग अभी समर्
msgid "workspace.tokens.import-error"
msgstr "आयात त्रुटि:"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:240
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:241
msgid "workspace.tokens.import-multiple-files"
msgstr "एकाधिक फ़ाइलों में, फ़ाइल नाम/पथ सेट नाम हैं।"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:239
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:240
msgid "workspace.tokens.import-single-file"
msgstr "एकल JSON फ़ाइल में, प्रथम-स्तरीय कुंजियाँ टोकन सेट के नाम होने चाहिएं।"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:236
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:237
msgid "workspace.tokens.import-tokens"
msgstr "टोकन आयात करें"
@@ -7108,7 +7072,7 @@ msgstr "टोकन आयात करें"
msgid "workspace.tokens.import-tooltip"
msgstr "JSON फ़ाइल आयात करने से आपके सभी वर्तमान टोकन, सेट और थीम ओवरराइट हो जाएँगे"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:246
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:247
msgid "workspace.tokens.import-warning"
msgstr "टोकन आयात करने से आपके सभी वर्तमान टोकन, सेट और थीम ओवरराइट हो जाएँगे।"
@@ -7161,15 +7125,15 @@ msgstr "थिम"
msgid "workspace.tokens.label.theme-placeholder"
msgstr "एक थीम जोड़ें (अर्थात् प्रकाश)"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:221
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:220
msgid "workspace.tokens.margins"
msgstr "मार्जिन्स"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:257
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:256
msgid "workspace.tokens.max-size"
msgstr "अधिकतम. आकार"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:251
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:250
msgid "workspace.tokens.min-size"
msgstr "न्यूनतम. आकार"
@@ -7185,7 +7149,7 @@ msgstr "कोई सक्रिय सेट नहीं"
msgid "workspace.tokens.no-active-theme"
msgstr "कोई थीम सक्रिय नहीं"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:76
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:72
msgid "workspace.tokens.no-permisions-set"
msgstr "सेट्स को सक्रिय या निष्क्रिय करने के लिए आपको एक संपादक होना आवश्यक है"
@@ -7193,11 +7157,11 @@ msgstr "सेट्स को सक्रिय या निष्क्र
msgid "workspace.tokens.no-permission-themes"
msgstr "थीम्स का उपयोग करने के लिए आपको एक संपादक होना आवश्यक है"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:480
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:483
msgid "workspace.tokens.no-sets-create"
msgstr "अभी तक कोई सेट परिभाषित नहीं किया गया है। पहले एक सेट बनाएं।"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:97, src/app/main/ui/workspace/tokens/sets/lists.cljs:103
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:93, src/app/main/ui/workspace/tokens/sets/lists.cljs:99
msgid "workspace.tokens.no-sets-yet"
msgstr "अभी तक कोई सेट नहीं है।"
@@ -7221,12 +7185,12 @@ msgstr "अमान्य टोकन मान. हल किया गया
msgid "workspace.tokens.opacity-range"
msgstr "अपारदर्शिता 0 और 100% या 0 और 1 (जैसे 50% या 0.5) के बीच होनी चाहिए।"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:145
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:120
#, fuzzy
msgid "workspace.tokens.original-value"
msgstr "मूल मान: %s"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:205
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:204
msgid "workspace.tokens.paddings"
msgstr "पैडिंग्स"
@@ -7234,7 +7198,7 @@ msgstr "पैडिंग्स"
msgid "workspace.tokens.radius"
msgstr "त्रिज्या"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:153
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:128
msgid "workspace.tokens.ref-not-valid"
msgstr "संदर्भ मान्य नहीं है या किसी सक्रिय सेट में नहीं है"
@@ -7243,7 +7207,7 @@ msgstr "संदर्भ मान्य नहीं है या किस
msgid "workspace.tokens.reference-error"
msgstr "संदर्भ त्रुटियाँ: "
-#: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:39, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:44, src/app/main/ui/workspace/tokens/management/token_pill.cljs:146
+#: 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:100, 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 "समाधानित मान: %s"
@@ -7252,7 +7216,7 @@ msgstr "समाधानित मान: %s"
msgid "workspace.tokens.save-theme"
msgstr "थीम सहेजें"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:209, src/app/main/ui/workspace/tokens/sets/lists.cljs:315
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:204, src/app/main/ui/workspace/tokens/sets/lists.cljs:309
msgid "workspace.tokens.select-set"
msgstr "सेट का चयन करें।"
@@ -7260,11 +7224,11 @@ msgstr "सेट का चयन करें।"
msgid "workspace.tokens.self-reference"
msgstr "टोकन में स्व-संदर्भ होता है"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:64
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:60
msgid "workspace.tokens.set-edit-placeholder"
msgstr "नाम दर्ज करें (समूहों के लिए '/' का प्रयोग करें)"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:343
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:342
msgid "workspace.tokens.set-selection-theme"
msgstr ""
"इस थीम विकल्प के हिस्से के रूप में किन टोकन सेट्स का उपयोग किया जाना चाहिए, "
@@ -7289,7 +7253,7 @@ msgstr ""
msgid "workspace.tokens.settings"
msgstr "टोकन सेटिंग्स"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:245
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:244
msgid "workspace.tokens.size"
msgstr "आकार"
@@ -7311,16 +7275,16 @@ msgstr ""
msgid "workspace.tokens.themes-list"
msgstr "थीम्स सूची"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:589, src/app/main/ui/workspace/tokens/management/create/form.cljs:590
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:608, src/app/main/ui/workspace/tokens/management/create/form.cljs:609
#, fuzzy
msgid "workspace.tokens.token-description"
msgstr "वर्णन"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:539
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:83, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:109, src/app/main/ui/workspace/tokens/management/create/form.cljs:557
msgid "workspace.tokens.token-name"
msgstr "नाम"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:66
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:69
msgid "workspace.tokens.token-name-validation-error"
msgstr ""
" एक मान्य टोकन नाम नहीं है।\n"
@@ -7332,11 +7296,11 @@ msgstr ""
msgid "workspace.tokens.token-not-resolved"
msgstr "नाम: '%s' वाला संदर्भ टोकन हल नहीं किया जा सका"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:567
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:585
msgid "workspace.tokens.token-value"
msgstr "मान"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:566, src/app/main/ui/workspace/tokens/management/create/form.cljs:883, src/app/main/ui/workspace/tokens/management/create/form.cljs:892
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:584, src/app/main/ui/workspace/tokens/management/create/form.cljs:1035
msgid "workspace.tokens.token-value-enter"
msgstr "{alias} के साथ एक मान या उपनाम दर्ज करें"
@@ -7344,7 +7308,7 @@ msgstr "{alias} के साथ एक मान या उपनाम दर
msgid "workspace.tokens.tokens-section-title"
msgstr "टोकन - %s"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:125
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:121
msgid "workspace.tokens.tools"
msgstr "औजार"
@@ -7352,7 +7316,7 @@ msgstr "औजार"
msgid "workspace.tokens.unknown-token-type-section"
msgstr "टाइप '%s' समर्थित नहीं है (%s)\n"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:156
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:131
msgid "workspace.tokens.value-not-valid"
msgstr "मान मान्य नहीं है"
@@ -7360,11 +7324,11 @@ msgstr "मान मान्य नहीं है"
msgid "workspace.tokens.value-with-units"
msgstr "अमान्य मान: इकाइयाँ अनुमति नहीं हैं।"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:563
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:581
msgid "workspace.tokens.warning-name-change"
msgstr "इस टोकन का नाम बदलने से इसके पुराने नाम के किसी भी संदर्भ टूट जाएंगे।"
-#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "एसेट्स"
@@ -7372,7 +7336,7 @@ msgstr "एसेट्स"
msgid "workspace.toolbar.color-palette"
msgstr "रंग पैलेट (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "टिप्पणियाँ (%s)"
@@ -7583,19 +7547,19 @@ msgstr "% से अधिक ऑपरेशन"
msgid "workspace.undo.title"
msgstr "इतिहास"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "नकार देना"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "और जानकारी"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "साझा लाइब्रेरीज़ में अपडेट्स हैं"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "अद्यतन"
@@ -7655,11 +7619,11 @@ msgstr "क्या आप इस संस्करण को पुनर्
msgid "workspace.versions.snapshot-menu"
msgstr "स्नैपशॉट मेनू खोलें"
-#: src/app/main/ui/workspace/sidebar.cljs:236
+#: src/app/main/ui/workspace/sidebar.cljs:237
msgid "workspace.versions.tab.actions"
msgstr "क्रियाएँ"
-#: src/app/main/ui/workspace/sidebar.cljs:234
+#: src/app/main/ui/workspace/sidebar.cljs:235
msgid "workspace.versions.tab.history"
msgstr "इतिहास"
diff --git a/frontend/translations/hr.po b/frontend/translations/hr.po
index 16bf381dc9..0bd4774935 100644
--- a/frontend/translations/hr.po
+++ b/frontend/translations/hr.po
@@ -1,16 +1,17 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-11 07:21+0000\n"
-"Last-Translator: al0cam \n"
-"Language-Team: Croatian "
-" \n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
+"Last-Translator: Zvonimir Juranko \n"
+"Language-Team: Croatian \n"
"Language: hr\n"
"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==1 && n%100!=11 ? 0 : n%10>=2 && "
-"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Weblate 5.13-dev\n"
+"Plural-Forms: nplurals=3; plural="
+"(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? "
+"1 : 2);\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -174,7 +175,7 @@ msgstr "Open Source rješenje za dizajn i izradu prototipova."
msgid "auth.terms-and-privacy-agreement"
msgstr "Slažem se s [uvjetima usluge](%s) i [pravilima privatnosti](%s)."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Uvjeti pružanja usluge"
@@ -201,7 +202,7 @@ msgstr "...branding, ilustracije, marketinški dijelovi, itd."
msgid "comments.mentions.not-found"
msgstr "Nisu pronađene osobe za @%s"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Objavi"
@@ -274,7 +275,7 @@ msgstr "Podijeli prototip"
msgid "common.share-link.view-all"
msgstr "Označi sve"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Poništi objavu"
@@ -397,7 +398,7 @@ msgstr "Token nema datum isteka"
msgid "dashboard.add-file"
msgstr "Dodaj datoteku"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Dodaj kao zajedničku biblioteku"
@@ -405,31 +406,31 @@ msgstr "Dodaj kao zajedničku biblioteku"
msgid "dashboard.change-email"
msgstr "Promijeni e-mail"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(kopiraj)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "+ Kreiraj novi tim"
-#: src/app/main/ui/workspace/main_menu.cljs:631
+#: src/app/main/ui/workspace/main_menu.cljs:659
msgid "dashboard.create-version-menu"
msgstr "Prikvači ovu verziju"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Tvoj Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Obriši tim"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Preuzmi Penpot datoteku (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Preuzmi standardnu datoteku (.svg + .json)"
@@ -485,7 +486,7 @@ msgstr "Još nema biblioteka."
msgid "dashboard.export-binary-multi"
msgstr "Preuzmi %s Penpot datoteke (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Izvezi artboard u PDF"
@@ -501,7 +502,7 @@ msgstr "Izvezi Penpot %s datoteka"
msgid "dashboard.export-multiple.selected"
msgstr "% od % elementa označeno"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Izvezi"
@@ -700,11 +701,11 @@ msgstr "Prijenos podataka na poslužitelj (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Prijenos datoteke: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Pozovi u tim"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Napusti tim"
@@ -716,7 +717,7 @@ msgstr "Biblioteke i predlošci"
msgid "dashboard.libraries-and-templates.explore"
msgstr "Istraži više njih i saznaj kako doprinijeti"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "Došlo je do problema prilikom uvoza predloška. Predložak nije uvezen."
@@ -748,7 +749,7 @@ msgstr "Premijesti u drugi tim"
msgid "dashboard.new-file"
msgstr "+ Nova datoteka"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Nova datoteka"
@@ -756,7 +757,7 @@ msgstr "Nova datoteka"
msgid "dashboard.new-project"
msgstr "+ Novi projekt"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Novi projekt"
@@ -764,11 +765,11 @@ msgstr "Novi projekt"
msgid "dashboard.no-matches-for"
msgstr "Nisu pronađeni rezultati za “%s”"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Prikvačeni projekti pojavit će se ovdje"
-#: src/app/main/ui/dashboard/comments.cljs:90
+#: src/app/main/ui/dashboard/comments.cljs:91
msgid "dashboard.notifications"
msgstr "Obavijesti"
@@ -780,7 +781,7 @@ msgstr "Tvoja e-mail adresa je uspješno ažurirana"
msgid "dashboard.notifications.email-verified-successfully"
msgstr "Tvoja e-mail adresa je uspješno potvrđena"
-#: src/app/main/data/profile.cljs:272
+#: src/app/main/data/profile.cljs:273
msgid "dashboard.notifications.notifications-saved"
msgstr "Postavke obavijesti ažurirane"
@@ -788,11 +789,11 @@ msgstr "Postavke obavijesti ažurirane"
msgid "dashboard.notifications.password-saved"
msgstr "Lozinka je uspješno spremljena!"
-#: src/app/main/ui/dashboard/comments.cljs:44
+#: src/app/main/ui/dashboard/comments.cljs:45
msgid "dashboard.notifications.view"
msgstr "Pregledajte obavijesti"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s članova"
@@ -824,7 +825,7 @@ msgstr "Sada ste vlasnik ovog tima."
msgid "dashboard.permissions-change.viewer"
msgstr "Sada ste gledatelj u ovom timu."
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Prikvači/Otkvači"
@@ -861,7 +862,7 @@ msgstr "Niste više dio tima \"%s\"."
msgid "dashboard.save-settings"
msgstr "Spremi postavke"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Pretraži…"
@@ -941,7 +942,7 @@ msgstr "Obavijesti"
msgid "dashboard.show-all-files"
msgstr "Prikaži sve datoteke"
-#: src/app/main/ui/workspace/main_menu.cljs:638
+#: src/app/main/ui/workspace/main_menu.cljs:666
msgid "dashboard.show-version-history"
msgstr "Povijest verzija"
@@ -967,7 +968,7 @@ msgstr[2] "Tvoje datoteke su uspješno duplicirane"
msgid "dashboard.success-duplicate-project"
msgstr "Tvoj projekt je uspješno dupliciran"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Tvoja datoteka je uspješno premještena"
@@ -979,15 +980,15 @@ msgstr "Tvoje datoteke su uspješno premještene"
msgid "dashboard.success-move-project"
msgstr "Tvoj projekt je uspješno premješten"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Informacije tima"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Članovi tima"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Projekti tima"
@@ -1003,7 +1004,7 @@ msgstr "Pretraži rezultate"
msgid "dashboard.type-something"
msgstr "Upiši za rezultate pretraživanja"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Poništi objavu biblioteke"
@@ -1011,50 +1012,50 @@ msgstr "Poništi objavu biblioteke"
msgid "dashboard.update-settings"
msgstr "Ažuriraj postavke"
-#: src/app/main/ui/dashboard/sidebar.cljs:856
+#: src/app/main/ui/dashboard/sidebar.cljs:976
msgid "dashboard.upgrade-plan.no-limits"
msgstr "Kreativnost nema ograničenja"
-#: src/app/main/ui/dashboard/sidebar.cljs:854
+#: src/app/main/ui/dashboard/sidebar.cljs:974
msgid "dashboard.upgrade-plan.penpot-free"
msgstr "Penpot Free"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "Aktivno"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "Kada se ovaj webhook pokrene, bit će isporučene pojedinosti o događaju"
-#: src/app/main/ui/dashboard/team.cljs:982
+#: src/app/main/ui/dashboard/team.cljs:1160
msgid "dashboard.webhooks.cant-edit"
msgstr "Možete samo brisati ili mijenjati webhookove koje ste sami izradili."
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "Vrsta sadržaja"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "Stvorite webhook"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "Webhook je uspješno stvoren."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"Webhookovi su jednostavan način da se drugim web stranicama i aplikacijama "
"omogući da budu obaviješteni kada se određeni događaji dogode na Penpotu. "
"Poslat ćemo POST zahtjev na svaki URL koji navedete."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "Pritisnite gumb \"Dodaj webhook\" da biste ga dodali."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "Do sada nije izrađen nijedan webhook."
@@ -1074,7 +1075,7 @@ msgstr "E-mail"
msgid "dashboard.your-name"
msgstr "Ime"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Tvoj Penpot"
@@ -1090,15 +1091,15 @@ msgstr "Pažnja"
msgid "ds.component-subtitle"
msgstr "Komponente za ažuriranje:"
-#: src/app/main/ui/workspace/plugins.cljs:338, src/app/main/ui/workspace/plugins.cljs:392
+#: src/app/main/ui/workspace/plugins.cljs:339, src/app/main/ui/workspace/plugins.cljs:393
msgid "ds.confirm-allow"
msgstr "Dopusti"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Poništi"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "U redu"
@@ -1150,11 +1151,11 @@ msgstr "Ne možeš koristiti svoj e-mail kao lozinku"
msgid "errors.email-domain-not-allowed"
msgstr "Domena nije dopuštena"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "E-pmail «%s» ima mnogo trajnih izvješća o odbijanju."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "E-mail «%s» je prijavljen kao neželjena pošta ili je trajno odbijen."
@@ -1168,11 +1169,6 @@ msgstr ""
msgid "errors.feature-not-supported"
msgstr "Značajka '%s' nije podržana."
-#: src/app/main/ui/auth/register.cljs, src/app/main/ui/dashboard/team_form.cljs, src/app/main/ui/onboarding/team_choice.cljs, src/app/main/ui/setti ngs/access_tokens.cljs, src/app/main/ui/settings/feedback.cljs, src/app/main/ui/settings/profile.cljs, src/app/main/ui/workspace/sidebar/assets.cljs
-#, unused
-msgid "errors.field-max-length"
-msgstr "Mora sadržavati najviše 1 znak."
-
#, unused
msgid "errors.field-min-length"
msgstr "Mora sadržavati najmanje 1 znak."
@@ -1189,7 +1185,7 @@ msgstr ""
"datoteke koju pokušavate otvoriti. Prije otvaranja datoteke potrebno je "
"primijeniti migracije za '%s'."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Dogodilo se nešto loše."
@@ -1222,11 +1218,11 @@ msgstr "Ova pozivnica je možda otkazana ili je istekla."
msgid "errors.ldap-disabled"
msgstr "Onemogućena je LDAP provjera autentičnosti."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "Dosegli ste kvotu '%s'. Kontaktirajte podršku."
-#: src/app/main/ui/dashboard/team.cljs:185, src/app/main/ui/onboarding/team_choice.cljs:101
+#: src/app/main/ui/dashboard/team.cljs:187, src/app/main/ui/dashboard/team.cljs:849, src/app/main/ui/onboarding/team_choice.cljs:101
msgid "errors.maximum-invitations-by-request-reached"
msgstr "Dosegnut je najveći (%s) broj e-pošta koje se mogu pozvati u jednom zahtjevu"
@@ -1242,7 +1238,7 @@ msgstr "Čini se da sadržaj slike ne odgovara ekstenziji datoteke."
msgid "errors.media-type-not-allowed"
msgstr "Čini se da ovo nije važeća slika."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"Profil koji pozivaš ima isključen e-email (izvješća o neželjenoj pošti ili "
@@ -1270,7 +1266,7 @@ msgstr "Nevažeći podaci u međuspremniku"
msgid "errors.profile-blocked"
msgstr "Profil je blokiran"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr ""
"Tvoj profil ima isključen e-mail (izvješća o neželjenoj pošti ili veliki "
@@ -1284,15 +1280,15 @@ msgstr "Registracija je trenutno onemogućena."
msgid "errors.team-feature-mismatch"
msgstr "Otkrivena nekompatibilna značajka '%s'"
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr "Nedovoljno članova za napuštanje tima, vjerojatno ga želiš izbrisati."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "Član kojeg pokušavaš dodijeliti ne postoji."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr "Vlasnik ne može napustiti tim, moraš ponovno dodijeliti ulogu vlasnika."
@@ -1312,31 +1308,31 @@ msgstr "Pogreška provjere valjanosti"
msgid "errors.version-not-supported"
msgstr "Datoteka ima nekompatibilan broj verzije"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "Pogreška veze, URL nije dostupan"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "URL ne prolazi provjeru valjanosti."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "Zadnja dostava nije bila uspješna."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "Pogreška pri SSL provjeri valjanosti."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "Istek vremena"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "Neočekivana pogreška prilikom provjere"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "Neočekivani status %s"
@@ -1398,19 +1394,19 @@ msgstr "Došlo je do pogreške"
msgid "inspect.attributes.blur"
msgstr "Zamućenje"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Vrijednost"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1418,7 +1414,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Ispuna"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Preuzmi izvornu sliku"
@@ -1512,81 +1508,84 @@ msgstr "Solidan"
msgid "inspect.attributes.stroke.width"
msgstr "Širina"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Tipografija"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Font"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Veličina fonta"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Stil fonta"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "Težina fonta"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Razmak između slova"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Visina linije"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Dekoracija teksta"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Nikakav"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Podcrtano"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Transformiraj tekst"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "Velika i mala slova"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "Mala slova"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Nikakav"
-#: src/app/main/ui/inspect/attributes/text.cljs:159
+#: src/app/main/ui/inspect/attributes/text.cljs:152
msgid "inspect.attributes.typography.text-transform.unset"
msgstr "Nepostavljeno"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "Velika slova"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr ""
"Ako želite saznati više o pregledu dizajna, posjetite Penpotov centar za "
"pomoć"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "Više informacija o inspekciji"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr "Odaberite oblik, ploču ili grupu da provjerite njihova svojstva i kod"
@@ -1646,7 +1645,7 @@ msgstr "Tekst"
msgid "inspect.tabs.info"
msgstr "Informacija"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Prečaci"
@@ -1658,11 +1657,11 @@ msgstr "Prihvati"
msgid "labels.access-tokens"
msgstr "Pristupni tokeni"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "Aktivan"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.add"
msgstr "Dodati"
@@ -1670,11 +1669,11 @@ msgstr "Dodati"
msgid "labels.add-custom-font"
msgstr "Dodajte custom font"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.adding"
msgstr "Dodavanje..."
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Administrator"
@@ -1682,7 +1681,7 @@ msgstr "Administrator"
msgid "labels.adobe-xd"
msgstr "Adobe XD"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Sve"
@@ -1705,7 +1704,7 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "Loš Gateway"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Odbaci"
@@ -1713,11 +1712,11 @@ msgstr "Odbaci"
msgid "labels.canva"
msgstr "Canva"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Zatvori"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:186
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:181
msgid "labels.collapse"
msgstr "Sažmi"
@@ -1729,11 +1728,11 @@ msgstr "Komentar"
msgid "labels.comment.mark-as-solved"
msgstr "Označi kao riješeno"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Komentari"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Zajenica"
@@ -1741,7 +1740,7 @@ msgstr "Zajenica"
msgid "labels.confirm-password"
msgstr "Potvrdi lozinku"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Nastavi"
@@ -1753,7 +1752,7 @@ msgstr "Nastavi sa"
msgid "labels.continue-with-penpot"
msgstr "Možeš nastaviti s Penpot računom"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "Kopiraj vezu"
@@ -1761,7 +1760,7 @@ msgstr "Kopiraj vezu"
msgid "labels.copyright"
msgstr "Kaleidos @2024"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Kreiraj"
@@ -1781,7 +1780,7 @@ msgstr "Custom fontovi"
msgid "labels.dashboard"
msgstr "Nadzorna ploča"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Izbriši"
@@ -1793,7 +1792,7 @@ msgstr "Izbriši komentar"
msgid "labels.delete-comment-thread"
msgstr "Izbriši thread"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Izbriši pozivnicu"
@@ -1810,15 +1809,15 @@ msgstr "Razvoj"
msgid "labels.director"
msgstr "Direktor"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "Odbaciti"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Nacrti"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Uredi"
@@ -1826,7 +1825,7 @@ msgstr "Uredi"
msgid "labels.edit-file"
msgstr "Uredi datoteku"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Urednik"
@@ -1835,11 +1834,11 @@ msgstr "Urednik"
msgid "labels.event"
msgstr "Događaj"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Isteklo"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Izvezi"
@@ -1867,7 +1866,7 @@ msgstr "Pružatelji fontova"
msgid "labels.font-variants"
msgstr "Stilovi"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Fontovi"
@@ -1881,11 +1880,11 @@ msgstr "CEO ili osnivač"
msgid "labels.freelancer"
msgstr "Freelancer"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "Github repozitorij"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Daj povratnu informaciju"
@@ -1897,19 +1896,19 @@ msgstr "Povratak"
msgid "labels.graphic-design"
msgstr "Grafički dizajn"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Centar za pomoć"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Sakrij riješene komentare"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:134
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:130
msgid "labels.import"
msgstr "Uvoz"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "Neaktivan"
@@ -1931,7 +1930,7 @@ msgstr "Interna pogreška"
msgid "labels.invision"
msgstr "InVision"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Pozivnice"
@@ -1939,7 +1938,7 @@ msgstr "Pozivnice"
msgid "labels.language"
msgstr "Jezik"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Biblioteke i predlošci"
@@ -1955,7 +1954,7 @@ msgstr "Prijava ili registracija"
msgid "labels.login"
msgstr "Prijava"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Odjava"
@@ -1963,11 +1962,11 @@ msgstr "Odjava"
msgid "labels.marketing"
msgstr "Marketing"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Član"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Članovi"
@@ -1975,15 +1974,15 @@ msgstr "Članovi"
msgid "labels.new-password"
msgstr "Nova lozinka"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "Sljedeći"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "Nemaš obavijesti o komentarima na čekanju."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "Nema pozivnica."
@@ -2000,7 +1999,7 @@ msgstr "Ups!"
msgid "labels.notifications"
msgstr "Obavijesti"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "1 datoteka"
@@ -2014,7 +2013,7 @@ msgstr[0] "1 ploča"
msgstr[1] "%s ploča"
msgstr[2] "%s ploča"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "1 projekt"
@@ -2034,7 +2033,7 @@ msgstr "Stara lozinka"
msgid "labels.only-yours"
msgstr "Samo tvoj"
-#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:309, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:338
+#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:310, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:339
msgid "labels.options"
msgstr "Mogućnosti"
@@ -2050,7 +2049,7 @@ msgstr "Ostalo (navesti)"
msgid "labels.other-short"
msgstr "Ostalo"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Vlasnik"
@@ -2058,7 +2057,7 @@ msgstr "Vlasnik"
msgid "labels.password"
msgstr "Lozinka"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "U tijeku"
@@ -2082,11 +2081,11 @@ msgstr "Upravljanje proizvodima"
msgid "labels.profile"
msgstr "Profil"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Projekti"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Release notes"
@@ -2100,11 +2099,11 @@ msgstr "Ponovno učitaj datoteku"
msgid "labels.remove"
msgstr "Ukloni"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Ukloni člana"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Preimenuj"
@@ -2132,7 +2131,7 @@ msgstr "novi odgovor"
msgid "labels.reply.thread"
msgstr "Odgovor"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "Ponovno pošalji pozivnicu"
@@ -2144,15 +2143,15 @@ msgstr "Vratiti"
msgid "labels.retry"
msgstr "Pokušaj ponovo"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Uloga"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Spremi"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:715
+#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:730
msgid "labels.search"
msgstr "Pretraživanje"
@@ -2180,11 +2179,11 @@ msgstr "U programiranom smo održavanju naših sustava."
msgid "labels.service-unavailable.main-message"
msgstr "Usluga je nedostupna"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:79
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:75
msgid "labels.sets"
msgstr "Skupovi"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Postavke"
@@ -2196,11 +2195,11 @@ msgstr "Dijeliti"
msgid "labels.share-prototype"
msgstr "Podijeli prototip"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Bibiloteke"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Prikaži sve komentare"
@@ -2208,11 +2207,11 @@ msgstr "Prikaži sve komentare"
msgid "labels.show-comments-list"
msgstr "Prikaži listu komentara"
-#: src/app/main/ui/workspace/comments.cljs:67, src/app/main/ui/workspace/comments.cljs:139
+#: src/app/main/ui/workspace/comments.cljs:68, src/app/main/ui/workspace/comments.cljs:140
msgid "labels.show-mentions"
msgstr "Prikaži samo svoja spominjanja"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Prikaži samo tvoje komentare"
@@ -2224,7 +2223,7 @@ msgstr "Skica"
msgid "labels.start"
msgstr "Start"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Status"
@@ -2246,7 +2245,7 @@ msgstr "Član tima"
msgid "labels.themes"
msgstr "Teme"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Upute"
@@ -2274,15 +2273,15 @@ msgstr "Prenesi custom fontove"
msgid "labels.uploading"
msgstr "Prijenos…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "Samo pogled"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Promatrač"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Webhookovi"
@@ -2290,11 +2289,11 @@ msgstr "Webhookovi"
msgid "labels.write-new-comment"
msgstr "Napiši novi komentar"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(ti)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "Tvoj korisnički račun"
@@ -2303,23 +2302,23 @@ msgstr "Tvoj korisnički račun"
msgid "labels.youtube"
msgstr "YouTube"
-#: src/app/main/ui/workspace/colorpicker.cljs:449, src/app/main/ui/workspace/colorpicker.cljs:450, src/app/main/ui/workspace/colorpicker.cljs:452
+#: src/app/main/ui/workspace/colorpicker.cljs:486, src/app/main/ui/workspace/colorpicker.cljs:487, src/app/main/ui/workspace/colorpicker.cljs:489
msgid "media.choose-image"
msgstr "Odaberite sliku"
-#: src/app/main/ui/workspace/colorpicker.cljs:244
+#: src/app/main/ui/workspace/colorpicker.cljs:256
msgid "media.gradient"
msgstr "Gradijent"
-#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:44, src/app/main/ui/ds/utilities/swatch.cljs:57, src/app/main/ui/inspect/attributes/common.cljs:63, src/app/main/ui/workspace/colorpicker.cljs:246, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:251
+#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:45, src/app/main/ui/ds/utilities/swatch.cljs:58, src/app/main/ui/inspect/attributes/common.cljs:44, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:65, src/app/main/ui/workspace/colorpicker.cljs:258, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:395
msgid "media.image"
msgstr "Slika"
-#: src/app/main/ui/inspect/attributes/common.cljs:74
+#: src/app/main/ui/inspect/attributes/common.cljs:55
msgid "media.image.short"
msgstr "slika"
-#: src/app/main/ui/workspace/colorpicker.cljs:442
+#: src/app/main/ui/workspace/colorpicker.cljs:479
msgid "media.keep-aspect-ratio"
msgstr "Zadrži omjer slike"
@@ -2337,7 +2336,7 @@ msgstr "Učitavanje slike…"
msgid "media.radial"
msgstr "Radijalno"
-#: src/app/main/ui/workspace/colorpicker.cljs:242
+#: src/app/main/ui/workspace/colorpicker.cljs:254
msgid "media.solid"
msgstr "Čvrsto"
@@ -2412,19 +2411,19 @@ msgstr "Stvori token"
msgid "modals.create-access-token.title"
msgstr "Generirajte pristupni token"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "Izradi webhook"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "Izradi webhook"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "URL tereta"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://primjer.com/postreceive"
@@ -2470,11 +2469,11 @@ msgstr ""
msgid "modals.delete-comment-thread.title"
msgstr "Izbriši razgovor"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "Jeste li sigurni da želite izbrisati ovu bilješku?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "Izbriši bilješku"
@@ -2522,11 +2521,11 @@ msgstr ""
msgid "modals.delete-font.title"
msgstr "Brisanje fonta"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Jesi li siguran/na da želiš izbrisati ovu stranicu?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Brisanje stranice"
@@ -2577,29 +2576,29 @@ msgstr[0] "Brisanje datoteke"
msgstr[1] "Brisanje datoteka"
msgstr[2] "Brisanje datoteka"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Brisanje tima"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Jesi li siguran/na da želiš izbrisati ovaj tim? Svi projekti i datoteke "
"povezane s timom biti će trajno izbrisane."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Brisanje tima"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Brisanje člana"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Jesi li siguran/na da želiš izbrisati ovog člana iz tima?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Brisanje člana tima"
@@ -2616,57 +2615,57 @@ msgstr[2] ""
"Sredstva koja su već korištena u tim datotekama ostat će ondje (nijedan "
"dizajn neće biti pokvaren)."
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "Izbriši webhook"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "Jeste li sigurni da želite izbrisati ovaj webhook?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "Brisanje webhooka"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "Uredi webhook"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "Uredi webhook"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Pošalji pozivnicu"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "E-mail, odvojeno zarezom"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr ""
"Neke e-adrese su od trenutačnih članova tima. Njima pozivnice neće biti "
"poslane."
-#: src/app/main/ui/dashboard/team.cljs:220
+#: src/app/main/ui/dashboard/team.cljs:222
msgid "modals.invite-team-member.text"
msgstr ""
"Možete pozvati članove u tim kako bi mogli pristupiti ovoj datoteci i svim "
"datotekama tima."
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "Pozovi članove u tim"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"Budući da si jedini član ovog tima, tim će biti izbrisan zajedno sa svojim "
"projektima i datotekama."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "Jesi li siguran/na da želiš napustiti tim %s?"
@@ -2694,15 +2693,15 @@ msgstr "Odaberi člana za promociju"
msgid "modals.leave-and-reassign.title"
msgstr "Prije nego odeš"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Napusti tim"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Jesi li siguran/na da želiš napustiti ovaj tim?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Napuštanje tima"
@@ -2727,39 +2726,39 @@ msgstr[0] "Premjesti biblioteku"
msgstr[1] "Premjesti biblioteke"
msgstr[2] "Premjesti biblioteke"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "Pomakni za"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Prenesi vlasništvo"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"Ako preneseš vlasništvo, promijenit ćeš svoju ulogu u Administrator, čime "
"ćeš izgubiti neka dopuštenja za ovaj tim. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr ""
"Ti si trenutni vlasnik ovog tima. Jesi li siguran/na da %s želiš postaviti "
"za novog vlasnika tima?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Novi vlasnik tima"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "Objavi"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "Vaša biblioteka je prazna. Jeste li sigurni da je želite objaviti?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "Objavi praznu biblioteku"
@@ -2818,21 +2817,21 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Ažuriraj komponente u zajedničkoj biblioteci"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Ažuriraj"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Poništi"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"Upravo ćeš ažurirati komponentu u zajedničkoj biblioteci. To može utjecati "
"na druge datoteke koje ga koriste."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Ažuriraj komponentu u zajedničkoj biblioteci"
@@ -2944,11 +2943,11 @@ msgstr ""
msgid "notifications.by-code.upgrade-version"
msgstr "Dostupna je nova verzija, molimo osvježite stranicu"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "Pozivnica je uspješno poslana"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "Veza pozivnice je kopirana"
@@ -3095,7 +3094,7 @@ msgstr ""
"Ne zaboravi uključiti sve. Programere, dizajnere, menadžere... raznolikost "
"se isplati :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "Pozovi s ulogom:"
@@ -3313,665 +3312,649 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "Idi na prijavu"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "Odvojiti"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "Izmješano"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:283
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:423
msgid "settings.remove-color"
msgstr "Uklonite boju"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:288
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:428
msgid "settings.select-this-color"
msgstr "Odaberite stavke koristeći ovaj stil"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Osnove"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "Nadzorna ploča"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Gledatelj"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Radni prostor"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Poravnanje"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Uredi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "Generičko"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "Generičko"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Glavni meni"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "Izmijeni layere"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Navigacija"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Navigacija"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Navigacija"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Paneli"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Putanje"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Oblici"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "Tekstovi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Alati"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Komentari"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "Dodaj čvor"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "Poravnaj dno"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "Poravnajte središte"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "Poravnaj sredinu vodoravno"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "Poravnajte obostrano"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "Poravnaj lijevo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "Poravnaj desno"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "Poravnaj vrh"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "Poravnaj sredinu okomito"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "Kreiraj ploču iz odabira"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "Uključi/isključi podebljano"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "Boolean razlika"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "Boolean isključenje"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "Boolean presijek"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "Boolean unija"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "Premijesti u pozadinu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Premiijesti nazad"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "Premijesti naprijed"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "Premijesti skroz naprijed"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "Obriši povrat"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Kopiraj"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
msgid "shortcuts.copy-link"
msgstr "Kopiraj vezu u međuspremnik"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "Kreiraj novo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Izreži"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "Zoom out"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Izbriši"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "Izbriši čvor"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "Odvoji komponentu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Krivulja"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "Elipsa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Panel"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "Ucrtaj put"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Put"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Pravokutnik"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Tekst"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Dupliciraj"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "Poništi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "Izvezi oblike"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "Zumiraj da stane sve"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "Okreni vodoravno"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "Okreni okomito"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "Smanji veličinu fonta"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "Povećaj veličinu fonta"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "Idi na nacrte"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "Idi na zajedničke biblioteke"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Traži"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Grupiraj"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "Distribuiraj vodoravno"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "Prikaži/sakrij UI"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "Zoom in"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "Umetni sliku"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "Prebaci kurziv"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "Spoji čvorove"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
-msgid "shortcuts.letter-spacing-dec"
-msgstr "Smanjite razmak između slova"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "Povećaj razmak između slova"
-
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
-msgid "shortcuts.line-height-dec"
-msgstr "Smanji visinu linije"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
-msgid "shortcuts.line-height-inc"
-msgstr "Povećaj visinu linije"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.line-through"
msgstr "Uključi precrtavanje"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "Izradi rub"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "Izradi krivulju"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "Maskiraj"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "Spoji čvorove"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "Premijesti"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "Premijesti brzo dolje"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "Premijesti brzo lijevo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "Premijesti brzo desno"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "Premijesti brzo gore"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "Premijesti čvor"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "Premijesti dolje"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "Premijesti lijevo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "Premijesti desno"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "Premijesti gore"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "Slijedeća ploča"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "Nema pronađenih prečaca"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "Postavi neprozirnost na 100%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "Postavi neprozirnost na 10%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "Postavi neprozirnost na 20%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "Postavi neprozirnost na 30%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "Postavi neprozirnost na 40%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "Postavi neprozirnost na 50%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "Postavi neprozirnost na 60%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "Postavi neprozirnost na 70%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "Postavi neprozirnost na 80%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "Postavi neprozirnost na 90%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "Birač boja"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "Idi na odjeljak s komentarima"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "Idi na nadzornu ploču"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "Idite na odjeljak pregleda preglednika"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "Idi na odjeljak interakcija"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "Idi na odjeljak interakcija gledatelja"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "Idi na radni prostor"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " ili "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Zaljepi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "Prethodna ploča"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "Ponovi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
msgid "shortcuts.rename"
msgstr "Preimenujte"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "Resetiraj zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
msgid "shortcuts.scale"
msgstr "Skalirajte"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "Pretraži prečace"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "Označi sve"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
msgid "shortcuts.select-next"
msgstr "Odaberite sljedeći sloj"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
msgid "shortcuts.select-parent-layer"
msgstr "Odaberite nadređeni sloj"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
msgid "shortcuts.select-prev"
msgstr "Odaberite prethodni sloj"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "Posebni čvorovi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "Prikaži/sakrij \"pixel grid\""
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "Prikaži/sakrij prečace"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "Priključi na čvorove"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "Priključi na \"pixel grid\""
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "Počni uređivanje"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "Počni mjerenje"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "Zaustavi mjerenje"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "Postavi sličice"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "Prečaci na tipkovnici"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "Promijena dinamičkog poravnanja"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "Promijena stavaka"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "Promijena palete boja"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "Promijena fokus moda"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "Promijeni cijeli zaslon"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
msgid "shortcuts.toggle-guides"
msgstr "Prikaži / Sakrij vodiče"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "Promijena povijesti"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "Promijena layera"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "Dodavanje/uklanjanje flex rasporeda"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
msgid "shortcuts.toggle-layout-grid"
msgstr "Dodaj/ukloni grid raspored"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "Zaključaj odabrano"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "Zaključaj proporcije"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
msgid "shortcuts.toggle-rulers"
msgstr "Prikaži / Sakrij ravnala"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
msgid "shortcuts.toggle-snap-guides"
msgstr "Pričvrstite na vodilice"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
msgid "shortcuts.toggle-snap-ruler-guide"
msgstr "Pričvrstite na vodilice ravnala"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "Promijeni paletu teksta"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
msgid "shortcuts.toggle-theme"
msgstr "Promjena teme"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "Promijeni vidljivost"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "Promijeni stil zooma"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "Uključi podcrtavanje"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Poništi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Razgrupiraj"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Makni masku"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "Distribuiraj okomito"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "Smanjenje zuma objektiva"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "Povećanje zuma objektiva"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "Zoomiraj na selektirano"
@@ -4027,19 +4010,19 @@ msgstr "Lozinka - Penpot"
msgid "title.settings.profile"
msgstr "Profil - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "Pozivnice - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "Članovi - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Postavke - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "Webhookovi - %s - Penpot"
@@ -4111,43 +4094,43 @@ msgstr "Prikaži interakcije na klik"
msgid "viewer.header.sitemap"
msgstr "Sitemap"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "Zadnja isporuka bila je uspješna."
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Poravnaj vodoravno u sredinu (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "Distribuiraj vodoravni razmak (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Poravnaj lijevo (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Poravnaj desno (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Poravnaj dolje (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Poravnaj okomito u sredinu (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "Distribuiraj okomiti razmak (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Poravnaj gore (%s)"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:163
+#: src/app/main/ui/workspace/sidebar/assets.cljs:172
msgid "workspace.assets.add-library"
msgstr "Dodaj biblioteku"
@@ -4156,19 +4139,19 @@ msgstr "Dodaj biblioteku"
msgid "workspace.assets.assets"
msgstr "Stavke"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "Sve stavke"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Boje"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:493
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:497
msgid "workspace.assets.colors.add-color"
msgstr "Dodajte boju"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Komponente"
@@ -4176,19 +4159,19 @@ msgstr "Komponente"
msgid "workspace.assets.components.add-component"
msgstr "Dodajte komponentu"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "Kreiraj grupu"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr "Tvoje stavke će se automatski imenovati kao \"naziv grupe / naziv stavke\""
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Izbriši"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "Dupliciraj"
@@ -4196,11 +4179,11 @@ msgstr "Dupliciraj"
msgid "workspace.assets.duplicate-main"
msgstr "Dupliciraj glavni"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Uredi"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:177
+#: src/app/main/ui/workspace/sidebar/assets.cljs:186
msgid "workspace.assets.filter"
msgstr "Filter"
@@ -4209,23 +4192,23 @@ msgstr "Filter"
msgid "workspace.assets.graphics"
msgstr "Grafika"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:576
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:190, src/app/main/ui/workspace/sidebar/assets/components.cljs:576
msgid "workspace.assets.grid-view"
msgstr "Grid prikaz"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Grupa"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "Ime grupe"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:572
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:191, src/app/main/ui/workspace/sidebar/assets/components.cljs:572
msgid "workspace.assets.list-view"
msgstr "Popisni prikaz"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "lokalna biblioteka"
@@ -4237,15 +4220,15 @@ msgstr "Nisu pronađene stavke"
msgid "workspace.assets.open-library"
msgstr "Otvori datoteku biblioteke"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Preimenuj"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "Preimenuj grupu"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "Pretraži stavke"
@@ -4262,22 +4245,22 @@ msgstr[2] "%s odabranih stavki"
msgid "workspace.assets.shared-library"
msgstr "Zajednička biblioteka"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:237
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:235
msgid "workspace.assets.sidebar.components"
msgid_plural "workspace.assets.sidebar.components"
msgstr[0] "1 komponenta"
msgstr[1] "%s komponente"
msgstr[2] "%s komponente"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:193
+#: src/app/main/ui/workspace/sidebar/assets.cljs:204
msgid "workspace.assets.sort"
msgstr "Sortiraj"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Tipografija"
-#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:404
+#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:405
msgid "workspace.assets.typography.add-typography"
msgstr "Dodajte tipografiju"
@@ -4302,7 +4285,7 @@ msgstr "Razmak između slova"
msgid "workspace.assets.typography.line-height"
msgstr "Visina linije"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -4314,59 +4297,59 @@ msgstr "Stilovi teksta"
msgid "workspace.assets.typography.text-transform"
msgstr "Transformiraj tekst"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "Razgrupiraj"
-#: src/app/main/ui/workspace/context_menu.cljs:791
+#: src/app/main/ui/workspace/context_menu.cljs:794
msgid "workspace.context-menu.grid-cells.area"
msgstr "Stvorite područje"
-#: src/app/main/ui/workspace/context_menu.cljs:794
+#: src/app/main/ui/workspace/context_menu.cljs:797
msgid "workspace.context-menu.grid-cells.create-board"
msgstr "Napravi ploču"
-#: src/app/main/ui/workspace/context_menu.cljs:786
+#: src/app/main/ui/workspace/context_menu.cljs:789
msgid "workspace.context-menu.grid-cells.merge"
msgstr "Spoji ćelije"
-#: src/app/main/ui/workspace/context_menu.cljs:749
+#: src/app/main/ui/workspace/context_menu.cljs:752
msgid "workspace.context-menu.grid-track.column.add-after"
msgstr "Dodajte 1 stupac desno"
-#: src/app/main/ui/workspace/context_menu.cljs:748
+#: src/app/main/ui/workspace/context_menu.cljs:751
msgid "workspace.context-menu.grid-track.column.add-before"
msgstr "Dodajte 1 stupac lijevo"
-#: src/app/main/ui/workspace/context_menu.cljs:750
+#: src/app/main/ui/workspace/context_menu.cljs:753
msgid "workspace.context-menu.grid-track.column.delete"
msgstr "Izbriši stupac"
-#: src/app/main/ui/workspace/context_menu.cljs:751
+#: src/app/main/ui/workspace/context_menu.cljs:754
msgid "workspace.context-menu.grid-track.column.delete-shapes"
msgstr "Izbriši stupac i oblike"
-#: src/app/main/ui/workspace/context_menu.cljs:747
+#: src/app/main/ui/workspace/context_menu.cljs:750
msgid "workspace.context-menu.grid-track.column.duplicate"
msgstr "Dupliciraj stupac"
-#: src/app/main/ui/workspace/context_menu.cljs:756
+#: src/app/main/ui/workspace/context_menu.cljs:759
msgid "workspace.context-menu.grid-track.row.add-after"
msgstr "Dodajte 1 red ispod"
-#: src/app/main/ui/workspace/context_menu.cljs:755
+#: src/app/main/ui/workspace/context_menu.cljs:758
msgid "workspace.context-menu.grid-track.row.add-before"
msgstr "Dodajte 1 red iznad"
-#: src/app/main/ui/workspace/context_menu.cljs:757
+#: src/app/main/ui/workspace/context_menu.cljs:760
msgid "workspace.context-menu.grid-track.row.delete"
msgstr "Izbriši red"
-#: src/app/main/ui/workspace/context_menu.cljs:758
+#: src/app/main/ui/workspace/context_menu.cljs:761
msgid "workspace.context-menu.grid-track.row.delete-shapes"
msgstr "Izbrišite red i oblike"
-#: src/app/main/ui/workspace/context_menu.cljs:754
+#: src/app/main/ui/workspace/context_menu.cljs:757
msgid "workspace.context-menu.grid-track.row.duplicate"
msgstr "Dupliciraj redak"
@@ -4374,7 +4357,7 @@ msgstr "Dupliciraj redak"
msgid "workspace.focus.focus-mode"
msgstr "Fokus mode"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "Fokus isključen"
@@ -4394,11 +4377,11 @@ msgstr "Linearni gradijent"
msgid "workspace.gradients.radial"
msgstr "Radijalni gradijent"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "Onemogući dinamičko poravnanje"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "Onemogući proporcionalno mjerilo"
@@ -4407,23 +4390,23 @@ msgstr "Onemogući proporcionalno mjerilo"
msgid "workspace.header.menu.disable-scale-text"
msgstr "Onemogući skaliranje teksta"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "Onemogući \"snap to guides\""
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "Onemogući \"snap to pixel\""
-#: src/app/main/ui/workspace/main_menu.cljs:215
+#: src/app/main/ui/workspace/main_menu.cljs:243
msgid "workspace.header.menu.disable-snap-ruler-guides"
msgstr "Onemogući spajanje na vodilice ravnala"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "Omogući dinamičko poravnanje"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "Omogući proporcionalno mjerilo"
@@ -4432,51 +4415,51 @@ msgstr "Omogući proporcionalno mjerilo"
msgid "workspace.header.menu.enable-scale-text"
msgstr "Omogući skaliranje teksta"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "Pričvrstite na vodilice"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "Omogući \"snap to pixel\""
-#: src/app/main/ui/workspace/main_menu.cljs:216
+#: src/app/main/ui/workspace/main_menu.cljs:244
msgid "workspace.header.menu.enable-snap-ruler-guides"
msgstr "Pričvrstite na vodilice ravnala"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "Sakrij nazive ploča"
-#: src/app/main/ui/workspace/main_menu.cljs:348
+#: src/app/main/ui/workspace/main_menu.cljs:376
msgid "workspace.header.menu.hide-guides"
msgstr "Sakrij vodiče"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "Sakrij paletu boja"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "Sakrij \"pixel grid\""
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "Sakrij \"rules\""
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "Sakrij paletu boja"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Uredi"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "Datoteka"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "Pomoć i informacije"
@@ -4485,59 +4468,59 @@ msgstr "Pomoć i informacije"
msgid "workspace.header.menu.option.power-up"
msgstr "Ojačajte svoj plan"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "Preferencije"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "Pregled"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "Ponovi"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "Odaberi sve"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "Prikaži nazive ploča"
-#: src/app/main/ui/workspace/main_menu.cljs:349
+#: src/app/main/ui/workspace/main_menu.cljs:377
msgid "workspace.header.menu.show-guides"
msgstr "Prikaži vodiče"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "Prikaži paletu boja"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "Prikaži \"pixel grid\""
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Prikaži \"rules\""
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "Prikaži paletu fontova"
-#: src/app/main/ui/workspace/main_menu.cljs:288
+#: src/app/main/ui/workspace/main_menu.cljs:316
msgid "workspace.header.menu.toggle-dark-theme"
msgstr "Prebacite se na tamnu temu"
-#: src/app/main/ui/workspace/main_menu.cljs:286, src/app/main/ui/workspace/main_menu.cljs:289
+#: src/app/main/ui/workspace/main_menu.cljs:314, src/app/main/ui/workspace/main_menu.cljs:317
msgid "workspace.header.menu.toggle-light-theme"
msgstr "Prebaci na svijetlu temu"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "Poništi"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Resetiraj"
@@ -4553,7 +4536,7 @@ msgstr "Spremljeno"
msgid "workspace.header.saving"
msgstr "Spremanje"
-#: src/app/main/ui/workspace/right_header.cljs:239
+#: src/app/main/ui/workspace/right_header.cljs:240
msgid "workspace.header.share"
msgstr "Podijeli"
@@ -4562,11 +4545,11 @@ msgstr "Podijeli"
msgid "workspace.header.unsaved"
msgstr "Nespremljene izmijene"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "Način prikaza (%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "Zum"
@@ -4578,7 +4561,7 @@ msgstr "Ispuna - Skaliraj za popunjavanje"
msgid "workspace.header.zoom-fit"
msgstr "Prilagodi - Smanji veličinu da pristane"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "Zumiraj da stane sve"
@@ -4586,19 +4569,19 @@ msgstr "Zumiraj da stane sve"
msgid "workspace.header.zoom-full-screen"
msgstr "Cijeli ekran"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "Zumiraj na odabrano"
-#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:621
msgid "workspace.layout_grid.editor.options.edit-grid"
msgstr "Uredi grid"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1300
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1301
msgid "workspace.layout_grid.editor.options.exit"
msgstr "Izlaz"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:491
msgid "workspace.layout_grid.editor.padding.expand"
msgstr "Prikaži 4-strane opcije podstava"
@@ -4614,7 +4597,7 @@ msgstr "Gotovo"
msgid "workspace.layout_grid.editor.top-bar.locate"
msgstr "Pronađi"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1326
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1327
msgid "workspace.layout_grid.editor.top-bar.locate.tooltip"
msgstr "Pronađite grid raspored"
@@ -4623,10 +4606,6 @@ msgstr "Pronađite grid raspored"
msgid "workspace.libraries.add"
msgstr "Dodaj"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s boje"
-
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
msgstr "U vašoj biblioteci još nema stilova boja"
@@ -4653,43 +4632,35 @@ msgstr "Nedavno korištene boje"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "RGB komplementarno"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Spremi u stil boja"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s komponente"
-
-#: src/app/main/ui/workspace/libraries.cljs:371
+#: src/app/main/ui/workspace/libraries.cljs:404
msgid "workspace.libraries.empty.add-some"
msgstr "Ili dodajte neke od ovih za isprobavanje:"
-#: src/app/main/ui/workspace/libraries.cljs:365
+#: src/app/main/ui/workspace/libraries.cljs:398
msgid "workspace.libraries.empty.no-libraries"
msgstr "U vašem timu nema dijeljenih biblioteka, možete ih potražiti"
-#: src/app/main/ui/workspace/libraries.cljs:369
+#: src/app/main/ui/workspace/libraries.cljs:402
msgid "workspace.libraries.empty.some-templates"
msgstr "neki predlošci ovdje"
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Biblioteka datoteka"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s grafike"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "BIBLIOTEKE U OVOJ DATOTECI"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "BIBLIOTEKE"
@@ -4698,11 +4669,11 @@ msgstr "BIBLIOTEKE"
msgid "workspace.libraries.library"
msgstr "BIBLIOTEKA"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "AŽURIRANJE KNJIŽNICE"
-#: src/app/main/ui/workspace/libraries.cljs:360
+#: src/app/main/ui/workspace/libraries.cljs:393
msgid "workspace.libraries.loading"
msgstr "Učitavanje…"
@@ -4711,79 +4682,75 @@ msgstr "Učitavanje…"
msgid "workspace.libraries.more-templates"
msgstr "Možete tražiti "
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "Ne postoje zajedničke biblioteke koje je potrebno ažurirati"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "Nisu pronađeni rezultati za “%s”"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "Pretraži zajedničke biblioteke"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "ZAJEDNIČKE BIBLIOTEKE"
-#: src/app/main/ui/workspace/libraries.cljs:352
+#: src/app/main/ui/workspace/libraries.cljs:385
msgid "workspace.libraries.shared-library-btn"
msgstr "Povežite biblioteku"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Višestruke tipografije"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Prekini vezu svih tipografija"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s tipografije"
-
-#: src/app/main/ui/workspace/libraries.cljs:323
+#: src/app/main/ui/workspace/libraries.cljs:354
msgid "workspace.libraries.unlink-library-btn"
msgstr "Odspojite biblioteku"
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Ažuriranje"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "vidjeti sve promjene"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "AŽURIRANJA"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "Klikni gumb + za dodavanje interakcija."
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:96
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:97
msgid "workspace.options.blur-options.add-blur"
msgstr "Dodajte zamućenje"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:117
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:118
msgid "workspace.options.blur-options.remove-blur"
msgstr "Ukloni zamućenje"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Zamuti"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "Grupiraj zamućenje"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "Odabir zamućenja"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:114
msgid "workspace.options.blur-options.toggle-blur"
msgstr "Uključi/isključi zamućenje"
@@ -4791,39 +4758,39 @@ msgstr "Uključi/isključi zamućenje"
msgid "workspace.options.canvas-background"
msgstr "Pozadina canvasa"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "Isjeci sadržaj"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Komponenta"
-#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:193
+#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:196
msgid "workspace.options.component.annotation"
msgstr "Bilješka"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "Kopirati"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:185
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:188
msgid "workspace.options.component.create-annotation"
msgstr "Napravite bilješku"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "Uredite bilješku"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "Glavni"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:706
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:721
msgid "workspace.options.component.swap"
msgstr "Zamijenite komponentu"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:765
msgid "workspace.options.component.swap.empty"
msgstr "U ovoj biblioteci još nema sredstava"
@@ -4867,7 +4834,7 @@ msgstr "Vrh"
msgid "workspace.options.constraints.topbottom"
msgstr "Vrh i dno"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Dizajn"
@@ -4880,22 +4847,22 @@ msgstr "Izvoz"
msgid "workspace.options.export-multiple"
msgstr "Izvezi selektirano"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "Izvezi 1 element"
msgstr[1] "Izvezi %s elemenata"
msgstr[2] "Izvezi %s elemenata"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:188
+#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:214
msgid "workspace.options.export.add-export"
msgstr "Dodaj izvoz"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:235
+#: 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 "Ukloni izvoz"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Sufiks"
@@ -4903,7 +4870,7 @@ msgstr "Sufiks"
msgid "workspace.options.exporting-complete"
msgstr "Izvoz završen"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "Izvoz…"
@@ -4915,27 +4882,27 @@ msgstr "Izvoz nije uspio"
msgid "workspace.options.exporting-object-slow"
msgstr "Izvoz neočekivano spor"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Ispuni"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:194
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:234
msgid "workspace.options.fill.add-fill"
msgstr "Dodajte ispunu"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:208
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:248
msgid "workspace.options.fill.remove-fill"
msgstr "Ukloni ispunu"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:392
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:474
msgid "workspace.options.fit-content"
msgstr "Promijenite veličinu ploče da odgovara sadržaju"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "Dodaj početak toka"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:178
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:179
msgid "workspace.options.flows.flow"
msgstr "Tok"
@@ -4944,19 +4911,19 @@ msgstr "Tok"
msgid "workspace.options.flows.flow-start"
msgstr "Početak toka"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "Flow započinje"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:155
msgid "workspace.options.flows.remove-flow"
msgstr "Uklonite tok"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Auto"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "Stupci"
@@ -4965,7 +4932,7 @@ msgstr "Stupci"
msgid "workspace.options.grid.grid-title"
msgstr "Grid"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Boja"
@@ -4974,15 +4941,15 @@ msgstr "Boja"
msgid "workspace.options.grid.params.columns"
msgstr "Stupci"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "Oluk"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Visina"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Margina"
@@ -4991,7 +4958,7 @@ msgstr "Margina"
msgid "workspace.options.grid.params.rows"
msgstr "Redovi"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "Postavi kao zadano"
@@ -5005,159 +4972,159 @@ msgstr "Veličina"
msgid "workspace.options.grid.params.type"
msgstr "Tip"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Dno"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Sredina"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Lijevo"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Desno"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "Razvuci"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "Vrh"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "Koristi zadano"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Širina"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Redovi"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "Kvadrat"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Popunjavanje grupe"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Grupni potez"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:326
msgid "workspace.options.guides.add-guide"
msgstr "Dodajte vodilicu"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:187
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:188
msgid "workspace.options.guides.remove-guide"
msgstr "Uklonite vodilicu"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:320
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
msgid "workspace.options.guides.title"
msgstr "Vodilice"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:183
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:184
msgid "workspace.options.guides.toggle-guide"
msgstr "Uključi/isključi vodilicu"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "Visina"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "Pregledati"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "Akcija"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "Nakon kašnjenja"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "Animacija"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "Razriješi"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "Nijedan"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "Gurni"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "Slide"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "auto"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "Dodajte pozadinsko preklapanje"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "Zatvori kada klikneš izvana"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "Zatvori preklapanje"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "Zatvori preklapanje: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "Odgoda"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "Odredište"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "Trajanje"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "Easing"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "Ease"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "Ease in"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "Ease in out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "Ease out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "Linearno"
@@ -5166,47 +5133,47 @@ msgstr "Linearno"
msgid "workspace.options.interaction-in"
msgstr "U"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "Ulaz mišem"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "Izlaz mišem"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "ms"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "Idi do"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "Idi do: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(nije spremno)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "Offset učinak"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "Na klik"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "Otvoreno preklapanje"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "Otvoreno preklapanje: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "Otvoreni url"
@@ -5215,87 +5182,87 @@ msgstr "Otvoreni url"
msgid "workspace.options.interaction-out"
msgstr "Vani"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "Dolje sredina"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "Dolje lijevo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "Dolje desno"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "Sredina"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "Priručnik"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "Gore sredina"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "Gore lijevo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "Gore desno"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "Pozicija"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "Sačuvaj položaj scrolanja"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "Prethodni ekran"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "U odnosu na"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "sebe"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "Uključi/isključi preklapanje"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "Uključi/isključi preklapanje: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "Okidač"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "Na hover"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "Dok pritisneš"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "Interakcije"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:735
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:736
msgid "workspace.options.interactions.add-interaction"
msgstr "Dodajte interakciju"
@@ -5304,67 +5271,67 @@ msgstr "Dodajte interakciju"
msgid "workspace.options.interactions.remove-interaction"
msgstr "Ukloni interakciju"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "Boja"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "Izgaranje boje"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "Izbjegavanje boja"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "Zatamni"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "Razlika"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "Ekskluzija"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Tvrdo svjetlo"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Nijansa"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Posvijetli"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "Svjetlost"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "Umnoži"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "Normalno"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "Preklapanje"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "Saturacija"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Ekran"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "Nježno svjetlo"
@@ -5383,7 +5350,7 @@ msgstr "Grupiraj layere"
msgid "workspace.options.layer-options.title.multiple"
msgstr "Označeni layeri"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:202
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:207, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:213
msgid "workspace.options.layer-options.toggle-layer"
msgstr "Uključi/isključi vidljivost sloja"
@@ -5392,19 +5359,19 @@ msgstr "Uključi/isključi vidljivost sloja"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "Napredne opcije"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "Max.visina"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "Max.širina"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "Min.visina"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "Min.širina"
@@ -5518,15 +5485,15 @@ msgstr "prostor između"
msgid "workspace.options.layout.top"
msgstr "Vrh"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "Više boja"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "Više boja iz biblioteke"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "Neprozirnost"
@@ -5535,35 +5502,35 @@ msgstr "Neprozirnost"
msgid "workspace.options.position"
msgstr "Pozicija"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "Prototip"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "Radius"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "Dolje lijevo"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "Dolje desno"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "Gore lijevo"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "Gore desno"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:152
msgid "workspace.options.radius.hide-all-corners"
msgstr "Sažmi neovisni radijus"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:136
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:153
msgid "workspace.options.radius.show-single-corners"
msgstr "Prikaži neovisni radijus"
@@ -5575,7 +5542,7 @@ msgstr "Nedavni"
msgid "workspace.options.retry"
msgstr "Pokušaj ponovo"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "Rotacija"
@@ -5583,31 +5550,31 @@ msgstr "Rotacija"
msgid "workspace.options.search-font"
msgstr "Pretraži font"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr "Odaberi oblik, ploču ili grupu za povlačenje veze na drugu ploču."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "Odabrane boje"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "Ispuna odabira"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "Potez selektirano"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:341
msgid "workspace.options.shadow-options.add-shadow"
msgstr "Dodajte sjenu"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "Zamućeno"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "Boja sjene"
@@ -5619,55 +5586,56 @@ msgstr "Spusti sjenu"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "Unutarnja sjena"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:348
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:183, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:354
msgid "workspace.options.shadow-options.remove-shadow"
msgstr "Ukloni sjenu"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "Proširi"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "Sjena"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "Grupiraj sjenu"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "Odabir sjena"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:174
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:179
msgid "workspace.options.shadow-options.toggle-shadow"
msgstr "Uključi/isključi sjenu"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "Prikaži u izvozu"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "Prikaži u načinu pregleda"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "Veličina"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "Unaprijed postavljena veličina"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "Potez"
@@ -5676,7 +5644,7 @@ msgstr "Potez"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "Kružni marker"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "Krug"
@@ -5685,7 +5653,7 @@ msgstr "Krug"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "Dijamantni marker"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "Dijamant"
@@ -5694,19 +5662,19 @@ msgstr "Dijamant"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "Strelica linije"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "Strelica"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "Nijedan"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "Okruglo"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "Kvadrat"
@@ -5715,7 +5683,7 @@ msgstr "Kvadrat"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "Kvadratni marker"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "Pravokutnik"
@@ -5724,83 +5692,83 @@ msgstr "Pravokutnik"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "Trokutna strelica"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "Trokut"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "Boja poteza"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "Širina poteza"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:180
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:189
msgid "workspace.options.stroke.add-stroke"
msgstr "Dodajte boju poteza"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "Sredina"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "Crtkano"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "Točkasto"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "Unutra"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "Miješano"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "Vani"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:193
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:202
msgid "workspace.options.stroke.remove-stroke"
msgstr "Uklonite potez"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "Čvrsto"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "Poravnaj dno"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "Poravnaj sredinu"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "Poravnaj vrh"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "LTR"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "RTL"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "Automatska visina"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "Automatska širina"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "Popravljeno"
@@ -5822,35 +5790,35 @@ msgstr "Mala slova"
msgid "workspace.options.text-options.none"
msgstr "Nijedan"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "Precrtanko (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "Poravnaj sredinu"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "Složi u blok"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "Poravnaj lijevo"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "Poravnaj desno"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "Tekst"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "Grupiraj tekst"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "Selektiraj tekst"
@@ -5859,7 +5827,7 @@ msgstr "Selektiraj tekst"
msgid "workspace.options.text-options.titlecase"
msgstr "Velika i mala slova"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "Podcrtano (%s)"
@@ -5868,19 +5836,19 @@ msgstr "Podcrtano (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "Velika slova"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr "Upotrijebi play gumb u zaglavlju za pokretanje prikaza prototipa."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "Širina"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "X os"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Y"
@@ -5924,78 +5892,78 @@ msgstr "Odvoji čvorove(%s)"
msgid "workspace.path.actions.snap-nodes"
msgstr "Priključi čvorove (%s)"
-#: src/app/main/ui/workspace/plugins.cljs:83
+#: src/app/main/ui/workspace/plugins.cljs:84
msgid "workspace.plugins.button-open"
msgstr "Otvoriti"
-#: src/app/main/ui/workspace/plugins.cljs:197
+#: src/app/main/ui/workspace/plugins.cljs:198
#, markdown
msgid "workspace.plugins.discover"
msgstr "Otkrijte [više dodataka](%s)"
-#: src/app/main/ui/workspace/plugins.cljs:204
+#: src/app/main/ui/workspace/plugins.cljs:205
msgid "workspace.plugins.empty-plugins"
msgstr "Još nema instaliranih dodataka"
-#: src/app/main/ui/workspace/plugins.cljs:191
+#: src/app/main/ui/workspace/plugins.cljs:192
msgid "workspace.plugins.error.manifest"
msgstr "Manifest dodatka nije točan."
-#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:755, src/app/main/ui/workspace/plugins.cljs:82
+#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:783, src/app/main/ui/workspace/plugins.cljs:83
msgid "workspace.plugins.error.need-editor"
msgstr "Morate biti urednik da biste koristili ovaj dodatak"
-#: src/app/main/ui/workspace/plugins.cljs:187
+#: src/app/main/ui/workspace/plugins.cljs:188
msgid "workspace.plugins.error.url"
msgstr "Dodatak ne postoji ili URL nije točan."
-#: src/app/main/ui/workspace/plugins.cljs:183
+#: src/app/main/ui/workspace/plugins.cljs:184
msgid "workspace.plugins.install"
msgstr "Instalirati"
-#: src/app/main/ui/workspace/plugins.cljs:213
+#: src/app/main/ui/workspace/plugins.cljs:214
msgid "workspace.plugins.installed-plugins"
msgstr "Instalirani dodaci"
-#: src/app/main/ui/workspace/main_menu.cljs:710
+#: src/app/main/ui/workspace/main_menu.cljs:738
msgid "workspace.plugins.menu.plugins-manager"
msgstr "Upravitelj dodataka"
-#: src/app/main/ui/workspace/main_menu.cljs:906
+#: src/app/main/ui/workspace/main_menu.cljs:934
msgid "workspace.plugins.menu.title"
msgstr "Dodaci"
-#: src/app/main/ui/workspace/plugins.cljs:374
+#: src/app/main/ui/workspace/plugins.cljs:375
msgid "workspace.plugins.permissions-update.title"
msgstr "AŽURIRAJTE OVAJ DODATAK"
-#: src/app/main/ui/workspace/plugins.cljs:378
+#: src/app/main/ui/workspace/plugins.cljs:379
msgid "workspace.plugins.permissions-update.warning"
msgstr ""
"Dodatak je izmijenjen otkad ste ga zadnji put otvorili. Sada također želi "
"pristupiti:"
-#: src/app/main/ui/workspace/plugins.cljs:278
+#: src/app/main/ui/workspace/plugins.cljs:279
msgid "workspace.plugins.permissions.allow-download"
msgstr "Pokrenite preuzimanje datoteka."
-#: src/app/main/ui/workspace/plugins.cljs:271
+#: src/app/main/ui/workspace/plugins.cljs:272
msgid "workspace.plugins.permissions.comment-read"
msgstr "Pročitajte svoje komentare i odgovore."
-#: src/app/main/ui/workspace/plugins.cljs:265
+#: src/app/main/ui/workspace/plugins.cljs:266
msgid "workspace.plugins.permissions.comment-write"
msgstr "Pročitajte i izmijenite svoje komentare i odgovorite u svoje ime."
-#: src/app/main/ui/workspace/plugins.cljs:238
+#: src/app/main/ui/workspace/plugins.cljs:239
msgid "workspace.plugins.permissions.content-read"
msgstr "Pročitajte sadržaj datoteka kojima korisnici imaju pristup."
-#: src/app/main/ui/workspace/plugins.cljs:232
+#: src/app/main/ui/workspace/plugins.cljs:233
msgid "workspace.plugins.permissions.content-write"
msgstr "Čitajte i mijenjajte sadržaj datoteka kojima korisnici imaju pristup."
-#: src/app/main/ui/workspace/plugins.cljs:325
+#: src/app/main/ui/workspace/plugins.cljs:326
msgid "workspace.plugins.permissions.disclaimer"
msgstr ""
"Imajte na umu da je ovaj dodatak izradila vanjska strana, stoga provjerite "
@@ -6003,31 +5971,31 @@ msgstr ""
"vaših podataka važni su nam. Ako imate bilo kakvih nedoumica, obratite se "
"podršci."
-#: src/app/main/ui/workspace/plugins.cljs:258
+#: src/app/main/ui/workspace/plugins.cljs:259
msgid "workspace.plugins.permissions.library-read"
msgstr "Čitajte svoje biblioteke i stavke."
-#: src/app/main/ui/workspace/plugins.cljs:252
+#: src/app/main/ui/workspace/plugins.cljs:253
msgid "workspace.plugins.permissions.library-write"
msgstr "Čitajte i mijenjajte svoje biblioteke i stavke."
-#: src/app/main/ui/workspace/plugins.cljs:318
+#: src/app/main/ui/workspace/plugins.cljs:319
msgid "workspace.plugins.permissions.title"
msgstr "'%s' DODATAK ŽELI PRISTUP:"
-#: src/app/main/ui/workspace/plugins.cljs:245
+#: src/app/main/ui/workspace/plugins.cljs:246
msgid "workspace.plugins.permissions.user-read"
msgstr "Pročitajte informacije o profilu trenutnog korisnika."
-#: src/app/main/ui/workspace/plugins.cljs:209
+#: src/app/main/ui/workspace/plugins.cljs:210
msgid "workspace.plugins.plugin-list-link"
msgstr "Popis dodataka"
-#: src/app/main/ui/workspace/plugins.cljs:86
+#: src/app/main/ui/workspace/plugins.cljs:87
msgid "workspace.plugins.remove-plugin"
msgstr "Ukloni dodatak"
-#: src/app/main/ui/workspace/plugins.cljs:178
+#: src/app/main/ui/workspace/plugins.cljs:179
msgid "workspace.plugins.search-placeholder"
msgstr "Napišite URL dodatka"
@@ -6035,25 +6003,25 @@ msgstr "Napišite URL dodatka"
msgid "workspace.plugins.success"
msgstr "Dodatak je ispravno učitan."
-#: src/app/main/ui/workspace/plugins.cljs:172
+#: src/app/main/ui/workspace/plugins.cljs:173
msgid "workspace.plugins.title"
msgstr "Dodaci"
-#: src/app/main/ui/workspace/plugins.cljs:438
+#: src/app/main/ui/workspace/plugins.cljs:439
msgid "workspace.plugins.try-out.cancel"
msgstr "NE SADA"
-#: src/app/main/ui/workspace/plugins.cljs:431
+#: src/app/main/ui/workspace/plugins.cljs:432
msgid "workspace.plugins.try-out.message"
msgstr ""
"Želite li pogledati? Otvorit će se u novom nacrtu za vaš trenutni tim. (Ako "
"ne, uvijek ga možete pronaći u instaliranim dodacima bilo koje datoteke.)"
-#: src/app/main/ui/workspace/plugins.cljs:427
+#: src/app/main/ui/workspace/plugins.cljs:428
msgid "workspace.plugins.try-out.title"
msgstr "'%s' PLUGIN JE INSTALIRAN ZA VAŠEG KORISNIKA!"
-#: src/app/main/ui/workspace/plugins.cljs:444
+#: src/app/main/ui/workspace/plugins.cljs:445
msgid "workspace.plugins.try-out.try"
msgstr "PROBAJTE DODATAK"
@@ -6065,7 +6033,7 @@ msgstr "Dodajte flex raspored"
msgid "workspace.shape.menu.add-grid"
msgstr "Dodajte grid raspored"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1015, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1039
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1016, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1040
msgid "workspace.shape.menu.add-layout"
msgstr "Dodajte raspored"
@@ -6105,7 +6073,7 @@ msgstr "Kopiraj svojstva"
msgid "workspace.shape.menu.copy-text"
msgstr "Kopiraj kao tekst"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "Napravite bilješku"
@@ -6113,11 +6081,11 @@ msgstr "Napravite bilješku"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "Odabir na ploču"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "Kreiraj komponentu"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "Stvorite više komponenti"
@@ -6125,7 +6093,7 @@ msgstr "Stvorite više komponenti"
msgid "workspace.shape.menu.cut"
msgstr "Izreži"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "Izbriši"
@@ -6133,15 +6101,15 @@ msgstr "Izbriši"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "Izbriši početak flowa"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "Odvoji instancu"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "Odvoji instance"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "Razlika"
@@ -6153,11 +6121,11 @@ msgstr "Dupliciraj"
msgid "workspace.shape.menu.edit"
msgstr "Uredi"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "Izuzmi"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "Spljošti"
@@ -6190,19 +6158,19 @@ msgstr "Idi na datoteku glavne komponente"
msgid "workspace.shape.menu.group"
msgstr "Grupiraj"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "Sakrij"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "Prikaži/sakrij korisničko sučelje"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "Presjek"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "Zaključaj"
@@ -6210,7 +6178,7 @@ msgstr "Zaključaj"
msgid "workspace.shape.menu.mask"
msgstr "Maskiraj"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "Zalijepi"
@@ -6230,7 +6198,7 @@ msgstr "Uklonite flex raspored"
msgid "workspace.shape.menu.remove-grid"
msgstr "Uklonite grid raspored"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1033
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1034
msgid "workspace.shape.menu.remove-layout"
msgstr "Uklonite raspored"
@@ -6238,11 +6206,11 @@ msgstr "Uklonite raspored"
msgid "workspace.shape.menu.rename"
msgstr "Preimenovati"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "Poništi overrides"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "Vrati glavnu komponentu"
@@ -6250,15 +6218,15 @@ msgstr "Vrati glavnu komponentu"
msgid "workspace.shape.menu.select-layer"
msgstr "Označi layer"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "Prikaži"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "Prikaži na ploči stavki"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "Prikaži glavnu komponentu"
@@ -6271,6 +6239,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "Postavi kao sličicu"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "Transformiraj u path"
@@ -6278,11 +6247,11 @@ msgstr "Transformiraj u path"
msgid "workspace.shape.menu.ungroup"
msgstr "Razgrupiraj"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "Unija"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "Otključaj"
@@ -6295,7 +6264,7 @@ msgstr "Ukloni masku"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "Ažuriraj glavne komponente"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "Ažuriraj glavnu komponentu"
@@ -6307,11 +6276,11 @@ msgstr "Sažmi bočnu traku"
msgid "workspace.sidebar.expand"
msgstr "Proširi bočnu traku"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "Povijest"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "Layeri"
@@ -6351,11 +6320,11 @@ msgstr "Tekstovi"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "Uvezeni SVG atributi"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "Stranice"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:248
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:249
msgid "workspace.sidebar.sitemap.add-page"
msgstr "Dodaj stranicu"
@@ -6372,11 +6341,11 @@ msgstr "%s aktivnih tema"
msgid "workspace.tokens.add set"
msgstr "Dodaj skup"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:161
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:136
msgid "workspace.tokens.applied-to"
msgstr "Primijenjeno na"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:338
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:337
msgid "workspace.tokens.back-to-themes"
msgstr "Povratak na popis tema"
@@ -6384,15 +6353,15 @@ msgstr "Povratak na popis tema"
msgid "workspace.tokens.create-new-theme"
msgstr "Stvorite svoju prvu temu sada."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:100, src/app/main/ui/workspace/tokens/themes.cljs:44
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:96, src/app/main/ui/workspace/tokens/themes.cljs:44
msgid "workspace.tokens.create-one"
msgstr "Stvorite jedan."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:534
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:552
msgid "workspace.tokens.create-token"
msgstr "Stvorite novi %s token"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:337
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:338
msgid "workspace.tokens.delete"
msgstr "Izbriši token"
@@ -6400,15 +6369,15 @@ msgstr "Izbriši token"
msgid "workspace.tokens.delete-theme-title"
msgstr "Izbriši temu"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:334
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:335
msgid "workspace.tokens.duplicate"
msgstr "Udvostručite token"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:321
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:322
msgid "workspace.tokens.edit"
msgstr "Uredite token"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:327
msgid "workspace.tokens.edit-theme-title"
msgstr "Uredite temu"
@@ -6416,11 +6385,7 @@ msgstr "Uredite temu"
msgid "workspace.tokens.edit-themes"
msgstr "Uredite teme"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:533
-msgid "workspace.tokens.edit-token"
-msgstr "Uredite token"
-
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:540
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:558
msgid "workspace.tokens.enter-token-name"
msgstr "Unesite %s naziv tokena"
@@ -6441,7 +6406,7 @@ msgstr "Tema"
msgid "workspace.tokens.no-active-theme"
msgstr "Nema aktivnih tema"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:76
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:72
msgid "workspace.tokens.no-permisions-set"
msgstr "Za aktiviranje/deaktiviranje skupova morate biti urednik"
@@ -6449,11 +6414,11 @@ msgstr "Za aktiviranje/deaktiviranje skupova morate biti urednik"
msgid "workspace.tokens.no-permission-themes"
msgstr "Morate biti urednik da biste koristili teme"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:480
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:483
msgid "workspace.tokens.no-sets-create"
msgstr "Još nema definiranih skupova. Prvo stvorite jedan."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:97, src/app/main/ui/workspace/tokens/sets/lists.cljs:103
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:93, src/app/main/ui/workspace/tokens/sets/lists.cljs:99
msgid "workspace.tokens.no-sets-yet"
msgstr "Još nema skupova."
@@ -6465,16 +6430,16 @@ msgstr "Nema tema."
msgid "workspace.tokens.no-themes-currently"
msgstr "Trenutno nemate nijednu temu."
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:145
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:120
#, fuzzy
msgid "workspace.tokens.original-value"
msgstr "Izvorna vrijednost: %s"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:153
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:128
msgid "workspace.tokens.ref-not-valid"
msgstr "Referenca nije važeća ili nije ni u jednom aktivnom skupu"
-#: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:39, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:44, src/app/main/ui/workspace/tokens/management/token_pill.cljs:146
+#: 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:100, 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 "Riješena vrijednost: %s"
@@ -6483,11 +6448,11 @@ msgstr "Riješena vrijednost: %s"
msgid "workspace.tokens.save-theme"
msgstr "Spremi temu"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:209, src/app/main/ui/workspace/tokens/sets/lists.cljs:315
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:204, src/app/main/ui/workspace/tokens/sets/lists.cljs:309
msgid "workspace.tokens.select-set"
msgstr "Odaberite skup."
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:343
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:342
msgid "workspace.tokens.set-selection-theme"
msgstr ""
"Definirajte koji se skupovi tokena trebaju koristiti kao dio ove opcije "
@@ -6502,23 +6467,23 @@ msgstr "Skup tokena nije aktivan"
msgid "workspace.tokens.theme-name"
msgstr "Tema %s"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:589, src/app/main/ui/workspace/tokens/management/create/form.cljs:590
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:608, src/app/main/ui/workspace/tokens/management/create/form.cljs:609
#, fuzzy
msgid "workspace.tokens.token-description"
msgstr "Opis"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:539
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:83, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:109, src/app/main/ui/workspace/tokens/management/create/form.cljs:557
msgid "workspace.tokens.token-name"
msgstr "Ime"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:66
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:69
msgid "workspace.tokens.token-name-validation-error"
msgstr ""
" nije važeće ime tokena.\n"
"Nazivi tokena trebaju sadržavati samo slova i znamenke odvojene znakom . i "
"ne smije počinjati znakom $."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:567
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:585
msgid "workspace.tokens.token-value"
msgstr "Vrijednost"
@@ -6526,19 +6491,19 @@ msgstr "Vrijednost"
msgid "workspace.tokens.tokens-section-title"
msgstr "TOKENI - %s"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:125
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:121
msgid "workspace.tokens.tools"
msgstr "Alati"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:156
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:131
msgid "workspace.tokens.value-not-valid"
msgstr "Vrijednost nije važeća"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:563
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:581
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:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "Stavke"
@@ -6546,7 +6511,7 @@ msgstr "Stavke"
msgid "workspace.toolbar.color-palette"
msgstr "Paleta boja (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "Komentari (%s)"
@@ -6753,19 +6718,19 @@ msgstr "Operacija izvršena %s"
msgid "workspace.undo.title"
msgstr "Povijest"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "Odbaci"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "Više informacija"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "Postoje ažuriranja u zajedničkim bibliotekama"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "Ažuriraj"
@@ -6825,11 +6790,11 @@ msgstr "Želite li vratiti ovu verziju?"
msgid "workspace.versions.snapshot-menu"
msgstr "Otvaranje izbornika snimke"
-#: src/app/main/ui/workspace/sidebar.cljs:236
+#: src/app/main/ui/workspace/sidebar.cljs:237
msgid "workspace.versions.tab.actions"
msgstr "Akcije"
-#: src/app/main/ui/workspace/sidebar.cljs:234
+#: src/app/main/ui/workspace/sidebar.cljs:235
msgid "workspace.versions.tab.history"
msgstr "Povijest"
diff --git a/frontend/translations/id.po b/frontend/translations/id.po
index 847b790104..1f972e352a 100644
--- a/frontend/translations/id.po
+++ b/frontend/translations/id.po
@@ -1,15 +1,15 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-11 07:21+0000\n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
"Last-Translator: Linerly \n"
-"Language-Team: Indonesian "
-" \n"
+"Language-Team: Indonesian \n"
"Language: id\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 5.13-dev\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -179,7 +179,7 @@ msgstr "Solusi sumber terbuka untuk pembuatan desain dan prototipe."
msgid "auth.terms-and-privacy-agreement"
msgstr "Saya menyetujui [persyaratan layanan](%s) dan [kebijakan privasi](%s)."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Kebijakan layanan"
@@ -206,7 +206,7 @@ msgstr "...pencitraan merek, ilustrasi, bagian pemasaran, dll."
msgid "comments.mentions.not-found"
msgstr "Tidak ada orang yang ditemukan untuk @%s"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Terbitkan"
@@ -277,7 +277,7 @@ msgstr "Bagikan prototipe"
msgid "common.share-link.view-all"
msgstr "Pilih Semua"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Batalkan penerbitan"
@@ -402,7 +402,7 @@ msgstr "Token tidak memiliki tanggal kedaluwarsa"
msgid "dashboard.add-file"
msgstr "Tambahkan berkas"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Tambahkan sebagai Pustaka Bersama"
@@ -410,31 +410,31 @@ msgstr "Tambahkan sebagai Pustaka Bersama"
msgid "dashboard.change-email"
msgstr "Ubah surel"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(salin)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Buat tim baru"
-#: src/app/main/ui/workspace/main_menu.cljs:631
+#: src/app/main/ui/workspace/main_menu.cljs:659
msgid "dashboard.create-version-menu"
msgstr "Sematkan versi ini"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Penpot Anda"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Hapus tim"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Unduh berkas Penpot (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Unduh berkas standar (.svg + .json)"
@@ -518,7 +518,7 @@ msgstr "Mulai membuat hal-hal yang hebat"
msgid "dashboard.export-binary-multi"
msgstr "Unduh %s berkas Penpot (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Ekspor papan sebagai PDF"
@@ -534,7 +534,7 @@ msgstr "Ekspor %s berkas Penpot"
msgid "dashboard.export-multiple.selected"
msgstr "%s dari %s elemen dipilih"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Ekspor"
@@ -727,11 +727,11 @@ msgstr "Mengunggah data ke server (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Mengunggah berkas: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Undang orang"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Tinggalkan tim"
@@ -739,7 +739,7 @@ msgstr "Tinggalkan tim"
msgid "dashboard.libraries-and-templates"
msgstr "Pustaka & Template"
-#: src/app/main/ui/dashboard/templates.cljs:259
+#: src/app/main/ui/dashboard/templates.cljs:267
msgid "dashboard.libraries-and-templates.description"
msgstr ""
"Di sini Anda memiliki Pustaka dan templat yang dapat ditambahkan ke proyek "
@@ -749,7 +749,7 @@ msgstr ""
msgid "dashboard.libraries-and-templates.explore"
msgstr "Jelajahi lebih banyak dan pelajari cara berkontribusi"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "Terjadi masalah saat mengimpor template. Template tidak diimpor."
@@ -785,7 +785,7 @@ msgstr "Pindahkan ke tim lain"
msgid "dashboard.new-file"
msgstr "+ Buat Berkas"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Berkas Baru"
@@ -793,7 +793,7 @@ msgstr "Berkas Baru"
msgid "dashboard.new-project"
msgstr "+ Buat Proyek"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Proyek Baru"
@@ -801,11 +801,11 @@ msgstr "Proyek Baru"
msgid "dashboard.no-matches-for"
msgstr "Tidak ada hasil yang ditemukan untuk “%s”"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Proyek yang disemat akan muncul di sini"
-#: src/app/main/ui/dashboard/comments.cljs:90
+#: src/app/main/ui/dashboard/comments.cljs:91
msgid "dashboard.notifications"
msgstr "Notifikasi"
@@ -817,7 +817,7 @@ msgstr "Alamat surel Anda berhasil diperbarui"
msgid "dashboard.notifications.email-verified-successfully"
msgstr "Alamat surel Anda berhasil diverifikasi"
-#: src/app/main/data/profile.cljs:272
+#: src/app/main/data/profile.cljs:273
msgid "dashboard.notifications.notifications-saved"
msgstr "Pengaturan notifikasi diperbarui"
@@ -825,11 +825,11 @@ msgstr "Pengaturan notifikasi diperbarui"
msgid "dashboard.notifications.password-saved"
msgstr "Berhasil menyimpan kata sandi!"
-#: src/app/main/ui/dashboard/comments.cljs:44
+#: src/app/main/ui/dashboard/comments.cljs:45
msgid "dashboard.notifications.view"
msgstr "Lihat notifikasi"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s anggota"
@@ -861,7 +861,7 @@ msgstr "Anda sekarang seorang pemilik di tim ini."
msgid "dashboard.permissions-change.viewer"
msgstr "Anda sekarang seorang peninjau di tim ini."
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Semat/Lepas semat"
@@ -898,7 +898,7 @@ msgstr "Anda bukan merupakan bagian dari tim “%s” lagi."
msgid "dashboard.save-settings"
msgstr "Simpan pengaturan"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Cari…"
@@ -978,7 +978,7 @@ msgstr "Notifikasi"
msgid "dashboard.show-all-files"
msgstr "Tampilkan semua berkas"
-#: src/app/main/ui/workspace/main_menu.cljs:638
+#: src/app/main/ui/workspace/main_menu.cljs:666
msgid "dashboard.show-version-history"
msgstr "Riwayat versi"
@@ -1000,7 +1000,7 @@ msgstr[0] "Berkas Anda berhasil digandakan"
msgid "dashboard.success-duplicate-project"
msgstr "Proyek Anda berhasil digandakan"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Berkas Anda berhasil dipindah"
@@ -1012,15 +1012,15 @@ msgstr "Berkas Anda berhasil dipindah"
msgid "dashboard.success-move-project"
msgstr "Proyek Anda berhasil dipindah"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Info tim"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Anggota tim"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Proyek tim"
@@ -1040,7 +1040,7 @@ msgstr "Hasil pencarian"
msgid "dashboard.type-something"
msgstr "Ketik untuk mencari hasil"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Batal Penerbitan Pustaka"
@@ -1048,39 +1048,39 @@ msgstr "Batal Penerbitan Pustaka"
msgid "dashboard.update-settings"
msgstr "Perbarui pengaturan"
-#: src/app/main/ui/dashboard/sidebar.cljs:856
+#: src/app/main/ui/dashboard/sidebar.cljs:976
msgid "dashboard.upgrade-plan.no-limits"
msgstr "Tanpa batasan kreativitas"
-#: src/app/main/ui/dashboard/sidebar.cljs:854
+#: src/app/main/ui/dashboard/sidebar.cljs:974
msgid "dashboard.upgrade-plan.penpot-free"
msgstr "Penpot Gratis"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "Aktif"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "Ketika kaitan ini dipicu detail peristiwa akan dikirim"
-#: src/app/main/ui/dashboard/team.cljs:982
+#: src/app/main/ui/dashboard/team.cljs:1160
msgid "dashboard.webhooks.cant-edit"
msgstr "Anda hanya dapat menghapus atau mengubah webhook yang dibuat oleh Anda."
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "Jenis konten"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "Buat kaitan web"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "Kaitan web berhasil dibuat."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"Kaitan web (webhook) adalah cara yang sederhana untuk memperbolehkan situs "
@@ -1088,11 +1088,11 @@ msgstr ""
"di Penpot. Kami mengirim permintaan POST untuk setiap URL yang Anda "
"sediakan."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "Klik tombol \"Tambahkan kaitan web\" untuk menambahkan."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "Tidak ada kaitan web yang dibuat sejauh ini."
@@ -1112,7 +1112,7 @@ msgstr "Surel"
msgid "dashboard.your-name"
msgstr "Nama Anda"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Penpot Anda"
@@ -1128,15 +1128,15 @@ msgstr "Peringatan"
msgid "ds.component-subtitle"
msgstr "Komponen untuk diperbarui:"
-#: src/app/main/ui/workspace/plugins.cljs:338, src/app/main/ui/workspace/plugins.cljs:392
+#: src/app/main/ui/workspace/plugins.cljs:339, src/app/main/ui/workspace/plugins.cljs:393
msgid "ds.confirm-allow"
msgstr "Perbolehkan"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Batal"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Oke"
@@ -1176,7 +1176,7 @@ msgstr "Melebihi batas karakter"
msgid "errors.clipboard-not-implemented"
msgstr "Peramban Anda tidak dapat melakukan operasi ini"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:266
+#: src/app/main/data/workspace/tokens/library_edit.cljs:274
msgid "errors.drop-token-set-parent-to-child"
msgstr "Tidak dapat melepaskan set induk ke jalur anak sendiri."
@@ -1196,11 +1196,11 @@ msgstr "Anda tidak dapat menggunakan surel Anda sebagai kata sandi"
msgid "errors.email-domain-not-allowed"
msgstr "Domain tidak diperbolehkan"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "Surel “%s” memiliki banyak laporan lompatan permanen."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "Surel “%s” telah dilaporkan sebagai spam atau lompatan permanen."
@@ -1214,11 +1214,6 @@ msgstr ""
msgid "errors.feature-not-supported"
msgstr "Fitur '%s' tidak didukung."
-#: src/app/main/ui/auth/register.cljs, src/app/main/ui/dashboard/team_form.cljs, src/app/main/ui/onboarding/team_choice.cljs, src/app/main/ui/setti ngs/access_tokens.cljs, src/app/main/ui/settings/feedback.cljs, src/app/main/ui/settings/profile.cljs, src/app/main/ui/workspace/sidebar/assets.cljs
-#, unused
-msgid "errors.field-max-length"
-msgstr "Harus berisi setidaknya 1 karakter."
-
#, unused
msgid "errors.field-min-length"
msgstr "Harus berisi setidaknya 1 karakter."
@@ -1239,7 +1234,7 @@ msgstr ""
"berkas yang sedang Anda buka. Migrasi untuk '%s' harus diterapkan sebelum "
"berkasnya dapat dibuka."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Sesuatu yang salah terjadi."
@@ -1281,11 +1276,11 @@ msgstr "Undangan ini mungkin dibatalkan atau telah kedaluwarsa."
msgid "errors.ldap-disabled"
msgstr "Autentikasi LDAP dinonaktifkan."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "Anda telah meraih kutipan '%s'. Hubungi dukungan."
-#: src/app/main/ui/dashboard/team.cljs:185, src/app/main/ui/onboarding/team_choice.cljs:101
+#: src/app/main/ui/dashboard/team.cljs:187, src/app/main/ui/dashboard/team.cljs:849, src/app/main/ui/onboarding/team_choice.cljs:101
msgid "errors.maximum-invitations-by-request-reached"
msgstr ""
"Jumlah email maksimum (%s) yang dapat diundang dalam satu permintaan telah "
@@ -1303,7 +1298,7 @@ msgstr "Serpertinya konten gambar tidak cocok dengan ekstensi berkas."
msgid "errors.media-type-not-allowed"
msgstr "Sepertinya ini bukan gambar yang valid."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"Profil yang Anda undang membisukan surel (laporan spam atau lompatan "
@@ -1331,7 +1326,7 @@ msgstr "Data tidak valid dalam papan klip"
msgid "errors.profile-blocked"
msgstr "Profil diblokir"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr "Profil Anda membisukan surel (laporan spam atau lompatan tinggi)."
@@ -1343,33 +1338,33 @@ msgstr "Pendaftaran saat ini dinonaktifkan."
msgid "errors.team-feature-mismatch"
msgstr "Fitur '%s' tidak kompatibel terdeteksi"
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr ""
"Anggota tidak cukup untuk meninggalkan tim, Anda mungkin ingin menghapusnya "
"saja."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "Anggota yang Anda mencoba untuk memberikan peran tidak ada."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr ""
"Pemilik tidak dapat meninggalkan tim, Anda harus memberikan ulang peran "
"pemilik."
-#: src/app/main/data/workspace/tokens/library_edit.cljs:153, src/app/main/data/workspace/tokens/library_edit.cljs:183
+#: src/app/main/data/workspace/tokens/library_edit.cljs:150, src/app/main/data/workspace/tokens/library_edit.cljs:180
msgid "errors.token-set-already-exists"
msgstr "Set dengan nama yang sama sudah ada"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:265
+#: src/app/main/data/workspace/tokens/library_edit.cljs:273
msgid "errors.token-set-exists-on-drop"
msgstr ""
"Tidak dapat menyelesaikan drop, set dengan nama yang sama sudah ada di "
"jalur ini."
-#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:99
+#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:95
msgid "errors.token-theme-already-exists"
msgstr "Opsi Tema dengan nama yang sama sudah ada"
@@ -1389,31 +1384,31 @@ msgstr "Kesalahan Validasi"
msgid "errors.version-not-supported"
msgstr "Berkas memiliki nomor versi tidak kompatibel"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "Kesalahan koneksi, URL tidak dapat diraih"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "URL tidak melewati validasi."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "Pengiriman terakhir tidak berhasil."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "Terjadi kesalahan pada validasi SSL."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "Waktu habis"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "Terjadi kesalahan tidak terduga saat memvalidasi"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "Status %s tidak diduga"
@@ -1478,19 +1473,19 @@ msgstr "Sebuah kesalahan telah terjadi"
msgid "inspect.attributes.blur"
msgstr "Buram"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Nilai"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1498,7 +1493,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Isian"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Unduh gambar sumber"
@@ -1592,67 +1587,70 @@ msgstr "Padat"
msgid "inspect.attributes.stroke.width"
msgstr "Lebar"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Tipografi"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Keluarga Fon"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Ukuran Fon"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Gaya Fon"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "Berat Fon"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Spasi Huruf"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Tinggi Garis"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Dekorasi Teks"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Tidak ada"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Garis bawah"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Transformasi Teks"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "Huruf Judul"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "Huruf Kecil"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Tidak ada"
-#: src/app/main/ui/inspect/attributes/text.cljs:159
+#: src/app/main/ui/inspect/attributes/text.cljs:152
msgid "inspect.attributes.typography.text-transform.unset"
msgstr "Tidak ditetapkan"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "Huruf Besar"
@@ -1660,17 +1658,17 @@ msgstr "Huruf Besar"
msgid "inspect.attributes.variant"
msgstr "Properti varian"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr ""
"Jika Anda ingin mengetahui lebih lanjut tentang inspeksi desain kunjungi "
"pusat bantuan Penpot"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "Lebih banyak info tentang inspeksi"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr "Pilih bentuk, papan, atau grup untuk menginskpeksi properti dan kodenya"
@@ -1738,11 +1736,11 @@ msgstr "Teks"
msgid "inspect.tabs.info"
msgstr "Info"
-#: src/app/main/ui/dashboard/comments.cljs:95
+#: src/app/main/ui/dashboard/comments.cljs:96
msgid "label.mark-all-as-read"
msgstr "Tandai semua sebagai terbaca"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Pintasan"
@@ -1754,11 +1752,11 @@ msgstr "Terima"
msgid "labels.access-tokens"
msgstr "Token akses"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "Aktif"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.add"
msgstr "Tambahkan"
@@ -1766,11 +1764,11 @@ msgstr "Tambahkan"
msgid "labels.add-custom-font"
msgstr "Tambahkan fon khusus"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.adding"
msgstr "Menambahkan..."
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Admin"
@@ -1778,7 +1776,7 @@ msgstr "Admin"
msgid "labels.adobe-xd"
msgstr "Adobe XD"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Semua"
@@ -1801,7 +1799,7 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "Gerbang Jalur Buruk"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Batal"
@@ -1809,11 +1807,11 @@ msgstr "Batal"
msgid "labels.canva"
msgstr "Canva"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Tutup"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:186
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:181
msgid "labels.collapse"
msgstr "Tutup"
@@ -1825,11 +1823,11 @@ msgstr "Komentar"
msgid "labels.comment.mark-as-solved"
msgstr "Tandau sebagai selesai"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Komentar"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Komunitas"
@@ -1837,7 +1835,7 @@ msgstr "Komunitas"
msgid "labels.confirm-password"
msgstr "Konfirmasi kata sandi"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Lanjutkan"
@@ -1853,11 +1851,11 @@ msgstr "Anda dapat melanjutkan dengan sebuah akun Penpot"
msgid "labels.copy"
msgstr "Salin"
-#: src/app/main/ui/inspect/attributes/common.cljs:118
+#: src/app/main/ui/inspect/attributes/common.cljs:99
msgid "labels.copy-color"
msgstr "Salin warna"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "Salin tautan"
@@ -1865,7 +1863,7 @@ msgstr "Salin tautan"
msgid "labels.copyright"
msgstr "Kaleidos @2024"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Buat"
@@ -1885,7 +1883,7 @@ msgstr "Fon khusus"
msgid "labels.dashboard"
msgstr "Dasbor"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Hapus"
@@ -1897,7 +1895,7 @@ msgstr "Hapus komentar"
msgid "labels.delete-comment-thread"
msgstr "Hapus utasan"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Hapus undangan"
@@ -1914,15 +1912,15 @@ msgstr "Pengembang"
msgid "labels.director"
msgstr "Direktur"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "Abaikan"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Draf"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Sunting"
@@ -1930,7 +1928,7 @@ msgstr "Sunting"
msgid "labels.edit-file"
msgstr "Sunting berkas"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Penyunting"
@@ -1939,11 +1937,11 @@ msgstr "Penyunting"
msgid "labels.event"
msgstr "Acara"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Kedaluwarsa"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Ekspor"
@@ -1971,7 +1969,7 @@ msgstr "Penyedia fon"
msgid "labels.font-variants"
msgstr "Gaya"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Fon"
@@ -1985,11 +1983,11 @@ msgstr "CEO atau Pendiri"
msgid "labels.freelancer"
msgstr "Saya seorang pekerja lepas"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "Repositori GitHub"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Berikan masukan"
@@ -2001,7 +1999,7 @@ msgstr "Kembali"
msgid "labels.graphic-design"
msgstr "Desain grafis"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Pusat Bantuan"
@@ -2009,15 +2007,15 @@ msgstr "Pusat Bantuan"
msgid "labels.hide"
msgstr "Sembunyikan"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Sembunyikan komentar yang telah diselesaikan"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:134
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:130
msgid "labels.import"
msgstr "Impor"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "Tidak Aktif"
@@ -2039,7 +2037,7 @@ msgstr "Kesalahan Internal"
msgid "labels.invision"
msgstr "InVision"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Undangan"
@@ -2047,7 +2045,7 @@ msgstr "Undangan"
msgid "labels.language"
msgstr "Bahasa"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Pustaka & Templat"
@@ -2063,7 +2061,7 @@ msgstr "Masuk atau daftar"
msgid "labels.login"
msgstr "Masuk"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Keluar"
@@ -2071,11 +2069,11 @@ msgstr "Keluar"
msgid "labels.marketing"
msgstr "Pemasaran"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Anggota"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Anggota"
@@ -2087,15 +2085,15 @@ msgstr "Sebutkan"
msgid "labels.new-password"
msgstr "Kata sandi baru"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "Berikutnya"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "Anda telah melihat semuanya! Notifikasi komentar baru akan muncul di sini."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "Tidak ada undangan yang menunggu."
@@ -2114,7 +2112,7 @@ msgstr "Aduh!"
msgid "labels.notifications"
msgstr "Notifikasi"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "%s berkas"
@@ -2124,7 +2122,7 @@ msgid "labels.num-of-frames"
msgid_plural "labels.num-of-frames"
msgstr[0] "%s papan"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "%s proyek"
@@ -2142,7 +2140,7 @@ msgstr "Kata sandi lama"
msgid "labels.only-yours"
msgstr "Hanya Anda"
-#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:309, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:338
+#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:310, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:339
msgid "labels.options"
msgstr "Opsi"
@@ -2158,7 +2156,7 @@ msgstr "Lainnya (jelaskan)"
msgid "labels.other-short"
msgstr "Lainnya"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Pemilik"
@@ -2166,7 +2164,7 @@ msgstr "Pemilik"
msgid "labels.password"
msgstr "Kata sandi"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "Ditunda"
@@ -2190,7 +2188,7 @@ msgstr "Pengelolaan Produk"
msgid "labels.profile"
msgstr "Profil"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Proyek"
@@ -2198,7 +2196,7 @@ msgstr "Proyek"
msgid "labels.refresh"
msgstr "Muat ulang"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Catatan rilis"
@@ -2212,11 +2210,11 @@ msgstr "Muat ulang berkas"
msgid "labels.remove"
msgstr "Hapus"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Keluarkan anggota"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Ubah nama"
@@ -2244,7 +2242,7 @@ msgstr "balasan baru"
msgid "labels.reply.thread"
msgstr "Balas"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "Kirim ulang undangan"
@@ -2256,15 +2254,15 @@ msgstr "Pulihkan"
msgid "labels.retry"
msgstr "Coba lagi"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Peran"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Simpan"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:715
+#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:730
msgid "labels.search"
msgstr "Cari"
@@ -2292,11 +2290,11 @@ msgstr "Kami dalam pemeliharaan yang telah diprogram untuk sistem kami."
msgid "labels.service-unavailable.main-message"
msgstr "Layanan Tidak Tersedia"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:79
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:75
msgid "labels.sets"
msgstr "Set"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Pengaturan"
@@ -2308,7 +2306,7 @@ msgstr "Bagikan"
msgid "labels.share-prototype"
msgstr "Bagikan prototipe"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Pustaka"
@@ -2316,7 +2314,7 @@ msgstr "Pustaka"
msgid "labels.show"
msgstr "Tampilkan"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Tampilkan semua komentar"
@@ -2324,11 +2322,11 @@ msgstr "Tampilkan semua komentar"
msgid "labels.show-comments-list"
msgstr "Tampilkan daftar komentar"
-#: src/app/main/ui/workspace/comments.cljs:67, src/app/main/ui/workspace/comments.cljs:139
+#: src/app/main/ui/workspace/comments.cljs:68, src/app/main/ui/workspace/comments.cljs:140
msgid "labels.show-mentions"
msgstr "Hanya tampilkan sebutan Anda"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Hanya tampilkan komentar Anda"
@@ -2340,7 +2338,7 @@ msgstr "Sketch"
msgid "labels.start"
msgstr "Mulai"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Status"
@@ -2362,11 +2360,11 @@ msgstr "Anggota tim"
msgid "labels.themes"
msgstr "Tema"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Tutorial"
-#: src/app/main/data/workspace/tokens/errors.cljs:93
+#: src/app/main/data/workspace/tokens/errors.cljs:101
msgid "labels.unknown-error"
msgstr "Kesalahan tidak diketahui"
@@ -2394,15 +2392,15 @@ msgstr "Unggah fon khusus"
msgid "labels.uploading"
msgstr "Mengunggah…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "TAMPILAN SAJA"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Pelihat"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Kaitan web"
@@ -2410,11 +2408,11 @@ msgstr "Kaitan web"
msgid "labels.write-new-comment"
msgstr "Tulis komentar baru"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(Anda)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "Akun Anda"
@@ -2445,7 +2443,7 @@ msgstr "Desain secara fleksibel dengan kontrol tata letak seperti CSS."
#: src/app/main/ui/ds/product/loader.cljs:24
msgid "loader.tips.03.title"
-msgstr "Tata Letak Otomatis seperti CSS"
+msgstr "Tata Letak seperti CSS"
#: src/app/main/ui/ds/product/loader.cljs:27
msgid "loader.tips.04.message"
@@ -2505,23 +2503,23 @@ msgstr "Tingkatkan Penpot dengan plugin dari komunitas untuk fungsi tambahan."
msgid "loader.tips.10.title"
msgstr "Dukungan Plugin"
-#: src/app/main/ui/workspace/colorpicker.cljs:449, src/app/main/ui/workspace/colorpicker.cljs:450, src/app/main/ui/workspace/colorpicker.cljs:452
+#: src/app/main/ui/workspace/colorpicker.cljs:486, src/app/main/ui/workspace/colorpicker.cljs:487, src/app/main/ui/workspace/colorpicker.cljs:489
msgid "media.choose-image"
msgstr "Pilih gambar"
-#: src/app/main/ui/workspace/colorpicker.cljs:244
+#: src/app/main/ui/workspace/colorpicker.cljs:256
msgid "media.gradient"
msgstr "Gradien"
-#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:44, src/app/main/ui/ds/utilities/swatch.cljs:57, src/app/main/ui/inspect/attributes/common.cljs:63, src/app/main/ui/workspace/colorpicker.cljs:246, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:251
+#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:45, src/app/main/ui/ds/utilities/swatch.cljs:58, src/app/main/ui/inspect/attributes/common.cljs:44, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:65, src/app/main/ui/workspace/colorpicker.cljs:258, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:395
msgid "media.image"
msgstr "Gambar"
-#: src/app/main/ui/inspect/attributes/common.cljs:74
+#: src/app/main/ui/inspect/attributes/common.cljs:55
msgid "media.image.short"
msgstr "gambar"
-#: src/app/main/ui/workspace/colorpicker.cljs:442
+#: src/app/main/ui/workspace/colorpicker.cljs:479
msgid "media.keep-aspect-ratio"
msgstr "Jaga rasio aspek"
@@ -2539,7 +2537,7 @@ msgstr "Memuat gambar…"
msgid "media.radial"
msgstr "Radial"
-#: src/app/main/ui/workspace/colorpicker.cljs:242
+#: src/app/main/ui/workspace/colorpicker.cljs:254
msgid "media.solid"
msgstr "Padat"
@@ -2614,19 +2612,19 @@ msgstr "Buat token"
msgid "modals.create-access-token.title"
msgstr "Buat token baru"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "Buat kaitan web"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "Buat kaitan web"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "URL Muatan"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://contoh.co.id/terimapos"
@@ -2674,11 +2672,11 @@ msgstr ""
msgid "modals.delete-comment-thread.title"
msgstr "Hapus percakapan"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "Apakah Anda yakin ingin menghapus anotasi ini?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "Haus anotasi"
@@ -2726,11 +2724,11 @@ msgstr ""
msgid "modals.delete-font.title"
msgstr "Menghapus fon"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Apakah Anda yakin ingin menghapus halaman ini?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Hapus halaman"
@@ -2771,29 +2769,29 @@ msgid "modals.delete-shared-confirm.title"
msgid_plural "modals.delete-shared-confirm.title"
msgstr[0] "Menghapus berkas"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Hapus tim"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Apakah Anda yakin ingin menghapus tim ini? Semua proyek dan berkas terkait "
"dengan tim akan dihapus secara permanen."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Menghapus tim"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Keluarkan anggota"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Apakah Anda yakin ingin mengeluarkan anggota ini dari tim?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Keluarkan anggota tim"
@@ -2804,57 +2802,57 @@ msgstr[0] ""
"Aset yang telah digunakan dalam berkas akan tetap di sana (tidak ada desain "
"yang akan rusak)."
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "Hapus kaitan web"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "Apakah Anda yakin ingin menghapus kaitan web ini?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "Menghapus kaitan web"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "Sunting kaitan web"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "Sunting kaitan web"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Kirim undangan"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "Surel, dipisah dengan koma"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr ""
"Beberapa surel berasal dari anggota tim saat ini. Undangan mereka tidak "
"akan dikirim."
-#: src/app/main/ui/dashboard/team.cljs:220
+#: src/app/main/ui/dashboard/team.cljs:222
msgid "modals.invite-team-member.text"
msgstr ""
"Anda dapat mengundang anggota ke tim supaya mereka dapat mengakses berkas "
"ini dan semua berkas tim."
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "Undang anggota ke tim"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"Karena Anda anggota satu-satunya dari tim ini, tim akan dihapus beserta "
"proyek dan berkasnya."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "Apakah Anda yakin ingin meninggalkan tim %s?"
@@ -2882,15 +2880,15 @@ msgstr "Pilih seorang anggota untuk dipromosikan"
msgid "modals.leave-and-reassign.title"
msgstr "Sebelum Anda tinggal"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Tinggalkan tim"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Apakah Anda ingin meninggalkan tim ini?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Meninggalkan tim"
@@ -2909,39 +2907,39 @@ msgid "modals.move-shared-confirm.title"
msgid_plural "modals.move-shared-confirm.title"
msgstr[0] "Pindahkan pustaka"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "Jumlah dorongan"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Transfer kemilikan"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"Jika Anda mentransfer kemilikan, Anda akan mengubah peran Anda ke Admin, "
"dan kehilangan beberapa izin pada tim ini. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr ""
"Anda saat ini adalah pemilik dari tim ini. Apakah Anda yakin ingin membuat "
"%s sebagai pemilik tim ini?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Pemilik tim baru"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "Terbitkan"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "Pustaka Anda sedang kosong. Apakah Anda ingin menerbitkannya?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "Terbitkan pustaka kosong"
@@ -2993,21 +2991,21 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Perbarui komponen dalam pustaka terbagi"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Perbarui"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Batal"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"Anda akan memperbarui sebuah komponen dalam sebuah pustaka terbagi. Ini "
"mungkin memengaruhi berkas lain yang menggunakannya."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Perbarui sebuah komponen dalam sebuah pustaka terbagi"
@@ -3119,11 +3117,11 @@ msgstr ""
msgid "notifications.by-code.upgrade-version"
msgstr "Versi baru sudah tersedia, silakan muat ulang laman"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "Undangan berhasil dikirim"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "Tautan undangan disalin"
@@ -3277,7 +3275,7 @@ msgstr ""
"Pastikan untuk menyertakan semuanya. Pengembang, pendesain, pengelola... "
"keragaman bertambah :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "Undang dengan peran:"
@@ -3497,193 +3495,193 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "Pergi ke log masuk"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "Copot"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "Tercampur"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:283
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:423
msgid "settings.remove-color"
msgstr "Hapus warna"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:288
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:428
msgid "settings.select-this-color"
msgstr "Pilih item menggunakan gaya ini"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Dasar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "Dasbor"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Pelihat"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Ruang Kerja"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Penyesuaian"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Sunting"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "Generik"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "Generik"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Menu utama"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "Ubah lapisan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Navigasi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Navigasi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Navigasi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Panel"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Jejak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Bentuk"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "Teks"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Peralatan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Zum"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Zum"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Komentar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "Tambahkan simpul"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "Sesuaikan ke bawah"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "Paskan ke tengah"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "Sesuaikan ke tengah secara horizontal"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "Paskan secara rata"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "Sesuaikan ke kiri"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "Sesuaikan ke kanan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "Sesuaikan ke atas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "Sesuaikan ke tengah secara vertikal"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "Buat papan dari seleksi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "Tebal"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "Perbedaan boolean"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "Pengecualian boolean"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "Berpotongan boolean"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "Serikat boolean"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "Turunkan ke paling belakang"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Turunkan ke belakang"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "Naikkan ke atas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "Naikkan ke paling atas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "Hapus urungan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Salin"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
msgid "shortcuts.copy-link"
msgstr "Salin tautan ke papan klip"
@@ -3692,287 +3690,271 @@ msgstr "Salin tautan ke papan klip"
msgid "shortcuts.copy-props"
msgstr "Salin properti"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "Buat baru"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Potong"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "Perkecil"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Hapus"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "Hapus simpul"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "Lepaskan komponen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Kurva"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "Elipss"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Papan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "Gambar jalur"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Jalur"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Persegi Panjang"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Teks"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Gandakan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "Batal"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "Ekspor bentuk"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "Zum untuk muat semua"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "Balikkan secara horizontal"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "Balikkan secara vertikal"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "Kurangi ukuran fon"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "Tambahkan ukuran fon"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "Pergi ke draf"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "Pergi ke pustaka terbagi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Cari"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Kelompok"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "Distribusikan secara horizontal"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "Tampilkan/sembunyikan antarmuka"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "Perbesar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "Sematkan gambar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "Miring"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "Gabungkan simpul"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
-msgid "shortcuts.letter-spacing-dec"
-msgstr "Kurangi spasi huruf"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "Tambahkan spasi huruf"
-
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
-msgid "shortcuts.line-height-dec"
-msgstr "Kurangi ketinggian baris"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
-msgid "shortcuts.line-height-inc"
-msgstr "Tambahkan ketinggian baris"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.line-through"
msgstr "Coret"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "Buat sudut"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "Buat kurva"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "Topeng"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "Gabungkan simpul"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "Pindah"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "Pindah ke bawah secara cepat"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "Pindah ke kiri secara cepat"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "Pindah ke kanan secara cepat"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "Pindah ke atas secara cepat"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "Pindahkan simpul"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "Pindah ke bawah"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "Pindah ke kiri"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "Pindah ke kanan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "Pindah ke atas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "Papan berikutnya"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "Tidak ada pintasan yang ditemukan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "Tetapkan opasitas ke 100%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "Tetapkan opasitas ke 10%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "Tetapkan opasitas ke 20%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "Tetapkan opasitas ke 30%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "Tetapkan opasitas ke 40%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "Tetapkan opasitas ke 50%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "Tetapkan opasitas ke 60%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "Tetapkan opasitas ke 70%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "Tetapkan opasitas ke 80%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "Tetapkan opasitas ke 90%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "Pemilih warna"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "Pergi ke bagian komentar pelihat"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "Pergi ke dasbor"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "Pergi ke bagian inspeksi penampil"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "Pergi ke bagian interaksi pelihat"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "Pergi ke bagian interaksi pelihat"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "Pergi ke ruang kerja"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " atau "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Tempelkan"
@@ -3986,191 +3968,191 @@ msgstr "Tempelkan properti"
msgid "shortcuts.plugins"
msgstr "Pengelola plugin"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "Papan sebelumnya"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "Ulangi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
msgid "shortcuts.rename"
msgstr "Ubah nama"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "Atur ulang zum"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
msgid "shortcuts.scale"
msgstr "Skala"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "Cari pintasan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "Pilih semua"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
msgid "shortcuts.select-next"
msgstr "Pilih lapisan berikutnya"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
msgid "shortcuts.select-parent-layer"
msgstr "Pilih lapisan induk"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
msgid "shortcuts.select-prev"
msgstr "Pilih lapisan sebelumnya"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "Pisahkan simpul"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "Tampilkan/sembunyikan kisi piksel"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "Tampilkan/sembunyikan pintasan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "Tancap ke simpul"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "Tancap ke kisi piksel"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "Mulai menyunting"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "Mulai mengukur"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "Berhenti mengukur"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "Tetapkan gambar kecil"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "Pintasan papan ketik"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "Alih penyesuaian dinamis"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "Alih aset"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "Alih palet warna"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "Alih mode fokus"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "Alih layar penuh"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
msgid "shortcuts.toggle-guides"
msgstr "Tampilkan / Sembunyikan panduan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "Alih riwayat"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "Alih lapisan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "Tambahkan/hapus tata letak flex"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
msgid "shortcuts.toggle-layout-grid"
msgstr "Tambahkan/hapus tata letak kisi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "Kunci dipilih"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "Kunci proporsi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
msgid "shortcuts.toggle-rulers"
msgstr "Tampilkan / Sembunyikan penggaris"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
msgid "shortcuts.toggle-snap-guides"
msgstr "Pasang ke panduan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
msgid "shortcuts.toggle-snap-ruler-guide"
msgstr "Pasang ke panduan penggaris"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "Alih palet teks"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
msgid "shortcuts.toggle-theme"
msgstr "Ubah tema"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "Alih keterlihatan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "Alih gaya zum"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "Garis bawah"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Urungkan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Lepaskan kelompok"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Lepaskan topeng"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "Distribusikan secara vertikal"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "Kurangi lensa zum"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "Tambahkan lensa zum"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "Zum ke terpilih"
@@ -4226,19 +4208,19 @@ msgstr "Kata sandi - Penpot"
msgid "title.settings.profile"
msgstr "Profil - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "Undangan - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "Anggota - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Pengaturan - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "Kaitan Web - %s - Penpot"
@@ -4310,43 +4292,43 @@ msgstr "Tampilkan interaksi pada klik"
msgid "viewer.header.sitemap"
msgstr "Peta Situs"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "Pengiriman terakhir berhasil."
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Sesuaikan tengah horizontal (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "Distribusikan spasi horizontal (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Sesuaikan ke kiri (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Sesuaikan ke kanan (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Sesuaikan ke bawah (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Sesuaikan ke tengah vertikal (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "Distribusikan spasi vertikal (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Sesuaikan ke atas (%s)"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:163
+#: src/app/main/ui/workspace/sidebar/assets.cljs:172
msgid "workspace.assets.add-library"
msgstr "Tambahkan pustaka"
@@ -4355,19 +4337,19 @@ msgstr "Tambahkan pustaka"
msgid "workspace.assets.assets"
msgstr "Aset"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "Semua aset"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Warna"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:493
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:497
msgid "workspace.assets.colors.add-color"
msgstr "Tambahkan warna"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Komponen"
@@ -4375,19 +4357,19 @@ msgstr "Komponen"
msgid "workspace.assets.components.add-component"
msgstr "Tambahkan komponen"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "Buat sebuah kelompok"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr "Butir Anda akan dinamakan \"nama kelompok / nama butir\" secara otomatis"
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Hapus"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "Gandakan"
@@ -4395,11 +4377,11 @@ msgstr "Gandakan"
msgid "workspace.assets.duplicate-main"
msgstr "Gandakan utama"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Sunting"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:177
+#: src/app/main/ui/workspace/sidebar/assets.cljs:186
msgid "workspace.assets.filter"
msgstr "Penyaring"
@@ -4408,27 +4390,27 @@ msgstr "Penyaring"
msgid "workspace.assets.graphics"
msgstr "Grafis"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:576
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:190, src/app/main/ui/workspace/sidebar/assets/components.cljs:576
msgid "workspace.assets.grid-view"
msgstr "Tampilan kisi"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Kelompok"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "Nama kelompok"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:572
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:191, src/app/main/ui/workspace/sidebar/assets/components.cljs:572
msgid "workspace.assets.list-view"
msgstr "Tampilan daftar"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "pustaka lokal"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:168
+#: src/app/main/ui/workspace/sidebar/assets.cljs:177
msgid "workspace.assets.manage-library"
msgstr "Kelola pustaka"
@@ -4440,15 +4422,15 @@ msgstr "Tidak ada aset yang ditemukan"
msgid "workspace.assets.open-library"
msgstr "Buka berkas pustaka"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Ubah nama"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "Ubah nama kelompok"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "Cari aset"
@@ -4463,20 +4445,20 @@ msgstr[0] "%s aset dipilih"
msgid "workspace.assets.shared-library"
msgstr "Pustaka terbagi"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:237
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:235
msgid "workspace.assets.sidebar.components"
msgid_plural "workspace.assets.sidebar.components"
msgstr[0] "%s komponen"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:193
+#: src/app/main/ui/workspace/sidebar/assets.cljs:204
msgid "workspace.assets.sort"
msgstr "Urutkan"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Tipografi"
-#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:404
+#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:405
msgid "workspace.assets.typography.add-typography"
msgstr "Tambahkan tipografi"
@@ -4501,7 +4483,7 @@ msgstr "Spasi Huruf"
msgid "workspace.assets.typography.line-height"
msgstr "Ketinggian Garis"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -4513,59 +4495,59 @@ msgstr "Gaya teks"
msgid "workspace.assets.typography.text-transform"
msgstr "Transformasi Teks"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "Lepas kelompok"
-#: src/app/main/ui/workspace/context_menu.cljs:791
+#: src/app/main/ui/workspace/context_menu.cljs:794
msgid "workspace.context-menu.grid-cells.area"
msgstr "Buat area"
-#: src/app/main/ui/workspace/context_menu.cljs:794
+#: src/app/main/ui/workspace/context_menu.cljs:797
msgid "workspace.context-menu.grid-cells.create-board"
msgstr "Buat papan"
-#: src/app/main/ui/workspace/context_menu.cljs:786
+#: src/app/main/ui/workspace/context_menu.cljs:789
msgid "workspace.context-menu.grid-cells.merge"
msgstr "Gabungkan sel"
-#: src/app/main/ui/workspace/context_menu.cljs:749
+#: src/app/main/ui/workspace/context_menu.cljs:752
msgid "workspace.context-menu.grid-track.column.add-after"
msgstr "Tambah 1 kolom ke kanan"
-#: src/app/main/ui/workspace/context_menu.cljs:748
+#: src/app/main/ui/workspace/context_menu.cljs:751
msgid "workspace.context-menu.grid-track.column.add-before"
msgstr "Tambah 1 kolom ke kiri"
-#: src/app/main/ui/workspace/context_menu.cljs:750
+#: src/app/main/ui/workspace/context_menu.cljs:753
msgid "workspace.context-menu.grid-track.column.delete"
msgstr "Hapus kolom"
-#: src/app/main/ui/workspace/context_menu.cljs:751
+#: src/app/main/ui/workspace/context_menu.cljs:754
msgid "workspace.context-menu.grid-track.column.delete-shapes"
msgstr "Hapus kolom dan bentuk"
-#: src/app/main/ui/workspace/context_menu.cljs:747
+#: src/app/main/ui/workspace/context_menu.cljs:750
msgid "workspace.context-menu.grid-track.column.duplicate"
msgstr "Gandakan kolom"
-#: src/app/main/ui/workspace/context_menu.cljs:756
+#: src/app/main/ui/workspace/context_menu.cljs:759
msgid "workspace.context-menu.grid-track.row.add-after"
msgstr "Tambah 1 baris di bawah"
-#: src/app/main/ui/workspace/context_menu.cljs:755
+#: src/app/main/ui/workspace/context_menu.cljs:758
msgid "workspace.context-menu.grid-track.row.add-before"
msgstr "Tambah 1 baris di atas"
-#: src/app/main/ui/workspace/context_menu.cljs:757
+#: src/app/main/ui/workspace/context_menu.cljs:760
msgid "workspace.context-menu.grid-track.row.delete"
msgstr "Hapus baris"
-#: src/app/main/ui/workspace/context_menu.cljs:758
+#: src/app/main/ui/workspace/context_menu.cljs:761
msgid "workspace.context-menu.grid-track.row.delete-shapes"
msgstr "Hapus baris dan bentuk"
-#: src/app/main/ui/workspace/context_menu.cljs:754
+#: src/app/main/ui/workspace/context_menu.cljs:757
msgid "workspace.context-menu.grid-track.row.duplicate"
msgstr "Gandakan baris"
@@ -4573,7 +4555,7 @@ msgstr "Gandakan baris"
msgid "workspace.focus.focus-mode"
msgstr "Mode fokus"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "Fokus nonaktif"
@@ -4593,11 +4575,11 @@ msgstr "Gradien linear"
msgid "workspace.gradients.radial"
msgstr "Gradien radial"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "Nonaktifkan penyesuaian dinamis"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "Nonaktifkan skala proporsional"
@@ -4606,23 +4588,23 @@ msgstr "Nonaktifkan skala proporsional"
msgid "workspace.header.menu.disable-scale-text"
msgstr "Nonaktifkan skala teks"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "Nonaktifkan tancapan ke pemandu"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "Nonaktifkan tancapan ke piksel"
-#: src/app/main/ui/workspace/main_menu.cljs:215
+#: src/app/main/ui/workspace/main_menu.cljs:243
msgid "workspace.header.menu.disable-snap-ruler-guides"
msgstr "Nonaktifkan pemasangan ke panduan penggaris"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "Aktifkan penyesuaian dinamis"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "Aktifkan skala proporsional"
@@ -4631,51 +4613,51 @@ msgstr "Aktifkan skala proporsional"
msgid "workspace.header.menu.enable-scale-text"
msgstr "Aktifkan skala teks"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "Tancapkan ke pemandu"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "Aktifkan tancapkan ke piksel"
-#: src/app/main/ui/workspace/main_menu.cljs:216
+#: src/app/main/ui/workspace/main_menu.cljs:244
msgid "workspace.header.menu.enable-snap-ruler-guides"
msgstr "Pasang ke panduan penggaris"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "Sembunyikan nama papan"
-#: src/app/main/ui/workspace/main_menu.cljs:348
+#: src/app/main/ui/workspace/main_menu.cljs:376
msgid "workspace.header.menu.hide-guides"
msgstr "Sembunyikan panduan"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "Sembunyikan palet warna"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "Sembunyikan kisi piksel"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "Sembunyikan penggaris"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "Sembunyikan palet fon"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Sunting"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "Berkas"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "Bantuan & info"
@@ -4684,59 +4666,59 @@ msgstr "Bantuan & info"
msgid "workspace.header.menu.option.power-up"
msgstr "Tingkatkan paket Anda"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "Preferensi"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "Tampilan"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "Ulangi"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "Pilih semua"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "Tampilkan nama papan"
-#: src/app/main/ui/workspace/main_menu.cljs:349
+#: src/app/main/ui/workspace/main_menu.cljs:377
msgid "workspace.header.menu.show-guides"
msgstr "Tampilkan panduan"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "Tampilkan palet warna"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "Tampilkan kisi piksel"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Tampilkan penggaris"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "Tampilkan palet fon"
-#: src/app/main/ui/workspace/main_menu.cljs:288
+#: src/app/main/ui/workspace/main_menu.cljs:316
msgid "workspace.header.menu.toggle-dark-theme"
msgstr "Ubah ke tema gelap"
-#: src/app/main/ui/workspace/main_menu.cljs:286, src/app/main/ui/workspace/main_menu.cljs:289
+#: src/app/main/ui/workspace/main_menu.cljs:314, src/app/main/ui/workspace/main_menu.cljs:317
msgid "workspace.header.menu.toggle-light-theme"
msgstr "Ubah ke tema terang"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "Urungkan"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Atur ulang"
@@ -4752,7 +4734,7 @@ msgstr "Disimpan"
msgid "workspace.header.saving"
msgstr "Menyimpan"
-#: src/app/main/ui/workspace/right_header.cljs:239
+#: src/app/main/ui/workspace/right_header.cljs:240
msgid "workspace.header.share"
msgstr "Bagikan"
@@ -4761,11 +4743,11 @@ msgstr "Bagikan"
msgid "workspace.header.unsaved"
msgstr "Perubahan belum disimpan"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "Mode penampilan (%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "Zum"
@@ -4777,7 +4759,7 @@ msgstr "Penuhi - Ubah ukuran untuk memenuhi"
msgid "workspace.header.zoom-fit"
msgstr "Pas - Ubah ukuran supaya pas"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "Zum supaya pas semua"
@@ -4785,43 +4767,43 @@ msgstr "Zum supaya pas semua"
msgid "workspace.header.zoom-full-screen"
msgstr "Layar penuh"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "Zum ke terpilih"
-#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:621
msgid "workspace.layout_grid.editor.options.edit-grid"
msgstr "Sunting kisi"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1300
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1301
msgid "workspace.layout_grid.editor.options.exit"
msgstr "Keluar"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:429, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:435
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:430, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:436
msgid "workspace.layout_grid.editor.padding.bottom"
msgstr "Padding bawah"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:491
msgid "workspace.layout_grid.editor.padding.expand"
msgstr "Tampilkan opsi bantalan 4 sisi"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:354, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:355, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:362
msgid "workspace.layout_grid.editor.padding.horizontal"
msgstr "Padding horizontal"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:444, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:450
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:451
msgid "workspace.layout_grid.editor.padding.left"
msgstr "Padding kiri"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:414, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:420
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:421
msgid "workspace.layout_grid.editor.padding.right"
msgstr "Padding kanan"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:406
msgid "workspace.layout_grid.editor.padding.top"
msgstr "Padding atas"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:340, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:341, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:347
msgid "workspace.layout_grid.editor.padding.vertical"
msgstr "Padding vertikal"
@@ -4837,7 +4819,7 @@ msgstr "Selesai"
msgid "workspace.layout_grid.editor.top-bar.locate"
msgstr "Cari lokasi"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1326
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1327
msgid "workspace.layout_grid.editor.top-bar.locate.tooltip"
msgstr "Lokasi tata letak kisi"
@@ -4846,10 +4828,6 @@ msgstr "Lokasi tata letak kisi"
msgid "workspace.libraries.add"
msgstr "Tambahkan"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s warna"
-
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
msgstr "Belum ada gaya warna dalam pustaka Anda"
@@ -4876,43 +4854,35 @@ msgstr "Warna terkini"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "Pelengkap RGB"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Simpan gaya warna"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s komponen"
-
-#: src/app/main/ui/workspace/libraries.cljs:371
+#: src/app/main/ui/workspace/libraries.cljs:404
msgid "workspace.libraries.empty.add-some"
msgstr "Atau tambahkan beberapa dari sini untuk mencoba:"
-#: src/app/main/ui/workspace/libraries.cljs:365
+#: src/app/main/ui/workspace/libraries.cljs:398
msgid "workspace.libraries.empty.no-libraries"
msgstr "Tidak ada Pustaka Terbagi dalam tim Anda, Anda dapat melihat"
-#: src/app/main/ui/workspace/libraries.cljs:369
+#: src/app/main/ui/workspace/libraries.cljs:402
msgid "workspace.libraries.empty.some-templates"
msgstr "beberapa templat di sini"
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Pustaka berkas"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s grafis"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "PUSTAKA DALAM BERKAS INI"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "PUSTAKA"
@@ -4921,11 +4891,11 @@ msgstr "PUSTAKA"
msgid "workspace.libraries.library"
msgstr "PUSTAKA"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "PEMBARUAN PUSTAKA"
-#: src/app/main/ui/workspace/libraries.cljs:360
+#: src/app/main/ui/workspace/libraries.cljs:393
msgid "workspace.libraries.loading"
msgstr "Memuat…"
@@ -4934,79 +4904,75 @@ msgstr "Memuat…"
msgid "workspace.libraries.more-templates"
msgstr "Anda dapat mencari "
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "Tidak ada Pustaka Terbagi yang membutuhkan pembaruan"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "Tidak ada yang cocok dengan “%s”"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "Cari pustaka terbagi"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "PUSTAKA TERBAGI"
-#: src/app/main/ui/workspace/libraries.cljs:352
+#: src/app/main/ui/workspace/libraries.cljs:385
msgid "workspace.libraries.shared-library-btn"
msgstr "Hubungkan pustaka"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Beberapa tipografi"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Lepaskan tautan dari semua tipografi"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s tipografi"
-
-#: src/app/main/ui/workspace/libraries.cljs:323
+#: src/app/main/ui/workspace/libraries.cljs:354
msgid "workspace.libraries.unlink-library-btn"
msgstr "Putuskan pustaka"
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Perbarui"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "lihat semua perubahan"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "PEMBARUAN"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "Klik tombol + untuk menambahkan interaksi."
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:96
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:97
msgid "workspace.options.blur-options.add-blur"
msgstr "Tambahkan buram"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:117
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:118
msgid "workspace.options.blur-options.remove-blur"
msgstr "Hapus buram"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Buram"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "Buram kelompok"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "Buram seleksi"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:114
msgid "workspace.options.blur-options.toggle-blur"
msgstr "Sakelar buram"
@@ -5014,39 +4980,39 @@ msgstr "Sakelar buram"
msgid "workspace.options.canvas-background"
msgstr "Latar belakang kanvas"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "Klip konten"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Komponen"
-#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:193
+#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:196
msgid "workspace.options.component.annotation"
msgstr "Anotasi"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "Salin"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:185
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:188
msgid "workspace.options.component.create-annotation"
msgstr "Buat anotasi"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "Sunting anotasi"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "Utama"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:706
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:721
msgid "workspace.options.component.swap"
msgstr "Ganti komponen"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:765
msgid "workspace.options.component.swap.empty"
msgstr "Belum ada aset dalam pustaka ini"
@@ -5090,7 +5056,7 @@ msgstr "Atas"
msgid "workspace.options.constraints.topbottom"
msgstr "Atas & Bawah"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Desain"
@@ -5103,20 +5069,20 @@ msgstr "Ekspor"
msgid "workspace.options.export-multiple"
msgstr "Ekspor seleksi"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "Ekspor %s elemen"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:188
+#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:214
msgid "workspace.options.export.add-export"
msgstr "Tambahkan ekspor"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:235
+#: 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 "Hapus ekspor"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Akhiran"
@@ -5124,7 +5090,7 @@ msgstr "Akhiran"
msgid "workspace.options.exporting-complete"
msgstr "Pengeksporan selesai"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "Mengekspor…"
@@ -5136,27 +5102,27 @@ msgstr "Pengeksporan gagal"
msgid "workspace.options.exporting-object-slow"
msgstr "Pengeksporan secara tidak terduga lambat"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Isian"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:194
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:234
msgid "workspace.options.fill.add-fill"
msgstr "Tambahkan warna isian"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:208
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:248
msgid "workspace.options.fill.remove-fill"
msgstr "Hapus isian"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:392
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:474
msgid "workspace.options.fit-content"
msgstr "Ubah ukuran papan untuk memuat konten"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "Tambahkan awalan alur"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:178
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:179
msgid "workspace.options.flows.flow"
msgstr "Alur"
@@ -5165,19 +5131,19 @@ msgstr "Alur"
msgid "workspace.options.flows.flow-start"
msgstr "Awalan alur"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "Aluran dimulai"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:155
msgid "workspace.options.flows.remove-flow"
msgstr "Hapus alur"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Otomatis"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "Kolom"
@@ -5186,7 +5152,7 @@ msgstr "Kolom"
msgid "workspace.options.grid.grid-title"
msgstr "Kisi"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Warna"
@@ -5195,15 +5161,15 @@ msgstr "Warna"
msgid "workspace.options.grid.params.columns"
msgstr "Kolom"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "Selokan"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Tinggi"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Margin"
@@ -5212,7 +5178,7 @@ msgstr "Margin"
msgid "workspace.options.grid.params.rows"
msgstr "Baris"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "Tetapkan sebagai bawaan"
@@ -5226,159 +5192,159 @@ msgstr "Ukuran"
msgid "workspace.options.grid.params.type"
msgstr "Jenis"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Bawah"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Tengah"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Kiri"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Kanan"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "Lebarkan"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "Atas"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "Gunakan bawaan"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Lebar"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Baris"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "Kotak"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Isian kelompok"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Sapuan kelompok"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:326
msgid "workspace.options.guides.add-guide"
msgstr "Tambahkan alur"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:187
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:188
msgid "workspace.options.guides.remove-guide"
msgstr "Hapus alur"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:320
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
msgid "workspace.options.guides.title"
msgstr "Panduan"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:183
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:184
msgid "workspace.options.guides.toggle-guide"
msgstr "Sakelar pemandu"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "Tinggi"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "Inspeksi"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "Tindakan"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "Setelah jeda"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "Animasi"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "Larut"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "Tidak ada"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "Dorong"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "Geser"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "otomatis"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "Tambahkan hamparan latar belakang"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "Tutup ketika mengeklik di luar"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "Tutup hamparan"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "Tutup hamparan: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "Jeda"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "Tujuan"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "Durasi"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "Pemasukan"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "Ease"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "Ease masuk"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "Ease masuk keluar"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "Ease keluar"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "Linear"
@@ -5387,47 +5353,47 @@ msgstr "Linear"
msgid "workspace.options.interaction-in"
msgstr "Masuk"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "Tetikus masuk"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "Tetikus keluar"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "md"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "Navigasi ke"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "Navigasi ke: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(tidak ditetapkan)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "Efek ofset"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "Pada Klik"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "Buka hamparan"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "Buka hamparan: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "Buka URL"
@@ -5436,87 +5402,87 @@ msgstr "Buka URL"
msgid "workspace.options.interaction-out"
msgstr "Keluar"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "Tengah bawah"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "Kiri bawah"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "Kanan bawah"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "Tengah"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "Manual"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "Tengah atas"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "Kiri atas"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "Kanan atas"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "Posisi"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "Jaga posisi gulir"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "Layar sebelumnya"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "Relatif ke"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "diri sendiri"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "Alih hamparan"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "Alih hamparan: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "Picuan"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "Saat Melayang"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "Saat Menekan"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "Interaksi"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:735
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:736
msgid "workspace.options.interactions.add-interaction"
msgstr "Tambahkan interaksi"
@@ -5525,67 +5491,67 @@ msgstr "Tambahkan interaksi"
msgid "workspace.options.interactions.remove-interaction"
msgstr "Hapus interaksi"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "Warna"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "Bakaran warna"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "Penghindaran warna"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "Gelapkan"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "Perbedaan"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "Tidak termasukan"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Cahaya keras"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Rona"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Terangkan"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "Kilau"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "Kalikan"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "Normal"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "Hamparan"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "Saturasi"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Layar"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "Cahaya lembut"
@@ -5604,7 +5570,7 @@ msgstr "Lapisan kelompok"
msgid "workspace.options.layer-options.title.multiple"
msgstr "Lapisan terpilih"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:202
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:207, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:213
msgid "workspace.options.layer-options.toggle-layer"
msgstr "Sakelar keterlihatan lapisan"
@@ -5613,19 +5579,19 @@ msgstr "Sakelar keterlihatan lapisan"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "Opsi tingkat lanjut"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "Max.Height"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "Max.Width"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "Min.Height"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "Min.Width"
@@ -5739,15 +5705,15 @@ msgstr "ruang di antara"
msgid "workspace.options.layout.top"
msgstr "Atas"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "Lebih banyak warna"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "Lebih banyak warna pustaka"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "Opasitas"
@@ -5756,35 +5722,35 @@ msgstr "Opasitas"
msgid "workspace.options.position"
msgstr "Posisi"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "Prototipe"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "Radius"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "Kiri bawah"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "Kanan bawah"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "Kiri atas"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "Kanan atas"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:152
msgid "workspace.options.radius.hide-all-corners"
msgstr "Tutup radius tersendiri"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:136
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:153
msgid "workspace.options.radius.show-single-corners"
msgstr "Buka radius tersendiri"
@@ -5796,7 +5762,7 @@ msgstr "Terkini"
msgid "workspace.options.retry"
msgstr "Coba lagi"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "Rotasi"
@@ -5804,31 +5770,31 @@ msgstr "Rotasi"
msgid "workspace.options.search-font"
msgstr "Cari fon"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr "Pilih bentuk, papan, atau kelompok untuk menyeret koneksi ke papan lain."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "Warna terpilih"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "Isian seleksi"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "Sapuan seleksi"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:341
msgid "workspace.options.shadow-options.add-shadow"
msgstr "Tambahkan bayangan"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "Buram"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "Warna bayangan"
@@ -5840,55 +5806,56 @@ msgstr "Bayangan jatuhan"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "Bayangan masuk"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:348
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:183, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:354
msgid "workspace.options.shadow-options.remove-shadow"
msgstr "Hapus bayangan"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "Tersebar"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "Bayangan"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "Bayangan kelompok"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "Bayangan seleksi"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:174
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:179
msgid "workspace.options.shadow-options.toggle-shadow"
msgstr "Sakelar bayangan"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "Tampilkan dalam ekspor"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "Tampilkan dalam mode penampil"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "Ukuran"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "Prasetel ukuran"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "Sapuan"
@@ -5897,7 +5864,7 @@ msgstr "Sapuan"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "Penanda lingkaran"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "Lingkaran"
@@ -5906,7 +5873,7 @@ msgstr "Lingkaran"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "Penanda berlian"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "Berlian"
@@ -5915,19 +5882,19 @@ msgstr "Berlian"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "Panah garis"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "Tanda panah"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "Tidak ada"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "Bulat"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "Kotak"
@@ -5936,7 +5903,7 @@ msgstr "Kotak"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "Penanda kotak"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "Persegi panjang"
@@ -5945,83 +5912,83 @@ msgstr "Persegi panjang"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "Panah segi tiga"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "Segitiga"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "Warna sapuan"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "Lebar sapuan"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:180
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:189
msgid "workspace.options.stroke.add-stroke"
msgstr "Tambahkan warna garis"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "Tengah"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "Garis"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "Titik"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "Dalam"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "Tercampur"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "Luar"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:193
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:202
msgid "workspace.options.stroke.remove-stroke"
msgstr "Hapus garis"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "Padat"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "Paskan ke bawah"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "Paskan ke tengah"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "Paskan ke atas"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "Kiri ke Kanan"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "Kanan ke Kiri"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "Tinggi otomatis"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "Lebar otomatis"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "Tetap"
@@ -6043,35 +6010,35 @@ msgstr "Huruf kecil"
msgid "workspace.options.text-options.none"
msgstr "Tidak ada"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "Coret (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "Paskan ke tengah"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "Rata Kiri Kanan"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "Paskan ke kiri"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "Paskan ke kanan"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "Teks"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "Teks kelompok"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "Teks seleksi"
@@ -6080,7 +6047,7 @@ msgstr "Teks seleksi"
msgid "workspace.options.text-options.titlecase"
msgstr "Huruf judul"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "Garis bawah (%s)"
@@ -6089,19 +6056,19 @@ msgstr "Garis bawah (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "Huruf Besar"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr "Gunakan tombol main di tajuk untuk menjalankan tampilan prototipe."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "Lebar"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "Sumbu X"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Sumbu Y"
@@ -6145,78 +6112,78 @@ msgstr "Simpul terpisah (%s)"
msgid "workspace.path.actions.snap-nodes"
msgstr "Tancap simpul (%s)"
-#: src/app/main/ui/workspace/plugins.cljs:83
+#: src/app/main/ui/workspace/plugins.cljs:84
msgid "workspace.plugins.button-open"
msgstr "Buka"
-#: src/app/main/ui/workspace/plugins.cljs:197
+#: src/app/main/ui/workspace/plugins.cljs:198
#, markdown
msgid "workspace.plugins.discover"
msgstr "Jelajahi [lebih banyak plugin](%s)"
-#: src/app/main/ui/workspace/plugins.cljs:204
+#: src/app/main/ui/workspace/plugins.cljs:205
msgid "workspace.plugins.empty-plugins"
msgstr "Belum ada plugin yang terpasang"
-#: src/app/main/ui/workspace/plugins.cljs:191
+#: src/app/main/ui/workspace/plugins.cljs:192
msgid "workspace.plugins.error.manifest"
msgstr "Manifes plugin tidak benar."
-#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:755, src/app/main/ui/workspace/plugins.cljs:82
+#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:783, src/app/main/ui/workspace/plugins.cljs:83
msgid "workspace.plugins.error.need-editor"
msgstr "Anda perlu menjadi penyunting untuk menggunakan plugin ini"
-#: src/app/main/ui/workspace/plugins.cljs:187
+#: src/app/main/ui/workspace/plugins.cljs:188
msgid "workspace.plugins.error.url"
msgstr "Plugin tidak ada atau URL tidak benar."
-#: src/app/main/ui/workspace/plugins.cljs:183
+#: src/app/main/ui/workspace/plugins.cljs:184
msgid "workspace.plugins.install"
msgstr "Pasang"
-#: src/app/main/ui/workspace/plugins.cljs:213
+#: src/app/main/ui/workspace/plugins.cljs:214
msgid "workspace.plugins.installed-plugins"
msgstr "Plugin terpasang"
-#: src/app/main/ui/workspace/main_menu.cljs:710
+#: src/app/main/ui/workspace/main_menu.cljs:738
msgid "workspace.plugins.menu.plugins-manager"
msgstr "Pengelola plugin"
-#: src/app/main/ui/workspace/main_menu.cljs:906
+#: src/app/main/ui/workspace/main_menu.cljs:934
msgid "workspace.plugins.menu.title"
msgstr "Plugin"
-#: src/app/main/ui/workspace/plugins.cljs:374
+#: src/app/main/ui/workspace/plugins.cljs:375
msgid "workspace.plugins.permissions-update.title"
msgstr "PERBARUI PLUGIN INI"
-#: src/app/main/ui/workspace/plugins.cljs:378
+#: src/app/main/ui/workspace/plugins.cljs:379
msgid "workspace.plugins.permissions-update.warning"
msgstr ""
"Plugin ini telah diubah sejak terakhir kali Anda membukanya. Ini sekarang "
"memerlukan akses:"
-#: src/app/main/ui/workspace/plugins.cljs:278
+#: src/app/main/ui/workspace/plugins.cljs:279
msgid "workspace.plugins.permissions.allow-download"
msgstr "Memulai pengunduhan berkas."
-#: src/app/main/ui/workspace/plugins.cljs:271
+#: src/app/main/ui/workspace/plugins.cljs:272
msgid "workspace.plugins.permissions.comment-read"
msgstr "Membaca komentar dan balasan Anda."
-#: src/app/main/ui/workspace/plugins.cljs:265
+#: src/app/main/ui/workspace/plugins.cljs:266
msgid "workspace.plugins.permissions.comment-write"
msgstr "Membaca dan mengubah komentar Anda dan membalas dengan nama Anda."
-#: src/app/main/ui/workspace/plugins.cljs:238
+#: src/app/main/ui/workspace/plugins.cljs:239
msgid "workspace.plugins.permissions.content-read"
msgstr "Membaca konten berkas yang dapat diakses pengguna."
-#: src/app/main/ui/workspace/plugins.cljs:232
+#: src/app/main/ui/workspace/plugins.cljs:233
msgid "workspace.plugins.permissions.content-write"
msgstr "Membaca dan mengubah konten berkas yang dapat diakses pengguna."
-#: src/app/main/ui/workspace/plugins.cljs:325
+#: src/app/main/ui/workspace/plugins.cljs:326
msgid "workspace.plugins.permissions.disclaimer"
msgstr ""
"Harap diingat bahwa plugin ini dibuat oleh pihak eksternal, jadi pastikan "
@@ -6224,31 +6191,31 @@ msgstr ""
"Anda penting bagi kami. Jika Anda memiliki masalah, silakan hubungi "
"dukungan."
-#: src/app/main/ui/workspace/plugins.cljs:258
+#: src/app/main/ui/workspace/plugins.cljs:259
msgid "workspace.plugins.permissions.library-read"
msgstr "Membaca pustaka dan aset Anda."
-#: src/app/main/ui/workspace/plugins.cljs:252
+#: src/app/main/ui/workspace/plugins.cljs:253
msgid "workspace.plugins.permissions.library-write"
msgstr "Membaca dan mengubah pustaka dan aset Anda."
-#: src/app/main/ui/workspace/plugins.cljs:318
+#: src/app/main/ui/workspace/plugins.cljs:319
msgid "workspace.plugins.permissions.title"
msgstr "PLUGIN '%s' MEMINTA AKSES:"
-#: src/app/main/ui/workspace/plugins.cljs:245
+#: src/app/main/ui/workspace/plugins.cljs:246
msgid "workspace.plugins.permissions.user-read"
msgstr "Membaca informasi profil pengguna sasaat ini."
-#: src/app/main/ui/workspace/plugins.cljs:209
+#: src/app/main/ui/workspace/plugins.cljs:210
msgid "workspace.plugins.plugin-list-link"
msgstr "Daftar Plugin"
-#: src/app/main/ui/workspace/plugins.cljs:86
+#: src/app/main/ui/workspace/plugins.cljs:87
msgid "workspace.plugins.remove-plugin"
msgstr "Hapus plugin"
-#: src/app/main/ui/workspace/plugins.cljs:178
+#: src/app/main/ui/workspace/plugins.cljs:179
msgid "workspace.plugins.search-placeholder"
msgstr "Tuliskan URL plugin"
@@ -6256,26 +6223,26 @@ msgstr "Tuliskan URL plugin"
msgid "workspace.plugins.success"
msgstr "Plugin dimuat dengan benar."
-#: src/app/main/ui/workspace/plugins.cljs:172
+#: src/app/main/ui/workspace/plugins.cljs:173
msgid "workspace.plugins.title"
msgstr "Plugin"
-#: src/app/main/ui/workspace/plugins.cljs:438
+#: src/app/main/ui/workspace/plugins.cljs:439
msgid "workspace.plugins.try-out.cancel"
msgstr "NANTI"
-#: src/app/main/ui/workspace/plugins.cljs:431
+#: src/app/main/ui/workspace/plugins.cljs:432
msgid "workspace.plugins.try-out.message"
msgstr ""
"Ingin melihat? Ini akan membuka dalam draf baru untuk tim Anda saat ini. "
"(Jika tidak, Anda selalu dapat mencarinya dalam plugin terpasang dalam "
"berkas apa pun.)"
-#: src/app/main/ui/workspace/plugins.cljs:427
+#: src/app/main/ui/workspace/plugins.cljs:428
msgid "workspace.plugins.try-out.title"
msgstr "PLUGIN '%s' TERPASANG UNTUK PENGGUNA ANDA!"
-#: src/app/main/ui/workspace/plugins.cljs:444
+#: src/app/main/ui/workspace/plugins.cljs:445
msgid "workspace.plugins.try-out.try"
msgstr "COBA PLUGIN"
@@ -6287,15 +6254,15 @@ msgstr "Tambahkan tata letak flex"
msgid "workspace.shape.menu.add-grid"
msgstr "Tambahkan tata letak kisi"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1015, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1039
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1016, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1040
msgid "workspace.shape.menu.add-layout"
msgstr "Tambahkan tata letak"
-#: src/app/main/ui/workspace/context_menu.cljs:608, src/app/main/ui/workspace/sidebar/assets/common.cljs:505, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:941, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1161
+#: src/app/main/ui/workspace/context_menu.cljs:610, src/app/main/ui/workspace/sidebar/assets/common.cljs:514, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:961, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1113, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1195
msgid "workspace.shape.menu.add-variant"
msgstr "Buat varian"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:509, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:990, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1082, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1198
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:518, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1010, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1115, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1233
msgid "workspace.shape.menu.add-variant-property"
msgstr "Buat properti baru"
@@ -6335,7 +6302,7 @@ msgstr "Salin properti"
msgid "workspace.shape.menu.copy-text"
msgstr "Salin sebagai teks"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "Buat anotasi"
@@ -6343,11 +6310,11 @@ msgstr "Buat anotasi"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "Seleksi ke papan"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "Buat komponen"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "Buat beberapa komponen"
@@ -6355,7 +6322,7 @@ msgstr "Buat beberapa komponen"
msgid "workspace.shape.menu.cut"
msgstr "Potong"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "Hapus"
@@ -6363,15 +6330,15 @@ msgstr "Hapus"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "Hapus awalan alur"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "Lepaskan bagian"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "Lepaskan bagian"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "Perbedaan"
@@ -6383,11 +6350,11 @@ msgstr "Gandakan"
msgid "workspace.shape.menu.edit"
msgstr "Sunting"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "Tidak termasuk"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "Ratakan"
@@ -6420,19 +6387,19 @@ msgstr "Pergi ke berkas komponen utama"
msgid "workspace.shape.menu.group"
msgstr "Kelompok"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "Sembunyikan"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "Tampilkan/Sembunyikan Antarmuka"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "Persimpangan"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "Kunci"
@@ -6440,7 +6407,7 @@ msgstr "Kunci"
msgid "workspace.shape.menu.mask"
msgstr "Topeng"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "Tempelkan"
@@ -6460,11 +6427,11 @@ msgstr "Hapus tata letak flex"
msgid "workspace.shape.menu.remove-grid"
msgstr "Hapus tata letak kisi"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1033
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1034
msgid "workspace.shape.menu.remove-layout"
msgstr "Hapus tata letak"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1222
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1257
msgid "workspace.shape.menu.remove-variant-property"
msgstr "Hapus properti"
@@ -6472,11 +6439,11 @@ msgstr "Hapus properti"
msgid "workspace.shape.menu.rename"
msgstr "Ubah nama"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "Atur ulang timpaan"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "Pulihkan komponen utama"
@@ -6484,15 +6451,15 @@ msgstr "Pulihkan komponen utama"
msgid "workspace.shape.menu.select-layer"
msgstr "Pilih lapisan"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "Tampilkan"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "Tampilkan dalam panel aset"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "Tampilkan komponen utama"
@@ -6505,6 +6472,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "Tetapkan sebagai gambar kecil"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "Transformasi ke jalur"
@@ -6512,11 +6480,11 @@ msgstr "Transformasi ke jalur"
msgid "workspace.shape.menu.ungroup"
msgstr "Lepaskan kelompok"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "Serikat"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "Buka kunci"
@@ -6529,7 +6497,7 @@ msgstr "Buka topeng"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "Perbarui komponen utama"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "Perbarui komponen utama"
@@ -6541,11 +6509,11 @@ msgstr "Tutup bilah samping"
msgid "workspace.sidebar.expand"
msgstr "Buka bilah samping"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "Riwayat"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "Lapisan"
@@ -6585,11 +6553,11 @@ msgstr "Teks"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "Atribut SVG Diimpor"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "Halaman"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:248
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:249
msgid "workspace.sidebar.sitemap.add-page"
msgstr "Tambahkan halaman"
@@ -6606,23 +6574,23 @@ msgstr "%s tema aktif"
msgid "workspace.tokens.add set"
msgstr "Tambahkan set"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:329
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
msgid "workspace.tokens.add-new-theme"
msgstr "Tambahkan tema baru"
-#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:60
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:62
msgid "workspace.tokens.add-set-to-group"
msgstr "Tambahkan set ke kelompok ini"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:161
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:136
msgid "workspace.tokens.applied-to"
msgstr "Diterapkan pada"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:315
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:316
msgid "workspace.tokens.axis"
msgstr "Axis"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:338
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:337
msgid "workspace.tokens.back-to-themes"
msgstr "Kembali ke daftar tema"
@@ -6634,15 +6602,15 @@ msgstr "Warna"
msgid "workspace.tokens.create-new-theme"
msgstr "Buat tema pertama Anda sekarang."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:100, src/app/main/ui/workspace/tokens/themes.cljs:44
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:96, src/app/main/ui/workspace/tokens/themes.cljs:44
msgid "workspace.tokens.create-one"
msgstr "Buat baru."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:534
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:552
msgid "workspace.tokens.create-token"
msgstr "Buat token %s baru"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:337
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:338
msgid "workspace.tokens.delete"
msgstr "Hapus token"
@@ -6650,19 +6618,19 @@ msgstr "Hapus token"
msgid "workspace.tokens.delete-theme-title"
msgstr "Hapus tema"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:334
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:335
msgid "workspace.tokens.duplicate"
msgstr "Gandakan token"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:201, src/app/main/data/workspace/tokens/library_edit.cljs:405
+#: src/app/main/data/workspace/tokens/library_edit.cljs:197, src/app/main/data/workspace/tokens/library_edit.cljs:415
msgid "workspace.tokens.duplicate-suffix"
msgstr "salin"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:321
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:322
msgid "workspace.tokens.edit"
msgstr "Sunting token"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:327
msgid "workspace.tokens.edit-theme-title"
msgstr "Sunting tema"
@@ -6670,11 +6638,7 @@ msgstr "Sunting tema"
msgid "workspace.tokens.edit-themes"
msgstr "Sunting tema"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:533
-msgid "workspace.tokens.edit-token"
-msgstr "Sunting token"
-
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:540
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:558
msgid "workspace.tokens.enter-token-name"
msgstr "Masukkan nama token %s"
@@ -6682,7 +6646,7 @@ msgstr "Masukkan nama token %s"
msgid "workspace.tokens.error-parse"
msgstr "Kesalahan Pengimporan: Tidak dapat mengurai JSON."
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:229
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:228
msgid "workspace.tokens.gaps"
msgstr "Celah"
@@ -6737,15 +6701,15 @@ msgstr "Tema"
msgid "workspace.tokens.label.theme-placeholder"
msgstr "Tambahkan tema (mis. Terang)"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:221
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:220
msgid "workspace.tokens.margins"
msgstr "Margin"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:257
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:256
msgid "workspace.tokens.max-size"
msgstr "Ukuran maksimal"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:251
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:250
msgid "workspace.tokens.min-size"
msgstr "Ukuran minimal"
@@ -6761,7 +6725,7 @@ msgstr "Tidak ada set aktif"
msgid "workspace.tokens.no-active-theme"
msgstr "Tidak ada tema aktif"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:76
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:72
msgid "workspace.tokens.no-permisions-set"
msgstr "Anda perlu menjadi penyunting untuk mengaktifkan / menonaktifkan set"
@@ -6769,11 +6733,11 @@ msgstr "Anda perlu menjadi penyunting untuk mengaktifkan / menonaktifkan set"
msgid "workspace.tokens.no-permission-themes"
msgstr "Anda perlu menjadi penyunting untuk menggunakan tema"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:480
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:483
msgid "workspace.tokens.no-sets-create"
msgstr "Belum ada set yang ditetapkan. Buatlah terlebih dahulu."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:97, src/app/main/ui/workspace/tokens/sets/lists.cljs:103
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:93, src/app/main/ui/workspace/tokens/sets/lists.cljs:99
msgid "workspace.tokens.no-sets-yet"
msgstr "Belum ada set."
@@ -6797,12 +6761,12 @@ msgstr "Nilai token tidak valid. Nilai terurai terlalu besar: %s"
msgid "workspace.tokens.opacity-range"
msgstr "Opasitas harus antara 0 dan 100% atau 0 dan 1 (mis. 50% atau 0.5)."
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:145
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:120
#, fuzzy
msgid "workspace.tokens.original-value"
msgstr "Nilai asli: %s"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:205
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:204
msgid "workspace.tokens.paddings"
msgstr "Padding"
@@ -6810,7 +6774,7 @@ msgstr "Padding"
msgid "workspace.tokens.radius"
msgstr "Radius"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:153
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:128
msgid "workspace.tokens.ref-not-valid"
msgstr "Referensi tidak valid atau tidak dalam set aktif mana pun"
@@ -6819,7 +6783,7 @@ msgstr "Referensi tidak valid atau tidak dalam set aktif mana pun"
msgid "workspace.tokens.reference-error"
msgstr "Kesalahan Referensi: "
-#: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:39, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:44, src/app/main/ui/workspace/tokens/management/token_pill.cljs:146
+#: 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:100, 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 "Nilai terselesaikan: %s"
@@ -6828,7 +6792,7 @@ msgstr "Nilai terselesaikan: %s"
msgid "workspace.tokens.save-theme"
msgstr "Simpan tema"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:209, src/app/main/ui/workspace/tokens/sets/lists.cljs:315
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:204, src/app/main/ui/workspace/tokens/sets/lists.cljs:309
msgid "workspace.tokens.select-set"
msgstr "Pilih set."
@@ -6836,11 +6800,11 @@ msgstr "Pilih set."
msgid "workspace.tokens.self-reference"
msgstr "Token memiliki referensi diri"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:64
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:60
msgid "workspace.tokens.set-edit-placeholder"
msgstr "Masukkan nama (gunakan '/' untuk grup)"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:343
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:342
msgid "workspace.tokens.set-selection-theme"
msgstr "Tentukan set token apa yang digunakan sebagai bagian opsi tema ini:"
@@ -6853,7 +6817,7 @@ msgstr "Token yang diatur tidak aktif"
msgid "workspace.tokens.sets-hint"
msgstr "Sunting tema dan kelola set"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:245
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:244
msgid "workspace.tokens.size"
msgstr "Ukuran"
@@ -6871,16 +6835,16 @@ msgstr ""
msgid "workspace.tokens.themes-list"
msgstr "Daftar tema"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:589, src/app/main/ui/workspace/tokens/management/create/form.cljs:590
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:608, src/app/main/ui/workspace/tokens/management/create/form.cljs:609
#, fuzzy
msgid "workspace.tokens.token-description"
msgstr "Deskripsi"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:539
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:83, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:109, src/app/main/ui/workspace/tokens/management/create/form.cljs:557
msgid "workspace.tokens.token-name"
msgstr "Nama"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:66
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:69
msgid "workspace.tokens.token-name-validation-error"
msgstr ""
" bukanlah nama token yang valid.\n"
@@ -6892,11 +6856,11 @@ msgstr ""
msgid "workspace.tokens.token-not-resolved"
msgstr "Tidak dapat mengurai token referensi dengan nama: %s"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:567
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:585
msgid "workspace.tokens.token-value"
msgstr "Nilai"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:566, src/app/main/ui/workspace/tokens/management/create/form.cljs:883, src/app/main/ui/workspace/tokens/management/create/form.cljs:892
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:584, src/app/main/ui/workspace/tokens/management/create/form.cljs:1035
msgid "workspace.tokens.token-value-enter"
msgstr "Masukkan nilai atau alias dengan {alias}"
@@ -6904,19 +6868,19 @@ msgstr "Masukkan nilai atau alias dengan {alias}"
msgid "workspace.tokens.tokens-section-title"
msgstr "TOKEN - %s"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:125
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:121
msgid "workspace.tokens.tools"
msgstr "Peralatan"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:156
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:131
msgid "workspace.tokens.value-not-valid"
msgstr "Nilai tidak valid"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:563
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:581
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:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "Aset"
@@ -6924,7 +6888,7 @@ msgstr "Aset"
msgid "workspace.toolbar.color-palette"
msgstr "Palet Warna (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "Komentar (%s)"
@@ -7135,19 +7099,19 @@ msgstr "Operasi pada %s"
msgid "workspace.undo.title"
msgstr "Riwayat"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "Abaikan"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "Info lebih lanjut"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "Ada pembaruan dalam pustaka terbagi"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "Perbarui"
@@ -7207,11 +7171,11 @@ msgstr "Apakah Anda ingin memulihkan versi ini?"
msgid "workspace.versions.snapshot-menu"
msgstr "Buka menu snapshot"
-#: src/app/main/ui/workspace/sidebar.cljs:236
+#: src/app/main/ui/workspace/sidebar.cljs:237
msgid "workspace.versions.tab.actions"
msgstr "Tindakan"
-#: src/app/main/ui/workspace/sidebar.cljs:234
+#: src/app/main/ui/workspace/sidebar.cljs:235
msgid "workspace.versions.tab.history"
msgstr "Riwayat"
diff --git a/frontend/translations/ig.po b/frontend/translations/ig.po
index a19379e9cb..8afc6dd8a3 100644
--- a/frontend/translations/ig.po
+++ b/frontend/translations/ig.po
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-11 07:21+0000\n"
-"Last-Translator: Alejandro Alonso \n"
+"PO-Revision-Date: 2025-10-07 16:35+0000\n"
+"Last-Translator: Anonymous \n"
"Language-Team: Igbo "
" \n"
"Language: ig\n"
@@ -9,7 +9,7 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 5.13-dev\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:277
#, unused
@@ -132,7 +132,7 @@ msgstr "Mepee ebe ntinye ihe"
msgid "auth.sidebar-tagline"
msgstr "Nsina ghere oghe iji mee nse na atụtụ"
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Ọnọdụ ọrụ"
@@ -151,7 +151,7 @@ msgstr "Anyị ezigaala ozi nnyocha na"
msgid "branding-illustrations-marketing-pieces"
msgstr "...onyinye aha, nkọwa gasị, ngwa ire ahịa dịrị gabazịa."
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "bipụta"
@@ -207,7 +207,7 @@ msgstr "Sọọsọ ndị otu"
msgid "common.share-link.title"
msgstr "Kee atụ gasị"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Ebiputaghị"
@@ -314,7 +314,7 @@ msgstr "Ọdịmara ga-emebi na%s"
msgid "dashboard.access-tokens.token-will-not-expire"
msgstr "Ọdịmara enweghị ụbọchị mmebi"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Tinye dị ka ọ a nkwekọrịta"
@@ -322,27 +322,27 @@ msgstr "Tinye dị ka ọ a nkwekọrịta"
msgid "dashboard.change-email"
msgstr "Gbanwee ozi - n"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(sere)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Mebe otu ọhụrụ"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Ite mkpịsị gị"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "kacha otu"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Butuo ederede ite mkpịsị (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Butuo ederede tozuru etozu (.svg + .json)"
@@ -358,7 +358,7 @@ msgstr "Mee o yiri %s ederede"
msgid "dashboard.export-binary-multi"
msgstr "Butuo %s ederede ite mkpịsị (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Bupu bọọdụ dị ka PDF"
@@ -488,11 +488,11 @@ msgstr "Ibugo njatụle n'ebe nkesa (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Ibugo ederede : %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Kpọta mmadụ"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Hapụ otu"
@@ -504,7 +504,7 @@ msgstr "Ọba ederede gasị & ndebiri"
msgid "dashboard.libraries-and-templates.explore"
msgstr "Nyocha ọtụtụ n'ime ha ma mara etu ị ga-esi tinye ọnụ"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "E nwere nsogbu ibu aba ndebiri . E bubataghị ndebiri."
@@ -536,7 +536,7 @@ msgstr "Gaa n'otu ọzọ"
msgid "dashboard.new-file"
msgstr "+ Ederede ọhụrụ"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Ederede ọhụrụ"
@@ -544,7 +544,7 @@ msgstr "Ederede ọhụrụ"
msgid "dashboard.new-project"
msgstr "+ Nchọcha ọhụrụ"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Arụmarụ ọhụrụ"
@@ -552,7 +552,7 @@ msgstr "Arụmarụ ọhụrụ"
msgid "dashboard.no-matches-for"
msgstr "Ọ nweghị ihe ndabara e nwetara maka “%s“"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Arụmarụ a kụdoro ga-apụta ebe a"
@@ -568,7 +568,7 @@ msgstr "E nyochala adreesị ozi - n gị nke ọma"
msgid "dashboard.notifications.password-saved"
msgstr "E dọkwara akara mpịbanye nke ọma !"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s Ndị otu"
@@ -584,7 +584,7 @@ msgstr "Nhọrọ gasị"
msgid "dashboard.password-change"
msgstr "Gbanwee akara mpịbanye"
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Nọmba /Wepụ nọmba"
@@ -605,7 +605,7 @@ msgstr "Wepụ dị ka ọba ederede nkekọrịta"
msgid "dashboard.save-settings"
msgstr "Dokwa ntọala"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Chọọ…"
@@ -621,7 +621,7 @@ msgstr "Họrọ asụsụ UI"
msgid "dashboard.success-duplicate-project"
msgstr "E megharịala arụmarụ gị nke ọma\""
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "E wepula ederede gị nke ọma\""
@@ -629,15 +629,15 @@ msgstr "E wepula ederede gị nke ọma\""
msgid "dashboard.success-move-project"
msgstr "E bupula arụmarụ gị nke ọma"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Ozi otu"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Ndị otu"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Arụmarụ otu"
@@ -653,7 +653,7 @@ msgstr "Chọọ risọltụ gasị"
msgid "dashboard.type-something"
msgstr "Pinye ịchọ risọltụ"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Ọba ederede ebiputaghị"
@@ -661,38 +661,38 @@ msgstr "Ọba ederede ebiputaghị"
msgid "dashboard.update-settings"
msgstr "Hazie ntọala"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "Dị gara gara"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "Mgbe a kpọlitere nkọ a, ọ ga-Ezipụta nkọwa emume n'uju"
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "Ụdị ndịna"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "Mepe nko - ududọ"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "E mepere nko-ududọ nke ọma ."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"Nko-ududọ bụ ụzọ dị mfe ga-ekwe ka ebe ududọ na apps ndị ọzọ nweta ozi Mgbe "
"ụfọdụ emume na eme n'ite mkpịsị . Anyị ga e ziga OZI arịrịọ nwe URLs ọ bụla "
"ị nwetara"
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "Pịa mpị \"Tinye nko-ududọ \" ịtinye otu ."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "E nweghị Nko-ududọ e ebere ruo ugbu a ."
@@ -708,7 +708,7 @@ msgstr "Ebe Ntinye ihe gị"
msgid "dashboard.your-email"
msgstr "Ozi-n"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Ite mkpịsị. gị"
@@ -720,11 +720,11 @@ msgstr "Okay"
msgid "ds.alert-title"
msgstr "Gee ntị"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Kagbuo"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Okay"
@@ -764,11 +764,11 @@ msgstr "Aha ozi-n adabala."
msgid "errors.email-as-password"
msgstr "Ị nweghị ike iji aha ozi-n gị dị ka akara mpịbanye"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "Ozi-n «%s» nwere ọtụtụ ozi nkọwa mbịaghachigide."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "E nwela ozi nkọwa na ozi-n«%s» dị ka ozi abaghị uru ma ọ bụ mbịaghachigide."
@@ -782,7 +782,7 @@ msgstr ""
msgid "errors.feature-not-supported"
msgstr "Akwadoghị agwara '%s' ."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Ihe ezighị ezi emela ."
@@ -815,7 +815,7 @@ msgstr "This invite might be canceled or may be expired."
msgid "errors.ldap-disabled"
msgstr "LDAP mbinye aka agaghị ."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "I ruola '%s' ole a chọrọ . Chọọ enyemaka nkwado ."
@@ -827,7 +827,7 @@ msgstr "Onyinyo a ebuka ibu maka itinye ."
msgid "errors.media-type-mismatch"
msgstr "Dị ka ihe dị na onyinyo adabaghị na mgbatị ederede."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"Nchịkọta gị nwere ozi-n mechiri emechi (akụkọ ozi-n adịghị mma ma ọ bụ "
@@ -837,7 +837,7 @@ msgstr ""
msgid "errors.profile-blocked"
msgstr "A gbachiri nchịkọta agbachi"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr ""
"Nchịkọta gị lnwere ozi-n mechiri emechi(akụkọ ozi-n adịghị mma ma ọ bụ "
@@ -847,15 +847,15 @@ msgstr ""
msgid "errors.registration-disabled"
msgstr "Ndebanye merụrụ emerụ ugbu a."
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr "Ndị otu ezughị okè ịhapụ otu, ọ nyere ike na ị chọrọ ihichapụ ya ."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "Onye otu ị na-achọ inye adịghị ."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr "O wee enweghị ike ịhapụ otu, ị ga-enyegharịrị ọrụ onwee."
@@ -867,19 +867,19 @@ msgstr "Ndejo atughị anya ya pụtara ."
msgid "errors.unexpected-token"
msgstr "Ọdịmara amaghị ama"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "Mmejọ, e nwetaghị URL"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "URL enweghị nkwado ."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "Mmejọ na nkwado SSL ."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "Oge ezuola"
@@ -939,19 +939,19 @@ msgstr "Mmehie apụtala"
msgid "inspect.attributes.blur"
msgstr "Inyogo"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Uru"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -959,7 +959,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Wunye"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Butuo onyinyo nsina"
@@ -1048,55 +1048,57 @@ msgstr "Akpụrụka"
msgid "inspect.attributes.stroke.width"
msgstr "Uhie"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Akara nkụpụta"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Ezinụlọ mkpụrụ edide"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Nhazi mkpụrụ edide"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Ndesa mkpụrụ edemede"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Ogo akara"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Nkwazi ederede"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Ncha ncha"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "N'okpuru"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Mgbanwe ederede"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "Mkpụrụ edemede isiokwu"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "None"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "Mkpụrụ edemede nnukwu"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr ""
"Ị chọọ ị ma ihe ndị ọzọ maka nnyocha esereese, gaa n'ebe enyemaka ite "
@@ -1158,7 +1160,7 @@ msgstr "Ederede"
msgid "inspect.tabs.info"
msgstr "Ozi"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Ụzọ mkpirisi"
@@ -1170,7 +1172,7 @@ msgstr "Nabata"
msgid "labels.access-tokens"
msgstr "Nweta ọdịmara gasị"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "Gara gara"
@@ -1178,7 +1180,7 @@ msgstr "Gara gara"
msgid "labels.add-custom-font"
msgstr "Tinye mkpụrụ edide a haziri ahazi"
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Ọchịkwa"
@@ -1186,7 +1188,7 @@ msgstr "Ọchịkwa"
msgid "labels.adobe-xd"
msgstr "Ngwa nrụkọrịta ọrụ Adobe"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Ha niile"
@@ -1203,7 +1205,7 @@ msgstr "Azụ"
msgid "labels.bad-gateway.main-message"
msgstr "Ajọ ụzọ mbanye"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Kagbuo"
@@ -1211,15 +1213,15 @@ msgstr "Kagbuo"
msgid "labels.canva"
msgstr "Kanva"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Megbuo"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Okwu gasị"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Ogbe"
@@ -1227,7 +1229,7 @@ msgstr "Ogbe"
msgid "labels.confirm-password"
msgstr "Nabata akara mpịbanye"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Ga n'ihu"
@@ -1239,11 +1241,11 @@ msgstr "Gaa n'ihu"
msgid "labels.continue-with-penpot"
msgstr "I Nwere Ike ịganihu"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "Dọrọ njikọ"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Meputa"
@@ -1255,7 +1257,7 @@ msgstr "Mepee otu ọhụrụ"
msgid "labels.custom-fonts"
msgstr "mkpụrụ edide a haziri"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Hichaa"
@@ -1267,7 +1269,7 @@ msgstr "Hichaa okwu"
msgid "labels.delete-comment-thread"
msgstr "Hichapụ eri"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Hichapụ oku"
@@ -1279,11 +1281,11 @@ msgstr "Hichapụ ederede %s"
msgid "labels.developer"
msgstr "Onye nrụpụta"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Ndesita"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Dezie"
@@ -1291,11 +1293,11 @@ msgstr "Dezie"
msgid "labels.edit-file"
msgstr "Dezie ederede"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Odezi"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Mebiri"
@@ -1323,7 +1325,7 @@ msgstr "Ndị na-enye mkpụrụ edide"
msgid "labels.font-variants"
msgstr "Ụdịdị gasị"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Mkpụrụ edide gasị"
@@ -1337,11 +1339,11 @@ msgstr "Onye malitere /VP"
msgid "labels.freelancer"
msgstr "Onye nwere onwe ya"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "Ọ a Github"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Nye nzaghachi"
@@ -1349,15 +1351,15 @@ msgstr "Nye nzaghachi"
msgid "labels.go-back"
msgstr "Gaa azụ"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Ebe enyemaka"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Zoo nkwupụta e kpebiri"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "Arụghị ọrụ"
@@ -1377,7 +1379,7 @@ msgstr "Nrụjọ ndịnime"
msgid "labels.invision"
msgstr "Mmakpo"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Akwụkwọ ịkpọ ọkụ gasị"
@@ -1385,7 +1387,7 @@ msgstr "Akwụkwọ ịkpọ ọkụ gasị"
msgid "labels.language"
msgstr "Asụsụ"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Ọba ederede na Ndebiri gasị"
@@ -1393,7 +1395,7 @@ msgstr "Ọba ederede na Ndebiri gasị"
msgid "labels.log-or-sign"
msgstr "Banye ma ọ bụ debanye"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Pụọ"
@@ -1401,11 +1403,11 @@ msgstr "Pụọ"
msgid "labels.marketing"
msgstr "Ịzụ ahịa"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Onye otu"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Ndị otu"
@@ -1413,15 +1415,15 @@ msgstr "Ndị otu"
msgid "labels.new-password"
msgstr "Akara mpịbanye ọhụrụ"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "Ọzọ"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "E jidere unu niile! Ngosi nkwupụta ọhụrụ ga-apụta ebe a ."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "E nweghị ọkụ na-echere"
@@ -1451,7 +1453,7 @@ msgstr "ma ọ bụ"
msgid "labels.other"
msgstr "Ọzọ (zipụta)"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Onye nwe"
@@ -1459,7 +1461,7 @@ msgstr "Onye nwe"
msgid "labels.password"
msgstr "Akara mpịbanye"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "Na-echere"
@@ -1471,11 +1473,11 @@ msgstr "Onye njikwa ngwaahịa ma ọ bụ arụmarụ"
msgid "labels.profile"
msgstr "Nchịkọta"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Ọrụ gasị"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Wepụta ndetu"
@@ -1489,11 +1491,11 @@ msgstr "Bugharịa ederede"
msgid "labels.remove"
msgstr "Wepu"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Wepụ onye otu"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Nyegharịa aha"
@@ -1505,11 +1507,11 @@ msgstr "Nyegharịa otu"
msgid "labels.retry"
msgstr "Nwagharịa"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Ọrụ"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Dokwa"
@@ -1529,15 +1531,15 @@ msgstr "Ziga"
msgid "labels.sending"
msgstr "Na-eziga…"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Ntọala"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Ọba ederede"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Gosi nkwupụta niile"
@@ -1545,7 +1547,7 @@ msgstr "Gosi nkwupụta niile"
msgid "labels.show-comments-list"
msgstr "Gosi ndepụta nkwupụta gasị"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Gosi nanị nkwupụta gị gasị"
@@ -1557,7 +1559,7 @@ msgstr "Eserese"
msgid "labels.start"
msgstr "Bido"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Ọnọdụ"
@@ -1565,7 +1567,7 @@ msgstr "Ọnọdụ"
msgid "labels.student-teacher"
msgstr "Nwata akwụkwọ ma ọ bụ onye nkụzi"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Nkuzi"
@@ -1593,15 +1595,15 @@ msgstr "Bugo ederede gasị ahaziri"
msgid "labels.uploading"
msgstr "Na-ebugo…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "Sọọsọ nkiri"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Ndị nkiri"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Nko-ududọ"
@@ -1609,11 +1611,11 @@ msgstr "Nko-ududọ"
msgid "labels.write-new-comment"
msgstr "Dee nkwupụta ọhụrụ"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(gị)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "Akara mbata gị"
@@ -1666,19 +1668,19 @@ msgstr "Create token"
msgid "modals.create-access-token.title"
msgstr "Mepụta ọdịmara nweta"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "Mebe nko - ududo"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "Mebe nko-ududo"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "Isi ozi URL"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://ọmụmaaụ.com/ozi anabara"
@@ -1720,11 +1722,11 @@ msgstr "Ọ kara gị obi na ị chọrọ ị hichapụ mkparịtaụka a?"
msgid "modals.delete-comment-thread.title"
msgstr "Hichaa mkparịtaụka"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "Ọ kara gị obi na ị chọrọ ị hichapụ nkọwa ?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "Hichapụ nkọwa"
@@ -1748,11 +1750,11 @@ msgstr "Na-ehichapụ ederede %s"
msgid "modals.delete-font.title"
msgstr "Na-ehichapụ mkpụrụ edide"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Ọ kara gị obi na ị chọrọ ị hichapụ ihu akwụkwọ a?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Hichapụ ihu akwụkwọ"
@@ -1768,75 +1770,75 @@ msgstr "Ọ kara gị obi na ị chọrọ ị hichapụ arụmarụ ?"
msgid "modals.delete-project-confirm.title"
msgstr "Hichapụ arụmarụ"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Hichapụ otu"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Ọ kara gị obi na ị chọrọ ị hichapụ otu? ARỤMARỤ na ederede nille gasị "
"gbasara otú ga-ehichapụ kpam kpam"
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Na-ehichapụ otu"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Hichapụ onye otu"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Ọ kara gị obi na ị chọrọ ị hichapụ onye otu n'otu a?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Hichapụ onye otu"
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "Hichapụ nko-ududọ"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "Ọ kara gị obi na ị chọrọ ị hichapụ nko-ududọ ?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "Na-ehichapụ nko-ududo"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "Dezie nko-ududo"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "Dezie nko-ududo"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Ziga akwụkwọ ozi mkpọta"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "Ozi-n gasị, Rịkọm e kewara"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr "Ụfọdụ ozi n sitere na ndị ugbu a A gaghị e ịga akwụkwọ ozi mkpọta ha"
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "kpọta ndị otu n'otu a"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"Etu ị bụ sọọ otu onye otu , a ga e hichapụ otu a ya n'ọrụ na ederede ya "
"gasịits projects and files."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "Ọ kara gị obi na ị chọrọ ịhapụ otu %s ?"
@@ -1864,47 +1866,47 @@ msgstr "Họrọ onye otu maka ịkwalite"
msgid "modals.leave-and-reassign.title"
msgstr "Tupu ị hapụ"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Hapụ otu"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Ọ kara gị obi na ịchọrọ ịhapụ otu ?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Nhapụ otu"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "ọnụ ọgụgụ nkpatụ"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"Ọ bụrụ na Inyefe onwunwe , ị ga-agbanwe ọrụ gị ka ọchikwa, ụfọdụ ikikere "
"n'isi ndị otu na-efu "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr ""
"G bụ onye nwe otu a ugbu a, Ọ doro gị anya na ị chọrọ ime%s Onye ọhụrụ nwe "
"otu a?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Onye nwe otu ọhụrụ"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "Biputa"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "Your library is empty. Are you sure you want to publish it?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "Biputa ọba ederede efu"
@@ -1941,11 +1943,11 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Update components in a shared library"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Hazigharịa"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Kagbuo"
@@ -2060,7 +2062,7 @@ msgstr ""
"Cheta ka itinye onye ọ bụla Ndị nzụlite, ndị nrụpụta, ndị njikwa... dị iche "
"iche adds up :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "kpọta tinye ọrụ :"
@@ -2151,19 +2153,15 @@ msgstr "Bido osise"
msgid "profile.recovery.go-to-login"
msgstr "Gaa na mbanye"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Wega ebe azụ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Mkpị"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "Leta mmụba oghere"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Nyado"
@@ -2172,7 +2170,7 @@ msgstr "Nyado"
msgid "viewer.breaking-change.message"
msgstr "Ndo"
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Kachapụ"
@@ -2184,7 +2182,7 @@ msgstr "Umezi nlekwasa anya"
msgid "workspace.focus.focus-on"
msgstr "Gbanye nlekwasa anya"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "Mee ọtụtụ akọrọngwa ga"
@@ -2192,6 +2190,6 @@ msgstr "Mee ọtụtụ akọrọngwa ga"
msgid "workspace.toolbar.color-palette"
msgstr "Agba[ Palette (Na narị)"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "E nwegasịrị nhazizigharị nime ọba ederede ga e kere eke"
diff --git a/frontend/translations/it.po b/frontend/translations/it.po
index 120628de98..9924edb306 100644
--- a/frontend/translations/it.po
+++ b/frontend/translations/it.po
@@ -1,15 +1,15 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-28 10:46+0000\n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
"Last-Translator: Nicola Bortoletto \n"
-"Language-Team: Italian "
-" \n"
+"Language-Team: Italian \n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.13\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -178,7 +178,7 @@ msgstr "La soluzione open source per il design e la prototipazione."
msgid "auth.terms-and-privacy-agreement"
msgstr "Accetto i [termini di servizio](%s) e la [politica sulla privacy](%s)."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Condizioni di servizio"
@@ -205,7 +205,7 @@ msgstr "…branding, illustrazione, materiali di marketing, etc."
msgid "comments.mentions.not-found"
msgstr "Nessuna persona trovata per @%s"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Pubblica"
@@ -277,7 +277,7 @@ msgstr "Condividi i prototipi"
msgid "common.share-link.view-all"
msgstr "Seleziona tutto"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Rimuovi pubblicazione"
@@ -400,7 +400,7 @@ msgstr "Il token non ha una data di scadenza"
msgid "dashboard.add-file"
msgstr "Aggiungi file"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Aggiungi come libreria condivisa"
@@ -408,31 +408,31 @@ msgstr "Aggiungi come libreria condivisa"
msgid "dashboard.change-email"
msgstr "Cambia indirizzo e-mail"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(copia)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Crea un nuovo team"
-#: src/app/main/ui/workspace/main_menu.cljs:631
+#: src/app/main/ui/workspace/main_menu.cljs:659
msgid "dashboard.create-version-menu"
msgstr "Appunta questa versione"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Il tuo Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Elimina team"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Scarica il file Penpot (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Scarica il file standard (.svg + .json)"
@@ -516,7 +516,7 @@ msgstr "Inizia a creare cose straordinarie"
msgid "dashboard.export-binary-multi"
msgstr "Scarica %s file Penpot (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Esporta le tavole da disegno in PDF"
@@ -532,7 +532,7 @@ msgstr "Esporta %s file Penpot"
msgid "dashboard.export-multiple.selected"
msgstr "%s di %s elementi selezionati"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Esporta"
@@ -750,11 +750,11 @@ msgstr "Caricamento dei dati sul server (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Caricamento file: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Invita nel team"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Abbandona il team"
@@ -762,7 +762,7 @@ msgstr "Abbandona il team"
msgid "dashboard.libraries-and-templates"
msgstr "Librerie e modelli"
-#: src/app/main/ui/dashboard/templates.cljs:259
+#: src/app/main/ui/dashboard/templates.cljs:267
msgid "dashboard.libraries-and-templates.description"
msgstr "Ecco alcune librerie e modelli che puoi aggiungere al tuo progetto"
@@ -770,7 +770,7 @@ msgstr "Ecco alcune librerie e modelli che puoi aggiungere al tuo progetto"
msgid "dashboard.libraries-and-templates.explore"
msgstr "Esplorane di più e scopri come contribuire"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr ""
"Si è verificato un problema nell'importazione del modello. Il modello non è "
@@ -808,7 +808,7 @@ msgstr "Sposta in un altro team"
msgid "dashboard.new-file"
msgstr "+ Nuovo File"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Nuovo File"
@@ -816,7 +816,7 @@ msgstr "Nuovo File"
msgid "dashboard.new-project"
msgstr "+ Nuovo progetto"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Nuovo progetto"
@@ -824,11 +824,11 @@ msgstr "Nuovo progetto"
msgid "dashboard.no-matches-for"
msgstr "Nessuna corrispondenza trovata per \"%s\""
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "I progetti appuntati appariranno qui"
-#: src/app/main/ui/dashboard/comments.cljs:90
+#: src/app/main/ui/dashboard/comments.cljs:91
msgid "dashboard.notifications"
msgstr "Notifiche"
@@ -840,7 +840,7 @@ msgstr "Il tuo indirizzo e-mail è stato aggiornato con successo"
msgid "dashboard.notifications.email-verified-successfully"
msgstr "Il tuo indirizzo e-mail è stato verificato con successo"
-#: src/app/main/data/profile.cljs:272
+#: src/app/main/data/profile.cljs:273
msgid "dashboard.notifications.notifications-saved"
msgstr "Impostazioni di notifica aggiornate"
@@ -848,11 +848,11 @@ msgstr "Impostazioni di notifica aggiornate"
msgid "dashboard.notifications.password-saved"
msgstr "La password è stata salvata con successo!"
-#: src/app/main/ui/dashboard/comments.cljs:44
+#: src/app/main/ui/dashboard/comments.cljs:45
msgid "dashboard.notifications.view"
msgstr "Visualizza notifiche"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s membri"
@@ -884,7 +884,7 @@ msgstr "Ora sei il proprietario di questo team."
msgid "dashboard.permissions-change.viewer"
msgstr "Ora sei un visualizzatore di questo team."
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Appunta/Rimuovi"
@@ -921,7 +921,7 @@ msgstr "Non fai più parte del team \"%s\"."
msgid "dashboard.save-settings"
msgstr "Salva impostazioni"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Cerca…"
@@ -1013,7 +1013,7 @@ msgstr "Notifiche"
msgid "dashboard.show-all-files"
msgstr "Mostra tutti i file"
-#: src/app/main/ui/workspace/main_menu.cljs:638
+#: src/app/main/ui/workspace/main_menu.cljs:666
msgid "dashboard.show-version-history"
msgstr "Cronologia versione"
@@ -1037,7 +1037,7 @@ msgstr[1] "I tuoi file sono stati duplicati con successo"
msgid "dashboard.success-duplicate-project"
msgstr "Il tuo progetto è stato duplicato con successo"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Il tuo file è stato spostato con successo"
@@ -1049,15 +1049,15 @@ msgstr "I tuoi file sono stati spostati con successo"
msgid "dashboard.success-move-project"
msgstr "Il tuo progetto è stato spostato con successo"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Informazioni sul team"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Membri del team"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Progetti del team"
@@ -1077,7 +1077,7 @@ msgstr "Risultati della ricerca"
msgid "dashboard.type-something"
msgstr "Scrivi per cercare"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Annulla pubblicazione libreria"
@@ -1085,50 +1085,50 @@ msgstr "Annulla pubblicazione libreria"
msgid "dashboard.update-settings"
msgstr "Aggiorna le impostazioni"
-#: src/app/main/ui/dashboard/sidebar.cljs:856
+#: src/app/main/ui/dashboard/sidebar.cljs:976
msgid "dashboard.upgrade-plan.no-limits"
msgstr "Nessun limite alla creatività"
-#: src/app/main/ui/dashboard/sidebar.cljs:854
+#: src/app/main/ui/dashboard/sidebar.cljs:974
msgid "dashboard.upgrade-plan.penpot-free"
msgstr "Penpot Gratis"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "È attivo"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "Quando questo webhook viene attivato verranno inviati i dati dell'evento"
-#: src/app/main/ui/dashboard/team.cljs:982
+#: src/app/main/ui/dashboard/team.cljs:1160
msgid "dashboard.webhooks.cant-edit"
msgstr "Puoi solo eliminare o modificare i webhook creati da te."
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "Tipo di contenuto"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "Crea webhook"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "Webhook creato con successo."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"I webhook sono un modo semplice per consentire ad altri siti web e app di "
"essere notificati quando si verificano determinati eventi su Penpot. "
"Invieremo una richiesta POST a ciascuno degli URL che fornisci."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "Premi il bottone \"Aggiungi webhook\" per aggiungerne uno."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "Nessun webhook presente."
@@ -1148,7 +1148,7 @@ msgstr "E-mail"
msgid "dashboard.your-name"
msgstr "Il tuo nome"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Il tuo Penpot"
@@ -1164,15 +1164,15 @@ msgstr "Attenzione"
msgid "ds.component-subtitle"
msgstr "Componenti da aggiornare:"
-#: src/app/main/ui/workspace/plugins.cljs:338, src/app/main/ui/workspace/plugins.cljs:392
+#: src/app/main/ui/workspace/plugins.cljs:339, src/app/main/ui/workspace/plugins.cljs:393
msgid "ds.confirm-allow"
msgstr "Acconsenti"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Annulla"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Ok"
@@ -1180,6 +1180,26 @@ msgstr "Ok"
msgid "ds.confirm-title"
msgstr "Sei sicuro?"
+#: src/app/main/ui/ds/controls/numeric_input.cljs:98
+msgid "ds.inputs.numeric-input.no-applicable-tokens"
+msgstr "Nessun token applicabile nei set o temi attivi."
+
+#: src/app/main/ui/ds/controls/numeric_input.cljs:99
+msgid "ds.inputs.numeric-input.no-matches"
+msgstr "Nessuna corrispondenza trovata."
+
+#: src/app/main/ui/ds/controls/numeric_input.cljs:641, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:138
+msgid "ds.inputs.numeric-input.open-token-list-dropdown"
+msgstr "Apri elenco token"
+
+#: src/app/main/ui/ds/controls/utilities/token_field.cljs:85, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:133
+msgid "ds.inputs.token-field.detach-token"
+msgstr "Scollega token"
+
+#: src/app/main/ui/ds/controls/utilities/token_field.cljs:40, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:96, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:103
+msgid "ds.inputs.token-field.no-active-token-option"
+msgstr "Questo token non è disponibile in nessun set o tema attivo."
+
#: src/app/main/data/auth.cljs:314
msgid "errors.auth-provider-not-allowed"
msgstr "Provider di autenticazione non consentito per questo profilo"
@@ -1234,7 +1254,7 @@ msgstr "Anche se Penpot non supporta più questo tipo di risorse, puoi"
msgid "errors.deprecated.contact.text"
msgstr "contattarci"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:266
+#: src/app/main/data/workspace/tokens/library_edit.cljs:274
msgid "errors.drop-token-set-parent-to-child"
msgstr ""
"Impossibile rilasciare un set genitore in un percorso appartenente a un "
@@ -1252,15 +1272,19 @@ msgstr "Indirizzo e-mail già convalidato."
msgid "errors.email-as-password"
msgstr "Non è possibile utilizzare il tuo indirizzo e-mail come password"
+#: src/app/main/ui/auth/register.cljs:89
+msgid "errors.email-does-not-match-invitation"
+msgstr "L’email non corrisponde all’invito."
+
#: src/app/main/data/auth.cljs:316, src/app/main/ui/auth/register.cljs:95
msgid "errors.email-domain-not-allowed"
msgstr "Dominio non consentito"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "L'email «%s» ha molti report di rimbalzi permanenti."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "L'e-mail \"%s\" è stata riportata come spam o respinta in modo permanente."
@@ -1274,10 +1298,9 @@ msgstr ""
msgid "errors.feature-not-supported"
msgstr "La funzione '%s' non è supportata."
-#: src/app/main/ui/auth/register.cljs, src/app/main/ui/dashboard/team_form.cljs, src/app/main/ui/onboarding/team_choice.cljs, src/app/main/ui/setti ngs/access_tokens.cljs, src/app/main/ui/settings/feedback.cljs, src/app/main/ui/settings/profile.cljs, src/app/main/ui/workspace/sidebar/assets.cljs
-#, unused
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs
msgid "errors.field-max-length"
-msgstr "Deve contenere al massimo 1 carattere."
+msgstr "Deve contenere al massimo %s caratteres."
#, unused
msgid "errors.field-min-length"
@@ -1299,7 +1322,7 @@ msgstr ""
"file che stai cercando di aprire. È necessario applicare le migrazioni per "
"'%s' prima di poter aprire il file."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Si è verificato un problema."
@@ -1349,11 +1372,11 @@ msgstr "Questo è invito può essere stato revocato o può essere scaduto."
msgid "errors.ldap-disabled"
msgstr "Autenticazione LDAP disabilitata."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "Hai raggiunto la quota '%s'. Contatta il supporto."
-#: src/app/main/ui/dashboard/team.cljs:185, src/app/main/ui/onboarding/team_choice.cljs:101
+#: src/app/main/ui/dashboard/team.cljs:187, src/app/main/ui/dashboard/team.cljs:849, src/app/main/ui/onboarding/team_choice.cljs:101
msgid "errors.maximum-invitations-by-request-reached"
msgstr ""
"È stato raggiunto il massimo numero di email (%s) che possono essere "
@@ -1373,7 +1396,7 @@ msgstr ""
msgid "errors.media-type-not-allowed"
msgstr "L'immagine non sembra valida."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"Il profilo che stai invitando ha le email disattivate (rapporti di spam o "
@@ -1409,7 +1432,7 @@ msgstr "Dati non validi negli appunti"
msgid "errors.profile-blocked"
msgstr "Questo profilo è bloccato"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr ""
"Il tuo profilo ha le email disattivate (rapporti di spam o alti tassi di "
@@ -1427,23 +1450,23 @@ msgstr "L'SVG non è valido o è danneggiato"
msgid "errors.team-feature-mismatch"
msgstr "Rilevata funzione incompatibile '%s'"
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr ""
"Il numero di membri non è sufficiente per abbandonare il team. "
"Probabilmente lo vuoi eliminare."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "Il membro che stai provando ad assegnare non esiste."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr ""
"Il proprietario non può abbandonare il team. Devi riassegnare il ruolo di "
"proprietario."
-#: src/app/main/data/workspace/tokens/library_edit.cljs:153, src/app/main/data/workspace/tokens/library_edit.cljs:183
+#: src/app/main/data/workspace/tokens/library_edit.cljs:150, src/app/main/data/workspace/tokens/library_edit.cljs:180
msgid "errors.token-set-already-exists"
msgstr "Esiste già un set con lo stesso nome"
@@ -1452,13 +1475,13 @@ msgstr "Esiste già un set con lo stesso nome"
msgid "errors.token-set-doesnt-exists"
msgstr "Impossibile duplicare un set sconosciuto"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:265
+#: src/app/main/data/workspace/tokens/library_edit.cljs:273
msgid "errors.token-set-exists-on-drop"
msgstr ""
"Impossibile completare il rilascio: esiste già un set con lo stesso nome in "
"questo percorso."
-#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:99
+#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:95
msgid "errors.token-theme-already-exists"
msgstr "Esiste già un'opzione tema con lo stesso nome"
@@ -1486,31 +1509,31 @@ msgstr "Questa versione è bloccata e non può essere eliminata da altri"
msgid "errors.version-not-supported"
msgstr "Il file ha un numero di versione incompatibile"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "Errore di connessione, l'URL è irraggiungibile"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "L'URL non ha superato la validazione."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "Errore nell'ultimo invio."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "Errore nella validazione SSL."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "Timeout"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "Errore inaspettato durante la validazione"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "Stato inaspettato %s"
@@ -1575,7 +1598,7 @@ msgstr "Si è verificato un errore"
msgid "inspect.attributes.blur"
msgstr "Sfocatura"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Valore"
@@ -1583,15 +1606,15 @@ msgstr "Valore"
msgid "inspect.attributes.color"
msgstr "Colore"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1599,7 +1622,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Riempimento"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Scarica l'immagine sorgente"
@@ -1693,35 +1716,37 @@ msgstr "Solido"
msgid "inspect.attributes.stroke.width"
msgstr "Larghezza"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Tipografia"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Famiglia di caratteri"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Dimensione del carattere"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Stile del carattere"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "Peso del carattere"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Spaziatura delle lettere"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Interlinea"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Decorazioni testo"
@@ -1729,35 +1754,36 @@ msgstr "Decorazioni testo"
msgid "inspect.attributes.typography.text-decoration.line-through"
msgstr "Barrato"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Nessuno"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Sottolineato"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Trasforma Testo"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "Prime lettere maiuscole"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "Minuscolo"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Nessuno"
-#: src/app/main/ui/inspect/attributes/text.cljs:159
+#: src/app/main/ui/inspect/attributes/text.cljs:152
msgid "inspect.attributes.typography.text-transform.unset"
msgstr "Annulla impostazione"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "Maiuscolo"
@@ -1769,17 +1795,17 @@ msgstr "Proprietà della variante"
msgid "inspect.attributes.variants"
msgstr "Proprietà delle varianti"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr ""
"Per ulteriori informazioni su l'ispezione, visita il centro di supporto di "
"Penpot"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "Maggiori informazioni sull'ispezione"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr ""
"Seleziona una forma, una tavola da disegno o un gruppo per ispezionare le "
@@ -1845,15 +1871,23 @@ msgstr "SVG"
msgid "inspect.tabs.code.selected.text"
msgstr "Testo"
+#: src/app/main/ui/inspect/right_sidebar.cljs:109
+msgid "inspect.tabs.computed"
+msgstr "Calcolato"
+
#: src/app/main/ui/inspect/right_sidebar.cljs:114
msgid "inspect.tabs.info"
msgstr "Informazione"
-#: src/app/main/ui/dashboard/comments.cljs:95
+#: src/app/main/ui/inspect/right_sidebar.cljs:165
+msgid "inspect.tabs.switcher.label"
+msgstr "Informazioni livello"
+
+#: src/app/main/ui/dashboard/comments.cljs:96
msgid "label.mark-all-as-read"
msgstr "Contassegna tutto come letto"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Scorciatoie"
@@ -1865,11 +1899,11 @@ msgstr "Accetto"
msgid "labels.access-tokens"
msgstr "Token di accesso"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "Attivo"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.add"
msgstr "Aggiungi"
@@ -1877,11 +1911,11 @@ msgstr "Aggiungi"
msgid "labels.add-custom-font"
msgstr "Aggiungi un carattere personalizzato"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.adding"
msgstr "Aggiungendo…"
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Amministratore"
@@ -1889,7 +1923,7 @@ msgstr "Amministratore"
msgid "labels.adobe-xd"
msgstr "Adobe XD"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Tutti"
@@ -1912,7 +1946,7 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "Gateway non corretto"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Annulla"
@@ -1920,11 +1954,11 @@ msgstr "Annulla"
msgid "labels.canva"
msgstr "Canva"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Chiudi"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:186
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:181
msgid "labels.collapse"
msgstr "Comprimi"
@@ -1936,11 +1970,11 @@ msgstr "Commenta"
msgid "labels.comment.mark-as-solved"
msgstr "Segna come risolto"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Commenti"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Community"
@@ -1948,7 +1982,7 @@ msgstr "Community"
msgid "labels.confirm-password"
msgstr "Conferma la password"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Continua"
@@ -1964,11 +1998,11 @@ msgstr "Puoi continuare con un account Penpot"
msgid "labels.copy"
msgstr "Copia"
-#: src/app/main/ui/inspect/attributes/common.cljs:118
+#: src/app/main/ui/inspect/attributes/common.cljs:99
msgid "labels.copy-color"
msgstr "Copia colore"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "Copia link"
@@ -1976,7 +2010,7 @@ msgstr "Copia link"
msgid "labels.copyright"
msgstr "Kaleidos @2024"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Crea"
@@ -1996,7 +2030,7 @@ msgstr "Caratteri personalizzati"
msgid "labels.dashboard"
msgstr "Pannello di controllo"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Elimina"
@@ -2008,7 +2042,7 @@ msgstr "Elimina il commento"
msgid "labels.delete-comment-thread"
msgstr "Elimina il thread"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Elimina l'invito"
@@ -2025,19 +2059,19 @@ msgstr "Sviluppo"
msgid "labels.director"
msgstr "Direttore"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "Scarta"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Bozze"
-#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:65
msgid "labels.duplicate"
msgstr "Duplica"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Modifica"
@@ -2045,11 +2079,11 @@ msgstr "Modifica"
msgid "labels.edit-file"
msgstr "Modifica il file"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Redattore"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:302
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:301
msgid "labels.empty"
msgstr "Vuoto"
@@ -2062,11 +2096,11 @@ msgstr "Errore"
msgid "labels.event"
msgstr "Evento"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Scaduto"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Esporta"
@@ -2094,7 +2128,7 @@ msgstr "Fornitori di caratteri"
msgid "labels.font-variants"
msgstr "Stili"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Font"
@@ -2108,11 +2142,11 @@ msgstr "Amministratore delegato e Fondatore"
msgid "labels.freelancer"
msgstr "Libero professionista"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "Repository Github"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Dai la tua opinione"
@@ -2124,7 +2158,7 @@ msgstr "Torna indietro"
msgid "labels.graphic-design"
msgstr "Graphic design"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Supporto"
@@ -2132,15 +2166,15 @@ msgstr "Supporto"
msgid "labels.hide"
msgstr "Nascondi"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Non mostrare i commenti risolti"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:134
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:130
msgid "labels.import"
msgstr "Importa"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "Inattivo"
@@ -2162,7 +2196,7 @@ msgstr "Errore interno"
msgid "labels.invision"
msgstr "InVision"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Inviti"
@@ -2170,7 +2204,7 @@ msgstr "Inviti"
msgid "labels.language"
msgstr "Lingua"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Librerie e modelli"
@@ -2190,7 +2224,7 @@ msgstr "Connettiti o iscriviti"
msgid "labels.login"
msgstr "Accesso"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Disconnetti"
@@ -2198,11 +2232,11 @@ msgstr "Disconnetti"
msgid "labels.marketing"
msgstr "Marketing"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Membro"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Membri"
@@ -2210,23 +2244,27 @@ msgstr "Membri"
msgid "labels.mention"
msgstr "Menziona"
+#: src/app/main/ui/ds/controls/numeric_input.cljs:619
+msgid "labels.mixed-values"
+msgstr "Misto"
+
#: src/app/main/ui/settings/password.cljs:84
msgid "labels.new-password"
msgstr "Nuova password"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "Successivo"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "Non ci sono notifiche di commenti in attesa."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "Non ci sono inviti."
-#: src/app/main/ui/dashboard/team.cljs:761
+#: src/app/main/ui/dashboard/team.cljs:739
msgid "labels.no-invitations-gather-people"
msgstr "Raduna le persone e costruite grandi cose insieme."
@@ -2243,7 +2281,7 @@ msgstr "Ops!"
msgid "labels.notifications"
msgstr "Notifiche"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "1 file"
@@ -2255,7 +2293,7 @@ msgid_plural "labels.num-of-frames"
msgstr[0] "1 tavola da disegno"
msgstr[1] "%s tavole da disegno"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "1 progetto"
@@ -2274,7 +2312,7 @@ msgstr "Vecchia password"
msgid "labels.only-yours"
msgstr "Solo tuoi"
-#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:309, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:338
+#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:310, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:339
msgid "labels.options"
msgstr "Opzioni"
@@ -2290,7 +2328,7 @@ msgstr "Altro (specifica)"
msgid "labels.other-short"
msgstr "Altro"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Proprietario"
@@ -2298,10 +2336,14 @@ msgstr "Proprietario"
msgid "labels.password"
msgstr "Password"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "In attesa"
+#: src/app/main/ui/dashboard/sidebar.cljs:751
+msgid "labels.pinned-projects"
+msgstr "Progetti in evidenza"
+
#: src/app/main/ui/comments.cljs:679
msgid "labels.post"
msgstr "Pubblica"
@@ -2322,7 +2364,7 @@ msgstr "Gestione del prodotto"
msgid "labels.profile"
msgstr "Profilo"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Progetti"
@@ -2330,7 +2372,7 @@ msgstr "Progetti"
msgid "labels.refresh"
msgstr "Ricarica"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Note di versione"
@@ -2344,11 +2386,11 @@ msgstr "Ricarica file"
msgid "labels.remove"
msgstr "Rimuovi"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Rimuovi membro"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Rinomina"
@@ -2376,7 +2418,7 @@ msgstr "nuova risposta"
msgid "labels.reply.thread"
msgstr "Rispondi"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "Invia di nuovo l'invito"
@@ -2388,15 +2430,15 @@ msgstr "Ricarica file"
msgid "labels.retry"
msgstr "Riprova"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Ruolo"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Salva"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:715
+#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:730
msgid "labels.search"
msgstr "Cerca"
@@ -2424,11 +2466,11 @@ msgstr "Stiamo effettuando la manutenzione programmata dei nostri sistemi."
msgid "labels.service-unavailable.main-message"
msgstr "Servizio non disponibile"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:79
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:75
msgid "labels.sets"
msgstr "Set"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Configurazione"
@@ -2440,7 +2482,7 @@ msgstr "Condividi"
msgid "labels.share-prototype"
msgstr "Condividi il prototipo"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Librerie condivise"
@@ -2448,7 +2490,7 @@ msgstr "Librerie condivise"
msgid "labels.show"
msgstr "Mostra"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Mostra tutti i commenti"
@@ -2456,11 +2498,11 @@ msgstr "Mostra tutti i commenti"
msgid "labels.show-comments-list"
msgstr "Mostra la lista dei commenti"
-#: src/app/main/ui/workspace/comments.cljs:67, src/app/main/ui/workspace/comments.cljs:139
+#: src/app/main/ui/workspace/comments.cljs:68, src/app/main/ui/workspace/comments.cljs:140
msgid "labels.show-mentions"
msgstr "Mostra solo le tue menzioni"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Mostra solo i tuoi commenti"
@@ -2468,11 +2510,15 @@ msgstr "Mostra solo i tuoi commenti"
msgid "labels.sketch"
msgstr "Sketch"
+#: src/app/main/ui/dashboard/sidebar.cljs:730
+msgid "labels.sources"
+msgstr "Fonti"
+
#: src/app/main/ui/onboarding/questions.cljs:55
msgid "labels.start"
msgstr "Inizia"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Stato"
@@ -2494,11 +2540,11 @@ msgstr "Membro del team"
msgid "labels.themes"
msgstr "Temi"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Tutorial"
-#: src/app/main/data/workspace/tokens/errors.cljs:93
+#: src/app/main/data/workspace/tokens/errors.cljs:101
msgid "labels.unknown-error"
msgstr "Errore sconosciuto"
@@ -2530,15 +2576,15 @@ msgstr "Carica caratteri personalizzati"
msgid "labels.uploading"
msgstr "Caricamento…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "Solo visualizzazione"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Visualizzatore"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Webhook"
@@ -2546,11 +2592,11 @@ msgstr "Webhook"
msgid "labels.write-new-comment"
msgstr "Scrivi un nuovo commento"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(tu)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "Il tuo account"
@@ -2581,7 +2627,7 @@ msgstr "Progetta in modo flessibile con controlli di layout simili al CSS."
#: src/app/main/ui/ds/product/loader.cljs:24
msgid "loader.tips.03.title"
-msgstr "Layout automatico simile al CSS"
+msgstr "Layouts simile al CSS"
#: src/app/main/ui/ds/product/loader.cljs:27
msgid "loader.tips.04.message"
@@ -2643,23 +2689,23 @@ msgstr ""
msgid "loader.tips.10.title"
msgstr "Supporto Plugin"
-#: src/app/main/ui/workspace/colorpicker.cljs:449, src/app/main/ui/workspace/colorpicker.cljs:450, src/app/main/ui/workspace/colorpicker.cljs:452
+#: src/app/main/ui/workspace/colorpicker.cljs:486, src/app/main/ui/workspace/colorpicker.cljs:487, src/app/main/ui/workspace/colorpicker.cljs:489
msgid "media.choose-image"
msgstr "Scegli un'immagine"
-#: src/app/main/ui/workspace/colorpicker.cljs:244
+#: src/app/main/ui/workspace/colorpicker.cljs:256
msgid "media.gradient"
msgstr "Gradiente"
-#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:44, src/app/main/ui/ds/utilities/swatch.cljs:57, src/app/main/ui/inspect/attributes/common.cljs:63, src/app/main/ui/workspace/colorpicker.cljs:246, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:251
+#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:45, src/app/main/ui/ds/utilities/swatch.cljs:58, src/app/main/ui/inspect/attributes/common.cljs:44, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:65, src/app/main/ui/workspace/colorpicker.cljs:258, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:395
msgid "media.image"
msgstr "Immagine"
-#: src/app/main/ui/inspect/attributes/common.cljs:74
+#: src/app/main/ui/inspect/attributes/common.cljs:55
msgid "media.image.short"
msgstr "Img"
-#: src/app/main/ui/workspace/colorpicker.cljs:442
+#: src/app/main/ui/workspace/colorpicker.cljs:479
msgid "media.keep-aspect-ratio"
msgstr "Mantieni proporzioni"
@@ -2677,7 +2723,7 @@ msgstr "Caricamento dell'immagine…"
msgid "media.radial"
msgstr "Radiale"
-#: src/app/main/ui/workspace/colorpicker.cljs:242
+#: src/app/main/ui/workspace/colorpicker.cljs:254
msgid "media.solid"
msgstr "Solido"
@@ -2752,19 +2798,19 @@ msgstr "Crea token"
msgid "modals.create-access-token.title"
msgstr "Genera token di accesso"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "Crea webhook"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "Crea webhook"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "URL del payload"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://example.com/postreceive"
@@ -2812,11 +2858,11 @@ msgstr ""
msgid "modals.delete-comment-thread.title"
msgstr "Elimina conversazione"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "Sei sicuro di voler eliminare questa annotazione?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "Elimina annotazione"
@@ -2862,11 +2908,11 @@ msgstr "Eliminare questo carattere? Se è usato in un file, non verrà caricato.
msgid "modals.delete-font.title"
msgstr "Eliminazione carattere"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Eliminare questa pagina?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Elimina pagina"
@@ -2912,29 +2958,29 @@ msgid_plural "modals.delete-shared-confirm.title"
msgstr[0] "Eliminazione del file"
msgstr[1] "Eliminazione dei file"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Elimina team"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Eliminare questo team? Tutti i progetti e i file associati con questo team "
"verranno cancellati permanentemente."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Eliminazione del team in corso"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Elimina membro"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Eliminare questo membro dal team?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Elimina membro del team"
@@ -2948,55 +2994,55 @@ msgstr[1] ""
"Le risorse già utilizzare in questi file rimarranno lì (nessun design verrà "
"compromesso)."
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "Elimina webhook"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "Sei sicuro di voler eliminare questo webhook?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "Eliminazione del webhook in corso"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "Modifica webhook"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "Modifica webhook"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Invia invito"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "Email, separate da virgole"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr "Alcuni membri sono già nel team. Inviteremo i restanti."
-#: src/app/main/ui/dashboard/team.cljs:220
+#: src/app/main/ui/dashboard/team.cljs:222
msgid "modals.invite-team-member.text"
msgstr ""
"Puoi invitare membri nel team affinché possano accedere a questo file e a "
"tutti i file del team."
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "Invita membri al team"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"Poiché sei il solo membro di questo team, il team verrà eliminato insieme "
"ai sui file e progetti."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "Lasciare il team di %s?"
@@ -3024,15 +3070,15 @@ msgstr "Seleziona un membro da promuovere"
msgid "modals.leave-and-reassign.title"
msgstr "Prima di uscire"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Lascia il team"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Vuoi lasciare questo team?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Lasciando il team"
@@ -3054,39 +3100,39 @@ msgid_plural "modals.move-shared-confirm.title"
msgstr[0] "Sposta libreria"
msgstr[1] "Sposta librerie"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "Ampiezza scatto"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Trasferisci proprietà"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"Trasferendo la proprietà, il tuo ruolo diverrà quello di Admin, perdendo "
"alcuni privilegi su questo team. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr ""
"Sei l'attuale proprietario di questo team. Trasferire la proprietà del team "
"a %s?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Nuovo proprietario del team"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "Pubblica"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "La tua libreria è vuota. Sei sicuro di volerla pubblicare?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "Pubblica libreria vuota"
@@ -3141,21 +3187,21 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Aggiorna componenti in una libreria condivisa"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Aggiorna"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Cancella"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"Stai per aggiornare un componente in una libreria condivisa. Questo "
"potrebbe causare modifiche nei file che la utilizzano."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Aggiorna un componente in una libreria condivisa"
@@ -3267,11 +3313,11 @@ msgstr ""
msgid "notifications.by-code.upgrade-version"
msgstr "Una nuova versione è disponibile, si prega di ricaricare la pagina"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "Invito inviato con successo"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "Link d'invito copiato"
@@ -3419,7 +3465,7 @@ msgstr ""
"Non dimenticarti di includere ogni tipo di persona. Programmatori, "
"designers, responsabili... la diversità si somma :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "Invita con il ruolo:"
@@ -3639,193 +3685,193 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "Vai all'accesso"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "Scollega"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "Misto"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:283
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:423
msgid "settings.remove-color"
msgstr "Rimuovi colore"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:288
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:428
msgid "settings.select-this-color"
msgstr "Seleziona gli elementi che utilizzano questo stile"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Nozioni di base"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "Pannello di controllo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Visualizzatore"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Area di lavoro"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Allineamento"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Modifica"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "Generico"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "Generico"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Menu principale"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "Modifica livelli"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Navigazione"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Navigazione"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Navigazione"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Pannelli"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Tracciati"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Forme"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "Testi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Strumenti"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Commenti"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "Aggiungi nodo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "Allinea in basso"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "Allinea al centro"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "Allinea al centro orizzontalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "Allinea giustificato"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "Allinea a sinistra"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "Allinea a destra"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "Allinea in alto"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "Allinea al centro verticalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "Crea una tavola da disegno a partire dalla selezione"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "Attiva/Disattiva grassetto"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "Differenza"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "Escludi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "Interseca"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "Unisci"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "Porta sotto"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Porta dietro"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "Porta avanti"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "Porta in primo piano"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "Pulisci cronologia"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Copia"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
msgid "shortcuts.copy-link"
msgstr "Copia link negli appunti"
@@ -3834,287 +3880,271 @@ msgstr "Copia link negli appunti"
msgid "shortcuts.copy-props"
msgstr "Copia proprietà"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "Crea nuovo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Taglia"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "Zoom indietro"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Elimina"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "Elimina nodo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "Scollega componente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Curva"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "Ellisse"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Tavola da disegno"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "Disegna tracciato"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Tracciato"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Rettangolo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Testo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Duplica"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "Annulla"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "Esporta forme"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "Adatta zoom a tutto"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "Capovolgi orizzontalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "Capovolgi verticalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "Riduci dimensione carattere"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "Aumenta dimensione carattere"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "Vai alle bozze"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "Vai alle librerie condivise"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Cerca"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Raggruppa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "Distribuisci orizzontalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "Mostra / Nascondi UI"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "Aumenta zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "Inserisci immagine"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "Attiva/Disattiva corsivo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "Unisci nodi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
-msgid "shortcuts.letter-spacing-dec"
-msgstr "Diminuisci spaziatura tra le lettere"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "Aumenta spaziatura tra le lettere"
-
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
-msgid "shortcuts.line-height-dec"
-msgstr "Diminuisci interlinea"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
-msgid "shortcuts.line-height-inc"
-msgstr "Aumenta interlinea"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.line-through"
msgstr "Attiva/disattiva testo barrato"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "Crea angolo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "Crea curva"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "Maschera"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "Fondi nodi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "Sposta"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "Sposta rapidamente in basso"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "Sposta rapidamente a sinistra"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "Sposta rapidamente a destra"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "Sposta rapidamente in alto"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "Sposta nodo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "Sposta in basso"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "Sposta a sinistra"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "Sposta a destra"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "Sposta in alto"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "Tavola da disegno successiva"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "Nessuna scorciatoia trovata"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "Imposta opacità al 100%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "Imposta opacità al 10%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "Imposta opacità al 20%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "Imposta opacità al 30%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "Imposta opacità al 40%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "Imposta opacità al 50%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "Imposta opacità al 60%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "Imposta opacità al 70%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "Imposta opacità all'80%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "Imposta opacità al 90%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "Selettore colore"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "Vai alla sezione commenti"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "Vai al pannello di controllo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "Vai alla sezione di ispezione"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "Vai alla sezione interazioni"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "Vai alla sezione interazioni del visualizzatore"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "Vai all'area di lavoro"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " o "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Incolla"
@@ -4128,191 +4158,191 @@ msgstr "Incolla proprietà"
msgid "shortcuts.plugins"
msgstr "Gestore plugin"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "Tavola da disegno precedente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "Ripeti"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
msgid "shortcuts.rename"
msgstr "Rinomina"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "Reimposta zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
msgid "shortcuts.scale"
msgstr "Ridimensiona"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "Scorciatoie di ricerca"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "Seleziona tutto"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
msgid "shortcuts.select-next"
msgstr "Seleziona livello successivo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
msgid "shortcuts.select-parent-layer"
msgstr "Seleziona livello genitore"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
msgid "shortcuts.select-prev"
msgstr "Seleziona livello precedente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "Separa nodi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "Mostra/Nascondi griglia pixel"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "Mostra/Nascondi scorciatoie"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "Aggancia ai nodi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "Aggancia alla griglia pixel"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "Inizia a modificare"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "Avvia misurazione"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "Interrompi misurazione"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "Imposta miniature"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "Scorciatoie da tastiera"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "Attiva/Disattiva allineamento dinamico"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "Attiva/Disattiva risorse"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "Attiva/Disattiva palette colori"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "Attiva/Disattiva modalità focus"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "Attiva/Disattiva schermo intero"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
msgid "shortcuts.toggle-guides"
msgstr "Mostra/Nascondi guide"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "Attiva/Disattiva cronologia"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "Attiva/Disattiva livelli"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "Aggiungi / Rimuovi layout flex"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
msgid "shortcuts.toggle-layout-grid"
msgstr "Aggiungi / Rimuovi layout grid"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "Blocca/Sblocca"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "Blocca proporzioni"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
msgid "shortcuts.toggle-rulers"
msgstr "Mostra/Nascondi righelli"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
msgid "shortcuts.toggle-snap-guides"
msgstr "Aggancia alle guide"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
msgid "shortcuts.toggle-snap-ruler-guide"
msgstr "Aggancia alle guide del righello"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "Attiva/Disattiva palette testi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
msgid "shortcuts.toggle-theme"
msgstr "Cambia tema"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "Mostra/Nascondi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "Attiva/Disattiva stile zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "Attiva/Disattiva sottolineatura"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Annulla"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Separa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Rimuovi maschera"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "Distribuisci verticalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "Diminuire lo zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "Aumentare lo zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "Zoom su selezione"
@@ -4320,6 +4350,17 @@ msgstr "Zoom su selezione"
msgid "subscription.dashboard.power-up.enterprise-plan"
msgstr "Piano Enterprise"
+#: src/app/main/ui/dashboard/subscription.cljs:85
+msgid "subscription.dashboard.power-up.enterprise-trial.top-title"
+msgstr "Piano Enterprise (prova)"
+
+#: src/app/main/ui/dashboard/subscription.cljs:64
+#, markdown
+msgid "subscription.dashboard.power-up.professional.bottom-text"
+msgstr ""
+"Ottieni spazio extra, recupero file e altro per i tuoi team con il piano "
+"Unlimited. [Potenzia ora!|target:self](%s)"
+
#: src/app/main/ui/dashboard/subscription.cljs:63
msgid "subscription.dashboard.power-up.professional.top-title"
msgstr "Piano Professional"
@@ -4344,6 +4385,14 @@ msgstr "Piano Unlimited (versione di prova)"
msgid "subscription.dashboard.power-up.unlimited-plan"
msgstr "Piano Unlimited"
+#: src/app/main/ui/dashboard/subscription.cljs:78
+#, markdown
+msgid "subscription.dashboard.power-up.unlimited.bottom-text"
+msgstr ""
+"Ottieni spazio illimitato, recupero file esteso ed editor illimitati per "
+"tutti i tuoi team, ad un prezzo fisso. [Dai un’occhiata al piano "
+"Enterprise.|target:self](%s)"
+
#: src/app/main/ui/dashboard/subscription.cljs:70
#, unused
msgid "subscription.dashboard.power-up.unlimited.cta"
@@ -4360,11 +4409,48 @@ msgstr ""
msgid "subscription.dashboard.power-up.your-subscription"
msgstr "Il tuo abbonamento:"
+#: src/app/main/ui/dashboard/subscription.cljs:168
+msgid "subscription.dashboard.professional-dashboard-cta-title"
+msgstr ""
+"Hai %s editor nei team di tua proprietà, mentre il tuo piano Professional "
+"ne copre fino a 8."
+
+#: src/app/main/ui/dashboard/subscription.cljs:176
+#, markdown
+msgid "subscription.dashboard.professional-dashboard-cta-upgrade-owner"
+msgstr ""
+"Esegui subito l’upgrade a Unlimited o Enterprise per sbloccare più editor, "
+"spazio di archiviazione e recupero file. [Abbonati ora.|target:self](%s)"
+
#: src/app/main/ui/dashboard/subscription.cljs:111
msgid "subscription.dashboard.team-plan"
msgstr "Piano del team"
-#: src/app/main/ui/dashboard/sidebar.cljs:858
+#: src/app/main/ui/dashboard/subscription.cljs:171
+msgid "subscription.dashboard.unlimited-dashboard-cta-title"
+msgstr ""
+"Il tuo team continua a crescere! Il tuo piano Unlimited copre fino a %s "
+"editor, ma ora ne hai %s."
+
+#: src/app/main/ui/dashboard/subscription.cljs:179
+#, markdown
+msgid "subscription.dashboard.unlimited-dashboard-cta-upgrade-owner"
+msgstr ""
+"Esegui subito l’upgrade per adeguarti al numero attuale di editor. "
+"[Abbonati ora.|target:self](%s)"
+
+#: src/app/main/ui/dashboard/subscription.cljs:156
+msgid "subscription.dashboard.unlimited-members-extra-editors-cta-text"
+msgstr ""
+"Solo i nuovi editor nei team di tua proprietà verranno conteggiati per la "
+"fatturazione futura. Rimane valido un costo fisso di 175 $/mese per oltre "
+"25 editor."
+
+#: src/app/main/ui/dashboard/subscription.cljs:152
+msgid "subscription.dashboard.unlimited-members-extra-editors-cta-title"
+msgstr "Invita persone con il piano Unlimited"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:978
msgid "subscription.dashboard.upgrade-plan.power-up"
msgstr "Potenzia"
@@ -4384,6 +4470,10 @@ msgstr "Tutti i vantaggi del piano Professional e:"
msgid "subscription.settings.benefits.all-unlimited-benefits"
msgstr "Tutti i vantaggi del piano Unlimited e:"
+#: src/app/main/ui/settings/subscription.cljs:39
+msgid "subscription.settings.editors"
+msgstr "(x %s editor)"
+
#: src/app/main/ui/dashboard/subscription.cljs:119, src/app/main/ui/settings/subscription.cljs:72, src/app/main/ui/settings/subscription.cljs:346, src/app/main/ui/settings/subscription.cljs:399, src/app/main/ui/settings/subscription.cljs:449
msgid "subscription.settings.enterprise"
msgstr "Enterprise"
@@ -4392,16 +4482,51 @@ msgstr "Enterprise"
msgid "subscription.settings.enterprise-trial"
msgstr "Enterprise (versione di prova)"
+#: src/app/main/ui/settings/subscription.cljs:393, src/app/main/ui/settings/subscription.cljs:403, src/app/main/ui/settings/subscription.cljs:455
+msgid "subscription.settings.enterprise.autosave"
+msgstr "Versioni di salvataggio automatico a 90 giorni e recupero file"
+
+#: src/app/main/ui/settings/subscription.cljs:394, src/app/main/ui/settings/subscription.cljs:404, src/app/main/ui/settings/subscription.cljs:456
+msgid "subscription.settings.enterprise.capped-bill"
+msgstr "Fattura mensile fissa"
+
+#: src/app/main/ui/settings/subscription.cljs:392, src/app/main/ui/settings/subscription.cljs:402, src/app/main/ui/settings/subscription.cljs:454
+msgid "subscription.settings.enterprise.unlimited-storage-benefit"
+msgstr "Spazio di archiviazione illimitato"
+
#: src/app/main/ui/dashboard/subscription.cljs:124, src/app/main/ui/settings/subscription.cljs:371, src/app/main/ui/settings/subscription.cljs:383, src/app/main/ui/settings/subscription.cljs:395, src/app/main/ui/settings/subscription.cljs:405
msgid "subscription.settings.manage-your-subscription"
msgstr "Gestisci il tuo abbonamento"
+#: src/app/main/ui/settings/subscription.cljs:131
+msgid "subscription.settings.management.dialog.currently-editors-title"
+msgid_plural "subscription.settings.management.dialog.currently-editors-title"
+msgstr[0] "Attualmente hai %s persona nei tuoi team che può modificare."
+msgstr[1] "Attualmente hai %s persone nei tuoi team che possono modificare."
+
#: src/app/main/ui/settings/subscription.cljs:149
msgid "subscription.settings.management.dialog.downgrade"
msgstr ""
"Attenzione: passare a un piano inferiore significa meno spazio di "
"archiviazione e backup e cronologia delle versioni più brevi."
+#: src/app/main/ui/settings/subscription.cljs:133
+msgid "subscription.settings.management.dialog.editors"
+msgstr "Editor"
+
+#: src/app/main/ui/settings/subscription.cljs:138
+msgid "subscription.settings.management.dialog.editors-explanation"
+msgstr ""
+"(Proprietari, Amministratore ed Editor. I Visualizzatori non vengono "
+"considerati Editor)"
+
+#: src/app/main/ui/settings/subscription.cljs:181
+msgid "subscription.settings.management.dialog.input-error"
+msgstr ""
+"Non puoi impostare un numero di editor inferiore a quello attuale. Modifica "
+"il ruolo (editor/admin in visualizzatore) per le persone che non modificano "
+"effettivamente i file nelle impostazioni del team."
+
#: src/app/main/ui/settings/subscription.cljs:177
msgid "subscription.settings.management.dialog.payment-explanation"
msgstr "(Non verrà effettuato nessun pagamento in questo momento)"
@@ -4415,6 +4540,12 @@ msgstr "$7 per editor/mese x %s"
msgid "subscription.settings.management.dialog.title"
msgstr "Applica %s ai tuoi team"
+#: src/app/main/ui/settings/subscription.cljs:184
+msgid "subscription.settings.management.dialog.unlimited-capped-warning"
+msgstr ""
+"Suggerimento: puoi aumentare ora il numero di posti per anticipare gli "
+"inviti. Con oltre 25 editor nei team, pagherai un costo fisso di 175 $/mese."
+
#: src/app/main/ui/settings/subscription.cljs:418
msgid "subscription.settings.member-since"
msgstr "Membro Penpot dal %s"
@@ -4439,6 +4570,18 @@ msgstr "organizzazione per mese"
msgid "subscription.settings.professional"
msgstr "Professional"
+#: src/app/main/ui/settings/subscription.cljs:360, src/app/main/ui/settings/subscription.cljs:427
+msgid "subscription.settings.professional.autosave-benefit"
+msgstr "Versioni di salvataggio automatico a 7 giorni e recupero file"
+
+#: src/app/main/ui/settings/subscription.cljs:359, src/app/main/ui/settings/subscription.cljs:426
+msgid "subscription.settings.professional.storage-benefit"
+msgstr "10GB di spazio di archiviazione"
+
+#: src/app/main/ui/settings/subscription.cljs:361, src/app/main/ui/settings/subscription.cljs:428
+msgid "subscription.settings.professional.teams-editors-benefit"
+msgstr "Team illimitati. Fino a 8 editor nei team di tua proprietà."
+
#: src/app/main/ui/settings/subscription.cljs:355
msgid "subscription.settings.section-plan"
msgstr "Il tuo abbonamento"
@@ -4457,6 +4600,10 @@ msgstr ""
"Puoi modificare il tuo abbonamento in qualsiasi momento tramite la pagina "
"'Abbonamento' nei dettagli del tuo account."
+#: src/app/main/ui/settings/subscription.cljs:238
+msgid "subscription.settings.success.dialog.thanks"
+msgstr "Grazie per aver scelto il piano Penpot %s!"
+
#: src/app/main/ui/settings/subscription.cljs:240
msgid "subscription.settings.sucess.dialog.footer"
msgstr "Goditi il tuo piano!"
@@ -4482,14 +4629,41 @@ msgstr "Illimitato"
msgid "subscription.settings.unlimited-trial"
msgstr "Unlimited (prova)"
+#: src/app/main/ui/settings/subscription.cljs:369, src/app/main/ui/settings/subscription.cljs:381, src/app/main/ui/settings/subscription.cljs:441
+msgid "subscription.settings.unlimited.autosave-benefit"
+msgstr "Versioni di salvataggio automatico a 30 giorni e recupero file"
+
#: src/app/main/ui/settings/subscription.cljs:370, src/app/main/ui/settings/subscription.cljs:382, src/app/main/ui/settings/subscription.cljs:442
msgid "subscription.settings.unlimited.bill"
msgstr "Fattura mensile con tetto massimo"
-#: src/app/main/ui/dashboard/subscription.cljs:147, src/app/main/ui/workspace/main_menu.cljs:933
+#: src/app/main/ui/settings/subscription.cljs:368, src/app/main/ui/settings/subscription.cljs:380, src/app/main/ui/settings/subscription.cljs:440
+msgid "subscription.settings.unlimited.storage-benefit"
+msgstr "25GB di spazio di archiviazione"
+
+#: src/app/main/ui/dashboard/subscription.cljs:147, src/app/main/ui/workspace/main_menu.cljs:961
msgid "subscription.workspace.header.menu.option.power-up"
msgstr "Potenzia il tuo piano"
+#: src/app/main/ui/workspace/sidebar/versions.cljs:56
+#, markdown
+msgid "subscription.workspace.versions.warning.enterprise.subtext-owner"
+msgstr "Se desideri aumentare questo limite, scrivici a [%s](mailto)"
+
+#: src/app/main/ui/workspace/sidebar/versions.cljs:58
+#, markdown
+msgid "subscription.workspace.versions.warning.subtext-member"
+msgstr ""
+"Se desideri aumentare questo limite, scrivi al proprietario del team "
+"[%s](mailto)"
+
+#: src/app/main/ui/workspace/sidebar/versions.cljs:57
+#, markdown
+msgid "subscription.workspace.versions.warning.subtext-owner"
+msgstr ""
+"Se desideri aumentare questo limite, [esegui l'upgrade del tuo "
+"piano|target:self](%s)"
+
#: src/app/main/ui/dashboard/files.cljs:180
msgid "title.dashboard.files"
msgstr "%s - Penpot"
@@ -4542,19 +4716,19 @@ msgstr "Password - Penpot"
msgid "title.settings.profile"
msgstr "Profilo - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "Inviti - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "Membri - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Impostazioni - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "Webhook - %s - Penpot"
@@ -4626,43 +4800,43 @@ msgstr "Mostra interazioni al click"
msgid "viewer.header.sitemap"
msgstr "Sitemap"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "L'ultimo invio è avvenuto con successo."
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Allinea orizzontalmente al centro (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "Distribuisci spaziatura orizzontale (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Allinea a sinistra (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Allinea a destra (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Allinea in basso (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Allinea verticalmente al centro (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "Distribuisci spaziatura verticale (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Allinea in alto (%s)"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:163
+#: src/app/main/ui/workspace/sidebar/assets.cljs:172
msgid "workspace.assets.add-library"
msgstr "Aggiungi libreria"
@@ -4671,19 +4845,23 @@ msgstr "Aggiungi libreria"
msgid "workspace.assets.assets"
msgstr "Risorse"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "Tutte le risorse"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Colori"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:493
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:497
msgid "workspace.assets.colors.add-color"
msgstr "Aggiungi colore"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:81
+msgid "workspace.assets.component-group-options"
+msgstr "Opzioni gruppo componenti"
+
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Componenti"
@@ -4691,25 +4869,25 @@ msgstr "Componenti"
msgid "workspace.assets.components.add-component"
msgstr "Aggiungi componente"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:176, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:535
+#: src/app/main/ui/workspace/sidebar/assets/components.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:547
msgid "workspace.assets.components.num-variants"
msgstr "%s Varianti"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "Crea un gruppo"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr ""
"I tuoi elementi verrano rinominati automaticamente come \"Nome gruppo / "
"nome elemento\""
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Elimina"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "Duplica"
@@ -4717,11 +4895,11 @@ msgstr "Duplica"
msgid "workspace.assets.duplicate-main"
msgstr "Duplica principale"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Modifica"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:177
+#: src/app/main/ui/workspace/sidebar/assets.cljs:186
msgid "workspace.assets.filter"
msgstr "Filtra"
@@ -4730,27 +4908,27 @@ msgstr "Filtra"
msgid "workspace.assets.graphics"
msgstr "Grafiche"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:576
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:190, src/app/main/ui/workspace/sidebar/assets/components.cljs:576
msgid "workspace.assets.grid-view"
msgstr "Vista a griglia"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Gruppo"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "Nome gruppo"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:572
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:191, src/app/main/ui/workspace/sidebar/assets/components.cljs:572
msgid "workspace.assets.list-view"
msgstr "Vista a elenco"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "libreria locale"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:168
+#: src/app/main/ui/workspace/sidebar/assets.cljs:177
msgid "workspace.assets.manage-library"
msgstr "Gestisci libreria"
@@ -4762,15 +4940,15 @@ msgstr "Nessuna risorsa trovata"
msgid "workspace.assets.open-library"
msgstr "Apri file libreria"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Rinomina"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "Rinomina gruppo"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "Cerca risorse"
@@ -4786,21 +4964,21 @@ msgstr[1] "%s elementi selezionati"
msgid "workspace.assets.shared-library"
msgstr "Librerie condivise"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:237
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:235
msgid "workspace.assets.sidebar.components"
msgid_plural "workspace.assets.sidebar.components"
msgstr[0] "1 componente"
msgstr[1] "%s componenti"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:193
+#: src/app/main/ui/workspace/sidebar/assets.cljs:204
msgid "workspace.assets.sort"
msgstr "Ordina"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Elementi tipografici"
-#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:404
+#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:405
msgid "workspace.assets.typography.add-typography"
msgstr "Aggiungi elemento tipografico"
@@ -4825,7 +5003,7 @@ msgstr "Spaziatura tra lettere"
msgid "workspace.assets.typography.line-height"
msgstr "Interlinea"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -4837,59 +5015,59 @@ msgstr "Stili di testo"
msgid "workspace.assets.typography.text-transform"
msgstr "Trasforma testo"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "Separa"
-#: src/app/main/ui/workspace/context_menu.cljs:791
+#: src/app/main/ui/workspace/context_menu.cljs:794
msgid "workspace.context-menu.grid-cells.area"
msgstr "Crea area"
-#: src/app/main/ui/workspace/context_menu.cljs:794
+#: src/app/main/ui/workspace/context_menu.cljs:797
msgid "workspace.context-menu.grid-cells.create-board"
msgstr "Crea tavola da disegno"
-#: src/app/main/ui/workspace/context_menu.cljs:786
+#: src/app/main/ui/workspace/context_menu.cljs:789
msgid "workspace.context-menu.grid-cells.merge"
msgstr "Unisci celle"
-#: src/app/main/ui/workspace/context_menu.cljs:749
+#: src/app/main/ui/workspace/context_menu.cljs:752
msgid "workspace.context-menu.grid-track.column.add-after"
msgstr "Aggiungi 1 colonna a destra"
-#: src/app/main/ui/workspace/context_menu.cljs:748
+#: src/app/main/ui/workspace/context_menu.cljs:751
msgid "workspace.context-menu.grid-track.column.add-before"
msgstr "Aggiungi 1 colonna a sinistra"
-#: src/app/main/ui/workspace/context_menu.cljs:750
+#: src/app/main/ui/workspace/context_menu.cljs:753
msgid "workspace.context-menu.grid-track.column.delete"
msgstr "Elimina colonna"
-#: src/app/main/ui/workspace/context_menu.cljs:751
+#: src/app/main/ui/workspace/context_menu.cljs:754
msgid "workspace.context-menu.grid-track.column.delete-shapes"
msgstr "Elimina colonna e forme"
-#: src/app/main/ui/workspace/context_menu.cljs:747
+#: src/app/main/ui/workspace/context_menu.cljs:750
msgid "workspace.context-menu.grid-track.column.duplicate"
msgstr "Duplica colonna"
-#: src/app/main/ui/workspace/context_menu.cljs:756
+#: src/app/main/ui/workspace/context_menu.cljs:759
msgid "workspace.context-menu.grid-track.row.add-after"
msgstr "Aggiungi 1 riga sotto"
-#: src/app/main/ui/workspace/context_menu.cljs:755
+#: src/app/main/ui/workspace/context_menu.cljs:758
msgid "workspace.context-menu.grid-track.row.add-before"
msgstr "Aggiungi 1 riga sopra"
-#: src/app/main/ui/workspace/context_menu.cljs:757
+#: src/app/main/ui/workspace/context_menu.cljs:760
msgid "workspace.context-menu.grid-track.row.delete"
msgstr "Elimina riga"
-#: src/app/main/ui/workspace/context_menu.cljs:758
+#: src/app/main/ui/workspace/context_menu.cljs:761
msgid "workspace.context-menu.grid-track.row.delete-shapes"
msgstr "Elimina riga e forme"
-#: src/app/main/ui/workspace/context_menu.cljs:754
+#: src/app/main/ui/workspace/context_menu.cljs:757
msgid "workspace.context-menu.grid-track.row.duplicate"
msgstr "Duplica riga"
@@ -4897,7 +5075,7 @@ msgstr "Duplica riga"
msgid "workspace.focus.focus-mode"
msgstr "Modalità focus"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "Disattiva modalità focus"
@@ -4917,11 +5095,11 @@ msgstr "Gradiente lineare"
msgid "workspace.gradients.radial"
msgstr "Gradiente radiale"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "Disattiva allineamento dinamico"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "Disattiva ridimensionamento proporzionale"
@@ -4930,23 +5108,23 @@ msgstr "Disattiva ridimensionamento proporzionale"
msgid "workspace.header.menu.disable-scale-text"
msgstr "Disattiva ridimensionamento testo"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "Disattiva allineamento a guide"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "Disattiva allineamento al pixel"
-#: src/app/main/ui/workspace/main_menu.cljs:215
+#: src/app/main/ui/workspace/main_menu.cljs:243
msgid "workspace.header.menu.disable-snap-ruler-guides"
msgstr "Disattiva allineamento alle guide righello"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "Attiva allineamento dinamico"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "Attiva ridimensionamento proporzionale"
@@ -4955,51 +5133,51 @@ msgstr "Attiva ridimensionamento proporzionale"
msgid "workspace.header.menu.enable-scale-text"
msgstr "Attiva ridimensionamento testo"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "Allinea alle guide"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "Attiva allineamento al poxel"
-#: src/app/main/ui/workspace/main_menu.cljs:216
+#: src/app/main/ui/workspace/main_menu.cljs:244
msgid "workspace.header.menu.enable-snap-ruler-guides"
msgstr "Allinea alle guide righello"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "Nascondi nomi delle tavole da disegno"
-#: src/app/main/ui/workspace/main_menu.cljs:348
+#: src/app/main/ui/workspace/main_menu.cljs:376
msgid "workspace.header.menu.hide-guides"
msgstr "Nascondi guide"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "Nascondi palette colori"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "Nascondi griglia pixel"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "Nascondi righelli"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "Nascondi palette caratteri"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Modifica"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "File"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "Aiuto e informazioni"
@@ -5008,63 +5186,63 @@ msgstr "Aiuto e informazioni"
msgid "workspace.header.menu.option.power-up"
msgstr "Migliora il tuo piano"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "Preferenze"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "Visualizza"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "Ripeti"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "Seleziona tutto"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "Mostra nomi delle tavole da disegno"
-#: src/app/main/ui/workspace/main_menu.cljs:349
+#: src/app/main/ui/workspace/main_menu.cljs:377
msgid "workspace.header.menu.show-guides"
msgstr "Mostra guide"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "Mostra palette colori"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "Mostra griglia pixel"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Mostra righelli"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "Mostra palette caratteri"
-#: src/app/main/ui/workspace/main_menu.cljs:288
+#: src/app/main/ui/workspace/main_menu.cljs:316
msgid "workspace.header.menu.toggle-dark-theme"
msgstr "Passa al tema scuro"
-#: src/app/main/ui/workspace/main_menu.cljs:286, src/app/main/ui/workspace/main_menu.cljs:289
+#: src/app/main/ui/workspace/main_menu.cljs:314, src/app/main/ui/workspace/main_menu.cljs:317
msgid "workspace.header.menu.toggle-light-theme"
msgstr "Passa al tema chiaro"
-#: src/app/main/ui/workspace/main_menu.cljs:287
+#: src/app/main/ui/workspace/main_menu.cljs:315
msgid "workspace.header.menu.toggle-system-theme"
msgstr "Passa al tema di sistema"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "Annulla"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Reimposta"
@@ -5080,7 +5258,7 @@ msgstr "Salvato"
msgid "workspace.header.saving"
msgstr "In salvataggio"
-#: src/app/main/ui/workspace/right_header.cljs:239
+#: src/app/main/ui/workspace/right_header.cljs:240
msgid "workspace.header.share"
msgstr "Condividi"
@@ -5089,11 +5267,11 @@ msgstr "Condividi"
msgid "workspace.header.unsaved"
msgstr "Cambiamenti non salvati"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "Modalità di visualizzazione (%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "Zoom"
@@ -5105,7 +5283,7 @@ msgstr "Riempi - Ridimensiona per riempire"
msgid "workspace.header.zoom-fit"
msgstr "Adatta - Riduci per adattare"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "Adatta zoom a tutto"
@@ -5113,43 +5291,43 @@ msgstr "Adatta zoom a tutto"
msgid "workspace.header.zoom-full-screen"
msgstr "Schermo intero"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "Zoom su selezione"
-#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:621
msgid "workspace.layout_grid.editor.options.edit-grid"
msgstr "Modifica griglia"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1300
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1301
msgid "workspace.layout_grid.editor.options.exit"
msgstr "Esci"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:429, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:435
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:430, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:436
msgid "workspace.layout_grid.editor.padding.bottom"
msgstr "Padding inferiore"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:491
msgid "workspace.layout_grid.editor.padding.expand"
msgstr "Mostra opzioni di padding su 4 lati"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:354, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:355, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:362
msgid "workspace.layout_grid.editor.padding.horizontal"
msgstr "Padding orizzontale"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:444, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:450
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:451
msgid "workspace.layout_grid.editor.padding.left"
msgstr "Padding sinistro"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:414, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:420
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:421
msgid "workspace.layout_grid.editor.padding.right"
msgstr "Padding destro"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:406
msgid "workspace.layout_grid.editor.padding.top"
msgstr "Padding superiore"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:340, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:341, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:347
msgid "workspace.layout_grid.editor.padding.vertical"
msgstr "Padding verticale"
@@ -5165,7 +5343,7 @@ msgstr "Fatto"
msgid "workspace.layout_grid.editor.top-bar.locate"
msgstr "Individua"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1326
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1327
msgid "workspace.layout_grid.editor.top-bar.locate.tooltip"
msgstr "Individua layout grid"
@@ -5174,10 +5352,6 @@ msgstr "Individua layout grid"
msgid "workspace.libraries.add"
msgstr "Aggiungi"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s colori"
-
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
msgstr "Non ci sono ancora stili di colore nella tua libreria"
@@ -5204,43 +5378,35 @@ msgstr "Colori recenti"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "RGB Complementare"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Salva stile di colore"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s componenti"
-
-#: src/app/main/ui/workspace/libraries.cljs:371
+#: src/app/main/ui/workspace/libraries.cljs:404
msgid "workspace.libraries.empty.add-some"
msgstr "O aggiungi alcuni di questi per provare:"
-#: src/app/main/ui/workspace/libraries.cljs:365
+#: src/app/main/ui/workspace/libraries.cljs:398
msgid "workspace.libraries.empty.no-libraries"
msgstr "Non ci sono librerie condivise nel tuo team, puoi cercare"
-#: src/app/main/ui/workspace/libraries.cljs:369
+#: src/app/main/ui/workspace/libraries.cljs:402
msgid "workspace.libraries.empty.some-templates"
msgstr "alcuni modelli qui"
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Libreria del file"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s grafiche"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "LIBRERIE IN QUESTO FILE"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "LIBRERIE"
@@ -5249,11 +5415,11 @@ msgstr "LIBRERIE"
msgid "workspace.libraries.library"
msgstr "LIBRERIA"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "AGGIORNAMENTI DELLA LIBRERIA"
-#: src/app/main/ui/workspace/libraries.cljs:360
+#: src/app/main/ui/workspace/libraries.cljs:393
msgid "workspace.libraries.loading"
msgstr "Caricamento…"
@@ -5262,51 +5428,47 @@ msgstr "Caricamento…"
msgid "workspace.libraries.more-templates"
msgstr "Puoi cercare altri "
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "Non ci sono librerie condivise che necessitano un aggiornamento"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "Nessun risultato trovato per “%s”"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "Cerca librerie condivise"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "LIBRERIE CONDIVISE"
-#: src/app/main/ui/workspace/libraries.cljs:352
+#: src/app/main/ui/workspace/libraries.cljs:385
msgid "workspace.libraries.shared-library-btn"
msgstr "Connetti libreria"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Elementi tipografici multipli"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Scollega tutti gli elementi tipografici"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s elementi tipografici"
-
-#: src/app/main/ui/workspace/libraries.cljs:323
+#: src/app/main/ui/workspace/libraries.cljs:354
msgid "workspace.libraries.unlink-library-btn"
msgstr "Disconnetti libreria"
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Aggiorna"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "vedi tutti i cambiamenti"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "AGGIORNAMENTI"
@@ -5314,31 +5476,31 @@ msgstr "AGGIORNAMENTI"
msgid "workspace.notification-pill.detail"
msgstr "Dettagli"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "Clicca il bottone + per aggiungere interazioni."
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:96
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:97
msgid "workspace.options.blur-options.add-blur"
msgstr "Aggiungi sfocatura"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:117
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:118
msgid "workspace.options.blur-options.remove-blur"
msgstr "Elimina sfocatura"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Sfocatura"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "Sfocatura di gruppo"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "Sfocatura della selezione"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:114
msgid "workspace.options.blur-options.toggle-blur"
msgstr "Attiva/Disattiva sfocatura"
@@ -5346,74 +5508,159 @@ msgstr "Attiva/Disattiva sfocatura"
msgid "workspace.options.canvas-background"
msgstr "Colore di sfondo"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "Ritaglia contenuto"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Componente"
-#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:193
+#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:196
msgid "workspace.options.component.annotation"
msgstr "Annotazione"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "Copia"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:185
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:188
msgid "workspace.options.component.create-annotation"
msgstr "Crea un'annotazione"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "Modifica un'annotazione"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "Principale"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:706
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:721
msgid "workspace.options.component.swap"
msgstr "Sostituisci componente"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:765
msgid "workspace.options.component.swap.empty"
msgstr "Non ci sono ancora risorse in questa libreria"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:973
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:993
msgid "workspace.options.component.unlinked"
msgstr "Scollegato"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1236
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:512
+msgid "workspace.options.component.variant.duplicated.copy.locate"
+msgstr "Individua varianti in conflitto"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:509
+msgid "workspace.options.component.variant.duplicated.copy.title"
+msgstr ""
+"Questo componente ha varianti in conflitto. Verifica che ciascuna variante "
+"abbia un set di valori di proprietà univoci."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1281
+msgid "workspace.options.component.variant.duplicated.group.locate"
+msgstr "Individua varianti duplicate"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1278
+msgid "workspace.options.component.variant.duplicated.group.title"
+msgstr "Alcune varianti hanno proprietà e valori identici"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:268
+msgid "workspace.options.component.variant.duplicated.single.all"
+msgstr ""
+"Queste varianti hanno proprietà e valori identici. Modifica i valori "
+"affinché possano essere distinti."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:265
+msgid "workspace.options.component.variant.duplicated.single.one"
+msgstr ""
+"Questa variante ha proprietà e valori identici ad un'altra variante. "
+"Modifica i valori affinché possano essere distinti."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:271
+msgid "workspace.options.component.variant.duplicated.single.some"
+msgstr ""
+"Alcune di queste varianti hanno proprietà e valori identici. Modifica i "
+"valori affinché possano essere distinti."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:499
+msgid "workspace.options.component.variant.malformed.copy"
+msgstr ""
+"Questo componente ha varianti con nomi non validi. Verifica che ogni "
+"variante rispetti la struttura corretta."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1271
msgid "workspace.options.component.variant.malformed.group.locate"
msgstr "Individua varianti non valide"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1233
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1268
msgid "workspace.options.component.variant.malformed.group.title"
msgstr "Alcune varianti hanno nomi non validi"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:502
+msgid "workspace.options.component.variant.malformed.locate"
+msgstr "Individua varianti non valide"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:252
msgid "workspace.options.component.variant.malformed.single.all"
msgstr "Queste varianti hanno nomi non validi."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:247
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:249
msgid "workspace.options.component.variant.malformed.single.one"
msgstr "Questa variante ha un nome non valido."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:253
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:255
msgid "workspace.options.component.variant.malformed.single.some"
msgstr "Alcune di queste varianti hanno nomi non validi."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:390
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:391
msgid "workspace.options.component.variant.malformed.structure.example"
msgstr "[proprietà]=[valore], [proprietà]=[valore]"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:389
msgid "workspace.options.component.variant.malformed.structure.title"
msgstr "Prova a usare la seguente struttura:"
+#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:54
+msgid "workspace.options.component.variants-help-modal.intro"
+msgstr ""
+"Per mantenere le modifiche quando si passa da una variante all’altra, "
+"Penpot collega i livelli che:"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:91
+msgid "workspace.options.component.variants-help-modal.outro"
+msgstr ""
+"La modifica di uno qualsiasi di questi elementi (ad es. rinominare o "
+"raggruppare un livello) interrompe la connessione, ma annullando la "
+"modifica verrà ripristinata."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:67
+msgid "workspace.options.component.variants-help-modal.rule1"
+msgstr "Condividono lo stesso nome."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:76
+msgid "workspace.options.component.variants-help-modal.rule2"
+msgstr "Sono dello stesso tipo."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:77
+msgid "workspace.options.component.variants-help-modal.rule2.detail"
+msgstr ""
+"Rettangoli, ellissi, tracciati e operazioni booleane sono considerati dello "
+"stesso tipo."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:87
+msgid "workspace.options.component.variants-help-modal.rule3"
+msgstr "Si trovano allo stesso livello gerarchico."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:88
+msgid "workspace.options.component.variants-help-modal.rule3.detail"
+msgstr "Gruppi, tavole da disegno e layout sono considerati equivalenti."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:955, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1191, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:47
+msgid "workspace.options.component.variants-help-modal.title"
+msgstr "Come rimangono connesse le varianti"
+
#: src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:163
msgid "workspace.options.constraints"
msgstr "Vincoli"
@@ -5454,7 +5701,7 @@ msgstr "Superiore"
msgid "workspace.options.constraints.topbottom"
msgstr "Superiore e Inferiore"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Design"
@@ -5467,21 +5714,21 @@ msgstr "Esporta"
msgid "workspace.options.export-multiple"
msgstr "Esporta selezione"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "Esporta 1 elemento"
msgstr[1] "Esporta %s elementi"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:188
+#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:214
msgid "workspace.options.export.add-export"
msgstr "Aggiungi esportazione"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:235
+#: 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 "Rimuovi esportazione"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Suffisso"
@@ -5489,7 +5736,7 @@ msgstr "Suffisso"
msgid "workspace.options.exporting-complete"
msgstr "Esportazione completata"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "In esportazione…"
@@ -5501,27 +5748,27 @@ msgstr "Esportazione fallita"
msgid "workspace.options.exporting-object-slow"
msgstr "Esportazione inaspettatamente lenta"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Riempimento"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:194
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:234
msgid "workspace.options.fill.add-fill"
msgstr "Aggiungi riempimento"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:208
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:248
msgid "workspace.options.fill.remove-fill"
msgstr "Elimina riempimento"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:392
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:474
msgid "workspace.options.fit-content"
msgstr "Adatta tavola da disegno al contenuto"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "Aggiungi inizio flusso"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:178
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:179
msgid "workspace.options.flows.flow"
msgstr "Flusso"
@@ -5530,19 +5777,19 @@ msgstr "Flusso"
msgid "workspace.options.flows.flow-start"
msgstr "Inizio flusso"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "Inizi flusso"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:155
msgid "workspace.options.flows.remove-flow"
msgstr "Rimuovi flusso"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Auto"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "Colonne"
@@ -5551,7 +5798,7 @@ msgstr "Colonne"
msgid "workspace.options.grid.grid-title"
msgstr "Griglia"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Colore"
@@ -5560,15 +5807,15 @@ msgstr "Colore"
msgid "workspace.options.grid.params.columns"
msgstr "Colonne"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "Interspazio"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Altezza"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Margine"
@@ -5577,7 +5824,7 @@ msgstr "Margine"
msgid "workspace.options.grid.params.rows"
msgstr "Righe"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "Imposta come predefinito"
@@ -5591,159 +5838,159 @@ msgstr "Dimensione"
msgid "workspace.options.grid.params.type"
msgstr "Tipo"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Basso"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Centro"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Sinistra"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Destra"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "Estendi"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "Alto"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "Usa predefinito"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Larghezza"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Righe"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "Quadrato"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Riempimento di gruppo"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Traccia di gruppo"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:326
msgid "workspace.options.guides.add-guide"
msgstr "Aggiungi guida"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:187
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:188
msgid "workspace.options.guides.remove-guide"
msgstr "Rimuovi guida"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:320
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
msgid "workspace.options.guides.title"
msgstr "Guide"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:183
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:184
msgid "workspace.options.guides.toggle-guide"
msgstr "Attiva/Disattiva guida"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "Altezza"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "Ispeziona"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "Azione"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "Dopo un ritardo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "Animazione"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "Dissolvenza"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "Nessuna"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "Spinta"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "Scorrimento"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "automatico"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "Aggiungi sovrapposizione di sfondo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "Chiudi al click esterno"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "Chiudi sovrapposizione"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "Chiudi sovrapposizione: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "Ritardo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "Destinazione"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "Durata"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "Easing"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "Ease"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "Ease in"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "Ease in out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "Ease out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "Linear"
@@ -5752,47 +5999,47 @@ msgstr "Linear"
msgid "workspace.options.interaction-in"
msgstr "In"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "Entrata del mouse"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "Uscita del mouse"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "ms"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "Naviga verso"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "Naviga verso: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(non impostato)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "Effetti di offset"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "Al click"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "Apri sovrapposizione"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "Apri la sovrapposizione: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "Apri un URL"
@@ -5801,87 +6048,87 @@ msgstr "Apri un URL"
msgid "workspace.options.interaction-out"
msgstr "Fuori"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "In basso centrato"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "In basso a sinistra"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "In basso a destra"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "Centrato"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "Manuale"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "In alto centrato"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "In alto a sinistra"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "In alto a destra"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "Posizione"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "Preserva posizione di scorrimento"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "Schermata precedente"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "Relativo a"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "se stesso"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "Attiva/Disattiva sovrapposizione"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "Attiva/Disattiva la sovrapposizione: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "Trigger"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "Durante il passaggio del mouse"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "Durante la pressione"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "Interazioni"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:735
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:736
msgid "workspace.options.interactions.add-interaction"
msgstr "Aggiungi interazione"
@@ -5890,67 +6137,67 @@ msgstr "Aggiungi interazione"
msgid "workspace.options.interactions.remove-interaction"
msgstr "Rimuovi interazione"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "Colore"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "Colore brucia"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "Colore scherma"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "Scurisci"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "Differenza"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "Esclusione"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Luce intensa"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Tonalità"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Schiarisci"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "Luminosità"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "Moltiplica"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "Normale"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "Sovrapponi"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "Saturazione"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Scolora"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "Luce soffusa"
@@ -5969,7 +6216,7 @@ msgstr "Livelli di gruppo"
msgid "workspace.options.layer-options.title.multiple"
msgstr "Livelli selezionati"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:202
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:207, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:213
msgid "workspace.options.layer-options.toggle-layer"
msgstr "Attiva/Disattiva visibilità livello"
@@ -5978,19 +6225,19 @@ msgstr "Attiva/Disattiva visibilità livello"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "Opzioni avanzate"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "Altezza.Max"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "Larghezza.Max"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "Altezza.Min"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "Larghezza.Min"
@@ -6104,15 +6351,15 @@ msgstr "spazio tra"
msgid "workspace.options.layout.top"
msgstr "In alto"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "Più colori"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "Più librerie colori"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "Opacità"
@@ -6121,35 +6368,35 @@ msgstr "Opacità"
msgid "workspace.options.position"
msgstr "Posizione"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "Prototipo"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "Raggio"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "Inferiore sinistro"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "Inferiore destro"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "Superiore sinistro"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "Superiore destro"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:152
msgid "workspace.options.radius.hide-all-corners"
msgstr "Comprimi raggio indipendente"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:136
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:153
msgid "workspace.options.radius.show-single-corners"
msgstr "Mostra raggio indipendente"
@@ -6161,7 +6408,7 @@ msgstr "Recenti"
msgid "workspace.options.retry"
msgstr "Riprova"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "Rotazione"
@@ -6169,33 +6416,33 @@ msgstr "Rotazione"
msgid "workspace.options.search-font"
msgstr "Cerca carattere"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr ""
"Seleziona una forma, una tavola da disegno o un gruppo per trascinare una "
"connessione verso un'altra tavola."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "Colori selezionati"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "Riempimento di selezione"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "Traccia di selezione"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:341
msgid "workspace.options.shadow-options.add-shadow"
msgstr "Aggiungi ombra"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "Sfoca"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "Colore ombra"
@@ -6207,63 +6454,64 @@ msgstr "Ombra esterna"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "Ombra interna"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:348
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:183, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:354
msgid "workspace.options.shadow-options.remove-shadow"
msgstr "Rimuovi ombra"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "Diffusione"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "Ombra"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "Ombra di gruppo"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "Ombre della selezione"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:174
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:179
msgid "workspace.options.shadow-options.toggle-shadow"
msgstr "Attiva/Disattiva ombra"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "Mostra in esportazione"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "Mostra in modalità visualizzazione"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "Dimensione"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "Dimensioni predefinite"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:534
msgid "workspace.options.size.lock"
msgstr "Blocca proporzioni"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:534
msgid "workspace.options.size.unlock"
msgstr "Sblocca proporzioni"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "Traccia"
@@ -6272,7 +6520,7 @@ msgstr "Traccia"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "Marcatore circolare"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "Cerchio"
@@ -6281,7 +6529,7 @@ msgstr "Cerchio"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "Marcatore diamante"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "Diamante"
@@ -6290,19 +6538,19 @@ msgstr "Diamante"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "Freccia di linea"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "Freccia"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "Nessuno"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "Rotondo"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "Quadrato"
@@ -6311,7 +6559,7 @@ msgstr "Quadrato"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "Marcatore quadrato"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "Rettangolo"
@@ -6320,83 +6568,83 @@ msgstr "Rettangolo"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "Freccia triangolo"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "Triangolo"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "Colore traccia"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "Spessore traccia"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:180
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:189
msgid "workspace.options.stroke.add-stroke"
msgstr "Aggiungi colore traccia"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "Centro"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "Tratteggiato"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "Puntinato"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "Interno"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "Misto"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "Esterno"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:193
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:202
msgid "workspace.options.stroke.remove-stroke"
msgstr "Rimuovi traccia"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "Solido"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "Allinea in basso"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "Allinea verticalmente al centro"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "Allinea in alto"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "LTR"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "RTL"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "Altezza automatica"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "Larghezza automatica"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "Fisso"
@@ -6418,35 +6666,35 @@ msgstr "Minuscolo"
msgid "workspace.options.text-options.none"
msgstr "Nessuno"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "Barrato (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "Allinea al centro"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "Giustifica"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "Allinea a sinistra"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "Allinea a destra"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "Testo"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "Testo di gruppo"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "Testo della selezione"
@@ -6455,7 +6703,7 @@ msgstr "Testo della selezione"
msgid "workspace.options.text-options.titlecase"
msgstr "Iniziale maiuscola"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "Sottolineato (%s)"
@@ -6464,21 +6712,21 @@ msgstr "Sottolineato (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "Maiuscolo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr ""
"Utilizza il pulsante di riproduzione nell'header per avviare la "
"visualizzazione del prototipo."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "Larghezza"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "Asse X"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Asse Y"
@@ -6522,78 +6770,82 @@ msgstr "Separa nodi (%s)"
msgid "workspace.path.actions.snap-nodes"
msgstr "Aggancia nodi (%s)"
-#: src/app/main/ui/workspace/plugins.cljs:83
+#: src/app/main/ui/workspace/plugins.cljs:84
msgid "workspace.plugins.button-open"
msgstr "Apri"
-#: src/app/main/ui/workspace/plugins.cljs:197
+#: src/app/main/ui/workspace/plugins.cljs:198
#, markdown
msgid "workspace.plugins.discover"
msgstr "Scopri [altri plugin](%s)"
-#: src/app/main/ui/workspace/plugins.cljs:204
+#: src/app/main/ui/workspace/plugins.cljs:205
msgid "workspace.plugins.empty-plugins"
msgstr "Nessun plugin ancora installata"
-#: src/app/main/ui/workspace/plugins.cljs:191
+#: src/app/main/ui/workspace/plugins.cljs:192
msgid "workspace.plugins.error.manifest"
msgstr "Il manifesto del plugin è errato."
-#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:755, src/app/main/ui/workspace/plugins.cljs:82
+#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:783, src/app/main/ui/workspace/plugins.cljs:83
msgid "workspace.plugins.error.need-editor"
msgstr "Devi essere un editor per utilizzare questo plugin"
-#: src/app/main/ui/workspace/plugins.cljs:187
+#: src/app/main/ui/workspace/plugins.cljs:188
msgid "workspace.plugins.error.url"
msgstr "Il plugin non esiste o l'URL non è corretto."
-#: src/app/main/ui/workspace/plugins.cljs:183
+#: src/app/main/ui/workspace/plugins.cljs:184
msgid "workspace.plugins.install"
msgstr "Installa"
-#: src/app/main/ui/workspace/plugins.cljs:213
+#: src/app/main/ui/workspace/plugins.cljs:214
msgid "workspace.plugins.installed-plugins"
msgstr "Plugin installati"
-#: src/app/main/ui/workspace/main_menu.cljs:710
+#: src/app/main/ui/workspace/main_menu.cljs:738
msgid "workspace.plugins.menu.plugins-manager"
msgstr "Manager dei plugin"
-#: src/app/main/ui/workspace/main_menu.cljs:906
+#: src/app/main/ui/workspace/main_menu.cljs:934
msgid "workspace.plugins.menu.title"
msgstr "Plugin"
-#: src/app/main/ui/workspace/plugins.cljs:374
+#: src/app/main/ui/workspace/plugins.cljs:375
msgid "workspace.plugins.permissions-update.title"
msgstr "AGGIORNA QUESTO PLUGIN"
-#: src/app/main/ui/workspace/plugins.cljs:378
+#: src/app/main/ui/workspace/plugins.cljs:379
msgid "workspace.plugins.permissions-update.warning"
msgstr ""
"Il plugin è stato modificato da quando l'hai aperto l'ultima volta. Ora "
"richiede l'accesso a:"
-#: src/app/main/ui/workspace/plugins.cljs:278
+#: src/app/main/ui/workspace/plugins.cljs:279
msgid "workspace.plugins.permissions.allow-download"
msgstr "Inizia il download dei file."
-#: src/app/main/ui/workspace/plugins.cljs:271
+#: src/app/main/ui/workspace/plugins.cljs:286
+msgid "workspace.plugins.permissions.allow-localstorage"
+msgstr "Memorizza i dati nel browser."
+
+#: src/app/main/ui/workspace/plugins.cljs:272
msgid "workspace.plugins.permissions.comment-read"
msgstr "Leggi i tuoi commenti e risposte."
-#: src/app/main/ui/workspace/plugins.cljs:265
+#: src/app/main/ui/workspace/plugins.cljs:266
msgid "workspace.plugins.permissions.comment-write"
msgstr "Leggi e modifica i tuoi commenti e rispondi a tuo nome."
-#: src/app/main/ui/workspace/plugins.cljs:238
+#: src/app/main/ui/workspace/plugins.cljs:239
msgid "workspace.plugins.permissions.content-read"
msgstr "Leggi il contenuto dei file a cui gli utenti hanno accesso."
-#: src/app/main/ui/workspace/plugins.cljs:232
+#: src/app/main/ui/workspace/plugins.cljs:233
msgid "workspace.plugins.permissions.content-write"
msgstr "Leggi e modifica il contenuto dei file a cui gli utenti hanno accesso."
-#: src/app/main/ui/workspace/plugins.cljs:325
+#: src/app/main/ui/workspace/plugins.cljs:326
msgid "workspace.plugins.permissions.disclaimer"
msgstr ""
"Tieni presente che questo plugin è creato da una terza parte, quindi "
@@ -6601,31 +6853,31 @@ msgstr ""
"sicurezza dei dati sono importanti per noi. Se hai dubbi, contatta il "
"supporto."
-#: src/app/main/ui/workspace/plugins.cljs:258
+#: src/app/main/ui/workspace/plugins.cljs:259
msgid "workspace.plugins.permissions.library-read"
msgstr "Leggere le tue librerie e risorse."
-#: src/app/main/ui/workspace/plugins.cljs:252
+#: src/app/main/ui/workspace/plugins.cljs:253
msgid "workspace.plugins.permissions.library-write"
msgstr "Leggere e modificare le tue librerie e risorse."
-#: src/app/main/ui/workspace/plugins.cljs:318
+#: src/app/main/ui/workspace/plugins.cljs:319
msgid "workspace.plugins.permissions.title"
msgstr "IL PLUGIN '%s' VUOLE ACCEDERE A:"
-#: src/app/main/ui/workspace/plugins.cljs:245
+#: src/app/main/ui/workspace/plugins.cljs:246
msgid "workspace.plugins.permissions.user-read"
msgstr "Leggere le informazioni del profilo dell'utente attuale."
-#: src/app/main/ui/workspace/plugins.cljs:209
+#: src/app/main/ui/workspace/plugins.cljs:210
msgid "workspace.plugins.plugin-list-link"
msgstr "Lista plugin"
-#: src/app/main/ui/workspace/plugins.cljs:86
+#: src/app/main/ui/workspace/plugins.cljs:87
msgid "workspace.plugins.remove-plugin"
msgstr "Rimuovi plugin"
-#: src/app/main/ui/workspace/plugins.cljs:178
+#: src/app/main/ui/workspace/plugins.cljs:179
msgid "workspace.plugins.search-placeholder"
msgstr "Scrivi URL di un plugin"
@@ -6633,26 +6885,26 @@ msgstr "Scrivi URL di un plugin"
msgid "workspace.plugins.success"
msgstr "Plugin caricato correttamente."
-#: src/app/main/ui/workspace/plugins.cljs:172
+#: src/app/main/ui/workspace/plugins.cljs:173
msgid "workspace.plugins.title"
msgstr "Plugin"
-#: src/app/main/ui/workspace/plugins.cljs:438
+#: src/app/main/ui/workspace/plugins.cljs:439
msgid "workspace.plugins.try-out.cancel"
msgstr "NON ORA"
-#: src/app/main/ui/workspace/plugins.cljs:431
+#: src/app/main/ui/workspace/plugins.cljs:432
msgid "workspace.plugins.try-out.message"
msgstr ""
"Vuoi dare un'occhiata? Si aprirà in una nuova bozza per il tuo team "
"attuale. (In caso contrario, puoi sempre trovarlo nei plugin installati di "
"qualsiasi file.)"
-#: src/app/main/ui/workspace/plugins.cljs:427
+#: src/app/main/ui/workspace/plugins.cljs:428
msgid "workspace.plugins.try-out.title"
msgstr "IL PLUGIN '%s' È INSTALLATO PER IL TUO UTENTE!"
-#: src/app/main/ui/workspace/plugins.cljs:444
+#: src/app/main/ui/workspace/plugins.cljs:445
msgid "workspace.plugins.try-out.try"
msgstr "PROVA PLUGIN"
@@ -6664,15 +6916,15 @@ msgstr "Aggiungi layout flex"
msgid "workspace.shape.menu.add-grid"
msgstr "Aggiungi layout grid"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1015, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1039
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1016, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1040
msgid "workspace.shape.menu.add-layout"
msgstr "Aggiungi layout"
-#: src/app/main/ui/workspace/context_menu.cljs:608, src/app/main/ui/workspace/sidebar/assets/common.cljs:505, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:941, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1161
+#: src/app/main/ui/workspace/context_menu.cljs:610, src/app/main/ui/workspace/sidebar/assets/common.cljs:514, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:961, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1113, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1195
msgid "workspace.shape.menu.add-variant"
msgstr "Crea variante"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:509, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:990, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1082, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1198
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:518, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1010, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1115, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1233
msgid "workspace.shape.menu.add-variant-property"
msgstr "Aggiungi nuova proprietà"
@@ -6684,6 +6936,14 @@ msgstr "Porta in fondo"
msgid "workspace.shape.menu.backward"
msgstr "Porta indietro"
+#: src/app/main/ui/workspace/context_menu.cljs:617, src/app/main/ui/workspace/sidebar/assets/components.cljs:634, src/app/main/ui/workspace/sidebar/assets/groups.cljs:75, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1041
+msgid "workspace.shape.menu.combine-as-variants"
+msgstr "Combina come varianti"
+
+#: src/app/main/ui/workspace/sidebar/assets/components.cljs:636
+msgid "workspace.shape.menu.combine-as-variants-error"
+msgstr "I componenti devono essere nella stessa pagina"
+
#: src/app/main/ui/workspace/context_menu.cljs:199
msgid "workspace.shape.menu.copy"
msgstr "Copia"
@@ -6716,7 +6976,7 @@ msgstr "Copia come SVG"
msgid "workspace.shape.menu.copy-text"
msgstr "Copia come testo"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "Crea annotazione"
@@ -6724,11 +6984,11 @@ msgstr "Crea annotazione"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "Tavola da disegno da selezione"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "Crea componente"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "Crea componenti multipli"
@@ -6736,7 +6996,7 @@ msgstr "Crea componenti multipli"
msgid "workspace.shape.menu.cut"
msgstr "Taglia"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "Elimina"
@@ -6744,15 +7004,15 @@ msgstr "Elimina"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "Elimina inizio del flusso"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "Scollega istanza"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "Scollega istanze"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "Differenza"
@@ -6764,11 +7024,11 @@ msgstr "Duplica"
msgid "workspace.shape.menu.edit"
msgstr "Modifica"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "Escludi"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "Appiattisci"
@@ -6801,19 +7061,19 @@ msgstr "Vai al componente principale"
msgid "workspace.shape.menu.group"
msgstr "Raggruppa"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "Nascondi"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "Mostra/Nascondi UI"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "Interesezione"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "Blocca"
@@ -6821,7 +7081,7 @@ msgstr "Blocca"
msgid "workspace.shape.menu.mask"
msgstr "Maschera"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "Incolla"
@@ -6841,27 +7101,31 @@ msgstr "Rimuovi layout flex"
msgid "workspace.shape.menu.remove-grid"
msgstr "Rimuovi layout grid"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1033
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1034
msgid "workspace.shape.menu.remove-layout"
msgstr "Rimuovi layout"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1222
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1257
msgid "workspace.shape.menu.remove-variant-property"
msgstr "Rimuovi proprietà"
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1256
+msgid "workspace.shape.menu.remove-variant-property.last-property"
+msgstr "Le varianti devono avere almeno una proprietà"
+
#: src/app/main/ui/workspace/context_menu.cljs:328
msgid "workspace.shape.menu.rename"
msgstr "Rinomina"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "Reimposta modifiche"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "Ripristina componente principale"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:504
msgid "workspace.shape.menu.restore-variant"
msgstr "Ripristina variante"
@@ -6869,15 +7133,15 @@ msgstr "Ripristina variante"
msgid "workspace.shape.menu.select-layer"
msgstr "Seleziona livello"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "Mostra"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "Mostra nel pannello delle risorse"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "Mostra componente principale"
@@ -6890,6 +7154,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "Imposta come miniatura"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "Trasforma in tracciato"
@@ -6897,11 +7162,11 @@ msgstr "Trasforma in tracciato"
msgid "workspace.shape.menu.ungroup"
msgstr "Separa"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "Unione"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "Sblocca"
@@ -6914,7 +7179,7 @@ msgstr "Rimuovi maschera"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "Aggiorna componente principale"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "Aggiorna componente principale"
@@ -6926,11 +7191,11 @@ msgstr "Comprimi barra laterale"
msgid "workspace.sidebar.expand"
msgstr "Espandi barra laterale"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "Cronologia"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "Livelli"
@@ -6970,11 +7235,11 @@ msgstr "Testi"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "Attributi SVG importati"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "Pagine"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:248
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:249
msgid "workspace.sidebar.sitemap.add-page"
msgstr "Aggiungi pagina"
@@ -6991,27 +7256,27 @@ msgstr "%s temi attivi"
msgid "workspace.tokens.add set"
msgstr "Aggiungi set"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:329
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
msgid "workspace.tokens.add-new-theme"
msgstr "Aggiungi nuovo tema"
-#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:60
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:62
msgid "workspace.tokens.add-set-to-group"
msgstr "Aggiungi il set a questo gruppo"
-#: src/app/main/ui/workspace/tokens/management/group.cljs:113
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:197, src/app/main/ui/workspace/tokens/management/group.cljs:115
msgid "workspace.tokens.add-token"
msgstr "Aggiungi token: %s"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:161
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:136
msgid "workspace.tokens.applied-to"
msgstr "Applicato a"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:315
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:316
msgid "workspace.tokens.axis"
msgstr "Assi"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:338
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:337
msgid "workspace.tokens.back-to-themes"
msgstr "Torna all'elenco dei temi"
@@ -7043,15 +7308,15 @@ msgstr "Colore"
msgid "workspace.tokens.create-new-theme"
msgstr "Crea ora il tuo prima tema."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:100, src/app/main/ui/workspace/tokens/themes.cljs:44
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:96, src/app/main/ui/workspace/tokens/themes.cljs:44
msgid "workspace.tokens.create-one"
msgstr "Creane uno."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:534
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:552
msgid "workspace.tokens.create-token"
msgstr "Crea un nuovo token %s"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:337
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:338
msgid "workspace.tokens.delete"
msgstr "Elimina token"
@@ -7059,19 +7324,19 @@ msgstr "Elimina token"
msgid "workspace.tokens.delete-theme-title"
msgstr "Elimina tema"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:334
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:335
msgid "workspace.tokens.duplicate"
msgstr "Duplica token"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:201, src/app/main/data/workspace/tokens/library_edit.cljs:405
+#: src/app/main/data/workspace/tokens/library_edit.cljs:197, src/app/main/data/workspace/tokens/library_edit.cljs:415
msgid "workspace.tokens.duplicate-suffix"
msgstr "copia"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:321
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:322
msgid "workspace.tokens.edit"
msgstr "Modifica token"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:327
msgid "workspace.tokens.edit-theme-title"
msgstr "Modifica tema"
@@ -7079,15 +7344,11 @@ msgstr "Modifica tema"
msgid "workspace.tokens.edit-themes"
msgstr "Modifica temi"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:533
-msgid "workspace.tokens.edit-token"
-msgstr "Modifica token"
-
#: src/app/main/data/workspace/tokens/errors.cljs:41
msgid "workspace.tokens.empty-input"
msgstr "Il valore del token non può essere vuoto"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:540
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:558
msgid "workspace.tokens.enter-token-name"
msgstr "Inserisci il nome del token %s"
@@ -7119,7 +7380,17 @@ msgstr "Anteprima:"
msgid "workspace.tokens.export.single-file"
msgstr "File singolo"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:229
+#: src/app/main/data/workspace/tokens/application.cljs:292
+msgid "workspace.tokens.font-variant-not-found"
+msgstr ""
+"Errore nell’impostazione del peso/stile del font. Questo stile non esiste "
+"nel font corrente"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1024, src/app/main/ui/workspace/tokens/management/create/form.cljs:1039
+msgid "workspace.tokens.font-weight-value-enter"
+msgstr "Font weight (300, Bold, Regular Italic...) o {alias}"
+
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:228
msgid "workspace.tokens.gaps"
msgstr "Spaziature"
@@ -7137,21 +7408,37 @@ msgstr "Nome gruppo"
msgid "workspace.tokens.grouping-set-alert"
msgstr "Il raggruppamento di set di token non è ancora supportato."
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:233
+msgid "workspace.tokens.import-button-prefix"
+msgstr "Importa %s"
+
#: src/app/main/data/workspace/tokens/errors.cljs:32, src/app/main/data/workspace/tokens/errors.cljs:37
msgid "workspace.tokens.import-error"
msgstr "Errore di importazione:"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:240
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:273
+msgid "workspace.tokens.import-menu-folder-option"
+msgstr "Cartella"
+
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:272
+msgid "workspace.tokens.import-menu-json-option"
+msgstr "File JSON singolo"
+
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:271
+msgid "workspace.tokens.import-menu-zip-option"
+msgstr "File ZIP"
+
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:241
msgid "workspace.tokens.import-multiple-files"
msgstr "In più file, il nome/percorso del file corrisponde al nome del set."
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:239
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:240
msgid "workspace.tokens.import-single-file"
msgstr ""
"In un singolo file JSON, le chiavi di primo livello devono corrispondere ai "
"nomi dei set di token."
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:236
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:237
msgid "workspace.tokens.import-tokens"
msgstr "Importa token"
@@ -7162,7 +7449,7 @@ msgstr ""
"L'importazione di un file JSON sovrascriverà tutti i tuoi token, set e temi "
"attuali"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:246
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:247
msgid "workspace.tokens.import-warning"
msgstr ""
"L'importazione dei token sovrascriverà tutti i tuoi attuali token, set e "
@@ -7182,6 +7469,13 @@ msgstr ""
msgid "workspace.tokens.invalid-color"
msgstr "Valore colore invalido: %s"
+#: src/app/main/data/workspace/tokens/errors.cljs:89
+msgid "workspace.tokens.invalid-font-weight-token-value"
+msgstr ""
+"Valore del peso del font non valido: usa valori numerici (100-950) o nomi "
+"standard (thin, light, regular, bold, ecc.) eventualmente seguiti da "
+"'Italic'"
+
#: src/app/main/data/workspace/tokens/errors.cljs:23
msgid "workspace.tokens.invalid-json"
msgstr "Errore di importazione: Dati del token non validi nel JSON."
@@ -7197,6 +7491,18 @@ msgstr ""
"I nomi dei token devono contenere solo lettere e cifre, separate dal "
"carattere . e non devono iniziare con il simbolo $."
+#: src/app/main/data/workspace/tokens/errors.cljs:81
+msgid "workspace.tokens.invalid-text-case-token-value"
+msgstr ""
+"Valore del token non valido: sono accettati solo none, Uppercase, Lowercase "
+"o Capitalize"
+
+#: src/app/main/data/workspace/tokens/errors.cljs:85
+msgid "workspace.tokens.invalid-text-decoration-token-value"
+msgstr ""
+"Valore del token non valido: sono accettati solo none, underline e "
+"strike-through"
+
#: src/app/main/data/workspace/tokens/errors.cljs:61, src/app/main/data/workspace/tokens/errors.cljs:73, src/app/main/data/workspace/tokens/errors.cljs:77
msgid "workspace.tokens.invalid-value"
msgstr "Valore token non valido: %s"
@@ -7217,15 +7523,15 @@ msgstr "Tema"
msgid "workspace.tokens.label.theme-placeholder"
msgstr "Aggiungi un tema (es. Chiaro)"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:221
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:220
msgid "workspace.tokens.margins"
msgstr "Margini"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:257
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:256
msgid "workspace.tokens.max-size"
msgstr "Dimensione max"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:251
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:250
msgid "workspace.tokens.min-size"
msgstr "Dimensione min"
@@ -7233,6 +7539,10 @@ msgstr "Dimensione min"
msgid "workspace.tokens.missing-references"
msgstr "Riferimenti al token mancanti: "
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:123
+msgid "workspace.tokens.more-options"
+msgstr "Fai clic con il tasto destro per vedere le opzioni"
+
#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:149
msgid "workspace.tokens.no-active-sets"
msgstr "Nessun set attivo"
@@ -7241,7 +7551,7 @@ msgstr "Nessun set attivo"
msgid "workspace.tokens.no-active-theme"
msgstr "Nessun tema attivo"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:76
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:72
msgid "workspace.tokens.no-permisions-set"
msgstr "Devi essere un editor per attivare / disattivare i set"
@@ -7249,11 +7559,11 @@ msgstr "Devi essere un editor per attivare / disattivare i set"
msgid "workspace.tokens.no-permission-themes"
msgstr "Devi essere un editor per usare i temi"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:480
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:483
msgid "workspace.tokens.no-sets-create"
msgstr "Non sono ancora stati definiti dei set. Creane prima uno."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:97, src/app/main/ui/workspace/tokens/sets/lists.cljs:103
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:93, src/app/main/ui/workspace/tokens/sets/lists.cljs:99
msgid "workspace.tokens.no-sets-yet"
msgstr "Non ci sono ancora dei set."
@@ -7265,6 +7575,10 @@ msgstr "Non ci sono temi."
msgid "workspace.tokens.no-themes-currently"
msgstr "Al momento non hai temi."
+#: src/app/main/data/workspace/tokens/errors.cljs:19
+msgid "workspace.tokens.no-token-files-found"
+msgstr "Nessun token, set o tema trovato in questo file."
+
#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:148
msgid "workspace.tokens.num-active-sets"
msgstr "% set attivi"
@@ -7279,12 +7593,12 @@ msgstr ""
"L'opacità deve essere compresa tra 0 e 100% o tra 0 e 1 (ad esempio 50% o "
"0.5)."
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:145
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:120
#, fuzzy
msgid "workspace.tokens.original-value"
msgstr "Valore originale: %s"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:205
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:204
msgid "workspace.tokens.paddings"
msgstr "Padding"
@@ -7292,7 +7606,7 @@ msgstr "Padding"
msgid "workspace.tokens.radius"
msgstr "Raggio"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:153
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:128
msgid "workspace.tokens.ref-not-valid"
msgstr "Il riferimento non è valido o non è presente in nessun set attivo"
@@ -7301,7 +7615,7 @@ msgstr "Il riferimento non è valido o non è presente in nessun set attivo"
msgid "workspace.tokens.reference-error"
msgstr "Errori di riferimento: "
-#: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:39, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:44, src/app/main/ui/workspace/tokens/management/token_pill.cljs:146
+#: 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:100, 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 "Valore risolto: %"
@@ -7310,7 +7624,7 @@ msgstr "Valore risolto: %"
msgid "workspace.tokens.save-theme"
msgstr "Salva tema"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:209, src/app/main/ui/workspace/tokens/sets/lists.cljs:315
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:204, src/app/main/ui/workspace/tokens/sets/lists.cljs:309
msgid "workspace.tokens.select-set"
msgstr "Seleziona set."
@@ -7318,11 +7632,11 @@ msgstr "Seleziona set."
msgid "workspace.tokens.self-reference"
msgstr "Il token ha un riferimento a se stesso"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:64
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:60
msgid "workspace.tokens.set-edit-placeholder"
msgstr "Inserisci nome (usa '/' per i gruppi)"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:343
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:342
msgid "workspace.tokens.set-selection-theme"
msgstr "Definisci quali set token dovrebbe essere usati come parte di questo tema:"
@@ -7345,7 +7659,7 @@ msgstr ""
msgid "workspace.tokens.settings"
msgstr "Impostazioni token"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:245
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:244
msgid "workspace.tokens.size"
msgstr "Dimensione"
@@ -7353,6 +7667,14 @@ msgstr "Dimensione"
msgid "workspace.tokens.stroke-width-range"
msgstr "La larghezza della traccia deve essere maggiore o uguale a 0."
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1012, src/app/main/ui/workspace/tokens/management/create/form.cljs:1051
+msgid "workspace.tokens.text-case-value-enter"
+msgstr "none | uppercase | lowercase | capitalize o {alias}"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1018, src/app/main/ui/workspace/tokens/management/create/form.cljs:1055
+msgid "workspace.tokens.text-decoration-value-enter"
+msgstr "none | underline | strike-through o {alias}"
+
#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:130
msgid "workspace.tokens.theme-name"
msgstr "Tema %s"
@@ -7367,16 +7689,28 @@ msgstr ""
msgid "workspace.tokens.themes-list"
msgstr "Elenco temi"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:589, src/app/main/ui/workspace/tokens/management/create/form.cljs:590
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:608, src/app/main/ui/workspace/tokens/management/create/form.cljs:609
#, fuzzy
msgid "workspace.tokens.token-description"
msgstr "Descrizione"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:539
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:973
+msgid "workspace.tokens.token-font-family-select"
+msgstr "Seleziona famiglia di caratteri"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1029
+msgid "workspace.tokens.token-font-family-value"
+msgstr "Famiglia di caratteri"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:979, src/app/main/ui/workspace/tokens/management/create/form.cljs:1031
+msgid "workspace.tokens.token-font-family-value-enter"
+msgstr "Famiglia di caratteri o elenco di caratteri separati da virgola (,)"
+
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:83, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:109, src/app/main/ui/workspace/tokens/management/create/form.cljs:557
msgid "workspace.tokens.token-name"
msgstr "Nome"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:66
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:69
msgid "workspace.tokens.token-name-validation-error"
msgstr ""
" non è un nome di token valido.\n"
@@ -7388,11 +7722,11 @@ msgstr ""
msgid "workspace.tokens.token-not-resolved"
msgstr "Impossibile risolvere il token di riferimento con il nome: %s"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:567
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:585
msgid "workspace.tokens.token-value"
msgstr "Valore"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:566, src/app/main/ui/workspace/tokens/management/create/form.cljs:883, src/app/main/ui/workspace/tokens/management/create/form.cljs:892
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:584, src/app/main/ui/workspace/tokens/management/create/form.cljs:1035
msgid "workspace.tokens.token-value-enter"
msgstr "Inserisci un valore o un alias con {alias}"
@@ -7400,29 +7734,39 @@ msgstr "Inserisci un valore o un alias con {alias}"
msgid "workspace.tokens.tokens-section-title"
msgstr "TOKEN - %s"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:125
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:121
msgid "workspace.tokens.tools"
msgstr "Strumenti"
+#: src/app/main/data/workspace/tokens/import_export.cljs:47
+msgid "workspace.tokens.unknown-token-type-message"
+msgstr ""
+"L’importazione è stata completata con successo. Alcuni token non sono stati "
+"inclusi."
+
#: src/app/main/data/workspace/tokens/import_export.cljs:49
msgid "workspace.tokens.unknown-token-type-section"
msgstr "Il tipo '%s' non è supportato (%s)\n"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:156
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:131
msgid "workspace.tokens.value-not-valid"
msgstr "Il valore non è valido"
+#: src/app/main/data/workspace/tokens/errors.cljs:69
+msgid "workspace.tokens.value-with-percent"
+msgstr "Valore non valido: % non è consentito."
+
#: src/app/main/data/workspace/tokens/errors.cljs:65
msgid "workspace.tokens.value-with-units"
msgstr "Valore non valido: le unità non sono consentite."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:563
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:581
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:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "Risorse"
@@ -7430,7 +7774,7 @@ msgstr "Risorse"
msgid "workspace.toolbar.color-palette"
msgstr "Palette colori (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "Commenti (%s)"
@@ -7643,19 +7987,19 @@ msgstr "Operazione su %s"
msgid "workspace.undo.title"
msgstr "Cronologia"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "Ignora"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "Maggiori informazioni"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "Sono presenti degli aggiornamenti nelle librerie condivise"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "Aggiorna"
@@ -7707,6 +8051,14 @@ msgstr "Versioni di %s"
msgid "workspace.versions.loading"
msgstr "Caricamento…"
+#, unused
+msgid "workspace.versions.locked-by-other"
+msgstr "Questa versione è bloccata da %s e non può essere modificata"
+
+#, unused
+msgid "workspace.versions.locked-by-you"
+msgstr "Questa versione è bloccata da te"
+
#: src/app/main/ui/workspace/sidebar/versions.cljs:82
msgid "workspace.versions.restore-warning"
msgstr "Vuoi ripristinare questa versione?"
@@ -7715,14 +8067,18 @@ msgstr "Vuoi ripristinare questa versione?"
msgid "workspace.versions.snapshot-menu"
msgstr "Apri menu delle istantanee"
-#: src/app/main/ui/workspace/sidebar.cljs:236
+#: src/app/main/ui/workspace/sidebar.cljs:237
msgid "workspace.versions.tab.actions"
msgstr "Azioni"
-#: src/app/main/ui/workspace/sidebar.cljs:234
+#: src/app/main/ui/workspace/sidebar.cljs:235
msgid "workspace.versions.tab.history"
msgstr "Cronologia"
+#, unused
+msgid "workspace.versions.tooltip.locked-version"
+msgstr "Versione bloccata - può essere modificata solo dal creatore"
+
#: src/app/main/ui/ds/product/milestone.cljs:84, src/app/main/ui/ds/product/milestone_group.cljs:86
msgid "workspace.versions.version-menu"
msgstr "Apri menu delle versioni"
@@ -7768,3 +8124,214 @@ msgstr "Clicca per chiudere il tracciato"
#~ msgid "onboarding.slide.1.desc1"
#~ msgstr "Crea interazioni complete per imitare al meglio il prodotto finale."
+
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:98, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:105
+msgid "color-row.token-color-row.deleted-token"
+msgstr "Questo token non esiste o è stato eliminato."
+
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:35
+msgid "color-token.empty-state"
+msgstr ""
+"Nessun token colore disponibile. Controlla i set o i temi attivi oppure "
+"aggiungi nuovi token."
+
+#: src/app/main/ui/dashboard/team.cljs:765
+msgid "dashboard.invitation-modal.delete"
+msgstr "Stai per eliminare gli inviti a:"
+
+#: src/app/main/ui/dashboard/team.cljs:766
+msgid "dashboard.invitation-modal.resend"
+msgstr "Stai per reinviare gli inviti a:"
+
+#: src/app/main/ui/dashboard/team.cljs:756
+msgid "dashboard.invitation-modal.title.delete-invitations"
+msgstr "Elimina inviti"
+
+#: src/app/main/ui/dashboard/team.cljs:757
+msgid "dashboard.invitation-modal.title.resend-invitations"
+msgstr "Reinvia inviti"
+
+#: src/app/main/ui/dashboard/team.cljs:949
+msgid "dashboard.order-invitations-by-role"
+msgstr "Ordina per ruolo"
+
+#: src/app/main/ui/dashboard/team.cljs:958
+msgid "dashboard.order-invitations-by-status"
+msgstr "Ordina per stato"
+
+#: src/app/main/ui/inspect/styles/property_detail_copiable.cljs:52
+msgid "inspect.tabs.styles.panel.copy-to-clipboard"
+msgstr "Copia negli appunti"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:22
+msgid "inspect.tabs.styles.panel.geometry"
+msgstr "Dimensione e posizione"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:59, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:179
+msgid "inspect.tabs.styles.panel.toggle-style"
+msgstr "Attiva/disattiva pannello %s"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:21
+msgid "inspect.tabs.styles.panel.token"
+msgstr "Set di token e temi"
+
+#: src/app/main/ui/inspect/styles/panels/tokens_panel.cljs:26
+msgid "inspect.tabs.styles.panel.tokens.active-sets"
+msgstr "Set attivi"
+
+#: src/app/main/ui/inspect/styles/panels/tokens_panel.cljs:21
+msgid "inspect.tabs.styles.panel.tokens.active-themes"
+msgstr "Temi attivi"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:20
+msgid "inspect.tabs.styles.panel.variant"
+msgstr "Proprietà delle varianti"
+
+#: src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:102, src/app/main/ui/inspect/styles/rows/properties_row.cljs:53
+msgid "inspect.tabs.styles.token.resolved-value"
+msgstr "Valore risolto:"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:1043
+msgid "labels.about-penpot"
+msgstr "Informazioni su Penpot"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:26
+msgid "labels.blur"
+msgstr "Sfocatura"
+
+#: src/app/main/ui/workspace/colorpicker.cljs:427
+msgid "labels.color"
+msgstr "Colore"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:1030
+msgid "labels.community-contributions"
+msgstr "Comunità e contributi"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:23
+msgid "labels.fill"
+msgstr "Riempimento"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:1019
+msgid "labels.help-learning"
+msgstr "Aiuto e apprendimento"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:28
+msgid "labels.layout"
+msgstr "Layout"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:798
+msgid "labels.learning-center"
+msgstr "Centro di apprendimento"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:878
+msgid "labels.penpot-changelog"
+msgstr "Registro delle modifiche di Penpot"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:804
+msgid "labels.penpot-hub"
+msgstr "Hub di Penpot"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:644
+msgid "labels.reference"
+msgstr "Riferimento"
+
+#: src/app/main/ui/dashboard/team.cljs:788
+msgid "labels.resend"
+msgstr "Reinvia"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:27
+msgid "labels.shadow"
+msgstr "Ombra"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:24, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:46
+msgid "labels.stroke"
+msgstr "Traccia"
+
+#: src/app/main/ui/inspect/right_sidebar.cljs:107, src/app/main/ui/inspect/styles.cljs:107
+msgid "labels.styles"
+msgstr "Stili"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:33
+msgid "labels.svg"
+msgstr "SVG"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:25
+msgid "labels.text"
+msgstr "Testo"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1148
+msgid "labels.typography"
+msgstr "Tipografia"
+
+#: src/app/main/ui/inspect/right_sidebar.cljs:65, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:949, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:518
+msgid "labels.variant"
+msgstr "Variante"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:872
+msgid "labels.version-notes"
+msgstr "Note della versione %s"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:32
+msgid "labels.visibility"
+msgstr "Visibilità"
+
+#: src/app/main/ui/dashboard/team.cljs:825
+msgid "notifications.invitation-deleted"
+msgstr "Invito eliminato con successo"
+
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+msgid "shortcuts.create-component-variant"
+msgstr "Crea componente / variante"
+
+#: src/app/main/ui/workspace/colorpicker.cljs:431, src/app/main/ui/workspace/colorpicker.cljs:443
+msgid "workspace.colorpicker.color-tokens"
+msgstr "Token colore"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:464
+msgid "workspace.component.swap.loop-error"
+msgstr "I componenti non possono essere annidati dentro sé stessi."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:463
+msgid "workspace.component.switch.loop-error-multi"
+msgstr ""
+"Alcune copie non possono essere sostituite. I componenti non possono essere "
+"annidati dentro sé stessi."
+
+#: src/app/main/ui/workspace/libraries.cljs:349
+msgid "workspace.libraries.connected-to"
+msgstr "Connesso a"
+
+#: src/app/main/data/workspace/tokens/errors.cljs:97
+msgid "workspace.tokens.composite-line-height-needs-font-size"
+msgstr ""
+"L'interlinea dipende dalla dimensione del carattere. Aggiungi una dimensione "
+"carattere per ottenere il valore risolto."
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:551
+msgid "workspace.tokens.edit-token"
+msgstr "Modifica token %s"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:711
+msgid "workspace.tokens.individual-tokens"
+msgstr "Utilizza token individuali"
+
+#: src/app/main/data/workspace/tokens/errors.cljs:93
+msgid "workspace.tokens.invalid-token-value-typography"
+msgstr ""
+"Valore non valido: deve fare riferimento a un token tipografico composito."
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1047
+msgid "workspace.tokens.letter-spacing-value-enter-composite"
+msgstr "Letter spacing o {alias}"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1043
+msgid "workspace.tokens.line-height-value-enter"
+msgstr "Line height (moltiplicatore, px, %) o {alias}"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:744
+msgid "workspace.tokens.reference-composite"
+msgstr "Inserisci un alias tipografico del token"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:715
+msgid "workspace.tokens.use-reference"
+msgstr "Utilizza un riferimento"
diff --git a/frontend/translations/jpn_JP.po b/frontend/translations/jpn_JP.po
index c6993b889c..4a35118841 100644
--- a/frontend/translations/jpn_JP.po
+++ b/frontend/translations/jpn_JP.po
@@ -151,7 +151,7 @@ msgstr "デザインとプロトタイピングのためのオープンソース
msgid "auth.terms-and-privacy-agreement"
msgstr "[利用規約](%s) と [プライバシーポリシー](%s) に同意します。"
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "利用規約"
@@ -159,7 +159,7 @@ msgstr "利用規約"
msgid "auth.verification-email-sent"
msgstr "認証メールを送信しました"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "公開"
@@ -228,7 +228,7 @@ msgstr "プロトタイプを共有"
msgid "common.share-link.view-all"
msgstr "すべて選択"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "非公開"
@@ -245,7 +245,7 @@ msgstr "チュートリアルを始める"
msgid "dashboard.access-tokens.expiration-180-days"
msgstr "180日"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "共有ライブラリとして追加"
@@ -253,27 +253,27 @@ msgstr "共有ライブラリとして追加"
msgid "dashboard.change-email"
msgstr "メールアドレスを変更"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(コピー)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "チームを新規作成"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "あなたのPenpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "チームを削除"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Penpotファイル(.penpot)をダウンロード"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "標準形式(.svg+.json)でダウンロード"
@@ -285,7 +285,7 @@ msgstr "複製"
msgid "dashboard.duplicate-multi"
msgstr "%s ファイルを複製"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "PDFでエクスポート"
@@ -342,11 +342,11 @@ msgstr "アップロード中 (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "アップロード中: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "チームに招待"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "チームから脱退"
@@ -366,7 +366,7 @@ msgstr "フォントを読みこんでいます…"
msgid "dashboard.new-file"
msgstr "+ 新しいファイル"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "新しいファイル"
@@ -374,7 +374,7 @@ msgstr "新しいファイル"
msgid "dashboard.new-project"
msgstr "+ 新規プロジェクト"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "新規プロジェクト"
@@ -382,7 +382,7 @@ msgstr "新規プロジェクト"
msgid "dashboard.no-matches-for"
msgstr "\"%s\"が見つかりませんでした"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "ピン留めされたプロジェクトはここに表示されます"
@@ -398,7 +398,7 @@ msgstr "メールアドレスが認証されました"
msgid "dashboard.notifications.password-saved"
msgstr "パスワードを保存しました!"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s メンバー"
@@ -431,7 +431,7 @@ msgstr "共有ライブラリから削除"
msgid "dashboard.save-settings"
msgstr "設定を保存"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "検索…"
@@ -467,7 +467,7 @@ msgstr "ファイルを複製しました"
msgid "dashboard.success-duplicate-project"
msgstr "プロジェクトを複製しました"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "ファイルを移動しました"
@@ -479,15 +479,15 @@ msgstr "ファイルを移動しました"
msgid "dashboard.success-move-project"
msgstr "ファイルを削除しました"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "チーム情報"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "チームのメンバー"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "チームのプロジェクト"
@@ -519,15 +519,15 @@ msgstr "Eメール"
msgid "dashboard.your-name"
msgstr "名前"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "あなたのPenpot"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "キャンセル"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "OK"
@@ -559,15 +559,15 @@ msgstr "メールアドレスはすでに有効です。"
msgid "errors.email-as-password"
msgstr "メールアドレスはパスワードとして設定できません"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "メールアドレス «%s» には多くの受信失敗レポートがあります。"
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "«%s» はスパムとして報告されたか、または恒久的に受信失敗しています"
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "エラーが発生しました。"
@@ -616,7 +616,7 @@ msgstr "パスワードは8文字以上である必要があります"
msgid "errors.registration-disabled"
msgstr "新規登録は無効化されています。"
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr "オーナーはチームを脱退できません。オーナーロールを外してください。"
@@ -672,7 +672,7 @@ msgstr "ぼかし"
msgid "inspect.attributes.fill"
msgstr "塗りつぶし"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "画像をダウンロード"
@@ -729,27 +729,28 @@ msgstr "シャドウ"
msgid "inspect.attributes.stroke.alignment.center"
msgstr "中央"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "フォントファミリー"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "フォントサイズ"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "フォントスタイル"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "行の高さ"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "文字装飾"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "下線"
@@ -777,7 +778,7 @@ msgstr "画像"
msgid "inspect.tabs.code.selected.mask"
msgstr "マスク"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "ショートカット"
@@ -785,15 +786,15 @@ msgstr "ショートカット"
msgid "labels.add-custom-font"
msgstr "カスタムフォントを追加"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "キャンセル"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "コメント"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "コミュニティ"
@@ -801,11 +802,11 @@ msgstr "コミュニティ"
msgid "labels.confirm-password"
msgstr "パスワードを確認"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "続ける"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "作成"
@@ -825,7 +826,7 @@ msgstr "カスタムフォント"
msgid "labels.dashboard"
msgstr "ダッシュボード"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "削除"
@@ -837,15 +838,15 @@ msgstr "コメントを削除"
msgid "labels.delete-comment-thread"
msgstr "スレッドを削除"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "招待を削除"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "下書き"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "編集"
@@ -853,15 +854,15 @@ msgstr "編集"
msgid "labels.edit-file"
msgstr "ファイルを編集"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "エディタ"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "失効済み"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "エクスポート"
@@ -877,15 +878,15 @@ msgstr "フォントファミリー"
msgid "labels.font-variants"
msgstr "スタイル"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "フォント"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "GitHubレポジトリ"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "フィードバックする"
@@ -893,11 +894,11 @@ msgstr "フィードバックする"
msgid "labels.go-back"
msgstr "戻る"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "ヘルプセンター"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "解決済みのコメントを非表示"
@@ -905,7 +906,7 @@ msgstr "解決済みのコメントを非表示"
msgid "labels.internal-error.main-message"
msgstr "内部エラー"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "招待"
@@ -913,19 +914,19 @@ msgstr "招待"
msgid "labels.language"
msgstr "言語"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "ライブラリ&テンプレート"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "ログアウト"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "メンバー"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "メンバー"
@@ -933,7 +934,7 @@ msgstr "メンバー"
msgid "labels.new-password"
msgstr "新しいパスワード"
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "招待がありません。"
@@ -958,11 +959,11 @@ msgstr "または"
msgid "labels.profile"
msgstr "プロフィール"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "プロジェクト"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "リリースノート"
@@ -971,11 +972,11 @@ msgstr "リリースノート"
msgid "labels.remove"
msgstr "削除"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "メンバーを削除"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "名前を変更"
@@ -983,7 +984,7 @@ msgstr "名前を変更"
msgid "labels.rename-team"
msgstr "チーム名を変更"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "招待を再送"
diff --git a/frontend/translations/ko.po b/frontend/translations/ko.po
index 9531dddd64..5eb98971ae 100644
--- a/frontend/translations/ko.po
+++ b/frontend/translations/ko.po
@@ -159,7 +159,7 @@ msgstr "계정을 생성하세요"
msgid "auth.sidebar-tagline"
msgstr "디자인과 프로토타이핑을 위한 오픈소스 솔루션."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "서비스 정책"
@@ -180,7 +180,7 @@ msgstr "작업용 이메일"
msgid "branding-illustrations-marketing-pieces"
msgstr "...브랜딩, 일러스트레이션, 마케팅 자료 등."
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "발행하기"
@@ -249,7 +249,7 @@ msgstr "프로토타입을 공유해요"
msgid "common.share-link.view-all"
msgstr "모두 선택해요"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "발행취소하기"
@@ -365,7 +365,7 @@ msgstr "토큰은 %s에 만료 예정입니다"
msgid "dashboard.access-tokens.token-will-not-expire"
msgstr "토큰의 만료 기한이 없습니다"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "공유 라이브러리로 추가하기"
@@ -373,27 +373,27 @@ msgstr "공유 라이브러리로 추가하기"
msgid "dashboard.change-email"
msgstr "이메일을 변경해요"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(복사)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "새 팀을 생성해요"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "당신의 펜팟"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "팀을 해체해요"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "펜팟 파일(.penpot)을 다운로드해요"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "표준 파일(.svg + .json)을 다운로드해요"
@@ -409,7 +409,7 @@ msgstr "%파일을 복제해요"
msgid "dashboard.export-binary-multi"
msgstr "%s 펜팟 파일 (.penpot) 다운로드 하기"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "대지를 PDF로 내보내요"
@@ -417,7 +417,7 @@ msgstr "대지를 PDF로 내보내요"
msgid "dashboard.export-frames.title"
msgstr "PDF로 내보내요"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "내보내요"
@@ -429,19 +429,19 @@ msgstr "복구 토큰이 유효하지 않습니다."
msgid "inspect.attributes.blur"
msgstr "흐림"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "값"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -449,7 +449,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "채우기"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "소스 이미지 다운로드"
@@ -539,35 +539,36 @@ msgstr "단색"
msgid "inspect.attributes.stroke.width"
msgstr "폭"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "타이포그래피"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "폰트 패밀리"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "폰트 사이즈"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "폰트 스타일"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "밑줄"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "텍스트 변형"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "소문자"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "대문자"
@@ -623,7 +624,7 @@ msgstr "텍스트"
msgid "inspect.tabs.info"
msgstr "정보"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "단축키"
@@ -631,7 +632,7 @@ msgstr "단축키"
msgid "labels.accept"
msgstr "허가"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "활성화"
@@ -639,11 +640,11 @@ msgstr "활성화"
msgid "labels.add-custom-font"
msgstr "커스텀 폰트 추가"
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "관리자"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "전체"
@@ -660,19 +661,19 @@ msgstr "뒤로"
msgid "labels.bad-gateway.main-message"
msgstr "잘못된 경로"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "취소"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "닫기"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "코멘트"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "커뮤니티"
@@ -680,15 +681,15 @@ msgstr "커뮤니티"
msgid "labels.confirm-password"
msgstr "비밀번호 확인하기"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "계속하기"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "링크 복사하기"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "생성하기"
@@ -708,7 +709,7 @@ msgstr "커스텀 폰트"
msgid "labels.dashboard"
msgstr "대시보드"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "삭제하기"
@@ -720,15 +721,15 @@ msgstr "코멘트 삭제하기"
msgid "labels.delete-comment-thread"
msgstr "스레드 제거하기"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "초대장 제거하기"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "초안"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "편집"
@@ -736,15 +737,15 @@ msgstr "편집"
msgid "labels.edit-file"
msgstr "파일 편집"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "작성자"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "기한이 만료된"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "내보내기"
@@ -760,7 +761,7 @@ msgstr "폰트 공급자"
msgid "labels.font-variants"
msgstr "스타일"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "폰트"
@@ -768,23 +769,23 @@ msgstr "폰트"
msgid "labels.go-back"
msgstr "뒤로 가기"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "고객센터"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "비활성화"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "보기 전용"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "뷰어"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "웹훅"
@@ -820,11 +821,11 @@ msgstr "이메일 변경하기"
msgid "modals.change-email.title"
msgstr "이메일을 변경하세요"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "웹훅 만들기"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "웹훅 생성하기"
@@ -860,11 +861,11 @@ msgstr "폰트 스타일 지우는 중"
msgid "modals.delete-font.title"
msgstr "폰트 지우는 중"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "정말로 해당 페이지를 지우시겠습니까?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "페이지 삭제"
@@ -884,30 +885,30 @@ msgstr "프로젝트 제거"
msgid "notifications.profile-saved"
msgstr "프로필이 성공적으로 저장되었습니다!"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "가로로 뒤집기"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "세로로 뒤집기"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "초안으로 가기"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "공유된 라이브러리로 가기"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "찾기"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "그룹"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "가로로 분배하기"
diff --git a/frontend/translations/lt.po b/frontend/translations/lt.po
index 28ba3b2fad..aedcf8d708 100644
--- a/frontend/translations/lt.po
+++ b/frontend/translations/lt.po
@@ -143,7 +143,7 @@ msgstr "Sukurti paskyrą"
msgid "auth.sidebar-tagline"
msgstr "Atviro kodo dizaino ir prototipų kūrimo sprendimas."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Paslaugų teikimo sąlygos"
@@ -151,7 +151,7 @@ msgstr "Paslaugų teikimo sąlygos"
msgid "auth.verification-email-sent"
msgstr "Išsiuntėme patvirtinimo el. laišką adresu"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Paskelbti"
@@ -224,7 +224,7 @@ msgstr "Dalinkitės prototipais"
msgid "common.share-link.view-all"
msgstr "Rinktis viską"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Atšaukti paskelbimą"
@@ -262,7 +262,7 @@ msgstr "Panagrinėkite Penpot ir susipažinkite su pagrindinėmis jo savybėmis.
msgid "dasboard.walkthrough-hero.start"
msgstr "Pradėkite apžvalgą"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Pridėti kaip bendrinamą biblioteką"
@@ -270,19 +270,19 @@ msgstr "Pridėti kaip bendrinamą biblioteką"
msgid "dashboard.change-email"
msgstr "Keisti el. paštą"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(kopija)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Sukurti naują komandą"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Jūsų Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Naikinti komandą"
@@ -294,7 +294,7 @@ msgstr "Dublikatas"
msgid "dashboard.duplicate-multi"
msgstr "Dubliuoti %s failus"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Eksportuokite darbalaukius į PDF"
@@ -310,7 +310,7 @@ msgstr "Eksportuoti Penpot %s failus"
msgid "dashboard.export-multiple.selected"
msgstr "Pasirinkta %s iš %s elementų"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Eksportuoti"
@@ -466,7 +466,7 @@ msgstr "Įkeliami duomenys į serverį (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Įkeliamas failas: %s"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Naujas failas"
@@ -474,7 +474,7 @@ msgstr "Naujas failas"
msgid "dashboard.new-project"
msgstr "+ Naujas projektas"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Naujas projektas"
@@ -482,7 +482,7 @@ msgstr "Naujas projektas"
msgid "dashboard.no-matches-for"
msgstr "Nerasta jokių atitikmenų pagal \"%s\""
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Prisegti projektai bus rodomi čia"
@@ -498,7 +498,7 @@ msgstr "Jūsų el. pašto adresas buvo sėkmingai patvirtintas"
msgid "dashboard.notifications.password-saved"
msgstr "Slaptažodis sėkmingai išsaugotas!"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s nariai"
@@ -514,7 +514,7 @@ msgstr "Nustatymai"
msgid "dashboard.password-change"
msgstr "Keisti slaptažodį"
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Prisegti/Atsegti"
diff --git a/frontend/translations/lv.po b/frontend/translations/lv.po
index 8e6119be10..0ee99ad56f 100644
--- a/frontend/translations/lv.po
+++ b/frontend/translations/lv.po
@@ -1,16 +1,17 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-28 10:46+0000\n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
"Last-Translator: Edgars Andersons \n"
-"Language-Team: Latvian "
-" \n"
+"Language-Team: Latvian \n"
"Language: lv\n"
"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.13\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.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -180,7 +181,7 @@ msgstr "Atvērtā pirmkoda risinājums dizaina izstrādei un modelēšanai."
msgid "auth.terms-and-privacy-agreement"
msgstr "Piekrītu [pakalpojuma noteiktumiem](%s) un [privātuma nosacījumiem](%s)."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Pakalpojumu sniegšanas noteikumi"
@@ -207,7 +208,7 @@ msgstr "... zīmolrades, ilustrācijām, mārketinga materiāliem utt."
msgid "comments.mentions.not-found"
msgstr "Netika atrasts neviens cilvēks @%s"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Publicēt"
@@ -278,7 +279,7 @@ msgstr "Kopīgot prototipus"
msgid "common.share-link.view-all"
msgstr "Atlasīt visu"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Atcelt publikāciju"
@@ -401,7 +402,7 @@ msgstr "Pilnvarai nav derīguma beigu datuma"
msgid "dashboard.add-file"
msgstr "Pievienot datni"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Pievienot kā koplietojamu bibliotēku"
@@ -409,31 +410,31 @@ msgstr "Pievienot kā koplietojamu bibliotēku"
msgid "dashboard.change-email"
msgstr "Mainīt e-pasta adresi"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(kopija)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Izveidot jaunu komandu"
-#: src/app/main/ui/workspace/main_menu.cljs:631
+#: src/app/main/ui/workspace/main_menu.cljs:659
msgid "dashboard.create-version-menu"
msgstr "Piespraust šo versiju"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Mans Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Dzēst komandu"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Lejupielādēt Penpot datni (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Lejupielādēt standarta datni (.svg + .json)"
@@ -517,7 +518,7 @@ msgstr "Sākt veidot apbrīnojamas lietas"
msgid "dashboard.export-binary-multi"
msgstr "Lejupielādēt %s Penpot datnes (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Izgūt plātnes kā PDF"
@@ -533,7 +534,7 @@ msgstr "Izgūt Penpot %s datnes"
msgid "dashboard.export-multiple.selected"
msgstr "Atlasīti elementi - %s no %s"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Izgūt"
@@ -746,11 +747,11 @@ msgstr "Augšupielādē datus serverī (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Augšupielādē datni: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Uzaicināt personas"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Atstāt komandu"
@@ -758,7 +759,7 @@ msgstr "Atstāt komandu"
msgid "dashboard.libraries-and-templates"
msgstr "Bibliotēkas un veidnes"
-#: src/app/main/ui/dashboard/templates.cljs:259
+#: src/app/main/ui/dashboard/templates.cljs:267
msgid "dashboard.libraries-and-templates.description"
msgstr "Šeit ir dažas bibliotēkas un sagataves, kuras var pievienot savam projektam"
@@ -766,7 +767,7 @@ msgstr "Šeit ir dažas bibliotēkas un sagataves, kuras var pievienot savam pro
msgid "dashboard.libraries-and-templates.explore"
msgstr "Izpētīt vairāk un uzzinātt, kā sniegt ieguldījumu"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "Veidnes ievietošanas laikā radās sarežģījumi. Veidne netika ievietota."
@@ -802,7 +803,7 @@ msgstr "Pārvietot uz citu komandu"
msgid "dashboard.new-file"
msgstr "+ Jauna datne"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Jauna datne"
@@ -810,7 +811,7 @@ msgstr "Jauna datne"
msgid "dashboard.new-project"
msgstr "+ Jauns projekts"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Jauns projekts"
@@ -818,11 +819,11 @@ msgstr "Jauns projekts"
msgid "dashboard.no-matches-for"
msgstr "“%s” nav atrasta neviena atbilstība"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Šeit būs redzami piespraustie projekti"
-#: src/app/main/ui/dashboard/comments.cljs:90
+#: src/app/main/ui/dashboard/comments.cljs:91
msgid "dashboard.notifications"
msgstr "Paziņojumi"
@@ -834,7 +835,7 @@ msgstr "E-pasta adrese tika veiksmīgi atjaunināta"
msgid "dashboard.notifications.email-verified-successfully"
msgstr "E-pasta adrese tika veiksmīgi apliecināta"
-#: src/app/main/data/profile.cljs:272
+#: src/app/main/data/profile.cljs:273
msgid "dashboard.notifications.notifications-saved"
msgstr "Paziņojumu iestatījumi atjaunināti"
@@ -842,11 +843,11 @@ msgstr "Paziņojumu iestatījumi atjaunināti"
msgid "dashboard.notifications.password-saved"
msgstr "Parole ir veiksmīgi saglabāta."
-#: src/app/main/ui/dashboard/comments.cljs:44
+#: src/app/main/ui/dashboard/comments.cljs:45
msgid "dashboard.notifications.view"
msgstr "Apskatīt paziņojumus"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "Dalībieki: %s"
@@ -878,7 +879,7 @@ msgstr "Tu tagad esi šīs komandas īpašnieks."
msgid "dashboard.permissions-change.viewer"
msgstr "Tev tagad šajā komandā ir skatīšanās tiesības."
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Piespraust/Atspraust"
@@ -915,7 +916,7 @@ msgstr "Tu vairs neesi daļa no komandas \"%s\"."
msgid "dashboard.save-settings"
msgstr "Saglabāt iestatījumus"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Meklēt…"
@@ -1007,7 +1008,7 @@ msgstr "Paziņojumi"
msgid "dashboard.show-all-files"
msgstr "Rādīt visas datnes"
-#: src/app/main/ui/workspace/main_menu.cljs:638
+#: src/app/main/ui/workspace/main_menu.cljs:666
msgid "dashboard.show-version-history"
msgstr "Versiju vēsture"
@@ -1033,7 +1034,7 @@ msgstr[2] "Datnes tika sekmīgi divkāršotas"
msgid "dashboard.success-duplicate-project"
msgstr "Projekts tika veiksmīgi divkāršots"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Datne tika sekmīgi pārvietota"
@@ -1045,15 +1046,15 @@ msgstr "Datnes tika veiksmīgi pārvietotas"
msgid "dashboard.success-move-project"
msgstr "Projekts tika veiksmīgi pārvietots"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Par komandu"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Komandas dalībnieki"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Komandas projekti"
@@ -1073,7 +1074,7 @@ msgstr "Meklēšanas rezultāti"
msgid "dashboard.type-something"
msgstr "Jāievada, lai meklētu"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Atcelt bibliotēkas publicēšanu"
@@ -1081,50 +1082,50 @@ msgstr "Atcelt bibliotēkas publicēšanu"
msgid "dashboard.update-settings"
msgstr "Atjaunināt iestatījumus"
-#: src/app/main/ui/dashboard/sidebar.cljs:856
+#: src/app/main/ui/dashboard/sidebar.cljs:976
msgid "dashboard.upgrade-plan.no-limits"
msgstr "Nav ierobežojumu radošumam"
-#: src/app/main/ui/dashboard/sidebar.cljs:854
+#: src/app/main/ui/dashboard/sidebar.cljs:974
msgid "dashboard.upgrade-plan.penpot-free"
msgstr "Bezmaksas Penpot"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "Ir aktīvs"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "Kad tiks aktivizēts āķis, notikuma detaļas tiks piegādātās"
-#: src/app/main/ui/dashboard/team.cljs:982
+#: src/app/main/ui/dashboard/team.cljs:1160
msgid "dashboard.webhooks.cant-edit"
msgstr "Var izdzēst vai mainīt tikai paša izveidotās tīmekļa aizķeres."
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "Satura tips"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "Izveidot tīmekļa aizķeri"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "Tīmekļa aizķere ir veiksmīgi izveidota."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"Tīmekļa aizķeres ir vienkāršs veids, kā ļaut citām tīmekļa vietnēm un "
"lietotnēm saņemt paziņojumus, kad Penpot notiek noteikti notikumi. Mēs "
"nosūtīsim POST pieprasījumu katram norādītajam URL."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "Jānospiež poga \"Pievienot tīmekļa aizķeri\", lai pievienotu kādu."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "Līdz šim nav izveidota neviena tīmekļa aizķere."
@@ -1144,7 +1145,7 @@ msgstr "E-pasta adrese"
msgid "dashboard.your-name"
msgstr "Vārds"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Mans Penpot"
@@ -1160,15 +1161,15 @@ msgstr "Uzmanību"
msgid "ds.component-subtitle"
msgstr "Atjaunināmās sastāvdaļas:"
-#: src/app/main/ui/workspace/plugins.cljs:338, src/app/main/ui/workspace/plugins.cljs:392
+#: src/app/main/ui/workspace/plugins.cljs:339, src/app/main/ui/workspace/plugins.cljs:393
msgid "ds.confirm-allow"
msgstr "Ļaut"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Atcelt"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Labi"
@@ -1176,17 +1177,37 @@ msgstr "Labi"
msgid "ds.confirm-title"
msgstr "Vai esat pārliecināti?"
+#: src/app/main/ui/ds/controls/numeric_input.cljs:98
+msgid "ds.inputs.numeric-input.no-applicable-tokens"
+msgstr "Aktīvajās kopās vai izskatos nav pielietojamu tekstvienību."
+
+#: src/app/main/ui/ds/controls/numeric_input.cljs:99
+msgid "ds.inputs.numeric-input.no-matches"
+msgstr "Netika atrasts nekas atbilstošs."
+
+#: src/app/main/ui/ds/controls/numeric_input.cljs:641, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:138
+msgid "ds.inputs.numeric-input.open-token-list-dropdown"
+msgstr "Atvērt tekstvienību sarakstu"
+
+#: src/app/main/ui/ds/controls/utilities/token_field.cljs:85, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:133
+msgid "ds.inputs.token-field.detach-token"
+msgstr "Atdalīt tekstvienību"
+
+#: src/app/main/ui/ds/controls/utilities/token_field.cljs:40, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:96, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:103
+msgid "ds.inputs.token-field.no-active-token-option"
+msgstr "Šī tekstvienība nav nevienā aktīvajā kopā vai tai ir nederīga vērtība."
+
#: src/app/main/data/auth.cljs:314
msgid "errors.auth-provider-not-allowed"
-msgstr "Autentifikācijas nodrošinātājs nav atļauts šim profilam"
+msgstr "Autentificēšanās nodrošinātājs nav atļauts šim profilam"
#: src/app/main/ui/auth/login.cljs:78
msgid "errors.auth-provider-not-configured"
-msgstr "Autentifikācijas nodrošinātājs nav konfigurēts."
+msgstr "Autentificēšanāš nodrošinātājs nav konfigurēts."
#: src/app/main/errors.cljs:112
msgid "errors.auth.unable-to-login"
-msgstr "Šķiet, ka neesi autentificēts vai ir beidzies sesijas derīgums."
+msgstr "Šķiet, ka neesi autentificējies vai ir beidzies sesijas derīgums."
#: src/app/main/data/fonts.cljs:192, src/app/main/ui/dashboard/fonts.cljs:120
msgid "errors.bad-font"
@@ -1230,7 +1251,7 @@ msgstr "Lai arī Penpot vairs neatbalsta šo līdzekļu veidu, Tu vari"
msgid "errors.deprecated.contact.text"
msgstr "sazināties ar mums,"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:266
+#: src/app/main/data/workspace/tokens/library_edit.cljs:274
msgid "errors.drop-token-set-parent-to-child"
msgstr "Nevar nomest vecāka kopu paša bērna ceļā."
@@ -1254,11 +1275,11 @@ msgstr "E-pasta adrese neatbilst uzaicinājumā esošajai."
msgid "errors.email-domain-not-allowed"
msgstr "Domēns nav atļauts"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "E-pastam “%s” ir daudz pastāvīgu atlēcienu atskaišu."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "E-pasta adrese “%s” ir atzīmēta surogātpasts vai pastāvīgi saņem atlēcienu."
@@ -1272,11 +1293,6 @@ msgstr ""
msgid "errors.feature-not-supported"
msgstr "Līdzeklis '%s' netiek atbalstīts."
-#: src/app/main/ui/auth/register.cljs, src/app/main/ui/dashboard/team_form.cljs, src/app/main/ui/onboarding/team_choice.cljs, src/app/main/ui/setti ngs/access_tokens.cljs, src/app/main/ui/settings/feedback.cljs, src/app/main/ui/settings/profile.cljs, src/app/main/ui/workspace/sidebar/assets.cljs
-#, unused
-msgid "errors.field-max-length"
-msgstr "Jāsatur ne vairāk par vienu rakstzīmi."
-
#, unused
msgid "errors.field-min-length"
msgstr "Jāsatur vismaz vienu rakstzīmi."
@@ -1297,7 +1313,7 @@ msgstr ""
"kuru tiek mēģināts atvērt. Jāpiemēro '%s' migrācijas, pirms datne var tikt "
"atvērta."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Noticis kaut kas nelāgs."
@@ -1347,11 +1363,11 @@ msgstr "Iespējams, ka šis uzaicinājums ir atcelts vai ir beidzies tā derīgu
msgid "errors.ldap-disabled"
msgstr "LDAP autentifikācija ir atspējota."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "Ir sasniegts '%s' ierobežojums. Jāsazinās ar atbalstu."
-#: src/app/main/ui/dashboard/team.cljs:185, src/app/main/ui/onboarding/team_choice.cljs:101
+#: src/app/main/ui/dashboard/team.cljs:187, src/app/main/ui/dashboard/team.cljs:849, src/app/main/ui/onboarding/team_choice.cljs:101
msgid "errors.maximum-invitations-by-request-reached"
msgstr ""
"Sasniegts lielākais pieļaujamais e-pasta adrešu skaits (%s), ko var "
@@ -1369,7 +1385,7 @@ msgstr "Šķiet, ka attēla saturs neatbilst datnes paplašinājumam."
msgid "errors.media-type-not-allowed"
msgstr "Šķiet, ka šis nav derīgs attēls."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"Uzaicinātajam profilam ir apklusināta e-pasta saņemšana (ziņojumi par "
@@ -1405,7 +1421,7 @@ msgstr "Starpliktuvē ir nederīgi dati"
msgid "errors.profile-blocked"
msgstr "Profils ir bloķēts"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr ""
"Profila epasta saņemšana ir apklusināta (ziņojumi par surogātpastu vai "
@@ -1423,21 +1439,21 @@ msgstr "SVG ir nederīgs vai bojāts"
msgid "errors.team-feature-mismatch"
msgstr "Noteikta nesaderīga iespēja '%s'"
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr ""
"Komandā ir nepietiekams dalībnieku skaits, lai to pamestu. Iespējams, ka to "
"ir vēlams izdzēst."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "Dalībnieks, kuru mēģināt piešķirt, nepastāv."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr "Īpašnieks nevar pamest komandu, ir jāpiešķir īpašnieka loma citam."
-#: src/app/main/data/workspace/tokens/library_edit.cljs:153, src/app/main/data/workspace/tokens/library_edit.cljs:183
+#: src/app/main/data/workspace/tokens/library_edit.cljs:150, src/app/main/data/workspace/tokens/library_edit.cljs:180
msgid "errors.token-set-already-exists"
msgstr "Jau pastāv kopa ar tādu pašu nosaukumu"
@@ -1446,11 +1462,11 @@ msgstr "Jau pastāv kopa ar tādu pašu nosaukumu"
msgid "errors.token-set-doesnt-exists"
msgstr "Nevar pavairot nezināmu kopu"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:265
+#: src/app/main/data/workspace/tokens/library_edit.cljs:273
msgid "errors.token-set-exists-on-drop"
msgstr "Nevar pabeigt nomešanu, ceļā jau pastāv kopa ar tādu pašu nosaukumu."
-#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:99
+#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:95
msgid "errors.token-theme-already-exists"
msgstr "Pastāv izskata iespēja ar tādu pašu nosaukumu"
@@ -1478,31 +1494,31 @@ msgstr "Šī versija ir aizslēgta, un citi to nevar izdzēst"
msgid "errors.version-not-supported"
msgstr "Datnei ir nesaderīgs versijas numurs"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "Savienojuma kļūda, URL nav sasniedzams"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "URL neiztur pārbaudi."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "Pēdējā piegāde nebija veiksmīga."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "Kļūda SSL pārbaudē."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "Noilgums"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "Pārbaudes laikā atgadījās neparedzēta kļūda"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "Neparedzēts statuss %s"
@@ -1567,7 +1583,7 @@ msgstr "Radās kļūda"
msgid "inspect.attributes.blur"
msgstr "Aizmiglošana"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Vērtība"
@@ -1575,15 +1591,15 @@ msgstr "Vērtība"
msgid "inspect.attributes.color"
msgstr "Krāsa"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1591,7 +1607,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Aizpildījums"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Lejupielādēt avota attēlu"
@@ -1685,35 +1701,37 @@ msgstr "Nepārtrauktā"
msgid "inspect.attributes.stroke.width"
msgstr "Platums"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Burtu stils un veids"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Fontu saime"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Fonta izmērs"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Fonta stils"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "Fonta Treknums"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Burtu atstarpes"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Līnijas augstums"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Teksta noformējums"
@@ -1721,35 +1739,36 @@ msgstr "Teksta noformējums"
msgid "inspect.attributes.typography.text-decoration.line-through"
msgstr "Pārsvītrojums"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Nav"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Pasvītrojums"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Teksta transformācija"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "Virsraksta stils"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "Mazie burti"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Nav"
-#: src/app/main/ui/inspect/attributes/text.cljs:159
+#: src/app/main/ui/inspect/attributes/text.cljs:152
msgid "inspect.attributes.typography.text-transform.unset"
msgstr "Atiestatīt"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "Lielie burti"
@@ -1761,17 +1780,17 @@ msgstr "Varianta īpašības"
msgid "inspect.attributes.variants"
msgstr "Paveida īpašības"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr ""
"Ja ir vēlme uzzināt vairāk par dizaina apskati, jāapmeklē Penpot palīdzības "
"centrs"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "Vairāk informācijas par apskatīšanu"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr "Jāatlasa apveids, plātne vai kopa, lai apskatītu to īpašības un kodu"
@@ -1835,15 +1854,23 @@ msgstr "SVG"
msgid "inspect.tabs.code.selected.text"
msgstr "Teksts"
+#: src/app/main/ui/inspect/right_sidebar.cljs:109
+msgid "inspect.tabs.computed"
+msgstr "Aprēķinātās"
+
#: src/app/main/ui/inspect/right_sidebar.cljs:114
msgid "inspect.tabs.info"
msgstr "Infomācija"
-#: src/app/main/ui/dashboard/comments.cljs:95
+#: src/app/main/ui/inspect/right_sidebar.cljs:165
+msgid "inspect.tabs.switcher.label"
+msgstr "Informācija par slāni"
+
+#: src/app/main/ui/dashboard/comments.cljs:96
msgid "label.mark-all-as-read"
msgstr "Atzīmēt visu kā izlasītu"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Saīsnes"
@@ -1855,11 +1882,11 @@ msgstr "Pieņemt"
msgid "labels.access-tokens"
msgstr "Piekļuves pilnvaras"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "Aktīvs"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.add"
msgstr "Pievienot"
@@ -1867,11 +1894,11 @@ msgstr "Pievienot"
msgid "labels.add-custom-font"
msgstr "Pievienot pielāgotu fontu"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.adding"
msgstr "Pievieno..."
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Pārvaldnieks"
@@ -1879,7 +1906,7 @@ msgstr "Pārvaldnieks"
msgid "labels.adobe-xd"
msgstr "Adobe XD"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Visi"
@@ -1902,7 +1929,7 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "Nepareiza vārteja"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Atcelt"
@@ -1910,11 +1937,11 @@ msgstr "Atcelt"
msgid "labels.canva"
msgstr "Canva"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Aizvērt"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:186
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:181
msgid "labels.collapse"
msgstr "Sakļaut"
@@ -1926,11 +1953,11 @@ msgstr "Piebilde"
msgid "labels.comment.mark-as-solved"
msgstr "Atzīmēt kā atrisinātu"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Komentāri"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Kopiena"
@@ -1938,7 +1965,7 @@ msgstr "Kopiena"
msgid "labels.confirm-password"
msgstr "Apstiprināt paroli"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Turpināt"
@@ -1954,11 +1981,11 @@ msgstr "Varat turpināt ar Penpot kontu"
msgid "labels.copy"
msgstr "Ievietot starpliktuvē"
-#: src/app/main/ui/inspect/attributes/common.cljs:118
+#: src/app/main/ui/inspect/attributes/common.cljs:99
msgid "labels.copy-color"
msgstr "Ievietot krāsu starpliktuvē"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "Kopēt saiti"
@@ -1966,7 +1993,7 @@ msgstr "Kopēt saiti"
msgid "labels.copyright"
msgstr "Kaleidos @2024"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Izveidot"
@@ -1986,7 +2013,7 @@ msgstr "Pielāgotie fonti"
msgid "labels.dashboard"
msgstr "Pārskata panelis"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Dzēst"
@@ -1998,7 +2025,7 @@ msgstr "Dzēst komentāru"
msgid "labels.delete-comment-thread"
msgstr "Dzēst pavedienu"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Dzēst uzaicinājumu"
@@ -2015,19 +2042,19 @@ msgstr "Izstrādātājs"
msgid "labels.director"
msgstr "Direktors"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "Atmest"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Melnraksti"
-#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:65
msgid "labels.duplicate"
msgstr "Pavairot"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Labot"
@@ -2035,11 +2062,11 @@ msgstr "Labot"
msgid "labels.edit-file"
msgstr "Labot datni"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Redaktors"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:302
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:301
msgid "labels.empty"
msgstr "Tukšs"
@@ -2052,11 +2079,11 @@ msgstr "Kļūda"
msgid "labels.event"
msgstr "Notikums"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Beidzies derīgums"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Izgūt"
@@ -2084,7 +2111,7 @@ msgstr "Fontu nodrošinātāji"
msgid "labels.font-variants"
msgstr "Stili"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Fonti"
@@ -2098,11 +2125,11 @@ msgstr "Dibinātājs/viceprezidents"
msgid "labels.freelancer"
msgstr "Esmu ārštātnieks(-ce)/Pašnodarbināts(-ā)"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "GitHub repozitorijs"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Sniegt atsauksmi"
@@ -2114,7 +2141,7 @@ msgstr "Atpakaļ"
msgid "labels.graphic-design"
msgstr "Grafiskais dizains"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Palīdzības centrs"
@@ -2122,15 +2149,15 @@ msgstr "Palīdzības centrs"
msgid "labels.hide"
msgstr "Paslēpt"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Paslēpt atrisinātos komentārus"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:134
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:130
msgid "labels.import"
msgstr "Ievietot"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "Neaktīvs"
@@ -2152,7 +2179,7 @@ msgstr "Iekšēja kļūda"
msgid "labels.invision"
msgstr "InVision"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Uzaicinājumi"
@@ -2160,7 +2187,7 @@ msgstr "Uzaicinājumi"
msgid "labels.language"
msgstr "Valoda"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Bibliotēkas un veidnes"
@@ -2180,7 +2207,7 @@ msgstr "Pieteikties vai reģistrēties"
msgid "labels.login"
msgstr "Pieteikties"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Atteikties"
@@ -2188,11 +2215,11 @@ msgstr "Atteikties"
msgid "labels.marketing"
msgstr "Tirgvedība"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Dalībnieks"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Dalībnieki"
@@ -2200,23 +2227,27 @@ msgstr "Dalībnieki"
msgid "labels.mention"
msgstr "Pieminēt"
+#: src/app/main/ui/ds/controls/numeric_input.cljs:619
+msgid "labels.mixed-values"
+msgstr "Jauktās"
+
#: src/app/main/ui/settings/password.cljs:84
msgid "labels.new-password"
msgstr "Jaunā parole"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "Nākamais"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "Jūs esat pieķerti! Šeit tiks parādīti jaunu komentāru paziņojumi."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "Nav gaidošu uzaicinājumu."
-#: src/app/main/ui/dashboard/team.cljs:761
+#: src/app/main/ui/dashboard/team.cljs:739
msgid "labels.no-invitations-gather-people"
msgstr "Sapulcē savus cilvēkus, un kopā radiet lieliskas lietas!"
@@ -2233,7 +2264,7 @@ msgstr "Ups!"
msgid "labels.notifications"
msgstr "Paziņojumi"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "0 datņu"
@@ -2247,7 +2278,7 @@ msgstr[0] "%s plātņu"
msgstr[1] "%s plātne"
msgstr[2] "%s plātnes"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "0 projektu"
@@ -2267,7 +2298,7 @@ msgstr "Vecā parole"
msgid "labels.only-yours"
msgstr "Tikai mans"
-#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:309, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:338
+#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:310, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:339
msgid "labels.options"
msgstr "Iespējas"
@@ -2283,7 +2314,7 @@ msgstr "Cits (jānorāda)"
msgid "labels.other-short"
msgstr "Cits"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Īpašnieks"
@@ -2291,10 +2322,14 @@ msgstr "Īpašnieks"
msgid "labels.password"
msgstr "Parole"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "Gaidīšana"
+#: src/app/main/ui/dashboard/sidebar.cljs:751
+msgid "labels.pinned-projects"
+msgstr "Piepsraustie projekti"
+
#: src/app/main/ui/comments.cljs:679
msgid "labels.post"
msgstr "Ieraksts"
@@ -2309,13 +2344,13 @@ msgstr "Produktu vai lietotāju pieredzes dizains"
#: src/app/main/ui/onboarding/questions.cljs:90
msgid "labels.product-management"
-msgstr "Produktu vai projektu vadītājs"
+msgstr "Produktu vadība"
#: src/app/main/ui/settings/profile.cljs:128, src/app/main/ui/settings/sidebar.cljs:93
msgid "labels.profile"
msgstr "Profils"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Projekti"
@@ -2323,7 +2358,7 @@ msgstr "Projekti"
msgid "labels.refresh"
msgstr "Atsvaidzināt"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Laidiena apraksts"
@@ -2337,11 +2372,11 @@ msgstr "Pārlādēt datni"
msgid "labels.remove"
msgstr "Noņemt"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Noņemt dalībnieku"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Pārdēvēt"
@@ -2369,7 +2404,7 @@ msgstr "jauna atbilde"
msgid "labels.reply.thread"
msgstr "Atbildēt"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "Nosūtīt uzaicinājumu vēlreiz"
@@ -2381,15 +2416,15 @@ msgstr "Atjaunot"
msgid "labels.retry"
msgstr "Pamēģināt vēlreiz"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Loma"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Saglabāt"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:715
+#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:730
msgid "labels.search"
msgstr "Meklēt"
@@ -2417,11 +2452,11 @@ msgstr "Mēs esam ieplānotos sistēmu uzturēšanas darbos."
msgid "labels.service-unavailable.main-message"
msgstr "Pakalpojums nav pieejams"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:79
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:75
msgid "labels.sets"
msgstr "Kopas"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Iestatījumi"
@@ -2433,7 +2468,7 @@ msgstr "Kopīgot"
msgid "labels.share-prototype"
msgstr "Kopīgot prototipu"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Bibliotēkas"
@@ -2441,7 +2476,7 @@ msgstr "Bibliotēkas"
msgid "labels.show"
msgstr "Parādīt"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Rādīt visus komentārus"
@@ -2449,11 +2484,11 @@ msgstr "Rādīt visus komentārus"
msgid "labels.show-comments-list"
msgstr "Rādīt komentāru sarakstu"
-#: src/app/main/ui/workspace/comments.cljs:67, src/app/main/ui/workspace/comments.cljs:139
+#: src/app/main/ui/workspace/comments.cljs:68, src/app/main/ui/workspace/comments.cljs:140
msgid "labels.show-mentions"
msgstr "Rādīt tikai manas pieminēšanas"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Rādīt tikai manas piebildes"
@@ -2461,11 +2496,15 @@ msgstr "Rādīt tikai manas piebildes"
msgid "labels.sketch"
msgstr "Sketch"
+#: src/app/main/ui/dashboard/sidebar.cljs:730
+msgid "labels.sources"
+msgstr "Avoti"
+
#: src/app/main/ui/onboarding/questions.cljs:55
msgid "labels.start"
msgstr "Sākt"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Statuss"
@@ -2487,11 +2526,11 @@ msgstr "Komandas dalībnieks"
msgid "labels.themes"
msgstr "Izskati"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Pamācības"
-#: src/app/main/data/workspace/tokens/errors.cljs:93
+#: src/app/main/data/workspace/tokens/errors.cljs:101
msgid "labels.unknown-error"
msgstr "Nezināma kļūda"
@@ -2523,15 +2562,15 @@ msgstr "Augšupielādēt pielāgotos fontus"
msgid "labels.uploading"
msgstr "Augšupielādē…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "TIKAI SKATĪT"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Pārlūks"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Tīmekļa aizķeres"
@@ -2539,11 +2578,11 @@ msgstr "Tīmekļa aizķeres"
msgid "labels.write-new-comment"
msgstr "Rakstīt jaunu komentāru"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(Jūs)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "Mans konts"
@@ -2574,7 +2613,7 @@ msgstr "Dizaina pielāgojamība ar pazīstamām CSS līdzīgām izkārtojuma vad
#: src/app/main/ui/ds/product/loader.cljs:24
msgid "loader.tips.03.title"
-msgstr "Automātisks izkārtojums kā CSS"
+msgstr "Izkārtojums kā CSS"
#: src/app/main/ui/ds/product/loader.cljs:27
msgid "loader.tips.04.message"
@@ -2636,23 +2675,23 @@ msgstr ""
msgid "loader.tips.10.title"
msgstr "Spraudņu atbalsts"
-#: src/app/main/ui/workspace/colorpicker.cljs:449, src/app/main/ui/workspace/colorpicker.cljs:450, src/app/main/ui/workspace/colorpicker.cljs:452
+#: src/app/main/ui/workspace/colorpicker.cljs:486, src/app/main/ui/workspace/colorpicker.cljs:487, src/app/main/ui/workspace/colorpicker.cljs:489
msgid "media.choose-image"
msgstr "Izvēlēties attēlu"
-#: src/app/main/ui/workspace/colorpicker.cljs:244
+#: src/app/main/ui/workspace/colorpicker.cljs:256
msgid "media.gradient"
msgstr "Pāreja"
-#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:44, src/app/main/ui/ds/utilities/swatch.cljs:57, src/app/main/ui/inspect/attributes/common.cljs:63, src/app/main/ui/workspace/colorpicker.cljs:246, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:251
+#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:45, src/app/main/ui/ds/utilities/swatch.cljs:58, src/app/main/ui/inspect/attributes/common.cljs:44, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:65, src/app/main/ui/workspace/colorpicker.cljs:258, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:395
msgid "media.image"
msgstr "Attēls"
-#: src/app/main/ui/inspect/attributes/common.cljs:74
+#: src/app/main/ui/inspect/attributes/common.cljs:55
msgid "media.image.short"
msgstr "att."
-#: src/app/main/ui/workspace/colorpicker.cljs:442
+#: src/app/main/ui/workspace/colorpicker.cljs:479
msgid "media.keep-aspect-ratio"
msgstr "Paturēt samēru"
@@ -2670,7 +2709,7 @@ msgstr "Ielādē attēlu…"
msgid "media.radial"
msgstr "Radiāls"
-#: src/app/main/ui/workspace/colorpicker.cljs:242
+#: src/app/main/ui/workspace/colorpicker.cljs:254
msgid "media.solid"
msgstr "Viengabalains"
@@ -2745,19 +2784,19 @@ msgstr "Izveidot pilnvaru"
msgid "modals.create-access-token.title"
msgstr "Izveidot jaunu piekļuves pilnvaru"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "Izveidot tīmekļa aizķeri"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "Izveidot tīmekļa aizķeri"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "Vērtuma URL"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://example.com/postreceive"
@@ -2801,11 +2840,11 @@ msgstr "Vai tiešām izdzēst šo sarunu? Visas šī pavediena piebildes tiks iz
msgid "modals.delete-comment-thread.title"
msgstr "Dzēst sarunu"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "Vai tiešām izdzēst šo piezīmi?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "Izdzēst piezīmi"
@@ -2851,11 +2890,11 @@ msgstr "Vai tiešām izdzēst šo fontu? Tas netiks ielādēts, ja tiek izmantot
msgid "modals.delete-font.title"
msgstr "Fonta dzēšana"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Vai tiešām izdzēst šo lapu?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Dzēst lapu"
@@ -2906,29 +2945,29 @@ msgstr[0] "Nav izdzēšamu datņu"
msgstr[1] "Izdzēš datni"
msgstr[2] "Izdzēš datnes"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Dzēst komandu"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Vai tiešām izdzēst šo komandu? Visi ar komandu saistītie projekti un datnes "
"tiks neatgriezeniski izdzēstas."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Notiek komandas dzēšana"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Dzēst dalībnieku"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Vai tiešām izdzēst šo dalībnieku no komandas?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Dzēst komandas dalībnieku"
@@ -2945,55 +2984,55 @@ msgstr[2] ""
"Līdzekļi, kas jau tiek izmantoti šajā datnē, paliks tajā (dizains netiks "
"salauzts)."
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "Izdzēst tīmekļa aizķeri"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "Vai tiešām izdzēst šo tīmekļa aizķeri?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "Notiek tīmekļa aizķeres izdzēšana"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "Labot tīmekļa aizķeri"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "Labot tīmekļa aizķeri"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Nosūtīt uzaicinājumu"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "E-pasta ziņojumi, atdalīti ar komatiem"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr "Daži dalībnieki jau ir komandā. Mēs uzaicināsim pārējos."
-#: src/app/main/ui/dashboard/team.cljs:220
+#: src/app/main/ui/dashboard/team.cljs:222
msgid "modals.invite-team-member.text"
msgstr ""
"Komandā var uzaicināt dalībniekus, lai viņi varētu piekļūt šai un citām "
"komandas datnēm."
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "Uzaicināt dalībniekus uz komandu"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"Tā kā esi šīs komandas vienīgais dalībnieks, tā tiks izdzēsta līdz ar tās "
"projektiem un datnēm."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "Vai tiešām pamest komandu %s?"
@@ -3021,15 +3060,15 @@ msgstr "Atlasīt dalībnieku, ko nozīmēt"
msgid "modals.leave-and-reassign.title"
msgstr "Pirms pamešanas"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Pamest komandu"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Vai tiešām pamest šo komandu?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Komandas pamešana"
@@ -3054,39 +3093,39 @@ msgstr[0] "Pārvietot bibliotēkas"
msgstr[1] "Pārvietot bibliotēkas"
msgstr[2] "Pārvietot bibliotēkas"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "Nobīdes apjoms"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Nodot īpašumtiesības"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"Ja tiks nodotas īpašumtiesības, ieņemamā loma tiks nomainīta uz "
"\"Pārvaldnieks\", zaudējot dažas atļaujas šajā komandā. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr ""
"Tu esi šīs komandas pašreizējais īpašnieks. Vai tiešām iecelt %s par jauno "
"komandas īpašnieku?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Jauns komandas īpašnieks"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "Publicēt"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "Bibliotēka ir tukša. Vai tiešām publicēt to?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "Publicēt tukšu bibliotēku"
@@ -3144,21 +3183,21 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Atjaunināt sastāvdaļas koplietojamā bibliotēkā"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Atjaunināt"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Atcelt"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"Tiks atjaunināta koplietojamas bibliotēkas sastāvdaļa. Tas var ietekmēt "
"citas datnes, kurās tā ir izmantota."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Atjaunināt sastāvdaļu koplietojamā bibliotēkā"
@@ -3272,11 +3311,11 @@ msgstr ""
msgid "notifications.by-code.upgrade-version"
msgstr "Ir pieejama jauna versija, lūgums atsvaidzināt lapu"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "Uzaicinājums veiksmīgi nosūtīts"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "Uzaicinājuma saite nokopēta"
@@ -3429,7 +3468,7 @@ msgstr ""
"Jāatceras iekļaut visi. Izstrādātāji, dizaineri, vadītāji... Viedokļu "
"dažādībā ir spēks :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "Uzaicināt ar lomu:"
@@ -3649,193 +3688,193 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "Doties uz pieteikšanos"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "Atdalīt"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "Jaukts"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:283
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:423
msgid "settings.remove-color"
msgstr "Noņemt krāsu"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:288
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:428
msgid "settings.select-this-color"
msgstr "Atlasīt vienumus, kas izmanto šo stilu"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Pamati"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "Pārskata panelis"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Pārlūks"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Darbvieta"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Līdzināšana"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Labot"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "Vispārējs"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "Vispārējs"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Galvenā izvēlne"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "Mainīt slāņus"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Navigācija"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Navigācija"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Navigācija"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Paneļi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Ceļi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Formas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "Teksti"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Rīki"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Tālummaiņa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Tālummaiņa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Komentāri"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "Pievienot mezglu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "Līdzināt pie apakšas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "Līdzināt vidū"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "Līdzināt vidū līmeniski"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "Līdzināt pie abām malām"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "Līdzināt pie kreisās malas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "Līdzināt pa labi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "Līdzināt pie augšas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "Līdzināt vidū stateniski"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "Izveidot plātni no atlases"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "Pārslēgt treknrakstu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "Būla starpība"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "Būla izslēgšana"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "Būla krustošanās"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "Būla apvienošana"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "Sūtīt uz aizmuguri"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Sūtīt atpakaļ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "Virzīt uz priekšu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "Izvirzīt priekšā"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "Iztīrīt atsaukšanu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Kopēt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
msgid "shortcuts.copy-link"
msgstr "Ievietot saiti starpliktuvē"
@@ -3844,287 +3883,271 @@ msgstr "Ievietot saiti starpliktuvē"
msgid "shortcuts.copy-props"
msgstr "Ievietot īpašības starpliktuvē"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "Izveidot jaunu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Izgriezt"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "Tālināt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Dzēst"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "Dzēst mezglu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "Atdalīt sastāvdaļu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Līkne"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "Elipse"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Plātne"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "Zīmēt ceļu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Ceļš"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Taisnstūris"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Teksts"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Divkāršot"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "Atcelt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "Izgūt apveidus"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "Tālummainīt, lai ietilpinātu visu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "Apvērst līmeniski"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "Apvērst stateniski"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "Samazināt fonta izmēru"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "Palielināt fonta izmēru"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "Doties uz melnrakstiem"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "Doties uz koplietojamām bibliotēkām"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Meklēt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Apkopot"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "Izkliedēt līmeniski"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "Rādīt / paslēpt lietotāja saskarni"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "Tuvināt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "Ievietot attēlu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "Pārslēgt slīprakstu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "Savienot mezglus"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
-msgid "shortcuts.letter-spacing-dec"
-msgstr "Samazināt burtstarpu"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "Palielināt burtstarpu"
-
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
-msgid "shortcuts.line-height-dec"
-msgstr "Samazināt līnijas augstumu"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
-msgid "shortcuts.line-height-inc"
-msgstr "Palielināt līnijas augstumu"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.line-through"
msgstr "Pārslēgt svītrojumu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "Izveidot stūri"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "Izveidot līkni"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "Maska"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "Sapludināt mezglus"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "Pārvietot"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "Strauji pārvietot uz leju"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "Strauji pārvietot pa kreisi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "Strauji pārvietot pa labi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "Strauji pārvietot uz augšu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "Pārvietot mezglu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "Pārvietot uz leju"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "Pārvietot pa kreisi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "Pārvietot pa labi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "Pārvietot uz augšu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "Nākamā plātne"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "Saīsnes nav atrastas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "Iestatīt necaurspīdīgumu uz 100%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "Iestatīt necaurspīdīgumu uz 10%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "Iestatīt necaurspīdīgumu uz 20%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "Iestatīt necaurspīdīgumu uz 30%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "Iestatīt necaurspīdīgumu uz 40%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "Iestatīt necaurspīdīgumu uz 50%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "Iestatīt necaurspīdīgumu uz 60%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "Iestatīt necaurspīdīgumu uz 70%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "Iestatīt necaurspīdīgumu uz 80%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "Iestatīt necaurspīdīgumu uz 90%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "Krāsu atlasītājs"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "Atvērt pārlūka komentāru sadaļu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "Doties uz pārskata paneli"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "Doties uz skatītāja apskatīšanas sadaļu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "Doties uz skatītāja mijiedarbības sadaļu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "Doties uz skatītāja mijiedarbības sadaļu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "Doties uz darbvietu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " vai "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Ielīmēt"
@@ -4138,191 +4161,191 @@ msgstr "Ielīmēt īpašības"
msgid "shortcuts.plugins"
msgstr "Spraudņu pārvaldnieks"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "Iepriekšējā plātne"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "Atatsaukt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
msgid "shortcuts.rename"
msgstr "Pārdēvēt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "Atiestatīt tālummaiņu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
msgid "shortcuts.scale"
msgstr "Mērogot"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "Meklēt saīsnes"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "Atlasīt visu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
msgid "shortcuts.select-next"
msgstr "Atlasīt nākamo slāni"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
msgid "shortcuts.select-parent-layer"
msgstr "Atlasīt vecākslāni"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
msgid "shortcuts.select-prev"
msgstr "Atlasīt iepriekšējo slāni"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "Atdalīt mezglus"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "Rādīt/paslēpt pikseļu režģi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "Rādīt/paslēpt saīsnes"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "Pieķerties mezgliem"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "Pieķerties pikseļu režģim"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "Sākt labošanu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "Sākt mērīšanu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "Beigt mērīšanu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "Iestatīt sīktēlus"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "Īsinājumtaustiņi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "Pārslēgt dinamisko līdzināšanu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "Pārslēgt līdzekļus"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "Pārslēgt krāsu paleti"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "Pārslēgt fokusa režīmu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "Pārslēgt pilnekrāna režīmu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
msgid "shortcuts.toggle-guides"
msgstr "Rādīt/paslēpt vadlīnijas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "Pārslēgt vēsturi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "Pārslēgt slāņus"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "Pievienot / Noņemt elastīgo izkārtojumu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
msgid "shortcuts.toggle-layout-grid"
msgstr "Pievienot/noņemt režģa izkārtojumu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "Slēgt / Atslēgt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "Slēgt proporcijas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
msgid "shortcuts.toggle-rulers"
msgstr "Rādīt/paslēpt mērjoslas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
msgid "shortcuts.toggle-snap-guides"
msgstr "Pievilkt pie vadlīnijām"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
msgid "shortcuts.toggle-snap-ruler-guide"
msgstr "Pievilkt pie mērjoslu vadlīnijām"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "Pārslēgt teksta paleti"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
msgid "shortcuts.toggle-theme"
msgstr "Mainīt izskatu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "Pārslēgt redzamību"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "Pārslēgt tālummaiņas stilu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "Pārslēgt pasvītrojumu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Atsaukt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Atapkopot"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Noņemt masku"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "Izkliedēt stateniski"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "Tālummaiņas samazinājums"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "Tālummaiņas palielinājums"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "Tālummainīt uz atlasi"
@@ -4334,6 +4357,13 @@ msgstr "Plāns uzņēmējdarbībai"
msgid "subscription.dashboard.power-up.enterprise-trial.top-title"
msgstr "Uzņēmējdarbības plāns (izmēģinājuma)"
+#: src/app/main/ui/dashboard/subscription.cljs:64
+#, markdown
+msgid "subscription.dashboard.power-up.professional.bottom-text"
+msgstr ""
+"Iegūsti savām komandām papildu krātuvi, datņu atkopi un vēl ar neierobežoto "
+"plānu. [Iegūsti vairāk!|target:self](%s)"
+
#: src/app/main/ui/dashboard/subscription.cljs:63
msgid "subscription.dashboard.power-up.professional.top-title"
msgstr "Profesionālais plāns"
@@ -4362,8 +4392,9 @@ msgstr "Neierobežots plāns"
#, markdown
msgid "subscription.dashboard.power-up.unlimited.bottom-text"
msgstr ""
-"Iegūsti papildu redaktorus, vairāk rezerves kopēšanas, neierobežotu krātuvi "
-"un vēl. [Ieskaties uzņēmējdarbības plānā!|target:self](%s)"
+"Iegūsti papildu krātuvi, paplašinātu datņu atkopi un neierobežotu redaktoru "
+"skaitu visām savām komandām par noteiktu cenu! [Ieskaties uzņēmējdarbības "
+"plānā!|target:self](%s)"
#: src/app/main/ui/dashboard/subscription.cljs:70
#, unused
@@ -4381,11 +4412,17 @@ msgstr ""
msgid "subscription.dashboard.power-up.your-subscription"
msgstr "Tavs abonements:"
+#: src/app/main/ui/dashboard/subscription.cljs:168
+msgid "subscription.dashboard.professional-dashboard-cta-title"
+msgstr ""
+"Tev piederošajās komandās ir %s redaktoru, bet profesionālais plāns "
+"nodrošina līdz 8."
+
#: src/app/main/ui/dashboard/subscription.cljs:111
msgid "subscription.dashboard.team-plan"
msgstr "Komandas plāns"
-#: src/app/main/ui/dashboard/sidebar.cljs:858
+#: src/app/main/ui/dashboard/sidebar.cljs:978
msgid "subscription.dashboard.upgrade-plan.power-up"
msgstr "Iedarbināt"
@@ -4423,12 +4460,19 @@ msgstr "90 dienu automātiski saglabātas versijas un datņu atkope"
#: src/app/main/ui/settings/subscription.cljs:394, src/app/main/ui/settings/subscription.cljs:404, src/app/main/ui/settings/subscription.cljs:456
msgid "subscription.settings.enterprise.capped-bill"
-msgstr "Ierobežots ikmēneša rēķins"
+msgstr "Noteikts ikmēneša rēķins"
#: src/app/main/ui/dashboard/subscription.cljs:124, src/app/main/ui/settings/subscription.cljs:371, src/app/main/ui/settings/subscription.cljs:383, src/app/main/ui/settings/subscription.cljs:395, src/app/main/ui/settings/subscription.cljs:405
msgid "subscription.settings.manage-your-subscription"
msgstr "Pārvaldīt savu abonementu"
+#: src/app/main/ui/settings/subscription.cljs:131
+msgid "subscription.settings.management.dialog.currently-editors-title"
+msgid_plural "subscription.settings.management.dialog.currently-editors-title"
+msgstr[0] "Pašreiz ir %s cilvēku Tavās komandās, kuri var labot."
+msgstr[1] "Pašreiz ir %s cilvēks Tavās komandās, kas var labot."
+msgstr[2] "Pašreiz ir %s cilvēki Tavās komandās, kuri var labot."
+
#: src/app/main/ui/settings/subscription.cljs:149
msgid "subscription.settings.management.dialog.downgrade"
msgstr ""
@@ -4437,12 +4481,14 @@ msgstr ""
#: src/app/main/ui/settings/subscription.cljs:177
msgid "subscription.settings.management.dialog.payment-explanation"
-msgstr "(Tagad netiks veikts maksājums)"
+msgstr ""
+"Pēc izmēģinājuma tiks ieturēta maksa. Šobrīd nav nepieciešama maksājumu "
+"karte."
#: src/app/main/ui/settings/subscription.cljs:170, src/app/main/ui/settings/subscription.cljs:174
#, markdown
msgid "subscription.settings.management.dialog.price-month"
-msgstr "**$%s** mēnesī"
+msgstr "**$%s**/mēnesī"
#: src/app/main/ui/settings/subscription.cljs:126
msgid "subscription.settings.management.dialog.title"
@@ -4517,9 +4563,9 @@ msgstr "Neierobežots (izmēģinājuma)"
#: src/app/main/ui/settings/subscription.cljs:370, src/app/main/ui/settings/subscription.cljs:382, src/app/main/ui/settings/subscription.cljs:442
msgid "subscription.settings.unlimited.bill"
-msgstr "Ierobežots ikmēneša rēķins"
+msgstr "Ikmēneša rēķins ierobežots līdz $175"
-#: src/app/main/ui/dashboard/subscription.cljs:147, src/app/main/ui/workspace/main_menu.cljs:933
+#: src/app/main/ui/dashboard/subscription.cljs:147, src/app/main/ui/workspace/main_menu.cljs:961
msgid "subscription.workspace.header.menu.option.power-up"
msgstr "Iedarbini savu plānu"
@@ -4575,19 +4621,19 @@ msgstr "Parole - Penpot"
msgid "title.settings.profile"
msgstr "Profils - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "Uzaicinājumi - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "Dalībnieki - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Iestatījumi - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "Tīmekļa aizķeres - %s - Penpot"
@@ -4657,43 +4703,43 @@ msgstr "Rādīt mijiedarbības pēc klikšķa"
msgid "viewer.header.sitemap"
msgstr "Vietnes karte"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "Pēdējā piegāde bija veiksmīga."
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Līdzināt līmeniskajā vidū (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "Izlīdzināt līmeniskās atstarpes (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Līdzināt pa kreisi (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Līdzināt pa labi (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Līdzināt pie apakšas (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Līdzināt stateniskajā vidū (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "Izlīdzināt stateniskās atstarpes (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Līdzināt pie augšas (%s)"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:163
+#: src/app/main/ui/workspace/sidebar/assets.cljs:172
msgid "workspace.assets.add-library"
msgstr "Pievienot bibliotēku"
@@ -4702,19 +4748,19 @@ msgstr "Pievienot bibliotēku"
msgid "workspace.assets.assets"
msgstr "Līdzekļi"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "Visi līdzekļi"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Krāsas"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:493
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:497
msgid "workspace.assets.colors.add-color"
msgstr "Pievienot krāsu"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Sastāvdaļas"
@@ -4722,23 +4768,23 @@ msgstr "Sastāvdaļas"
msgid "workspace.assets.components.add-component"
msgstr "Pievienot sastāvdaļu"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:176, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:535
+#: src/app/main/ui/workspace/sidebar/assets/components.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:547
msgid "workspace.assets.components.num-variants"
msgstr "%s varianti"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "Izveidot kopu"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr "Vienumi tiks automātiski nosaukti kā “kopas nosaukums/vienuma nosaukums”"
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Dzēst"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "Divkāršot"
@@ -4746,11 +4792,11 @@ msgstr "Divkāršot"
msgid "workspace.assets.duplicate-main"
msgstr "Divkāršot galveno"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Labot"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:177
+#: src/app/main/ui/workspace/sidebar/assets.cljs:186
msgid "workspace.assets.filter"
msgstr "Atlasīt"
@@ -4759,27 +4805,27 @@ msgstr "Atlasīt"
msgid "workspace.assets.graphics"
msgstr "Attēli"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:576
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:190, src/app/main/ui/workspace/sidebar/assets/components.cljs:576
msgid "workspace.assets.grid-view"
msgstr "Režģa skats"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Kopa"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "Kopas nosaukums"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:572
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:191, src/app/main/ui/workspace/sidebar/assets/components.cljs:572
msgid "workspace.assets.list-view"
msgstr "Saraksta skats"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "vietējā bibliotēka"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:168
+#: src/app/main/ui/workspace/sidebar/assets.cljs:177
msgid "workspace.assets.manage-library"
msgstr "Pārvaldīt bibliotēku"
@@ -4791,15 +4837,15 @@ msgstr "Līdzekļi nav atrasti"
msgid "workspace.assets.open-library"
msgstr "Atvērt bibliotēkas datni"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Pārdēvēt"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "Pārdēvēt kopu"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "Meklēt līdzekļus"
@@ -4816,22 +4862,22 @@ msgstr[2] "atlasīti %s vienumi"
msgid "workspace.assets.shared-library"
msgstr "Koplietojama bibliotēka"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:237
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:235
msgid "workspace.assets.sidebar.components"
msgid_plural "workspace.assets.sidebar.components"
msgstr[0] "%s sastāvdaļu"
msgstr[1] "%s sastāvdaļa"
msgstr[2] "%s sastāvdaļas"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:193
+#: src/app/main/ui/workspace/sidebar/assets.cljs:204
msgid "workspace.assets.sort"
msgstr "Kārtot"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Burtu stili un veidi"
-#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:404
+#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:405
msgid "workspace.assets.typography.add-typography"
msgstr "Pievienot tipogrāfiju"
@@ -4856,7 +4902,7 @@ msgstr "Burtstarpa"
msgid "workspace.assets.typography.line-height"
msgstr "Rindas augstums"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -4868,59 +4914,59 @@ msgstr "Teksta stili"
msgid "workspace.assets.typography.text-transform"
msgstr "Teksta pārveide"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "Atapkopot"
-#: src/app/main/ui/workspace/context_menu.cljs:791
+#: src/app/main/ui/workspace/context_menu.cljs:794
msgid "workspace.context-menu.grid-cells.area"
msgstr "Izveidot laukumu"
-#: src/app/main/ui/workspace/context_menu.cljs:794
+#: src/app/main/ui/workspace/context_menu.cljs:797
msgid "workspace.context-menu.grid-cells.create-board"
msgstr "Izveidot plātni"
-#: src/app/main/ui/workspace/context_menu.cljs:786
+#: src/app/main/ui/workspace/context_menu.cljs:789
msgid "workspace.context-menu.grid-cells.merge"
msgstr "Apvienot šūnas"
-#: src/app/main/ui/workspace/context_menu.cljs:749
+#: src/app/main/ui/workspace/context_menu.cljs:752
msgid "workspace.context-menu.grid-track.column.add-after"
msgstr "Pievienot 1 sleju pa labi"
-#: src/app/main/ui/workspace/context_menu.cljs:748
+#: src/app/main/ui/workspace/context_menu.cljs:751
msgid "workspace.context-menu.grid-track.column.add-before"
msgstr "Pievienot 1 sleju pa kreisi"
-#: src/app/main/ui/workspace/context_menu.cljs:750
+#: src/app/main/ui/workspace/context_menu.cljs:753
msgid "workspace.context-menu.grid-track.column.delete"
msgstr "Izdzēst sleju"
-#: src/app/main/ui/workspace/context_menu.cljs:751
+#: src/app/main/ui/workspace/context_menu.cljs:754
msgid "workspace.context-menu.grid-track.column.delete-shapes"
msgstr "Izdzēst slejas un apveidus"
-#: src/app/main/ui/workspace/context_menu.cljs:747
+#: src/app/main/ui/workspace/context_menu.cljs:750
msgid "workspace.context-menu.grid-track.column.duplicate"
msgstr "Divkāršota sleja"
-#: src/app/main/ui/workspace/context_menu.cljs:756
+#: src/app/main/ui/workspace/context_menu.cljs:759
msgid "workspace.context-menu.grid-track.row.add-after"
msgstr "Pievienot 1 rindu zem"
-#: src/app/main/ui/workspace/context_menu.cljs:755
+#: src/app/main/ui/workspace/context_menu.cljs:758
msgid "workspace.context-menu.grid-track.row.add-before"
msgstr "Pievienot 1 rindu virs"
-#: src/app/main/ui/workspace/context_menu.cljs:757
+#: src/app/main/ui/workspace/context_menu.cljs:760
msgid "workspace.context-menu.grid-track.row.delete"
msgstr "Izdzēst rindu"
-#: src/app/main/ui/workspace/context_menu.cljs:758
+#: src/app/main/ui/workspace/context_menu.cljs:761
msgid "workspace.context-menu.grid-track.row.delete-shapes"
msgstr "Izdzēst rindu un apveidus"
-#: src/app/main/ui/workspace/context_menu.cljs:754
+#: src/app/main/ui/workspace/context_menu.cljs:757
msgid "workspace.context-menu.grid-track.row.duplicate"
msgstr "Divkāršot rindu"
@@ -4928,7 +4974,7 @@ msgstr "Divkāršot rindu"
msgid "workspace.focus.focus-mode"
msgstr "Fokusa režīms"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "Izslēgt fokusu"
@@ -4948,11 +4994,11 @@ msgstr "Lineārais gradients"
msgid "workspace.gradients.radial"
msgstr "Radiālais gradients"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "Atspējot dinamisko līdzināšanu"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "Atspējot proporcionālo mērogu"
@@ -4961,23 +5007,23 @@ msgstr "Atspējot proporcionālo mērogu"
msgid "workspace.header.menu.disable-scale-text"
msgstr "Deaktivizēt teksta mērogošanu"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "Atspējot pieķeršanos vadotnēm"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "Atspējot pieķeršanos pikselim"
-#: src/app/main/ui/workspace/main_menu.cljs:215
+#: src/app/main/ui/workspace/main_menu.cljs:243
msgid "workspace.header.menu.disable-snap-ruler-guides"
msgstr "Atspējot pievilkšanu mērjoslu vadlīnijām"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "Iespējot dinamisko līdzināšanu"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "Iespējot proporcionālo mērogu"
@@ -4986,51 +5032,51 @@ msgstr "Iespējot proporcionālo mērogu"
msgid "workspace.header.menu.enable-scale-text"
msgstr "Aktivizēt teksta mērogošanu"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "Pieķerties vadotnēm"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "Iespējot pieķeršanos pikselim"
-#: src/app/main/ui/workspace/main_menu.cljs:216
+#: src/app/main/ui/workspace/main_menu.cljs:244
msgid "workspace.header.menu.enable-snap-ruler-guides"
msgstr "Pievilkt pie mērjoslu vadlīnijām"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "Paslēpt plātņu nosaukumus"
-#: src/app/main/ui/workspace/main_menu.cljs:348
+#: src/app/main/ui/workspace/main_menu.cljs:376
msgid "workspace.header.menu.hide-guides"
msgstr "Paslēpt vadlīnijas"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "Paslēpt krāsu paleti"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "Paslēpt pikseļu režģi"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "Paslēpt mērjoslas"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "Paslēpt fontu paleti"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Labot"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "Datne"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "Palīdzība un informācija"
@@ -5039,63 +5085,63 @@ msgstr "Palīdzība un informācija"
msgid "workspace.header.menu.option.power-up"
msgstr "Padarīt savu plānu jaudīgāku"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "Pielāgojumi"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "Skatīt"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "Atkārtot"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "Atlasīt visu"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "Rādīt plātņu nosaukumus"
-#: src/app/main/ui/workspace/main_menu.cljs:349
+#: src/app/main/ui/workspace/main_menu.cljs:377
msgid "workspace.header.menu.show-guides"
msgstr "Parādīt vadlīnijas"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "Rādīt krāsu paleti"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "Rādīt pikseļu režģi"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Rādīt mērjoslas"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "Rādīt fontu paleti"
-#: src/app/main/ui/workspace/main_menu.cljs:288
+#: src/app/main/ui/workspace/main_menu.cljs:316
msgid "workspace.header.menu.toggle-dark-theme"
msgstr "Pārslēgties uz tumšo izskatu"
-#: src/app/main/ui/workspace/main_menu.cljs:286, src/app/main/ui/workspace/main_menu.cljs:289
+#: src/app/main/ui/workspace/main_menu.cljs:314, src/app/main/ui/workspace/main_menu.cljs:317
msgid "workspace.header.menu.toggle-light-theme"
msgstr "Pārslēgties uz gaišo izskatu"
-#: src/app/main/ui/workspace/main_menu.cljs:287
+#: src/app/main/ui/workspace/main_menu.cljs:315
msgid "workspace.header.menu.toggle-system-theme"
msgstr "Pārslēgties uz sistēmas izskatu"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "Atsaukt"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Atiestatīt"
@@ -5111,7 +5157,7 @@ msgstr "Saglabāts"
msgid "workspace.header.saving"
msgstr "Saglabāšana"
-#: src/app/main/ui/workspace/right_header.cljs:239
+#: src/app/main/ui/workspace/right_header.cljs:240
msgid "workspace.header.share"
msgstr "Kopīgot"
@@ -5120,11 +5166,11 @@ msgstr "Kopīgot"
msgid "workspace.header.unsaved"
msgstr "Nesaglabātas izmaiņas"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "Skatīšana (%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "Tālummaiņa"
@@ -5136,7 +5182,7 @@ msgstr "Aizpildījums — mērogot, lai aizpildītu"
msgid "workspace.header.zoom-fit"
msgstr "Ietilpināt — samazināt, lai ietilpinātu"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "Tālummainīt, lai ietilpinātu visu"
@@ -5144,43 +5190,43 @@ msgstr "Tālummainīt, lai ietilpinātu visu"
msgid "workspace.header.zoom-full-screen"
msgstr "Pilnekrāns"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "Tālummainīt uz atlasi"
-#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:621
msgid "workspace.layout_grid.editor.options.edit-grid"
msgstr "Labot režģi"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1300
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1301
msgid "workspace.layout_grid.editor.options.exit"
msgstr "Iziet"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:429, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:435
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:430, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:436
msgid "workspace.layout_grid.editor.padding.bottom"
msgstr "Apakšējā atbīde"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:491
msgid "workspace.layout_grid.editor.padding.expand"
msgstr "Rādīt četrpusējas atbīdes iespējas"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:354, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:355, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:362
msgid "workspace.layout_grid.editor.padding.horizontal"
msgstr "Guleniskā atbīde"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:444, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:450
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:451
msgid "workspace.layout_grid.editor.padding.left"
msgstr "Kreisā atbīde"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:414, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:420
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:421
msgid "workspace.layout_grid.editor.padding.right"
msgstr "Labā atbīde"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:406
msgid "workspace.layout_grid.editor.padding.top"
msgstr "Augšējā atbīde"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:340, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:341, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:347
msgid "workspace.layout_grid.editor.padding.vertical"
msgstr "Stateniskā atbīde"
@@ -5196,7 +5242,7 @@ msgstr "Darīts"
msgid "workspace.layout_grid.editor.top-bar.locate"
msgstr "Noteikt atrašanās vietu"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1326
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1327
msgid "workspace.layout_grid.editor.top-bar.locate.tooltip"
msgstr "Norādīt režģa izkārtojumu"
@@ -5205,10 +5251,6 @@ msgstr "Norādīt režģa izkārtojumu"
msgid "workspace.libraries.add"
msgstr "Pievienot"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s krāsas"
-
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
msgstr "Bibliotēkā vēl nav krāsu stilu"
@@ -5235,43 +5277,35 @@ msgstr "Nesen izmantotās krāsas"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "Papildu RGB"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Saglabāt krāsu stilu"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s sastāvdaļas"
-
-#: src/app/main/ui/workspace/libraries.cljs:371
+#: src/app/main/ui/workspace/libraries.cljs:404
msgid "workspace.libraries.empty.add-some"
msgstr "Vai pievieno kādas no šīm, lai izmēģinātu:"
-#: src/app/main/ui/workspace/libraries.cljs:365
+#: src/app/main/ui/workspace/libraries.cljs:398
msgid "workspace.libraries.empty.no-libraries"
msgstr "Tavā komandā nav kopīgotu bibliotēku, kuras var meklēt"
-#: src/app/main/ui/workspace/libraries.cljs:369
+#: src/app/main/ui/workspace/libraries.cljs:402
msgid "workspace.libraries.empty.some-templates"
msgstr "dažas sagataves šeit"
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Datņu bibliotēka"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s attēli"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "BIBLIOTĒKAS ŠAJĀ DATNĒ"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "BIBLIOTĒKAS"
@@ -5280,11 +5314,11 @@ msgstr "BIBLIOTĒKAS"
msgid "workspace.libraries.library"
msgstr "BIBLIOTĒKA"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "BIBLIOTĒKAS JAUNINĀJUMI"
-#: src/app/main/ui/workspace/libraries.cljs:360
+#: src/app/main/ui/workspace/libraries.cljs:393
msgid "workspace.libraries.loading"
msgstr "Ielādē…"
@@ -5293,51 +5327,47 @@ msgstr "Ielādē…"
msgid "workspace.libraries.more-templates"
msgstr "Var meklēt "
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "Nav nevienas koplietojamās bibliotēkas, kas būtu jāatjaunina"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "“%s” nav atrasta neviena atbilstība"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "Meklēt koplietojamās bibliotēkas"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "KOPLIETOJAMĀS BIBLIOTĒKAS"
-#: src/app/main/ui/workspace/libraries.cljs:352
+#: src/app/main/ui/workspace/libraries.cljs:385
msgid "workspace.libraries.shared-library-btn"
msgstr "Savienot bibliotēku"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Vairāki burtu stili un veidi"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Atsaistīt visus burtu stilus un veidus"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s burtu stili un veidi"
-
-#: src/app/main/ui/workspace/libraries.cljs:323
+#: src/app/main/ui/workspace/libraries.cljs:354
msgid "workspace.libraries.unlink-library-btn"
msgstr "Atvienot bibliotēku"
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Atjaunināt"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "apskatīt visas izmaiņas"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "ATJAUNINĀJUMI"
@@ -5345,31 +5375,31 @@ msgstr "ATJAUNINĀJUMI"
msgid "workspace.notification-pill.detail"
msgstr "Informācija"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "Jāklikšķina uz pogas \"+\", lai pievienotu mijiedarbības."
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:96
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:97
msgid "workspace.options.blur-options.add-blur"
msgstr "Pievienot aizmiglojumu"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:117
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:118
msgid "workspace.options.blur-options.remove-blur"
msgstr "Noņemt aizmiglojumu"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Aizmiglojums"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "Kopas aizmiglojums"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "Atlases aizmiglojums"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:114
msgid "workspace.options.blur-options.toggle-blur"
msgstr "Pārslēgt aizmiglojumu"
@@ -5377,101 +5407,107 @@ msgstr "Pārslēgt aizmiglojumu"
msgid "workspace.options.canvas-background"
msgstr "Kanvas fons"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "Apcirpt saturu"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Sastāvdaļa"
-#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:193
+#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:196
msgid "workspace.options.component.annotation"
msgstr "Piezīme"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "Ievietot starpliktuvē"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:185
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:188
msgid "workspace.options.component.create-annotation"
msgstr "Izveidot piezīmi"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "Labot piezīmi"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "Galvenais"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:706
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:721
msgid "workspace.options.component.swap"
msgstr "Mijmainīt sastāvdaļu"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:765
msgid "workspace.options.component.swap.empty"
msgstr "Šajā bibliotēkā vēl nav līdzekļu"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:973
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:993
msgid "workspace.options.component.unlinked"
msgstr "Atsaistīta"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:512
msgid "workspace.options.component.variant.duplicated.copy.locate"
-msgstr "Doties uz galveno sastāvdaļu"
+msgstr "Noteikt nesaderīgus variantus"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:496
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:509
msgid "workspace.options.component.variant.duplicated.copy.title"
msgstr ""
"Šai sastāvdaļai ir nesaderīgi varianti. Jāpārliecinās, ka katram no tiem ir "
"neatkārtojama īpašību vērtību kopa."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1246
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1281
msgid "workspace.options.component.variant.duplicated.group.locate"
msgstr "Atrast atkārtojošos variantus"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1243
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1278
msgid "workspace.options.component.variant.duplicated.group.title"
msgstr "Dažiem variantiem ir vienādas īpašības un vērtības"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:267
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:268
msgid "workspace.options.component.variant.duplicated.single.all"
-msgstr "Šiem variantiem ir vienādas īpašības un vērtības."
+msgstr ""
+"Šiem variantiem ir vienādas īpašības un vērtības. Jāpielāgo vērtības, lai "
+"tās varētu iegūt."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:264
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:265
msgid "workspace.options.component.variant.duplicated.single.one"
-msgstr "Šim variantam ir tādas pašas īpašības un vērtības kā citam."
+msgstr ""
+"Šim variantam ir tādas pašas īpašības un vērtības kā citam. Jāpielāgo "
+"vērtības, lai tās varētu iegūt."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:270
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:271
msgid "workspace.options.component.variant.duplicated.single.some"
-msgstr "Dažiem no šiem variantiem ir vienādas īpašības un vērtības."
+msgstr ""
+"Dažiem no šiem variantiem ir vienādas īpašības un vērtības. Jāpielāgo "
+"vērtības, lai tās varētu iegūt."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1236
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1271
msgid "workspace.options.component.variant.malformed.group.locate"
msgstr "Atrast nederīgus variantus"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1233
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1268
msgid "workspace.options.component.variant.malformed.group.title"
msgstr "Dažiem variantiem ir nederīgi nosaukumi"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:252
msgid "workspace.options.component.variant.malformed.single.all"
msgstr "Šiem variantiem ir nederīgi nosaukumi."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:247
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:249
msgid "workspace.options.component.variant.malformed.single.one"
msgstr "Šim variantam ir nederīgs nosaukums."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:253
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:255
msgid "workspace.options.component.variant.malformed.single.some"
msgstr "Dažiem no šiem variantiem ir nederīgi nosaukumi."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:390
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:391
msgid "workspace.options.component.variant.malformed.structure.example"
msgstr "[īpašība]=[vērtība], [īpašība]=[vērtība]"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:389
msgid "workspace.options.component.variant.malformed.structure.title"
msgstr "Jāmēģina izmantot šāda uzbūve:"
@@ -5487,7 +5523,7 @@ msgstr "ir tāds pats nosaukums;"
#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:76
msgid "workspace.options.component.variants-help-modal.rule2"
-msgstr "ir vienāds veids;"
+msgstr "Ir vienāds veids."
#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:77
msgid "workspace.options.component.variants-help-modal.rule2.detail"
@@ -5497,13 +5533,13 @@ msgstr ""
#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:87
msgid "workspace.options.component.variants-help-modal.rule3"
-msgstr "ir tāds pats hierarhijas līmenis."
+msgstr "Ir tāds pats hierarhijas līmenis."
#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:88
msgid "workspace.options.component.variants-help-modal.rule3.detail"
msgstr "Kopas, dēļi un izkārtojumi tiek uztverti kā līdzvērtīgi."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:935, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1157, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:47
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:955, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1191, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:47
msgid "workspace.options.component.variants-help-modal.title"
msgstr "Kā varianti paliek savienoti"
@@ -5547,7 +5583,7 @@ msgstr "Augša"
msgid "workspace.options.constraints.topbottom"
msgstr "Augša un apakša"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Dizains"
@@ -5560,22 +5596,22 @@ msgstr "Izguve"
msgid "workspace.options.export-multiple"
msgstr "Izgūt atlasi"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "Izgūt %s elementus"
msgstr[1] "Izgūt %s elementu"
msgstr[2] "Izgūt %s elementus"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:188
+#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:214
msgid "workspace.options.export.add-export"
msgstr "Pievienot izguvi"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:235
+#: 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 "Noņemt izguvi"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Piedēklis"
@@ -5583,7 +5619,7 @@ msgstr "Piedēklis"
msgid "workspace.options.exporting-complete"
msgstr "Izguve pabeigta"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "Notiek izgūšana…"
@@ -5595,27 +5631,27 @@ msgstr "Izgūšana neizdevās"
msgid "workspace.options.exporting-object-slow"
msgstr "Izgūšana ir neparedzēti lēna"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Aizpildīšana"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:194
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:234
msgid "workspace.options.fill.add-fill"
msgstr "Pievienot aizpildījumu"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:208
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:248
msgid "workspace.options.fill.remove-fill"
msgstr "Noņemt aizpildījumu"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:392
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:474
msgid "workspace.options.fit-content"
msgstr "Mainīt paneļa izmēru, lai ietilpinātu saturu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "Pievienot plūsmas sākumu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:178
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:179
msgid "workspace.options.flows.flow"
msgstr "Plūsma"
@@ -5624,19 +5660,19 @@ msgstr "Plūsma"
msgid "workspace.options.flows.flow-start"
msgstr "Plūsmas sākums"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "Plūsma sākas"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:155
msgid "workspace.options.flows.remove-flow"
msgstr "Noņemt plūsmu"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Auto"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "Slejas"
@@ -5645,7 +5681,7 @@ msgstr "Slejas"
msgid "workspace.options.grid.grid-title"
msgstr "Režģis"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Krāsa"
@@ -5654,15 +5690,15 @@ msgstr "Krāsa"
msgid "workspace.options.grid.params.columns"
msgstr "Slejas"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "Rene"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Augstums"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Mala"
@@ -5671,7 +5707,7 @@ msgstr "Mala"
msgid "workspace.options.grid.params.rows"
msgstr "Rindas"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "Iestatīt kā noklusējumu"
@@ -5685,159 +5721,159 @@ msgstr "Izmērs"
msgid "workspace.options.grid.params.type"
msgstr "Tips"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Apakša"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Centrs"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Pa kreiss"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Pa labi"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "Izstiept"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "Augša"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "Izmantot noklusējumu"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Platums"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Rindas"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "Kvadrāts"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Kopas aizpildījums"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Kopas vilkums"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:326
msgid "workspace.options.guides.add-guide"
msgstr "Pievienot vadlīniju"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:187
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:188
msgid "workspace.options.guides.remove-guide"
msgstr "Noņemt vadlīniju"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:320
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
msgid "workspace.options.guides.title"
msgstr "Vadotnes"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:183
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:184
msgid "workspace.options.guides.toggle-guide"
msgstr "Pārslēgt vadlīniju"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "Augstums"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "Apskatīt"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "Darbība"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "Pēc kavēšanās"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "Animācija"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "Izšķīst"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "Nav"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "Grūdiens"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "Bīdīšana"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "auto"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "Pievienot fona pārklājumu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "Aizvērt, noklikšķinot ārpus"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "Aizvērt pārklājumu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "Aizvērt pārklājumu: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "Nobīde"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "Galamērķis"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "Ilgums"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "Mīkstināšana"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "Mīkstināt"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "Viegli iekšā"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "Viegli iekšā ārā"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "Viegli ārā"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "Lineāri"
@@ -5846,47 +5882,47 @@ msgstr "Lineāri"
msgid "workspace.options.interaction-in"
msgstr "Iekšā"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "Peles ievade"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "Peles pamešana"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "ms"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "Doties uz"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "Doties uz: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(nav noteikts)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "Nobīdes efekts"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "Uz klikšķa"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "Atvērt pārklājumu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "Atvērt pārklājumu: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "Atvērt URL"
@@ -5895,87 +5931,87 @@ msgstr "Atvērt URL"
msgid "workspace.options.interaction-out"
msgstr "Ārā"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "Apakšējais centrs"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "Apakšā pa kreisi"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "Apakšā pa labi"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "Centrs"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "Manuāli"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "Augšējais centrs"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "Augšā pa kreisi"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "Augšā pa labi"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "Novietojums"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "Paturēt ritināšanas pozīciju"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "Iepriekšējais ekrāns"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "Attiecībā pret"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "sevi"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "Pārslēgt pārklājumu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "Pārslēgt pārklājumu: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "Izraisītājs"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "Karāšanās laikā"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "Nospiešanas laikā"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "Mijiedarbības"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:735
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:736
msgid "workspace.options.interactions.add-interaction"
msgstr "Pievienot mijiedarbību"
@@ -5984,67 +6020,67 @@ msgstr "Pievienot mijiedarbību"
msgid "workspace.options.interactions.remove-interaction"
msgstr "Noņemt mijiedarbību"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "Krāsa"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "Krāsas izbalēšana"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "Krāsas izcēlums"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "Aptumšot"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "Starpība"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "Izslēgšana"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Konturgaisma"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Nokrāsa"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Izgaismot"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "Spožums"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "Vairot"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "Normāls"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "Pārklājums"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "Piesātinājums"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Ekrāns"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "Izkliedgaisma"
@@ -6063,7 +6099,7 @@ msgstr "Apkopot slāņus"
msgid "workspace.options.layer-options.title.multiple"
msgstr "Atlasītie slāņi"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:202
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:207, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:213
msgid "workspace.options.layer-options.toggle-layer"
msgstr "Pārslēgt slāņa redzamību"
@@ -6072,19 +6108,19 @@ msgstr "Pārslēgt slāņa redzamību"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "Papildu opcijas"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "Maks.augstums"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "Maks.platums"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "Min.augstums"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "Min.platums"
@@ -6198,15 +6234,15 @@ msgstr "telpa starp"
msgid "workspace.options.layout.top"
msgstr "Augša"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "Vairāk krāsu"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "Vairāk bibliotēkas krāsu"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "Caurspīdīgums"
@@ -6215,35 +6251,35 @@ msgstr "Caurspīdīgums"
msgid "workspace.options.position"
msgstr "Novietojums"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "Prototips"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "Rādiuss"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "Apakšā pa kreisi"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "Apakšā pa labi"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "Augšā pa kreisi"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "Augšā pa labi"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:152
msgid "workspace.options.radius.hide-all-corners"
msgstr "Sakļaut neatkarīgu rādiusu"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:136
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:153
msgid "workspace.options.radius.show-single-corners"
msgstr "Rādīt neatkarīgu rādiusu"
@@ -6255,7 +6291,7 @@ msgstr "Pēdējie"
msgid "workspace.options.retry"
msgstr "Atkārtot"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "Pagriešana"
@@ -6263,31 +6299,31 @@ msgstr "Pagriešana"
msgid "workspace.options.search-font"
msgstr "Meklēt fontu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr "Jāatlasa apveids, plātne vai kopa, lai vilktu savienojumu uz citu plātni."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "Atlasītās krāsas"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "Atlases aizpildījums"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "Atlases vilkums"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:341
msgid "workspace.options.shadow-options.add-shadow"
msgstr "Pievienot ēnu"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "Aizmiglojums"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "Ēnas krāsa"
@@ -6299,63 +6335,64 @@ msgstr "Ēnot"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "Iekšējā ēna"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:348
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:183, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:354
msgid "workspace.options.shadow-options.remove-shadow"
msgstr "Noņemt ēnu"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "Izkliede"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "Ēna"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "Kopas ēna"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "Atlases ēnas"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:174
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:179
msgid "workspace.options.shadow-options.toggle-shadow"
msgstr "Pārslēgt ēnu"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "Rādīt izguvēs"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "Rādīt skatītājā"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "Izmērs"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "Izmēra standarti"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:534
msgid "workspace.options.size.lock"
msgstr "Paturēt malu attiecību"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:534
msgid "workspace.options.size.unlock"
msgstr "Nepaturēt malu attiecību"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "Vilkums"
@@ -6364,7 +6401,7 @@ msgstr "Vilkums"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "Apļa marķieris"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "Aplis"
@@ -6373,7 +6410,7 @@ msgstr "Aplis"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "Rombveida marķieris"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "Dimants"
@@ -6382,19 +6419,19 @@ msgstr "Dimants"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "Līnijas bulta"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "Bulta"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "Nav"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "Apaļš"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "Kvadrāts"
@@ -6403,7 +6440,7 @@ msgstr "Kvadrāts"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "Kvadrāta marķieris"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "Taisnstūris"
@@ -6412,83 +6449,83 @@ msgstr "Taisnstūris"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "Trīsstūra bulta"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "Trijstūris"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "Vilkuma krāsa"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "Vilkuma biezums"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:180
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:189
msgid "workspace.options.stroke.add-stroke"
msgstr "Pievienot vilkuma krāsu"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "Centrs"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "Pārtraukts"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "Punktots"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "Iekšā"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "Jaukts"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "Ārā"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:193
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:202
msgid "workspace.options.stroke.remove-stroke"
msgstr "Noņemt vilkumu"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "Blīvs"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "Līdzināt pie apakšas"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "Līdzināt vidū (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "Līdzināt pie augšas"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "No kreisās uz labo pusi"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "No labās uz kreiso pusi"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "Automātiskais augstums"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "Automātiskais platums"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "Fiksēts"
@@ -6510,35 +6547,35 @@ msgstr "Mazie burti"
msgid "workspace.options.text-options.none"
msgstr "Nav"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "Pārsvītrots (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "Līdzināt vidū"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "Izlīdzināt"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "Līdzināt pa kreisi"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "Līdzināt pa labi"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "Teksts"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "Kopas teksts"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "Atlases teksts"
@@ -6547,7 +6584,7 @@ msgstr "Atlases teksts"
msgid "workspace.options.text-options.titlecase"
msgstr "Virsraksta stils"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "Pasvītrojums (%s)"
@@ -6556,19 +6593,19 @@ msgstr "Pasvītrojums (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "Lielie burti"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr "Jāizmanto atskaņosanas poga galvenē, lai palaistu prototipa skatu."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "Platums"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "X ass"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Y ass"
@@ -6612,78 +6649,78 @@ msgstr "Atdalīt mezglus (%s)"
msgid "workspace.path.actions.snap-nodes"
msgstr "Pieķert mezglus (%s)"
-#: src/app/main/ui/workspace/plugins.cljs:83
+#: src/app/main/ui/workspace/plugins.cljs:84
msgid "workspace.plugins.button-open"
msgstr "Atvērt"
-#: src/app/main/ui/workspace/plugins.cljs:197
+#: src/app/main/ui/workspace/plugins.cljs:198
#, markdown
msgid "workspace.plugins.discover"
msgstr "Atklāt [vairāk spraudņu](%s)"
-#: src/app/main/ui/workspace/plugins.cljs:204
+#: src/app/main/ui/workspace/plugins.cljs:205
msgid "workspace.plugins.empty-plugins"
msgstr "Vēl nav uzstādīts neviens spraudnis"
-#: src/app/main/ui/workspace/plugins.cljs:191
+#: src/app/main/ui/workspace/plugins.cljs:192
msgid "workspace.plugins.error.manifest"
msgstr "Spraudņa deklarācija ir nepareiza."
-#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:755, src/app/main/ui/workspace/plugins.cljs:82
+#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:783, src/app/main/ui/workspace/plugins.cljs:83
msgid "workspace.plugins.error.need-editor"
msgstr "Jābūt redaktoram, lai izmantotu šo spraudni"
-#: src/app/main/ui/workspace/plugins.cljs:187
+#: src/app/main/ui/workspace/plugins.cljs:188
msgid "workspace.plugins.error.url"
msgstr "Spraudnis nepastāv vai URL ir nepareizs."
-#: src/app/main/ui/workspace/plugins.cljs:183
+#: src/app/main/ui/workspace/plugins.cljs:184
msgid "workspace.plugins.install"
msgstr "Uzstādīt"
-#: src/app/main/ui/workspace/plugins.cljs:213
+#: src/app/main/ui/workspace/plugins.cljs:214
msgid "workspace.plugins.installed-plugins"
msgstr "Uzstādītie spraudņi"
-#: src/app/main/ui/workspace/main_menu.cljs:710
+#: src/app/main/ui/workspace/main_menu.cljs:738
msgid "workspace.plugins.menu.plugins-manager"
msgstr "Spraudņu pārvaldnieks"
-#: src/app/main/ui/workspace/main_menu.cljs:906
+#: src/app/main/ui/workspace/main_menu.cljs:934
msgid "workspace.plugins.menu.title"
msgstr "Spraudņi"
-#: src/app/main/ui/workspace/plugins.cljs:374
+#: src/app/main/ui/workspace/plugins.cljs:375
msgid "workspace.plugins.permissions-update.title"
msgstr "ATJAUNINĀT ŠO SPRAUDNI"
-#: src/app/main/ui/workspace/plugins.cljs:378
+#: src/app/main/ui/workspace/plugins.cljs:379
msgid "workspace.plugins.permissions-update.warning"
msgstr ""
"Spraudnis kopš pēdējās atvēršanas reizes ir mainīts. Tam tagad ir vajadzīga "
"piekļuve:"
-#: src/app/main/ui/workspace/plugins.cljs:278
+#: src/app/main/ui/workspace/plugins.cljs:279
msgid "workspace.plugins.permissions.allow-download"
msgstr "Uzsākt datņu lejupielādi."
-#: src/app/main/ui/workspace/plugins.cljs:271
+#: src/app/main/ui/workspace/plugins.cljs:272
msgid "workspace.plugins.permissions.comment-read"
msgstr "Lasīt savas piebildes un atbildes."
-#: src/app/main/ui/workspace/plugins.cljs:265
+#: src/app/main/ui/workspace/plugins.cljs:266
msgid "workspace.plugins.permissions.comment-write"
msgstr "Lasīt un mainīt savas piebildes un atbildēt savā vārdā."
-#: src/app/main/ui/workspace/plugins.cljs:238
+#: src/app/main/ui/workspace/plugins.cljs:239
msgid "workspace.plugins.permissions.content-read"
msgstr "Lasīt datņu, kurām lietotājiem ir piekļuve, saturu."
-#: src/app/main/ui/workspace/plugins.cljs:232
+#: src/app/main/ui/workspace/plugins.cljs:233
msgid "workspace.plugins.permissions.content-write"
msgstr "Lasīt un mainīt datņu, kurām lietotājiem ir piekļuve, saturu."
-#: src/app/main/ui/workspace/plugins.cljs:325
+#: src/app/main/ui/workspace/plugins.cljs:326
msgid "workspace.plugins.permissions.disclaimer"
msgstr ""
"Lūgums ņemt vērā, ka šo spraudni izveidoja trešā puse, tāpēc pirms "
@@ -6691,31 +6728,31 @@ msgstr ""
"Tavu datu privātums un drošība. Ja ir kādas neskaidrības, lūgums sazināties "
"ar atbalstu."
-#: src/app/main/ui/workspace/plugins.cljs:258
+#: src/app/main/ui/workspace/plugins.cljs:259
msgid "workspace.plugins.permissions.library-read"
msgstr "Lasīt bibliotēkas un līdzekļus."
-#: src/app/main/ui/workspace/plugins.cljs:252
+#: src/app/main/ui/workspace/plugins.cljs:253
msgid "workspace.plugins.permissions.library-write"
msgstr "Lasīt un mainīt bibliotēkas un līdzekļus."
-#: src/app/main/ui/workspace/plugins.cljs:318
+#: src/app/main/ui/workspace/plugins.cljs:319
msgid "workspace.plugins.permissions.title"
msgstr "SPRAUDNIS \"%s\" PIEPRASA PIEKĻUVI:"
-#: src/app/main/ui/workspace/plugins.cljs:245
+#: src/app/main/ui/workspace/plugins.cljs:246
msgid "workspace.plugins.permissions.user-read"
msgstr "Lasīt pašreizējā lietotāja profila informāciju."
-#: src/app/main/ui/workspace/plugins.cljs:209
+#: src/app/main/ui/workspace/plugins.cljs:210
msgid "workspace.plugins.plugin-list-link"
msgstr "Spraudņu saraksts"
-#: src/app/main/ui/workspace/plugins.cljs:86
+#: src/app/main/ui/workspace/plugins.cljs:87
msgid "workspace.plugins.remove-plugin"
msgstr "Noņemt spraudni"
-#: src/app/main/ui/workspace/plugins.cljs:178
+#: src/app/main/ui/workspace/plugins.cljs:179
msgid "workspace.plugins.search-placeholder"
msgstr "Ierakstīt spraudņa URL"
@@ -6723,26 +6760,26 @@ msgstr "Ierakstīt spraudņa URL"
msgid "workspace.plugins.success"
msgstr "Spraudnis ir pareizi ielādēts."
-#: src/app/main/ui/workspace/plugins.cljs:172
+#: src/app/main/ui/workspace/plugins.cljs:173
msgid "workspace.plugins.title"
msgstr "Spraudņi"
-#: src/app/main/ui/workspace/plugins.cljs:438
+#: src/app/main/ui/workspace/plugins.cljs:439
msgid "workspace.plugins.try-out.cancel"
msgstr "NE TAGAD"
-#: src/app/main/ui/workspace/plugins.cljs:431
+#: src/app/main/ui/workspace/plugins.cljs:432
msgid "workspace.plugins.try-out.message"
msgstr ""
"Vēlies izmēģināt? Tas tiks atvērts jaunā melnrakstā Tavai pašreizējai "
"komandai. (Ja nē, vienmēr to var atrast jebkuras datnes uzstādītajos "
"spraudņos.)"
-#: src/app/main/ui/workspace/plugins.cljs:427
+#: src/app/main/ui/workspace/plugins.cljs:428
msgid "workspace.plugins.try-out.title"
msgstr "SPRAUDNIS \"%s\" IR UZSTĀDĪTS."
-#: src/app/main/ui/workspace/plugins.cljs:444
+#: src/app/main/ui/workspace/plugins.cljs:445
msgid "workspace.plugins.try-out.try"
msgstr "IZMĒĢINĀT SPRAUDNI"
@@ -6754,15 +6791,15 @@ msgstr "Pievienot elastīgo izkārtojumu"
msgid "workspace.shape.menu.add-grid"
msgstr "Pievienot režģa izkārtojumu"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1015, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1039
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1016, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1040
msgid "workspace.shape.menu.add-layout"
msgstr "Pievienot izkārtojumu"
-#: src/app/main/ui/workspace/context_menu.cljs:608, src/app/main/ui/workspace/sidebar/assets/common.cljs:505, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:941, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1161
+#: src/app/main/ui/workspace/context_menu.cljs:610, src/app/main/ui/workspace/sidebar/assets/common.cljs:514, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:961, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1113, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1195
msgid "workspace.shape.menu.add-variant"
msgstr "Izveidot variantu"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:509, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:990, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1082, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1198
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:518, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1010, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1115, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1233
msgid "workspace.shape.menu.add-variant-property"
msgstr "Pievienot jaunu īpašību"
@@ -6806,7 +6843,7 @@ msgstr "Ievietot starpliktuvē kā SVG"
msgid "workspace.shape.menu.copy-text"
msgstr "Ievietot starpliktuvē kā tekstu"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "Izveidot piezīmi"
@@ -6814,11 +6851,11 @@ msgstr "Izveidot piezīmi"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "Atlase uz plātni"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "Izveidot sastāvdaļu"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "Izveidot vairākas sastāvdaļas"
@@ -6826,7 +6863,7 @@ msgstr "Izveidot vairākas sastāvdaļas"
msgid "workspace.shape.menu.cut"
msgstr "Izgriezt"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "Dzēst"
@@ -6834,15 +6871,15 @@ msgstr "Dzēst"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "Izdzēst plūsmas sākumu"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "Atvienot instanci"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "Atvienot instances"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "Starpība"
@@ -6854,11 +6891,11 @@ msgstr "Divkāršot"
msgid "workspace.shape.menu.edit"
msgstr "Labot"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "Izslēgt"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "Izklāt"
@@ -6891,19 +6928,19 @@ msgstr "Doties uz galvenās sastāvdaļas datni"
msgid "workspace.shape.menu.group"
msgstr "Kopa"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "Slēpt"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "Rādīt/paslēpt UI"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "Šķēlums"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "Slēgt"
@@ -6911,7 +6948,7 @@ msgstr "Slēgt"
msgid "workspace.shape.menu.mask"
msgstr "Maska"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "Ielīmēt"
@@ -6931,11 +6968,11 @@ msgstr "Noņemt elastīgo izkārtojumu"
msgid "workspace.shape.menu.remove-grid"
msgstr "Noņemt režģa izkārtojumu"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1033
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1034
msgid "workspace.shape.menu.remove-layout"
msgstr "Noņemt izkārtojumu"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1222
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1257
msgid "workspace.shape.menu.remove-variant-property"
msgstr "Noņemt īpašību"
@@ -6943,15 +6980,15 @@ msgstr "Noņemt īpašību"
msgid "workspace.shape.menu.rename"
msgstr "Pārdēvēt"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "Atiestatīt aizvietojumus"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "Atjaunot galveno sastāvdaļu"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:504
msgid "workspace.shape.menu.restore-variant"
msgstr "Atjaunot variantu"
@@ -6959,15 +6996,15 @@ msgstr "Atjaunot variantu"
msgid "workspace.shape.menu.select-layer"
msgstr "Atlasīt slāni"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "Pāradīt"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "Rādīt līdzekļu panelī"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "Rādīt galveno sastāvdaļu"
@@ -6980,6 +7017,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "Iestatīt kā sīktēlu"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "Transformēt par ceļu"
@@ -6987,11 +7025,11 @@ msgstr "Transformēt par ceļu"
msgid "workspace.shape.menu.ungroup"
msgstr "Atapkopot"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "Apvienot"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "Atslēgt"
@@ -7004,7 +7042,7 @@ msgstr "Noņemt masku"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "Atjaunināt galvenās sastāvdaļas"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "Atjaunināt galveno sastāvdaļu"
@@ -7016,11 +7054,11 @@ msgstr "Sakļaut sānjoslu"
msgid "workspace.sidebar.expand"
msgstr "Izvērst sānjoslu"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "Vēsture"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "Slāņi"
@@ -7060,11 +7098,11 @@ msgstr "Teksti"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "Ievietotie SVG atribūti"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "Lapas"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:248
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:249
msgid "workspace.sidebar.sitemap.add-page"
msgstr "Pievienot lapu"
@@ -7081,27 +7119,27 @@ msgstr "%s aktīvi izskati"
msgid "workspace.tokens.add set"
msgstr "Pievienot kopu"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:329
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
msgid "workspace.tokens.add-new-theme"
msgstr "Pievienot jaunu izskatu"
-#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:60
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:62
msgid "workspace.tokens.add-set-to-group"
msgstr "Pievienot kopu šai grupai"
-#: src/app/main/ui/workspace/tokens/management/group.cljs:113
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:197, src/app/main/ui/workspace/tokens/management/group.cljs:115
msgid "workspace.tokens.add-token"
msgstr "Pievienot tekstvienību: %s"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:161
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:136
msgid "workspace.tokens.applied-to"
msgstr "Pielietota"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:315
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:316
msgid "workspace.tokens.axis"
msgstr "Ass"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:338
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:337
msgid "workspace.tokens.back-to-themes"
msgstr "Atpakaļ uz izskatu sarakstu"
@@ -7131,15 +7169,15 @@ msgstr "Krāsa"
msgid "workspace.tokens.create-new-theme"
msgstr "Tagad izveido savu pirmo izskatu!"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:100, src/app/main/ui/workspace/tokens/themes.cljs:44
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:96, src/app/main/ui/workspace/tokens/themes.cljs:44
msgid "workspace.tokens.create-one"
msgstr "Izveidot kādu."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:534
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:552
msgid "workspace.tokens.create-token"
msgstr "Izveidot jaunu %s tekstvienību"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:337
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:338
msgid "workspace.tokens.delete"
msgstr "Izdzēst tekstvienību"
@@ -7147,19 +7185,19 @@ msgstr "Izdzēst tekstvienību"
msgid "workspace.tokens.delete-theme-title"
msgstr "Izdzēst izskatu"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:334
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:335
msgid "workspace.tokens.duplicate"
msgstr "Pavairot tekstvienību"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:201, src/app/main/data/workspace/tokens/library_edit.cljs:405
+#: src/app/main/data/workspace/tokens/library_edit.cljs:197, src/app/main/data/workspace/tokens/library_edit.cljs:415
msgid "workspace.tokens.duplicate-suffix"
msgstr "dublējums"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:321
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:322
msgid "workspace.tokens.edit"
msgstr "Labot tekstvienību"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:327
msgid "workspace.tokens.edit-theme-title"
msgstr "Labot izskatu"
@@ -7167,15 +7205,11 @@ msgstr "Labot izskatu"
msgid "workspace.tokens.edit-themes"
msgstr "Labot izskatus"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:533
-msgid "workspace.tokens.edit-token"
-msgstr "Labot tekstvienību"
-
#: src/app/main/data/workspace/tokens/errors.cljs:41
msgid "workspace.tokens.empty-input"
msgstr "Tekstvienības vērtība nevar būt tukša"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:540
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:558
msgid "workspace.tokens.enter-token-name"
msgstr "Jāievada %s tekstvienības nosaukums"
@@ -7207,7 +7241,7 @@ msgstr "Priekšskatījums:"
msgid "workspace.tokens.export.single-file"
msgstr "Viena datne"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:229
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:228
msgid "workspace.tokens.gaps"
msgstr "Spraugas"
@@ -7229,17 +7263,17 @@ msgstr "Tekstvienību apkopošana vēl netiek nodrošināta."
msgid "workspace.tokens.import-error"
msgstr "Ievietošanas kļūda:"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:240
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:241
msgid "workspace.tokens.import-multiple-files"
msgstr "Daudzās datnēs datnes nosaukums/ceļš ir kopas nosaukums."
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:239
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:240
msgid "workspace.tokens.import-single-file"
msgstr ""
"Vienā JSON datnē pirmā līmeņa atslēgām vajadzētu būt tekstvienību kopu "
"nosaukumiem."
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:236
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:237
msgid "workspace.tokens.import-tokens"
msgstr "Ievietot tekstvienības"
@@ -7250,7 +7284,7 @@ msgstr ""
"JSON datnes ievietošana pārrakstīs visas pašreizējās tekstvienības, kopas "
"un izskatus"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:246
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:247
msgid "workspace.tokens.import-warning"
msgstr ""
"Tekstvienību ievietošana aizvietos visas pašreizējāš tekstvienības, kopas "
@@ -7305,15 +7339,15 @@ msgstr "Izskats"
msgid "workspace.tokens.label.theme-placeholder"
msgstr "Pievienot izskatu (piem., \"Gaišs\")"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:221
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:220
msgid "workspace.tokens.margins"
msgstr "Malas"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:257
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:256
msgid "workspace.tokens.max-size"
msgstr "Lielākais izmērs"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:251
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:250
msgid "workspace.tokens.min-size"
msgstr "Mazākais lielums"
@@ -7329,7 +7363,7 @@ msgstr "Nav spēkā esošu kopu"
msgid "workspace.tokens.no-active-theme"
msgstr "Nav izvēlēts izskats"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:76
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:72
msgid "workspace.tokens.no-permisions-set"
msgstr "Nepieciešams būt redaktoram, lai aktivētu kopas vai atceltu to aktivēšanu"
@@ -7337,11 +7371,11 @@ msgstr "Nepieciešams būt redaktoram, lai aktivētu kopas vai atceltu to aktiv
msgid "workspace.tokens.no-permission-themes"
msgstr "Jābūt redaktoram, lai izmantotu izskatus"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:480
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:483
msgid "workspace.tokens.no-sets-create"
msgstr "Vēl nav nevienas kopas. Vispirms ir jāizveido kāda."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:97, src/app/main/ui/workspace/tokens/sets/lists.cljs:103
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:93, src/app/main/ui/workspace/tokens/sets/lists.cljs:99
msgid "workspace.tokens.no-sets-yet"
msgstr "Šeit vēl nav nevienas kopas."
@@ -7365,12 +7399,12 @@ msgstr "Nederīga tekstvienības vērtība. Aprēķinātā vērtība ir pārāk
msgid "workspace.tokens.opacity-range"
msgstr "Necaurspīdīgumam ir jābūt starp 0 un 100 % vai 0 un 1 (piem., 50% jeb 0.5)."
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:145
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:120
#, fuzzy
msgid "workspace.tokens.original-value"
msgstr "Sākotnējā vērtība: %s"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:205
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:204
msgid "workspace.tokens.paddings"
msgstr "Atbīdes"
@@ -7378,7 +7412,7 @@ msgstr "Atbīdes"
msgid "workspace.tokens.radius"
msgstr "Rādiuss"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:153
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:128
msgid "workspace.tokens.ref-not-valid"
msgstr "Atsauce nav derīga vai tā nav nevienā aktīvā kopā"
@@ -7387,7 +7421,7 @@ msgstr "Atsauce nav derīga vai tā nav nevienā aktīvā kopā"
msgid "workspace.tokens.reference-error"
msgstr "Atsauču kļūdas: "
-#: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:39, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:44, src/app/main/ui/workspace/tokens/management/token_pill.cljs:146
+#: 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:100, 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 "Atrisinātā vērtība: %s"
@@ -7396,7 +7430,7 @@ msgstr "Atrisinātā vērtība: %s"
msgid "workspace.tokens.save-theme"
msgstr "Saglabāt izskatu"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:209, src/app/main/ui/workspace/tokens/sets/lists.cljs:315
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:204, src/app/main/ui/workspace/tokens/sets/lists.cljs:309
msgid "workspace.tokens.select-set"
msgstr "Atlasīt kopu."
@@ -7404,11 +7438,11 @@ msgstr "Atlasīt kopu."
msgid "workspace.tokens.self-reference"
msgstr "Tekstvienībai ir atsauce uz sevi"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:64
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:60
msgid "workspace.tokens.set-edit-placeholder"
msgstr "Ievadīt nosaukumu (jāizmanto \"/\" kopām)"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:343
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:342
msgid "workspace.tokens.set-selection-theme"
msgstr ""
"Noteikt, kuras tekstvienību kopas vajadzētu izmantot kā daļu no šīs izskata "
@@ -7431,7 +7465,7 @@ msgstr "Šeit var konfigurēt pamata fonta izmēru, kas nosaka 1rem vērtību:"
msgid "workspace.tokens.settings"
msgstr "Tekstvienību iestatījumi"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:245
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:244
msgid "workspace.tokens.size"
msgstr "Izmērs"
@@ -7453,16 +7487,16 @@ msgstr ""
msgid "workspace.tokens.themes-list"
msgstr "Izskatu saraksts"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:589, src/app/main/ui/workspace/tokens/management/create/form.cljs:590
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:608, src/app/main/ui/workspace/tokens/management/create/form.cljs:609
#, fuzzy
msgid "workspace.tokens.token-description"
msgstr "Apraksts"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:539
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:83, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:109, src/app/main/ui/workspace/tokens/management/create/form.cljs:557
msgid "workspace.tokens.token-name"
msgstr "Nosaukums"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:66
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:69
msgid "workspace.tokens.token-name-validation-error"
msgstr ""
" nav derīgs tekstvienības nosaukums.\n"
@@ -7474,11 +7508,11 @@ msgstr ""
msgid "workspace.tokens.token-not-resolved"
msgstr "Nevarēja atrisināt atsauces tekstvienību ar šādu nosaukumu: %s"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:567
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:585
msgid "workspace.tokens.token-value"
msgstr "Vērtība"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:566, src/app/main/ui/workspace/tokens/management/create/form.cljs:883, src/app/main/ui/workspace/tokens/management/create/form.cljs:892
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:584, src/app/main/ui/workspace/tokens/management/create/form.cljs:1035
msgid "workspace.tokens.token-value-enter"
msgstr "Jāievada vērtība vai aizstājvārds ar {aizstājvārds}"
@@ -7486,7 +7520,7 @@ msgstr "Jāievada vērtība vai aizstājvārds ar {aizstājvārds}"
msgid "workspace.tokens.tokens-section-title"
msgstr "TEKSTVIENĪBAS - %s"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:125
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:121
msgid "workspace.tokens.tools"
msgstr "Rīki"
@@ -7494,7 +7528,7 @@ msgstr "Rīki"
msgid "workspace.tokens.unknown-token-type-section"
msgstr "Veids \"%s\" nav atbalstīts (%s)\n"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:156
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:131
msgid "workspace.tokens.value-not-valid"
msgstr "Vērtība nav derīga"
@@ -7502,13 +7536,13 @@ 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/form.cljs:563
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:581
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:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "Līdzekļi"
@@ -7516,7 +7550,7 @@ msgstr "Līdzekļi"
msgid "workspace.toolbar.color-palette"
msgstr "Krāsu palete (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "Komentāri (%s)"
@@ -7727,19 +7761,19 @@ msgstr "Darbība ar %s"
msgid "workspace.undo.title"
msgstr "Vēsture"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "Izlaist"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "Vairāk informācijas"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "Koplietojamajās bibliotēkās ir atjauninājumi"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "Atjaunināt"
@@ -7799,11 +7833,11 @@ msgstr "Vai atjaunot šo versiju?"
msgid "workspace.versions.snapshot-menu"
msgstr "Atvērt momentuzņēmumu izvēlni"
-#: src/app/main/ui/workspace/sidebar.cljs:236
+#: src/app/main/ui/workspace/sidebar.cljs:237
msgid "workspace.versions.tab.actions"
msgstr "Darbības"
-#: src/app/main/ui/workspace/sidebar.cljs:234
+#: src/app/main/ui/workspace/sidebar.cljs:235
msgid "workspace.versions.tab.history"
msgstr "Vēsture"
@@ -7825,3 +7859,29 @@ msgstr "Automātiski saglabātas versijas tiks paturētas %s dienas."
#, unused
msgid "workspace.viewport.click-to-close-path"
msgstr "Jānoklikšķina, lai aizvērtu ceļu"
+
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:98, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:105
+msgid "color-row.token-color-row.deleted-token"
+msgstr "Šī tekstvienība nepastāv vai ir izdzēsta."
+
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:35
+msgid "color-token.empty-state"
+msgstr ""
+"Nav pieejama neviena krāsu tekstvienība. Jāpārbauda izmantotās kopas/izskati "
+"vai jāpievieno jaunas tekstvienības."
+
+#: src/app/main/ui/dashboard/team.cljs:765
+msgid "dashboard.invitation-modal.delete"
+msgstr "Tu grasies izdzēst uzaicinājumus:"
+
+#: src/app/main/ui/dashboard/team.cljs:766
+msgid "dashboard.invitation-modal.resend"
+msgstr "Tu grasies atkārtoti nosūtīt uzaicinājumus:"
+
+#: src/app/main/ui/dashboard/team.cljs:756
+msgid "dashboard.invitation-modal.title.delete-invitations"
+msgstr "Izdzēst uzaicinājumus"
+
+#: src/app/main/ui/dashboard/team.cljs:757
+msgid "dashboard.invitation-modal.title.resend-invitations"
+msgstr "Atkārtoti nosūtīt uzaicinājumus"
diff --git a/frontend/translations/ml.po b/frontend/translations/ml.po
index 8344b45eba..def247bc75 100644
--- a/frontend/translations/ml.po
+++ b/frontend/translations/ml.po
@@ -142,7 +142,7 @@ msgstr "അക്കൗണ്ട് സൃഷ്ടിക്കുക"
msgid "auth.sidebar-tagline"
msgstr "ഡിസൈനിങിനും പ്രോട്ടോടൈപ്പിങിനുമുള്ള ഓപ്പൺ സോഴ്സ് പ്രതിവിധി."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "ഉപയോഗനിബന്ധനകൾ"
@@ -176,7 +176,7 @@ msgstr "പങ്കുവെക്കാവുന്ന കണ്ണി ഇവ
msgid "common.share-link.title"
msgstr "പ്രോട്ടോടൈപ്പുകൾ പങ്കുവെയ്ക്കുക"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "പങ്കിട്ട ലൈബ്രറിയായി ചേർക്കുക"
@@ -184,19 +184,19 @@ msgstr "പങ്കിട്ട ലൈബ്രറിയായി ചേർക
msgid "dashboard.change-email"
msgstr "ഇമെയിൽ മാറ്റുക"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(പകർത്തുക)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "പുതിയ സംഘം രൂപീകരിക്കുക"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "നിങ്ങളുടെ പെൻപോട്ട്"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "സംഘത്തെ നീക്കുക"
@@ -208,7 +208,7 @@ msgstr "പകർപ്പ്"
msgid "dashboard.duplicate-multi"
msgstr "%s ഫയലുകളുടെ പകർപ്പ്"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "ആർട്ട്ബോർഡുകൾ പിഡിഎഫായി എക്സ്പോർട്ട് ചെയ്യുക"
@@ -220,7 +220,7 @@ msgstr "പിഡിഎഫായി എക്സ്പോർട്ട് ചെ
msgid "dashboard.export-multi"
msgstr "പെൻപോട്ട് %s ഫയലുകൾ എക്സ്പോർട്ട് ചെയ്യുക"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "എക്സ്പോർട്ട്"
diff --git a/frontend/translations/ms.po b/frontend/translations/ms.po
index b8a67812c9..0c62f58696 100644
--- a/frontend/translations/ms.po
+++ b/frontend/translations/ms.po
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-11 07:21+0000\n"
-"Last-Translator: Revenant \n"
+"PO-Revision-Date: 2025-10-07 16:35+0000\n"
+"Last-Translator: Anonymous \n"
"Language-Team: Malay "
" \n"
"Language: ms\n"
@@ -9,7 +9,7 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 5.13-dev\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:227
msgid "auth.create-demo-account"
@@ -127,7 +127,7 @@ msgstr "Cipta akaun"
msgid "auth.sidebar-tagline"
msgstr "Penyelesaian sumber terbuka untuk reka bentuk dan prototaip."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Syarat perkhidmatan"
@@ -146,7 +146,7 @@ msgstr "Kami telah menghantar e-mel pengesahan kepada"
msgid "branding-illustrations-marketing-pieces"
msgstr "... penjenamaan, ilustrasi, bahagian pemasaran, dll."
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Terbitkan"
@@ -217,7 +217,7 @@ msgstr "Kongsi prototaip"
msgid "common.share-link.view-all"
msgstr "Pilih semua"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Nyahterbitkan"
@@ -338,7 +338,7 @@ msgstr "Token akan luput pada %s"
msgid "dashboard.access-tokens.token-will-not-expire"
msgstr "Token tidak mempunyai tarikh luput"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Tambahkan sebagai Perpustakaan kongsi"
@@ -346,27 +346,27 @@ msgstr "Tambahkan sebagai Perpustakaan kongsi"
msgid "dashboard.change-email"
msgstr "tukar e-mel"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(salin)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Buat pasukan baharu"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Penpot anda"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Padam pasukan"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Muat turun fail Penpot (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Muat turun fail standard (.svg + .json)"
@@ -382,7 +382,7 @@ msgstr "Pendua %s fail"
msgid "dashboard.export-binary-multi"
msgstr "Muat turun %s fail Penpot (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Eksport papan sebagai PDF"
@@ -398,7 +398,7 @@ msgstr "Eksport fail Penpot %s"
msgid "dashboard.export-multiple.selected"
msgstr "%s daripada %s elemen dipilih"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Eksport"
@@ -575,11 +575,11 @@ msgstr "Memuat naik data ke pelayan (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Memuat naik fail: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Jemput orang ramai"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Tinggalkan pasukan"
@@ -591,7 +591,7 @@ msgstr "Perpustakaan & Templat"
msgid "dashboard.libraries-and-templates.explore"
msgstr "Terokai lebih banyak daripada mereka dan ketahui cara untuk menyumbang"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "Terdapat masalah mengimport templat. Templat tidak diimport."
@@ -623,7 +623,7 @@ msgstr "Pindah ke pasukan lain"
msgid "dashboard.new-file"
msgstr "+ Fail Baharu"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Fail Baharu"
@@ -631,7 +631,7 @@ msgstr "Fail Baharu"
msgid "dashboard.new-project"
msgstr "+ Projek baharu"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Projek Baharu"
@@ -639,7 +639,7 @@ msgstr "Projek Baharu"
msgid "dashboard.no-matches-for"
msgstr "Tiada padanan ditemui untuk \"%s\""
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Projek yang disemat akan muncul di sini"
@@ -655,7 +655,7 @@ msgstr "Alamat e-mel anda telah berjaya disahkan"
msgid "dashboard.notifications.password-saved"
msgstr "Kata laluan berjaya disimpan!"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s ahli"
@@ -671,7 +671,7 @@ msgstr "Pilihan"
msgid "dashboard.password-change"
msgstr "Tukar kata laluan"
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Semat/Nyahsemat"
@@ -692,7 +692,7 @@ msgstr "Alih keluar sebagai Pustaka Dikongsi"
msgid "dashboard.save-settings"
msgstr "Simpan tetapan"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Cari…"
@@ -730,7 +730,7 @@ msgstr[0] "Fail anda telah berjaya dibuat pendua"
msgid "dashboard.success-duplicate-project"
msgstr "Projek anda telah berjaya dibuat pendua"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Fail anda berjaya dialihkan"
@@ -742,15 +742,15 @@ msgstr "Fail anda telah berjaya dialihkan"
msgid "dashboard.success-move-project"
msgstr "Projek anda berjaya dialihkan"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Maklumat pasukan"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Anggota kumpulan"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Projek pasukan"
@@ -766,7 +766,7 @@ msgstr "Hasil carian"
msgid "dashboard.type-something"
msgstr "Taip untuk hasil carian"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Nyahterbit Perpustakaan"
@@ -774,38 +774,38 @@ msgstr "Nyahterbit Perpustakaan"
msgid "dashboard.update-settings"
msgstr "Kemas kini tetapan"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "Adalah aktif"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "Apabila cangkuk ini dicetuskan, butiran peristiwa akan dihantar"
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "Jenis kandungan"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "Cipta webhook"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "Webhook berjaya dihasilkan."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"Webhooks adalah cara mudah untuk membolehkan tapak web dan apl lain "
"dimaklumkan apabila acara tertentu berlaku di Penpot. Kami akan menghantar "
"permintaan POST ke setiap URL yang anda berikan."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "Tekan butang \"Tambah webhook\" untuk menambahnya."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "Tiada webhook dibuat setakat ini."
@@ -825,7 +825,7 @@ msgstr "E-mel"
msgid "dashboard.your-name"
msgstr "Nama anda"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Penpot anda"
@@ -841,11 +841,11 @@ msgstr "Perhatian"
msgid "ds.component-subtitle"
msgstr "Komponen untuk dikemas kini:"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Batal"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Ok"
@@ -889,11 +889,11 @@ msgstr "E-mel sudah disahkan."
msgid "errors.email-as-password"
msgstr "Anda tidak boleh menggunakan e-mel sebagai kata laluan"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "E-mel «%s» mempunyai banyak laporan lantunan kekal."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "E-mel «%s» telah dilaporkan sebagai spam atau melantun secara kekal."
@@ -914,7 +914,7 @@ msgstr ""
"yang anda cuba buka. Migrasi untuk '%s' perlu digunakan sebelum fail boleh "
"dibuka."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Sesuatu yang tidak kena telah berlaku."
@@ -947,7 +947,7 @@ msgstr "Jemputan ini mungkin dibatalkan atau mungkin tamat tempoh."
msgid "errors.ldap-disabled"
msgstr "Pengesahan LDAP dilumpuhkan."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "Anda telah mencapai petikan '%s'. Hubungi sokongan."
@@ -963,7 +963,7 @@ msgstr "Nampaknya kandungan imej tidak sepadan dengan sambungan fail."
msgid "errors.media-type-not-allowed"
msgstr "Nampaknya ini bukan imej yang sah."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"Profil yang anda jemput mempunyai e-mel yang diredamkan (laporan spam atau "
@@ -987,7 +987,7 @@ msgstr "Data tidak sah dalam papan klip"
msgid "errors.profile-blocked"
msgstr "Profil disekat"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr ""
"Profil anda mempunyai e-mel yang diredamkan (laporan spam atau lantunan "
@@ -1001,17 +1001,17 @@ msgstr "Pendaftaran dilumpuhkan pada masa ini."
msgid "errors.team-feature-mismatch"
msgstr "Ciri tidak serasi '%s' dikesan"
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr ""
"Ahli tidak mencukupi untuk meninggalkan pasukan, anda mungkin mahu "
"memadamkannya."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "Ahli yang anda cuba tetapkan tidak wujud."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr ""
"Pemilik tidak boleh meninggalkan pasukan, anda mesti menetapkan semula "
@@ -1033,31 +1033,31 @@ msgstr "Ralat Pengesahan"
msgid "errors.version-not-supported"
msgstr "Fail mempunyai nombor versi yang tidak serasi"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "Ralat sambungan, URL tidak dapat dicapai"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "URL tidak lulus pengesahan."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "Penghantaran terakhir tidak berjaya."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "Ralat pada pengesahan SSL."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "Masa tamat"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "Ralat yang tidak dijangka semasa mengesahkan"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "Status tidak dijangka %s"
@@ -1121,19 +1121,19 @@ msgstr "Ralat telah berlaku"
msgid "inspect.attributes.blur"
msgstr "Kabur"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Nilai"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1141,7 +1141,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Isi"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Muat turun sumber gambar"
@@ -1235,81 +1235,84 @@ msgstr "Padu"
msgid "inspect.attributes.stroke.width"
msgstr "Lebar"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Tipografi"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Keluarga Fon"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Saiz huruf"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Gaya Huruf"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "Berat Huruf"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Jarak Huruf"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Tinggi Garis"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Hiasan Teks"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Tiada"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Garis bawah"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Transformasian Teks"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "Huruf Tajuk"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "Huruf Kecil"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Tiada"
-#: src/app/main/ui/inspect/attributes/text.cljs:159
+#: src/app/main/ui/inspect/attributes/text.cljs:152
msgid "inspect.attributes.typography.text-transform.unset"
msgstr "Nyahset"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "Huruf Besar"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr ""
"Jika anda ingin mengetahui lebih lanjut tentang pemeriksaan reka bentuk, "
"lawati pusat bantuan Penpot"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "Maklumat lanjut tentang inspect"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr "Pilih bentuk, papan atau kumpulan untuk memeriksa sifat dan kod mereka"
@@ -1369,7 +1372,7 @@ msgstr "Teks"
msgid "inspect.tabs.info"
msgstr "Maklumat"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Pintasan"
@@ -1381,7 +1384,7 @@ msgstr "Terima"
msgid "labels.access-tokens"
msgstr "Token capaian"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "Aktif"
@@ -1389,7 +1392,7 @@ msgstr "Aktif"
msgid "labels.add-custom-font"
msgstr "Tambah fon tersuai"
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Pentadbir"
@@ -1397,7 +1400,7 @@ msgstr "Pentadbir"
msgid "labels.adobe-xd"
msgstr "Adobe XD"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Semua"
@@ -1420,7 +1423,7 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "Ralat pelayan (Bad Gateway)"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Batal"
@@ -1428,15 +1431,15 @@ msgstr "Batal"
msgid "labels.canva"
msgstr "Canva"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Tutup"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Komen"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Komuniti"
@@ -1444,7 +1447,7 @@ msgstr "Komuniti"
msgid "labels.confirm-password"
msgstr "Sahkan kata laluan"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Teruskan"
@@ -1456,11 +1459,11 @@ msgstr "Teruskan dengan"
msgid "labels.continue-with-penpot"
msgstr "Anda boleh meneruskan dengan akaun Penpot"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "Salin pautan"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Cipta"
@@ -1480,7 +1483,7 @@ msgstr "Fon tersuai"
msgid "labels.dashboard"
msgstr "Papan pemuka"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Padam"
@@ -1492,7 +1495,7 @@ msgstr "Padam komen"
msgid "labels.delete-comment-thread"
msgstr "Padam bebenang"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Padam jemputan"
@@ -1504,15 +1507,15 @@ msgstr "Padam fail %s"
msgid "labels.developer"
msgstr "Pembangun"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "Buang"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Draf"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Sunting"
@@ -1520,15 +1523,15 @@ msgstr "Sunting"
msgid "labels.edit-file"
msgstr "Sunting fail"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Penyunting"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Tamat tempoh"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Eksport"
@@ -1556,7 +1559,7 @@ msgstr "Pembekal fon"
msgid "labels.font-variants"
msgstr "Gaya"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Fon"
@@ -1570,11 +1573,11 @@ msgstr "Pengasas/VP"
msgid "labels.freelancer"
msgstr "Saya seorang pekerja bebas (freelancer)"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "Repositori Github"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Beri maklum balas"
@@ -1582,15 +1585,15 @@ msgstr "Beri maklum balas"
msgid "labels.go-back"
msgstr "Pergi balik"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Pusat Bantuan"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Sembunyikan komen yang diselesaikan"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "tidak aktif"
@@ -1612,7 +1615,7 @@ msgstr "Ralat Dalaman"
msgid "labels.invision"
msgstr "InVision"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Jemputan"
@@ -1620,7 +1623,7 @@ msgstr "Jemputan"
msgid "labels.language"
msgstr "Bahasa"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Perpustakaan & Templat"
@@ -1628,7 +1631,7 @@ msgstr "Perpustakaan & Templat"
msgid "labels.log-or-sign"
msgstr "Log masuk atau daftar"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Log keluar"
@@ -1636,11 +1639,11 @@ msgstr "Log keluar"
msgid "labels.marketing"
msgstr "Pemasaran"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Ahli"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Ahli"
@@ -1648,17 +1651,17 @@ msgstr "Ahli"
msgid "labels.new-password"
msgstr "Kata laluan baharu"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "Seterusnya"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr ""
"Anda telah melihat semua yang baru! Pemberitahuan ulasan baharu akan "
"dipaparkan di sini."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "Tiada jemputan tertunda."
@@ -1673,7 +1676,7 @@ msgstr ""
msgid "labels.not-found.main-message"
msgstr "Alamak!"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "%s fail"
@@ -1683,7 +1686,7 @@ msgid "labels.num-of-frames"
msgid_plural "labels.num-of-frames"
msgstr[0] "%s papan"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "%s projek"
@@ -1705,7 +1708,7 @@ msgstr "atau"
msgid "labels.other"
msgstr "Lain-lain (nyatakan)"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Pemilik"
@@ -1713,7 +1716,7 @@ msgstr "Pemilik"
msgid "labels.password"
msgstr "Kata laluan"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "Belum selesai"
@@ -1729,11 +1732,11 @@ msgstr "Pengurus Produk atau Projek"
msgid "labels.profile"
msgstr "Profil"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Projek"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Nota keluaran"
@@ -1747,11 +1750,11 @@ msgstr "Muat semula fail"
msgid "labels.remove"
msgstr "Alih keluar"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Buang ahli"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Namakan semula"
@@ -1759,7 +1762,7 @@ msgstr "Namakan semula"
msgid "labels.rename-team"
msgstr "Namakan semula pasukan"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "Hantar semula jemputan"
@@ -1767,15 +1770,15 @@ msgstr "Hantar semula jemputan"
msgid "labels.retry"
msgstr "Cuba semula"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Peranan"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Simpan"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:715
+#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:730
msgid "labels.search"
msgstr "Cari"
@@ -1803,7 +1806,7 @@ msgstr "Kami sedang menjalankan penyelenggaraan berjadual pada sistem kami."
msgid "labels.service-unavailable.main-message"
msgstr "Perkhidmatan Tidak Tersedia"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Tetapan"
@@ -1815,11 +1818,11 @@ msgstr "Kongsi"
msgid "labels.share-prototype"
msgstr "Kongsi prototaip"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Perpustakaan"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Paparkan semua komen"
@@ -1827,7 +1830,7 @@ msgstr "Paparkan semua komen"
msgid "labels.show-comments-list"
msgstr "Paparkan senarai komen"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Paparkan komen anda sahaja"
@@ -1839,7 +1842,7 @@ msgstr "Sketch"
msgid "labels.start"
msgstr "Mula"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Status"
@@ -1847,7 +1850,7 @@ msgstr "Status"
msgid "labels.student-teacher"
msgstr "Pelajar atau guru"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Tutorial"
@@ -1875,15 +1878,15 @@ msgstr "Muat naik fon tersuai"
msgid "labels.uploading"
msgstr "Memuat naik…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "LIHAT SAHAJA"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Penonton"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Cangkuk Web (Webhook)"
@@ -1891,11 +1894,11 @@ msgstr "Cangkuk Web (Webhook)"
msgid "labels.write-new-comment"
msgstr "Tulis komen baharu"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(anda)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "Akaun anda"
@@ -1974,19 +1977,19 @@ msgstr "Cipta token"
msgid "modals.create-access-token.title"
msgstr "Jana token capaian"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "Cipta cangkuk web (webhook)"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "Cipta cangkuk web (webhook)"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "URL muatan"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://example.com/postreceive"
@@ -2034,11 +2037,11 @@ msgstr ""
msgid "modals.delete-comment-thread.title"
msgstr "Padam perbualan"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "Adakah anda pasti ingin memadamkan anotasi ini?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "Padam anotasi"
@@ -2086,11 +2089,11 @@ msgstr ""
msgid "modals.delete-font.title"
msgstr "Memadam fon"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Adakah anda pasti mahu memadamkan halaman ini?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Padam halaman"
@@ -2131,29 +2134,29 @@ msgid "modals.delete-shared-confirm.title"
msgid_plural "modals.delete-shared-confirm.title"
msgstr[0] "Memadam fail"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Padam pasukan"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Adakah anda pasti mahu memadamkan pasukan ini? Semua projek dan fail yang "
"dikaitkan dengan pasukan akan dipadamkan secara kekal."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Memadam pasukan"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Padam ahli"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Adakah anda pasti mahu memadamkan ahli ini daripada pasukan?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Padam ahli pasukan"
@@ -2164,51 +2167,51 @@ msgstr[0] ""
"Aset yang telah digunakan dalam fail ini akan kekal di sana (tiada reka "
"bentuk akan rosak)."
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "Padam cangkuk web (webhook)"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "Adakah anda pasti mahu memadamkan cangkuk web (webhook) ini?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "Memadam cangkuk web (webhook)"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "Sunting cangkuk web (webhook)"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "Sunting cangkuk web (webhook)"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Hantar jemputan"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "E-mel, dipisahkan dengan koma"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr ""
"Sesetengah e-mel adalah daripada ahli pasukan semasa. Jemputan mereka tidak "
"akan dihantar."
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "Jemput ahli ke pasukan"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"Memandangkan anda satu-satunya ahli pasukan, pasukan ini akan dipadamkan "
"bersama-sama dengan projek dan failnya."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "Adakah anda pasti mahu meninggalkan pasukan %s?"
@@ -2236,51 +2239,51 @@ msgstr "Pilih ahli untuk dinaikkan pangkat"
msgid "modals.leave-and-reassign.title"
msgstr "Sebelum anda pergi"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Tinggalkan pasukan"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Adakah anda pasti mahu meninggalkan pasukan ini?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Meninggalkan pasukan"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "Jumlah anjakan"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Pindah hak milik"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"Jika anda memindahkan pemilikan, anda akan menukar peranan anda kepada "
"Pentadbir, kehilangan beberapa kebenaran ke atas pasukan ini. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr ""
"Anda adalah pemilik semasa pasukan ini. Adakah anda pasti mahu menjadikan "
"%s pemilik baharu pasukan?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Pemilik pasukan baru"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "Terbitkan"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "Pustaka anda kosong. Adakah anda pasti mahu menerbitkannya?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "Terbitkan perpustakaan kosong"
@@ -2332,21 +2335,21 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Kemas kini komponen dalam pustaka kongsi"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Kemas kini"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Batal"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"Anda akan mengemas kini komponen dalam pustaka kongsi. Ini mungkin "
"menjejaskan fail lain yang menggunakannya."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Kemas kini komponen dalam pustaka kongsi"
@@ -2354,11 +2357,11 @@ msgstr "Kemas kini komponen dalam pustaka kongsi"
msgid "notifications.by-code.upgrade-version"
msgstr "Versi baharu tersedia, sila muat semula halaman"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "Jemputan berjaya dihantar"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "Pautan jemputan disalin"
@@ -2514,7 +2517,7 @@ msgstr ""
"Ingat untuk memasukkan semua orang. Pemaju, pereka bentuk, pengurus... "
"kepelbagaian bertambah :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "Jemput dengan peranan:"
@@ -2623,312 +2626,304 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "Pergi ke log masuk"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "Tanggalkan"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "Bercampur"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Asas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "Papan pemuka"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Penonton"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Ruang kerja"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Penjajaran"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Sunting"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "Generik"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "Generik"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Menu utama"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "Ubah suai lapisan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Navigasi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Navigasi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Navigasi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Panel"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "laluan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Bentuk"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "Teks"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Alatan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Zum"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Zum"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Komen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "Tambah nota"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "Sejajarkan bahagian bawah"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "Jajarkan tengah"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "Jajarkan tengah secara mendatar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "Mengimbangkan keselarasan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "Jajar ke kiri"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "Sejajar ke kanan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "Jajarkan atas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "Jajarkan tengah secara menegak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "Cipta papan daripada pemilihan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "Togol tebal"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "Perbezaan Boolean"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "Pengecualian Boolean"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "Persimpangan Boolean"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "Kesatuan Boolean"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "Hantar ke paling belakang"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Hantar ke belakang"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "Bawa ke hadapan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "Bawa ke paling hadapan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "Kosongkan buat asal"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Salin"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "Buat baharu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Potong"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "Zum keluar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Padam"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "Padamkan nod"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "Tanggalkan komponen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Lengkung"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "elips"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Papan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "Lukis laluan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Laluan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Segi empat tepat"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Teks"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Pendua"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "Batal"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "Eksport bentuk"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "Zum untuk muat semua"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "Terbalikkan secara mendatar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "Terbalikkan secara menegak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "Kurangkan saiz fon"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "Tambah saiz fon"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "Pergi ke draf"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "Pergi ke perpustakaan kongsi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Cari"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Kumpulan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "Edarkan secara mendatar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "Tunjukkan / Sembunyikan UI"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "Zum kedalam"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "Masukkan gambar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "Togol condong"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "Sambung nod"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
-msgid "shortcuts.letter-spacing-dec"
-msgstr "Kurangkan jarak huruf"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "Penambahan jarak huruf"
diff --git a/frontend/translations/nb_NO.po b/frontend/translations/nb_NO.po
index 2786f63764..972a70998c 100644
--- a/frontend/translations/nb_NO.po
+++ b/frontend/translations/nb_NO.po
@@ -1,15 +1,15 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-11 07:21+0000\n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
"Last-Translator: Allan Nordhøy \n"
-"Language-Team: Norwegian Bokmål "
-" \n"
+"Language-Team: Norwegian Bokmål \n"
"Language: nb_NO\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.13-dev\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/recovery.cljs:67
msgid "auth.confirm-password"
@@ -51,27 +51,27 @@ msgstr "Opprett konto"
msgid "auth.register-title"
msgstr "Opprett konto"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Legg til som delt bibliotek"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(kopi)"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Din Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Slett lag"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Inviter til team"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Forlat team"
@@ -99,7 +99,7 @@ msgstr "+ Ny fil"
msgid "dashboard.new-project"
msgstr "+ Nytt prosjekt"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s medlemmer"
@@ -111,7 +111,7 @@ msgstr "Åpne fil i ny fane"
msgid "dashboard.password-change"
msgstr "Endre passord"
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Fest/løsne"
@@ -128,7 +128,7 @@ msgstr "Ønsker du å fjerne kontoen din?"
msgid "dashboard.remove-shared"
msgstr "Fjern som delt bibliotek"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Søk …"
@@ -148,15 +148,15 @@ msgstr "Velg drakt"
msgid "dashboard.show-all-files"
msgstr "Vis alle filer"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Teaminfo"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Teammedlemmer"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Lagprosjekter"
@@ -172,15 +172,15 @@ msgstr "Din konto"
msgid "dashboard.your-name"
msgstr "Ditt navn"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Din Penpot"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Avbryt"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "OK"
@@ -208,11 +208,11 @@ msgstr "Beskrivelse"
msgid "feedback.subject"
msgstr "Emne"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Verdi"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Last ned kildebilde"
@@ -250,19 +250,19 @@ msgstr "Skygge"
msgid "inspect.attributes.stroke.width"
msgstr "Bredde"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Typografi"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Skriftfamilie"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Skriftstørrelse"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Skriftstil"
@@ -302,7 +302,7 @@ msgstr "Info"
msgid "labels.accept"
msgstr "Godta"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Avbryt"
@@ -310,7 +310,7 @@ msgstr "Avbryt"
msgid "labels.confirm-password"
msgstr "Bekreft passord"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Opprett"
@@ -330,7 +330,7 @@ msgstr "Egendefinerte skrifter"
msgid "labels.dashboard"
msgstr "Oversikt"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Slett"
@@ -346,11 +346,11 @@ msgstr "Slett tråd"
msgid "labels.delete-multi-files"
msgstr "Slett %s filer"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Kladder"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Rediger"
@@ -362,7 +362,7 @@ msgstr "Skriftfamilie"
msgid "labels.font-providers"
msgstr "Skrifttilbydere"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Skrifter"
@@ -374,11 +374,11 @@ msgstr "Installerte skrifter"
msgid "labels.language"
msgstr "Språk"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Logg ut"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Medlemmer"
@@ -390,7 +390,7 @@ msgstr "Nytt passord"
msgid "labels.old-password"
msgstr "Gammelt passord"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Eier"
@@ -402,7 +402,7 @@ msgstr "Passord"
msgid "labels.profile"
msgstr "Profil"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Prosjekter"
@@ -411,7 +411,7 @@ msgstr "Prosjekter"
msgid "labels.remove"
msgstr "Fjern"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Gi nytt navn"
@@ -419,11 +419,11 @@ msgstr "Gi nytt navn"
msgid "labels.retry"
msgstr "Prøv igjen"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Rolle"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Lagre"
@@ -439,15 +439,15 @@ msgstr "Send"
msgid "labels.sending"
msgstr "Sender …"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Innstillinger"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Delte bibliotek"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Vis alle kommentarer"
@@ -499,7 +499,7 @@ msgstr "Slett fil"
msgid "modals.delete-file-multi-confirm.accept"
msgstr "Slett filer"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Slett side"
@@ -507,23 +507,23 @@ msgstr "Slett side"
msgid "modals.delete-project-confirm.accept"
msgstr "Slett prosjekt"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Slett medlem"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Slett teammedlem"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Forlat team"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Avbryt"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "Invitasjon sendt"
@@ -543,7 +543,7 @@ msgstr "Passord - Penpot"
msgid "title.settings.profile"
msgstr "Profil - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Innstillinger - %s - Penpot"
@@ -551,23 +551,23 @@ msgstr "Innstillinger - %s - Penpot"
msgid "title.workspace"
msgstr "%s - Penpot"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Farger"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Komponenter"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "Opprett en gruppe"
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Slett"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Rediger"
@@ -576,15 +576,15 @@ msgstr "Rediger"
msgid "workspace.assets.graphics"
msgstr "Grafikk"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Gruppe"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "Gruppenavn"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Gi nytt navn"
@@ -597,7 +597,7 @@ msgstr "Skrift"
msgid "workspace.assets.typography.font-size"
msgstr "Størrelse"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Vis regler"
@@ -606,10 +606,6 @@ msgstr "Vis regler"
msgid "workspace.libraries.add"
msgstr "Legg til"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s farger"
-
#: src/app/main/ui/workspace/color_palette_ctx_menu.cljs:88, src/app/main/ui/workspace/colorpicker/libraries.cljs:48, src/app/main/ui/workspace/text_palette_ctx_menu.cljs:49
msgid "workspace.libraries.colors.file-library"
msgstr "Filbibliotek"
@@ -618,27 +614,23 @@ msgstr "Filbibliotek"
msgid "workspace.libraries.colors.recent-colors"
msgstr "Nylige farger"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Lagre fargestil"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s komponenter"
-
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Filbibliotek"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Komponent"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Design"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "Eksporterer …"
@@ -647,7 +639,7 @@ msgstr "Eksporterer …"
msgid "workspace.options.grid.params.columns"
msgstr "Kolonner"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Høyde"
@@ -656,7 +648,7 @@ msgstr "Høyde"
msgid "workspace.options.grid.params.rows"
msgstr "Rader"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "Sett som forvalg"
@@ -670,22 +662,22 @@ msgstr "Størrelse"
msgid "workspace.options.grid.params.type"
msgstr "Type"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "Bruk forvalg"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Bredde"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Rader"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Lysne"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Skjerm"
diff --git a/frontend/translations/nl.po b/frontend/translations/nl.po
index c7e9dca3fc..b45c77a55f 100644
--- a/frontend/translations/nl.po
+++ b/frontend/translations/nl.po
@@ -1,15 +1,15 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-28 10:46+0000\n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
"Last-Translator: Stephan Paternotte \n"
-"Language-Team: Dutch "
-" \n"
+"Language-Team: Dutch \n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.13\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -176,7 +176,7 @@ msgstr "De open-source oplossing voor ontwerp en prototyping."
msgid "auth.terms-and-privacy-agreement"
msgstr "Ik ga akkoord met de [servicevoorwaarden] (%s) en [privacybeleid] (%s)."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Gebruiksvoorwaarden"
@@ -203,7 +203,7 @@ msgstr "…branding, illustraties, marketingstukken, etc."
msgid "comments.mentions.not-found"
msgstr "Geen mensen gevonden voor @%s"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Publiceren"
@@ -275,7 +275,7 @@ msgstr "Prototypes delen"
msgid "common.share-link.view-all"
msgstr "Alles selecteren"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Publicatie ongedaan maken"
@@ -400,7 +400,7 @@ msgstr "Het toegangsbewijs heeft geen verloopdatum"
msgid "dashboard.add-file"
msgstr "Bestand toevoegen"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Toevoegen als gedeelde bibliotheek"
@@ -408,31 +408,31 @@ msgstr "Toevoegen als gedeelde bibliotheek"
msgid "dashboard.change-email"
msgstr "E-mailadres wijzigen"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(kopie)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Nieuw team aanmaken"
-#: src/app/main/ui/workspace/main_menu.cljs:631
+#: src/app/main/ui/workspace/main_menu.cljs:659
msgid "dashboard.create-version-menu"
msgstr "Deze versie vastmaken"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Jouw Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Team verwijderen"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Penpot-bestand downloaden (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Standaardbestand downloaden (.svg + .json)"
@@ -516,7 +516,7 @@ msgstr "Begin met het bouwen van geweldige dingen"
msgid "dashboard.export-binary-multi"
msgstr "%s Penpot-bestanden downloaden (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Borden exporteren als PDF"
@@ -532,7 +532,7 @@ msgstr "%s Penpot-bestanden exporteren"
msgid "dashboard.export-multiple.selected"
msgstr "%s van %s elementen geselecteerd"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Exporteren"
@@ -747,11 +747,11 @@ msgstr "Gegevens uploaden naar server (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Bestand aan het uploaden: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Nodig mensen uit"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Team verlaten"
@@ -759,7 +759,7 @@ msgstr "Team verlaten"
msgid "dashboard.libraries-and-templates"
msgstr "Bibliotheken & sjablonen"
-#: src/app/main/ui/dashboard/templates.cljs:259
+#: src/app/main/ui/dashboard/templates.cljs:267
msgid "dashboard.libraries-and-templates.description"
msgstr ""
"Hier heb je een aantal bibliotheken en sjablonen die je aan je project kunt "
@@ -769,7 +769,7 @@ msgstr ""
msgid "dashboard.libraries-and-templates.explore"
msgstr "Ontdek er meer van en weet hoe je kunt bijdragen"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr ""
"Er is een probleem opgetreden bij het importeren van het sjabloon. Het "
@@ -807,7 +807,7 @@ msgstr "Verplaats naar ander team"
msgid "dashboard.new-file"
msgstr "+ Nieuw bestand"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Nieuw bestand"
@@ -815,7 +815,7 @@ msgstr "Nieuw bestand"
msgid "dashboard.new-project"
msgstr "+ Nieuw project"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Nieuw project"
@@ -823,11 +823,11 @@ msgstr "Nieuw project"
msgid "dashboard.no-matches-for"
msgstr "Geen overeenkomsten gevonden voor \"%s\""
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Vastgemaakte projecten worden hier weergegeven"
-#: src/app/main/ui/dashboard/comments.cljs:90
+#: src/app/main/ui/dashboard/comments.cljs:91
msgid "dashboard.notifications"
msgstr "Meldingen"
@@ -839,7 +839,7 @@ msgstr "Je e-mailadres is succesvol bijgewerkt"
msgid "dashboard.notifications.email-verified-successfully"
msgstr "Je e-mailadres is geverifieerd"
-#: src/app/main/data/profile.cljs:272
+#: src/app/main/data/profile.cljs:273
msgid "dashboard.notifications.notifications-saved"
msgstr "Meldingsinstellingen bijgewerkt"
@@ -847,11 +847,11 @@ msgstr "Meldingsinstellingen bijgewerkt"
msgid "dashboard.notifications.password-saved"
msgstr "Wachtwoord succesvol opgeslagen!"
-#: src/app/main/ui/dashboard/comments.cljs:44
+#: src/app/main/ui/dashboard/comments.cljs:45
msgid "dashboard.notifications.view"
msgstr "Meldingen weergeven"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s leden"
@@ -883,7 +883,7 @@ msgstr "Je bent nu eigenaar van dit team."
msgid "dashboard.permissions-change.viewer"
msgstr "Je bent nu een lezer in dit team."
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Vastzetten/losmaken"
@@ -920,7 +920,7 @@ msgstr "Je maakt geen deel meer uit van het team “%s“."
msgid "dashboard.save-settings"
msgstr "Instellingen opslaan"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Zoeken…"
@@ -1012,7 +1012,7 @@ msgstr "Meldingen"
msgid "dashboard.show-all-files"
msgstr "Alle bestanden tonen"
-#: src/app/main/ui/workspace/main_menu.cljs:638
+#: src/app/main/ui/workspace/main_menu.cljs:666
msgid "dashboard.show-version-history"
msgstr "Versie-geschiedenis"
@@ -1036,7 +1036,7 @@ msgstr[1] "Je bestanden zijn succesvol gedupliceerd"
msgid "dashboard.success-duplicate-project"
msgstr "Je project is succesvol gedupliceerd"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Je bestand is succesvol verplaatst"
@@ -1048,15 +1048,15 @@ msgstr "Je bestanden zijn succesvol verplaatst"
msgid "dashboard.success-move-project"
msgstr "Je project is succesvol verplaatst"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Team info"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Teamleden"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Teamprojecten"
@@ -1076,7 +1076,7 @@ msgstr "Zoekresultaten"
msgid "dashboard.type-something"
msgstr "Typ om te zoeken"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Publicatie Bibliotheek ongedaan maken"
@@ -1084,50 +1084,50 @@ msgstr "Publicatie Bibliotheek ongedaan maken"
msgid "dashboard.update-settings"
msgstr "Instellingen bijwerken"
-#: src/app/main/ui/dashboard/sidebar.cljs:856
+#: src/app/main/ui/dashboard/sidebar.cljs:976
msgid "dashboard.upgrade-plan.no-limits"
msgstr "Onbeperkte creativiteit"
-#: src/app/main/ui/dashboard/sidebar.cljs:854
+#: src/app/main/ui/dashboard/sidebar.cljs:974
msgid "dashboard.upgrade-plan.penpot-free"
msgstr "Penpot Free"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "Is actief"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "Wanneer deze hook wordt getriggerd, worden gebeurtenisdetails afgeleverd"
-#: src/app/main/ui/dashboard/team.cljs:982
+#: src/app/main/ui/dashboard/team.cljs:1160
msgid "dashboard.webhooks.cant-edit"
msgstr "Je kunt alleen door jou gemaakte webhooks verwijderen of wijzigen."
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "Contenttype"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "Webhook aanmaken"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "Webhook is succesvol aangemaakt."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"Webhooks zijn een eenvoudige manier om andere websites en apps op de hoogte "
"te stellen wanneer bepaalde gebeurtenissen bij Penpot plaatsvinden. We "
"sturen een POST-verzoek naar elke URL die je opgeeft."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "Druk op de knop \"Webhook aanmaken\" om er een toe te voegen."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "Er zijn nog geen webhooks aangemaakt."
@@ -1147,7 +1147,7 @@ msgstr "E-mail"
msgid "dashboard.your-name"
msgstr "Naam"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Jouw Penpot"
@@ -1163,15 +1163,15 @@ msgstr "Waarschuwing"
msgid "ds.component-subtitle"
msgstr "Componenten bijwerken:"
-#: src/app/main/ui/workspace/plugins.cljs:338, src/app/main/ui/workspace/plugins.cljs:392
+#: src/app/main/ui/workspace/plugins.cljs:339, src/app/main/ui/workspace/plugins.cljs:393
msgid "ds.confirm-allow"
msgstr "Toestaan"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Annuleren"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Oké"
@@ -1179,6 +1179,26 @@ msgstr "Oké"
msgid "ds.confirm-title"
msgstr "Weet je het zeker?"
+#: src/app/main/ui/ds/controls/numeric_input.cljs:98
+msgid "ds.inputs.numeric-input.no-applicable-tokens"
+msgstr "Geen tokens van toepassing in actieve verzamelingen of thema's."
+
+#: src/app/main/ui/ds/controls/numeric_input.cljs:99
+msgid "ds.inputs.numeric-input.no-matches"
+msgstr "Geen overeenkomsten gevonden."
+
+#: src/app/main/ui/ds/controls/numeric_input.cljs:641, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:138
+msgid "ds.inputs.numeric-input.open-token-list-dropdown"
+msgstr "Lijst met tokens openen"
+
+#: src/app/main/ui/ds/controls/utilities/token_field.cljs:85, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:133
+msgid "ds.inputs.token-field.detach-token"
+msgstr "Token loskoppelen"
+
+#: src/app/main/ui/ds/controls/utilities/token_field.cljs:40, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:96, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:103
+msgid "ds.inputs.token-field.no-active-token-option"
+msgstr "Dit token is niet beschikbaar in een actieve verzameling of thema."
+
#: src/app/main/data/auth.cljs:314
msgid "errors.auth-provider-not-allowed"
msgstr "Auth-provider is niet toegestaan voor dit profiel"
@@ -1235,7 +1255,7 @@ msgstr "Hoewel Penpot dit soort componenten niet meer ondersteunt, kun je wel"
msgid "errors.deprecated.contact.text"
msgstr "contact met ons opnemen"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:266
+#: src/app/main/data/workspace/tokens/library_edit.cljs:274
msgid "errors.drop-token-set-parent-to-child"
msgstr ""
"Een bovenliggende verzameling kan niet worden verwijderd naar een "
@@ -1261,11 +1281,11 @@ msgstr "E-mail komt niet overeen met de uitnodiging."
msgid "errors.email-domain-not-allowed"
msgstr "Domein niet toegestaan"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "Het emailadres «%s» heeft veel permanente bounce-rapporten."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "Het e-mailadres «%s» is gemeld als spam of permanent teruggestuurd."
@@ -1280,11 +1300,6 @@ msgstr ""
msgid "errors.feature-not-supported"
msgstr "Functie '%s' wordt niet ondersteund."
-#: src/app/main/ui/auth/register.cljs, src/app/main/ui/dashboard/team_form.cljs, src/app/main/ui/onboarding/team_choice.cljs, src/app/main/ui/setti ngs/access_tokens.cljs, src/app/main/ui/settings/feedback.cljs, src/app/main/ui/settings/profile.cljs, src/app/main/ui/workspace/sidebar/assets.cljs
-#, unused
-msgid "errors.field-max-length"
-msgstr "Moet maximaal 1 tekens bevatten."
-
#, unused
msgid "errors.field-min-length"
msgstr "Moet minimaal 1 teken bevatten."
@@ -1306,7 +1321,7 @@ msgstr ""
"moeten migraties voor '%s' worden toegepast voordat het bestand kan worden "
"geopend."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Er ging iets mis."
@@ -1356,11 +1371,11 @@ msgstr "Deze uitnodiging is mogelijk geannuleerd of verlopen."
msgid "errors.ldap-disabled"
msgstr "LDAP-authenticatie is uitgeschakeld."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "Je hebt de limiet van '%s' bereikt. Neem contact op met support."
-#: src/app/main/ui/dashboard/team.cljs:185, src/app/main/ui/onboarding/team_choice.cljs:101
+#: src/app/main/ui/dashboard/team.cljs:187, src/app/main/ui/dashboard/team.cljs:849, src/app/main/ui/onboarding/team_choice.cljs:101
msgid "errors.maximum-invitations-by-request-reached"
msgstr ""
"Het maximale (%s) aantal e-mails dat in één verzoek kan worden uitgenodigd, "
@@ -1380,7 +1395,7 @@ msgstr ""
msgid "errors.media-type-not-allowed"
msgstr "Het lijkt erop dat dit geen geldige afbeelding is."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"Het profiel dat je uitnodigt, heeft e-mails gedempt (spammeldingen of hoge "
@@ -1416,7 +1431,7 @@ msgstr "Ongeldige gegevens op klembord"
msgid "errors.profile-blocked"
msgstr "Het profiel is geblokkeerd"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr "Je profiel heeft e-mails gedempt (spammeldingen of hoge bounces)."
@@ -1432,23 +1447,23 @@ msgstr "SVG is ongeldig of misvormd"
msgid "errors.team-feature-mismatch"
msgstr "Incompatibele functie '%s' gedetecteerd"
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr ""
"Onvoldoende leden om het team te verlaten, je kunt dit team maar beter "
"verwijderen."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "Het lid dat je probeert toe te wijzen, bestaat niet."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr ""
"Eigenaar kan het team niet verlaten, je moet de rol van eigenaar eerst "
"overdragen."
-#: src/app/main/data/workspace/tokens/library_edit.cljs:153, src/app/main/data/workspace/tokens/library_edit.cljs:183
+#: src/app/main/data/workspace/tokens/library_edit.cljs:150, src/app/main/data/workspace/tokens/library_edit.cljs:180
msgid "errors.token-set-already-exists"
msgstr "Er bestaat al een verzameling met dezelfde naam"
@@ -1457,13 +1472,13 @@ msgstr "Er bestaat al een verzameling met dezelfde naam"
msgid "errors.token-set-doesnt-exists"
msgstr "Kan een onbekende verzameling niet dupliceren"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:265
+#: src/app/main/data/workspace/tokens/library_edit.cljs:273
msgid "errors.token-set-exists-on-drop"
msgstr ""
"Kan sleepactie niet voltooien, een verzameling met dezelfde naam bestaat "
"daar al."
-#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:99
+#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:95
msgid "errors.token-theme-already-exists"
msgstr "Thema-optie met dezelfde naam bestaat"
@@ -1491,31 +1506,31 @@ msgstr "Deze versie is vergrendeld en kan niet door anderen worden verwijderd"
msgid "errors.version-not-supported"
msgstr "Bestand heeft een incompatibel versienummer"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "Verbindingsfout, URL niet bereikbaar"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "URL komt niet door de validatie."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "Laatste levering was niet succesvol."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "Fout bij SSL-validatie."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "Time-out"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "Onverwachte fout bij het valideren"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "Onverwachte status %s"
@@ -1579,7 +1594,7 @@ msgstr "er is een fout opgetreden"
msgid "inspect.attributes.blur"
msgstr "Vervagen"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Waarde"
@@ -1587,15 +1602,15 @@ msgstr "Waarde"
msgid "inspect.attributes.color"
msgstr "Kleur"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1603,7 +1618,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Vullen"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Bronafbeelding downloaden"
@@ -1697,35 +1712,37 @@ msgstr "Solide"
msgid "inspect.attributes.stroke.width"
msgstr "Breedte"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Typografie"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Lettertype-familie"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Lettergrootte"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Lettertype-stijl"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "Lettertype dikte"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Letterafstand"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Regelafstand"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Tekst decoratie"
@@ -1733,35 +1750,41 @@ msgstr "Tekst decoratie"
msgid "inspect.attributes.typography.text-decoration.line-through"
msgstr "Doorstrepen"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Geen"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:137
+#, fuzzy
+msgid "inspect.attributes.typography.text-decoration.strikethrough"
+msgstr ""
+
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Onderstrepen"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Teksttransformatie"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "Beginhoofdletters"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "Kleine letters"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Geen"
-#: src/app/main/ui/inspect/attributes/text.cljs:159
+#: src/app/main/ui/inspect/attributes/text.cljs:152
msgid "inspect.attributes.typography.text-transform.unset"
msgstr "Uitschakelen"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "HOOFDLETTERS"
@@ -1773,17 +1796,17 @@ msgstr "Eigenschappen van de variant"
msgid "inspect.attributes.variants"
msgstr "Varianten eigenschappen"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr ""
"Als je meer wilt weten over ontwerpinspectie, ga dan naar het helpcentrum "
"van Penpot"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "Meer info over inspecteren"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr ""
"Selecteer een vorm, bord of groep om hun eigenschappen en code te "
@@ -1849,15 +1872,23 @@ msgstr "SVG"
msgid "inspect.tabs.code.selected.text"
msgstr "Tekst"
+#: src/app/main/ui/inspect/right_sidebar.cljs:109
+msgid "inspect.tabs.computed"
+msgstr "Berekend"
+
#: src/app/main/ui/inspect/right_sidebar.cljs:114
msgid "inspect.tabs.info"
msgstr "Informatie"
-#: src/app/main/ui/dashboard/comments.cljs:95
+#: src/app/main/ui/inspect/right_sidebar.cljs:165
+msgid "inspect.tabs.switcher.label"
+msgstr "Laaginfo"
+
+#: src/app/main/ui/dashboard/comments.cljs:96
msgid "label.mark-all-as-read"
msgstr "Alles als gelezen markeren"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Sneltoetsen"
@@ -1869,11 +1900,11 @@ msgstr "Accepteren"
msgid "labels.access-tokens"
msgstr "Toegangsbewijzen"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "Actief"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.add"
msgstr "Toevoegen"
@@ -1881,11 +1912,11 @@ msgstr "Toevoegen"
msgid "labels.add-custom-font"
msgstr "Eigen lettertype toevoegen"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.adding"
msgstr "Toevoegen…"
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Admin"
@@ -1893,7 +1924,7 @@ msgstr "Admin"
msgid "labels.adobe-xd"
msgstr "Adobe XD"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Alles"
@@ -1916,7 +1947,7 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "Bad Gateway"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Annuleren"
@@ -1924,11 +1955,11 @@ msgstr "Annuleren"
msgid "labels.canva"
msgstr "Canva"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Sluiten"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:186
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:181
msgid "labels.collapse"
msgstr "Samenvouwen"
@@ -1940,11 +1971,11 @@ msgstr "Commentaar"
msgid "labels.comment.mark-as-solved"
msgstr "Markeren als opgelost"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Commentaar"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Gemeenschap"
@@ -1952,7 +1983,7 @@ msgstr "Gemeenschap"
msgid "labels.confirm-password"
msgstr "Wachtwoord bevestigen"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Doorgaan"
@@ -1968,11 +1999,11 @@ msgstr "Je kunt doorgaan met een Penpot-account"
msgid "labels.copy"
msgstr "Kopie"
-#: src/app/main/ui/inspect/attributes/common.cljs:118
+#: src/app/main/ui/inspect/attributes/common.cljs:99
msgid "labels.copy-color"
msgstr "Kleur kopiëren"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "Link kopiëren"
@@ -1980,7 +2011,7 @@ msgstr "Link kopiëren"
msgid "labels.copyright"
msgstr "Kaleidos @2024"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Aanmaken"
@@ -2000,7 +2031,7 @@ msgstr "Eigen lettertypen"
msgid "labels.dashboard"
msgstr "Dashboard"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Verwijderen"
@@ -2012,7 +2043,7 @@ msgstr "Commentaar verwijderen"
msgid "labels.delete-comment-thread"
msgstr "Thread verwijderen"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Uitnodiging verwijderen"
@@ -2029,19 +2060,19 @@ msgstr "Ontwikkeling"
msgid "labels.director"
msgstr "Directeur"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "Weggooien"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Concepten"
-#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:65
msgid "labels.duplicate"
msgstr "Dupliceren"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Bewerken"
@@ -2049,11 +2080,11 @@ msgstr "Bewerken"
msgid "labels.edit-file"
msgstr "Bestand bewerken"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Redacteur"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:302
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:301
msgid "labels.empty"
msgstr "Leeg"
@@ -2066,11 +2097,11 @@ msgstr "Fout"
msgid "labels.event"
msgstr "Evenement"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Verlopen"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Exporteren"
@@ -2098,7 +2129,7 @@ msgstr "Lettertypeaanbieders"
msgid "labels.font-variants"
msgstr "Stijlen"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Lettertypen"
@@ -2112,11 +2143,11 @@ msgstr "CEO of oprichter"
msgid "labels.freelancer"
msgstr "Ik ben een freelancer"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "GitHub-repository"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Geef feedback"
@@ -2128,7 +2159,7 @@ msgstr "Ga terug"
msgid "labels.graphic-design"
msgstr "Grafisch ontwerp"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Helpcentrum"
@@ -2136,15 +2167,15 @@ msgstr "Helpcentrum"
msgid "labels.hide"
msgstr "Verbergen"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Verwerkt commentaar verbergen"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:134
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:130
msgid "labels.import"
msgstr "Importeren"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "Inactief"
@@ -2166,7 +2197,7 @@ msgstr "Interne fout"
msgid "labels.invision"
msgstr "InVision"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Uitnodigingen"
@@ -2174,7 +2205,7 @@ msgstr "Uitnodigingen"
msgid "labels.language"
msgstr "Taal"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Bibliotheken en sjablonen"
@@ -2194,7 +2225,7 @@ msgstr "Log in of meld je aan"
msgid "labels.login"
msgstr "Inloggen"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Uitloggen"
@@ -2202,11 +2233,11 @@ msgstr "Uitloggen"
msgid "labels.marketing"
msgstr "Marketing"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Lid"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Leden"
@@ -2214,23 +2245,27 @@ msgstr "Leden"
msgid "labels.mention"
msgstr "Vermelden"
+#: src/app/main/ui/ds/controls/numeric_input.cljs:619
+msgid "labels.mixed-values"
+msgstr "Gemengd"
+
#: src/app/main/ui/settings/password.cljs:84
msgid "labels.new-password"
msgstr "Nieuw wachtwoord"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "Volgende"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "Je bent helemaal bij! Nieuwe commentaarmeldingen verschijnen hier."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "Geen openstaande uitnodigingen."
-#: src/app/main/ui/dashboard/team.cljs:761
+#: src/app/main/ui/dashboard/team.cljs:739
msgid "labels.no-invitations-gather-people"
msgstr "Verzamel je mensen en bouw samen geweldige dingen."
@@ -2247,7 +2282,7 @@ msgstr "Oeps!"
msgid "labels.notifications"
msgstr "Meldingen"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "1 bestand"
@@ -2259,7 +2294,7 @@ msgid_plural "labels.num-of-frames"
msgstr[0] "1 bord"
msgstr[1] "%s borden"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "1 project"
@@ -2278,7 +2313,7 @@ msgstr "Huidig wachtwoord"
msgid "labels.only-yours"
msgstr "Alleen van jou"
-#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:309, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:338
+#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:310, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:339
msgid "labels.options"
msgstr "Opties"
@@ -2294,7 +2329,7 @@ msgstr "Anders (namelijk…)"
msgid "labels.other-short"
msgstr "Anders"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Eigenaar"
@@ -2302,11 +2337,11 @@ msgstr "Eigenaar"
msgid "labels.password"
msgstr "Wachtwoord"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "In behandeling"
-#: src/app/main/ui/dashboard/sidebar.cljs:750
+#: src/app/main/ui/dashboard/sidebar.cljs:751
msgid "labels.pinned-projects"
msgstr "Vastgemaakte projecten"
@@ -2330,7 +2365,7 @@ msgstr "Product management"
msgid "labels.profile"
msgstr "Profiel"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Projecten"
@@ -2338,7 +2373,7 @@ msgstr "Projecten"
msgid "labels.refresh"
msgstr "Vernieuwen"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Release-opmerkingen"
@@ -2352,11 +2387,11 @@ msgstr "Bestand opnieuw laden"
msgid "labels.remove"
msgstr "Verwijderen"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Lid verwijderen"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Hernoemen"
@@ -2384,7 +2419,7 @@ msgstr "nieuwe reactie"
msgid "labels.reply.thread"
msgstr "Reageren"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "Uitnodiging opnieuw versturen"
@@ -2396,15 +2431,15 @@ msgstr "Herstellen"
msgid "labels.retry"
msgstr "Opnieuw proberen"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Rol"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Opslaan"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:715
+#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:730
msgid "labels.search"
msgstr "Zoeken"
@@ -2432,11 +2467,11 @@ msgstr "We zijn bezig met onderhoud van onze systemen."
msgid "labels.service-unavailable.main-message"
msgstr "Service niet beschikbaar"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:79
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:75
msgid "labels.sets"
msgstr "Verzamelingen"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Instellingen"
@@ -2448,7 +2483,7 @@ msgstr "Delen"
msgid "labels.share-prototype"
msgstr "Prototype delen"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Bibliotheek"
@@ -2456,7 +2491,7 @@ msgstr "Bibliotheek"
msgid "labels.show"
msgstr "Weergeven"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Alle commentaar tonen"
@@ -2464,11 +2499,11 @@ msgstr "Alle commentaar tonen"
msgid "labels.show-comments-list"
msgstr "Commentaarlijst tonen"
-#: src/app/main/ui/workspace/comments.cljs:67, src/app/main/ui/workspace/comments.cljs:139
+#: src/app/main/ui/workspace/comments.cljs:68, src/app/main/ui/workspace/comments.cljs:140
msgid "labels.show-mentions"
msgstr "Alleen jouw vermeldingen weergeven"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Alleen eigen commentaar tonen"
@@ -2476,7 +2511,7 @@ msgstr "Alleen eigen commentaar tonen"
msgid "labels.sketch"
msgstr "Sketch"
-#: src/app/main/ui/dashboard/sidebar.cljs:729
+#: src/app/main/ui/dashboard/sidebar.cljs:730
msgid "labels.sources"
msgstr "Bronnen"
@@ -2484,7 +2519,7 @@ msgstr "Bronnen"
msgid "labels.start"
msgstr "Starten"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Status"
@@ -2506,11 +2541,11 @@ msgstr "Teamlid"
msgid "labels.themes"
msgstr "Thema's"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Introductie"
-#: src/app/main/data/workspace/tokens/errors.cljs:93
+#: src/app/main/data/workspace/tokens/errors.cljs:101
msgid "labels.unknown-error"
msgstr "Onbekende fout"
@@ -2542,15 +2577,15 @@ msgstr "Eigen lettertypen uploaden"
msgid "labels.uploading"
msgstr "Uploaden…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "ALLEEN BEKIJKEN"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Kijker"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Webhooks"
@@ -2558,11 +2593,11 @@ msgstr "Webhooks"
msgid "labels.write-new-comment"
msgstr "Nieuw commentaar toevoegen"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(jij)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "Jouw account"
@@ -2595,7 +2630,7 @@ msgstr "Flexibel ontwerpen met vertrouwde CSS-achtige lay-outbesturingselementen
#: src/app/main/ui/ds/product/loader.cljs:24
msgid "loader.tips.03.title"
-msgstr "Automatische lay-out zoals CSS"
+msgstr "Lay-out zoals CSS"
#: src/app/main/ui/ds/product/loader.cljs:27
msgid "loader.tips.04.message"
@@ -2657,23 +2692,23 @@ msgstr ""
msgid "loader.tips.10.title"
msgstr "Ondersteuning voor plug-ins"
-#: src/app/main/ui/workspace/colorpicker.cljs:449, src/app/main/ui/workspace/colorpicker.cljs:450, src/app/main/ui/workspace/colorpicker.cljs:452
+#: src/app/main/ui/workspace/colorpicker.cljs:486, src/app/main/ui/workspace/colorpicker.cljs:487, src/app/main/ui/workspace/colorpicker.cljs:489
msgid "media.choose-image"
msgstr "Afbeelding kiezen"
-#: src/app/main/ui/workspace/colorpicker.cljs:244
+#: src/app/main/ui/workspace/colorpicker.cljs:256
msgid "media.gradient"
msgstr "Verloop"
-#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:44, src/app/main/ui/ds/utilities/swatch.cljs:57, src/app/main/ui/inspect/attributes/common.cljs:63, src/app/main/ui/workspace/colorpicker.cljs:246, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:251
+#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:45, src/app/main/ui/ds/utilities/swatch.cljs:58, src/app/main/ui/inspect/attributes/common.cljs:44, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:65, src/app/main/ui/workspace/colorpicker.cljs:258, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:395
msgid "media.image"
msgstr "Afbeelding"
-#: src/app/main/ui/inspect/attributes/common.cljs:74
+#: src/app/main/ui/inspect/attributes/common.cljs:55
msgid "media.image.short"
msgstr "img"
-#: src/app/main/ui/workspace/colorpicker.cljs:442
+#: src/app/main/ui/workspace/colorpicker.cljs:479
msgid "media.keep-aspect-ratio"
msgstr "Verhoudingen behouden"
@@ -2691,7 +2726,7 @@ msgstr "Afbeelding laden…"
msgid "media.radial"
msgstr "Radiaal"
-#: src/app/main/ui/workspace/colorpicker.cljs:242
+#: src/app/main/ui/workspace/colorpicker.cljs:254
msgid "media.solid"
msgstr "Solide"
@@ -2767,19 +2802,19 @@ msgstr "Toegangsbewijs aanmaken"
msgid "modals.create-access-token.title"
msgstr "Toegangsbewijs genereren"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "Webhook aanmaken"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "Webhook aanmaken"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "Payload-URL"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://voorbeeld.nl/postreceive"
@@ -2827,11 +2862,11 @@ msgstr ""
msgid "modals.delete-comment-thread.title"
msgstr "Gesprek verwijderen"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "Weet je zeker dat je deze aantekening wilt verwijderen?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "Aantekening verwijderen"
@@ -2879,11 +2914,11 @@ msgstr ""
msgid "modals.delete-font.title"
msgstr "Lettertype verwijderen"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Weet je zeker dat je deze pagina wilt verwijderen?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Pagina verwijderen"
@@ -2929,29 +2964,29 @@ msgid_plural "modals.delete-shared-confirm.title"
msgstr[0] "Bestand verwijderen"
msgstr[1] "Bestanden verwijderen"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Team verwijderen"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Weet je zeker dat je dit team wilt verwijderen? Alle projecten en bestanden "
"die aan het team zijn gekoppeld, worden permanent verwijderd."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Team verwijderen"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Lid verwijderen"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Weet je zeker dat je dit lid van het team wilt verwijderen?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Teamlid verwijderen"
@@ -2965,55 +3000,55 @@ msgstr[1] ""
"Assets die al in die bestanden zijn gebruikt, blijven daar staan (er wordt "
"geen ontwerp verbroken)."
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "Webhook verwijderen"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "Weet je zeker dat je deze webhook wilt verwijderen?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "Webhook verwijderen"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "Webhook bewerken"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "Webhook bewerken"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Uitnodiging versturen"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "E-mailadressen, kommagescheiden"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr "Sommige leden zijn al lid van het team. We nodigen de rest wel uit."
-#: src/app/main/ui/dashboard/team.cljs:220
+#: src/app/main/ui/dashboard/team.cljs:222
msgid "modals.invite-team-member.text"
msgstr ""
"Je kunt leden uitnodigen voor het team zodat ze toegang hebben tot dit "
"bestand en alle teambestanden."
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "Leden voor het team uitnodigen"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"Aangezien je het enige lid van dit team bent, wordt het team samen met de "
"projecten en bestanden verwijderd."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "Weet je zeker dat je het %s team wilt verlaten?"
@@ -3041,15 +3076,15 @@ msgstr "Selecteer een lid om te promoveren"
msgid "modals.leave-and-reassign.title"
msgstr "Voordat je gaat"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Team verlaten"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Weet je zeker dat je dit team wilt verlaten?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Team verlaten"
@@ -3071,39 +3106,39 @@ msgid_plural "modals.move-shared-confirm.title"
msgstr[0] "Bibliotheek verplaatsen"
msgstr[1] "Bibliotheken verplaatsen"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "Verschuiving"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Eigendom overdragen"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"Als je het eigendom overdraagt, verander je je rol in beheerder en verlies "
"je enkele machtigingen voor dit team. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr ""
"Je bent de huidige eigenaar van dit team. Weet je zeker dat je %s de nieuwe "
"eigenaar van het team wilt maken?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Nieuwe teameigenaar"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "Publiceren"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "Je bibliotheek is leeg. Weet je zeker dat je het wilt publiceren?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "Lege bibliotheek publiceren"
@@ -3162,22 +3197,22 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Componenten in een gedeelde bibliotheek bijwerken"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Bijwerken"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Annuleren"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"Je staat op het punt een component in een gedeelde bibliotheek bij te "
"werken. Dit kan van invloed zijn op andere bestanden die er gebruik van "
"maken."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Component in een gedeelde bibliotheek bijwerken"
@@ -3295,11 +3330,11 @@ msgstr ""
msgid "notifications.by-code.upgrade-version"
msgstr "Er is een nieuwe versie beschikbaar, vernieuw de pagina"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "Uitnodiging succesvol verstuurd"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "Uitnodigingslink gekopieerd"
@@ -3448,7 +3483,7 @@ msgstr ""
"Vergeet niet om iedereen mee te nemen. Ontwikkelaars, ontwerpers, "
"managers... diversiteit is alleen maar beter :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "Uitnodigen met rol:"
@@ -3630,7 +3665,7 @@ msgstr ""
#: src/app/main/ui/onboarding/team_choice.cljs:36
msgid "onboarding.team-modal.create-team-feature-1"
-msgstr "Oneindig veel bestanden en projecten"
+msgstr "Onbeperkt veel bestanden en projecten"
#: src/app/main/ui/onboarding/team_choice.cljs:40
msgid "onboarding.team-modal.create-team-feature-2"
@@ -3642,7 +3677,7 @@ msgstr "Rollenbeheer"
#: src/app/main/ui/onboarding/team_choice.cljs:48
msgid "onboarding.team-modal.create-team-feature-4"
-msgstr "Oneindig veel leden"
+msgstr "Onbeperkt aantal leden"
#: src/app/main/ui/onboarding/team_choice.cljs:52
msgid "onboarding.team-modal.create-team-feature-5"
@@ -3668,193 +3703,193 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "Ga naar inlogscherm"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "Ontkoppelen"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
-msgstr "Gemixt"
+msgstr "Gemengd"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:283
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:423
msgid "settings.remove-color"
msgstr "Kleur verwijderen"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:288
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:428
msgid "settings.select-this-color"
msgstr "Selecteer items in deze stijl"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Basis"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "Dashboard"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Bekijker"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Werkruimte"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Uitlijning"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Bewerken"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "Algemeen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "Algemeen"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Hoofdmenu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "Lagen wijzigen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Navigatie"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Navigatie"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Navigatie"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Panelen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Paden"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Vormen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "Teksten"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Hulpmiddelen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Zoomen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Zoomen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Commentaar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "Knooppunt toevoegen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "Onderaan uitlijnen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "Centreren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "Horizontaal centreren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "Uitlijnen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "Links uitlijnen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "Rechts uitlijnen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "Bovenaan uitlijnen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "Verticaal centreren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "Maak bord van selectie"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "Vet in/uitschakelen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "Aftrekken (Booleaans verschil)"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "Uitsluiten"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "Booleaanse kruising"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "Booleaanse vereniging"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "Naar de achtergrond"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Naar achteren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "Naar voren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "Naar de voorgrond"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "Ongedaan maken wissen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Kopiëren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
msgid "shortcuts.copy-link"
msgstr "Link naar klembord kopiëren"
@@ -3863,287 +3898,271 @@ msgstr "Link naar klembord kopiëren"
msgid "shortcuts.copy-props"
msgstr "Eigenschappen kopiëren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "Nieuw project aanmaken"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Knippen"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "Uitzoomen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Verwijderen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "Knooppunt verwijderen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "Component losmaken"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Kromme"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "Ellips"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Bord"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "Pad tekenen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Pad"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Rechthoek"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Tekst"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Dupliceren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "Annuleren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "Vormen exporteren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "Passend zoomen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "Horizontaal spiegelen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "Verticaal spiegelen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "Lettergrootte verkleinen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "Lettergrootte vergroten"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "Ga naar concepten"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "Ga naar gedeelde bibliotheek"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Zoeken"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Groeperen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "Horizontaal verdelen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "UI tonen/verbergen"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "Inzoomen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "Afbeelding invoegen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "Cursief in/uitschakelen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "Knooppunten verbinden"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
-msgid "shortcuts.letter-spacing-dec"
-msgstr "Letterafstand verkleinen"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "Letterafstand vergroten"
-
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
-msgid "shortcuts.line-height-dec"
-msgstr "Regelafstand verkleinen"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
-msgid "shortcuts.line-height-inc"
-msgstr "Regelafstand vergroten"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.line-through"
msgstr "Doorstrepen in/uitschakelen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "Hoek maken"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "Kromme maken"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "Maskeren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "Knooppunten samenvoegen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "Verplaatsen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "Snel naar beneden verplaatsen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "Snel naar links verplaatsen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "Snel naar rechts verplaatsen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "Snel naar boven verplaatsen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "Knooppunt verplaatsen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "Naar beneden verplaatsen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "Naar links verplaatsen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "Naar rechts verplaatsen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "Naar boven verplaatsen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "Volgend bord"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "Geen sneltoets gevonden"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "Dekking 100%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "Dekking 10%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "Dekking 20%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "Dekking 30%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "Dekking 40%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "Dekking 50%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "Dekking 60%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "Dekking 70%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "Dekking 80%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "Dekking 90%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "Kleurkiezer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "Ga naar het commentaargedeelte van de kijker"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "Ga naar dashboard"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "Ga naar de sectie voor het inspecteren van kijkers"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "Ga naar de kijkersinteracties-sectie"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "Ga naar de kijkersinteracties-sectie"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "Ga naar werkruimte"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " of "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Plakken"
@@ -4157,191 +4176,191 @@ msgstr "Eigenschappen plakken"
msgid "shortcuts.plugins"
msgstr "Beheer van plug-ins"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "Vorig bord"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "Opnieuw doen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
msgid "shortcuts.rename"
msgstr "Hernoemen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "Zoom herstellen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
msgid "shortcuts.scale"
msgstr "Schaal"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "Sneltoetsen zoeken"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "Alles selecteren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
msgid "shortcuts.select-next"
msgstr "Volgende laag selecteren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
msgid "shortcuts.select-parent-layer"
msgstr "Bovenliggende laag selecteren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
msgid "shortcuts.select-prev"
msgstr "Vorige laag selecteren"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "Knooppunten loskoppelen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "Pixelraster tonen/verbergen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "Sneltoetsen tonen/verbergen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "Uitlijnen op knooppunten"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "Uitlijnen op pixelraster"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "Start met bewerken"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "Meting starten"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "Meting beëindigen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "Miniaturen instellen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "Sneltoetsen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "Dynamisch uitlijnen in/uitschakelen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "Assets in/uitschakelen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "Kleurenpalet in/uitschakelen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "Focusmodus in/uitschakelen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "Volledig scherm in/uitschakelen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
msgid "shortcuts.toggle-guides"
msgstr "Hulplijnen tonen/verbergen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "Geschiedenis in/uitschakelen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "Lagen in/uitschakelen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "Flex-layout toevoegen/verwijderen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
msgid "shortcuts.toggle-layout-grid"
msgstr "Raster-layout toevoegen/verwijderen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "Vergrendelen/ontgrendelen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "Proporties vergrendelen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
msgid "shortcuts.toggle-rulers"
msgstr "Linialen tonen/verbergen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
msgid "shortcuts.toggle-snap-guides"
msgstr "Uitlijnen op hulpijnen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
msgid "shortcuts.toggle-snap-ruler-guide"
msgstr "Uitlijnen op liniaal-hulplijnen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "Tekstpalet in/uitschakelen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
msgid "shortcuts.toggle-theme"
msgstr "Thema veranderen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "Tonen/verbergen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "Zoomstijl wisselen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "Onderstrepen in/uitschakelen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Ongedaan maken"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Groep opheffen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Masker verwijderen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "Verticaal verdelen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "Zoomlens verkleinen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "Zoomlens vergroten"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "Zoomen naar selectie"
@@ -4353,6 +4372,13 @@ msgstr "Enterprise-abonnement"
msgid "subscription.dashboard.power-up.enterprise-trial.top-title"
msgstr "Enterprise-abonnement (proef)"
+#: src/app/main/ui/dashboard/subscription.cljs:64
+#, markdown
+msgid "subscription.dashboard.power-up.professional.bottom-text"
+msgstr ""
+"Krijg extra opslag, bestandsherstel en meer voor je teams met het "
+"Unlimited-abonnement. [Tandje erbij!|target:self](%s)"
+
#: src/app/main/ui/dashboard/subscription.cljs:63
msgid "subscription.dashboard.power-up.professional.top-title"
msgstr "Professional-abonnement"
@@ -4381,8 +4407,9 @@ msgstr "Unlimited-abonnement"
#, markdown
msgid "subscription.dashboard.power-up.unlimited.bottom-text"
msgstr ""
-"Krijg extra editors, meer back-up, onbeperkte opslag en meer. [Kijk eens "
-"naar het Enterprise-abonnement.|target:self](%s)"
+"Krijg onbeperkte opslag, uitgebreid bestandsherstel en onbeperkte editors "
+"voor al je teams tegen een vaste prijs. [Kijk eens naar het "
+"Enterprise-abonnement.|target:self](%s)"
#: src/app/main/ui/dashboard/subscription.cljs:70
#, unused
@@ -4400,11 +4427,47 @@ msgstr ""
msgid "subscription.dashboard.power-up.your-subscription"
msgstr "Jouw abonnement:"
+#: src/app/main/ui/dashboard/subscription.cljs:168
+msgid "subscription.dashboard.professional-dashboard-cta-title"
+msgstr ""
+"Je hebt %s-editors voor de teams in jouw beheer, terwijl jouw professionele "
+"abonnement maximaal 8 toestaat."
+
+#: src/app/main/ui/dashboard/subscription.cljs:176
+#, markdown
+msgid "subscription.dashboard.professional-dashboard-cta-upgrade-owner"
+msgstr ""
+"Upgrade nu naar Unlimited of Enterprise om meer editors, opslag en "
+"bestandsherstel te ontgrendelen. [Abonneer nu.|target:self](%s)"
+
#: src/app/main/ui/dashboard/subscription.cljs:111
msgid "subscription.dashboard.team-plan"
msgstr "Team-abonnement"
-#: src/app/main/ui/dashboard/sidebar.cljs:858
+#: src/app/main/ui/dashboard/subscription.cljs:171
+msgid "subscription.dashboard.unlimited-dashboard-cta-title"
+msgstr ""
+"Je team blijft groeien! Je Unlimited-abonnement dekt maximaal %s editors, "
+"maar je hebt er nu %s."
+
+#: src/app/main/ui/dashboard/subscription.cljs:179
+#, markdown
+msgid "subscription.dashboard.unlimited-dashboard-cta-upgrade-owner"
+msgstr ""
+"Upgrade nu om overeen te komen met je huidige aantal editors. [Neem nu een "
+"abonnement.|target:self](%s)"
+
+#: src/app/main/ui/dashboard/subscription.cljs:156
+msgid "subscription.dashboard.unlimited-members-extra-editors-cta-text"
+msgstr ""
+"Alleen nieuwe editors in jouw eigen teams tellen mee voor toekomstige "
+"facturering. Voor 25+ editors geldt nog steeds een bedrag van $175/maand."
+
+#: src/app/main/ui/dashboard/subscription.cljs:152
+msgid "subscription.dashboard.unlimited-members-extra-editors-cta-title"
+msgstr "Mensen uitnodigen bij het Unlimited-abonnement"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:978
msgid "subscription.dashboard.upgrade-plan.power-up"
msgstr "Tandje erbij"
@@ -4444,19 +4507,44 @@ msgstr "90-dagen automatische opslag van versies en bestandsherstel"
msgid "subscription.settings.enterprise.capped-bill"
msgstr "Gemaximeerde maandelijkse rekening"
+#: src/app/main/ui/settings/subscription.cljs:392, src/app/main/ui/settings/subscription.cljs:402, src/app/main/ui/settings/subscription.cljs:454
+msgid "subscription.settings.enterprise.unlimited-storage-benefit"
+msgstr "Onbeperkte opslag"
+
#: src/app/main/ui/dashboard/subscription.cljs:124, src/app/main/ui/settings/subscription.cljs:371, src/app/main/ui/settings/subscription.cljs:383, src/app/main/ui/settings/subscription.cljs:395, src/app/main/ui/settings/subscription.cljs:405
msgid "subscription.settings.manage-your-subscription"
msgstr "Beheer uw abonnement"
+#: src/app/main/ui/settings/subscription.cljs:131
+msgid "subscription.settings.management.dialog.currently-editors-title"
+msgid_plural "subscription.settings.management.dialog.currently-editors-title"
+msgstr[0] "Momenteel heb je % s persoon in je teams die kan bewerken."
+msgstr[1] "Momenteel heb je % s persoen in je teams die kunnen bewerken."
+
#: src/app/main/ui/settings/subscription.cljs:149
msgid "subscription.settings.management.dialog.downgrade"
msgstr ""
"Let op: overstappen naar een lager abonnement betekent minder opslagruimte "
"en kortere back-ups en versiegeschiedenis."
+#: src/app/main/ui/settings/subscription.cljs:133
+msgid "subscription.settings.management.dialog.editors"
+msgstr "Editors"
+
+#: src/app/main/ui/settings/subscription.cljs:138
+msgid "subscription.settings.management.dialog.editors-explanation"
+msgstr "(Eigenaren, beheerder en redacteuren. Kijkers tellen niet als Editors)"
+
+#: src/app/main/ui/settings/subscription.cljs:181
+msgid "subscription.settings.management.dialog.input-error"
+msgstr ""
+"Je kunt niet minder editors instellen dan nu. Wijzig de rol (editor/admin "
+"naar viewer) voor mensen die bestanden niet daadwerkelijk bewerken in de "
+"teaminstellingen."
+
#: src/app/main/ui/settings/subscription.cljs:177
msgid "subscription.settings.management.dialog.payment-explanation"
-msgstr "(Er wordt nu geen betaling gedaan)"
+msgstr "Berekend na proefperiode. Nu geen creditcard nodig."
#: src/app/main/ui/settings/subscription.cljs:170, src/app/main/ui/settings/subscription.cljs:174
#, markdown
@@ -4467,6 +4555,13 @@ msgstr "**$%s** per maand"
msgid "subscription.settings.management.dialog.title"
msgstr "%s toepassen op je teams"
+#: src/app/main/ui/settings/subscription.cljs:184
+msgid "subscription.settings.management.dialog.unlimited-capped-warning"
+msgstr ""
+"Tip: Je kunt het aantal gebruikers nu verhogen om uitnodigingen te blijven "
+"doen. Bij 25+ editors van verschillende teams geniet je van een vaste prijs "
+"van $175/maand."
+
#: src/app/main/ui/settings/subscription.cljs:418
msgid "subscription.settings.member-since"
msgstr "Lid van Penpot sinds: %s"
@@ -4491,6 +4586,18 @@ msgstr "organisatie per maand"
msgid "subscription.settings.professional"
msgstr "Professioneel"
+#: src/app/main/ui/settings/subscription.cljs:360, src/app/main/ui/settings/subscription.cljs:427
+msgid "subscription.settings.professional.autosave-benefit"
+msgstr "7-dagen automatische versies en bestandsherstel"
+
+#: src/app/main/ui/settings/subscription.cljs:359, src/app/main/ui/settings/subscription.cljs:426
+msgid "subscription.settings.professional.storage-benefit"
+msgstr "10GB opslag"
+
+#: src/app/main/ui/settings/subscription.cljs:361, src/app/main/ui/settings/subscription.cljs:428
+msgid "subscription.settings.professional.teams-editors-benefit"
+msgstr "Onbeperkte teams. Maximaal 8 editors in je eigen teams."
+
#: src/app/main/ui/settings/subscription.cljs:355
msgid "subscription.settings.section-plan"
msgstr "Uw abonnement"
@@ -4509,6 +4616,10 @@ msgstr ""
"Je kunt je abonnement op elk gewenst moment aanpassen via de pagina "
"'Abonnement' in je accountgegevens."
+#: src/app/main/ui/settings/subscription.cljs:238
+msgid "subscription.settings.success.dialog.thanks"
+msgstr "Bedankt voor het kiezen van het Penpot %s-abonnement!"
+
#: src/app/main/ui/settings/subscription.cljs:240
msgid "subscription.settings.sucess.dialog.footer"
msgstr "Veel plezier met je abonnement!"
@@ -4518,7 +4629,6 @@ msgid "subscription.settings.sucess.dialog.title"
msgstr "Je bent %s!"
#: src/app/main/ui/settings/subscription.cljs:413
-#, fuzzy
msgid "subscription.settings.support-us-since"
msgstr "Je hebt ons gesteund met dit abonnement sinds: %s"
@@ -4534,11 +4644,19 @@ msgstr "Unlimited"
msgid "subscription.settings.unlimited-trial"
msgstr "Unlimited (proef)"
+#: src/app/main/ui/settings/subscription.cljs:369, src/app/main/ui/settings/subscription.cljs:381, src/app/main/ui/settings/subscription.cljs:441
+msgid "subscription.settings.unlimited.autosave-benefit"
+msgstr "30-dagen automatisch opgeslagen versies en bestandsherstel"
+
#: src/app/main/ui/settings/subscription.cljs:370, src/app/main/ui/settings/subscription.cljs:382, src/app/main/ui/settings/subscription.cljs:442
msgid "subscription.settings.unlimited.bill"
-msgstr "Gemaximeerde maandelijkse rekening"
+msgstr "Maandelijkse rekening van max. $175"
-#: src/app/main/ui/dashboard/subscription.cljs:147, src/app/main/ui/workspace/main_menu.cljs:933
+#: src/app/main/ui/settings/subscription.cljs:368, src/app/main/ui/settings/subscription.cljs:380, src/app/main/ui/settings/subscription.cljs:440
+msgid "subscription.settings.unlimited.storage-benefit"
+msgstr "25GB opslag"
+
+#: src/app/main/ui/dashboard/subscription.cljs:147, src/app/main/ui/workspace/main_menu.cljs:961
msgid "subscription.workspace.header.menu.option.power-up"
msgstr "Tandje erbij voor je abonnement"
@@ -4613,19 +4731,19 @@ msgstr "Wachtwoord - Penpot"
msgid "title.settings.profile"
msgstr "Profiel - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "Uitnodigingen - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "Leden - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Instellingen - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "Webhooks - %s - Penpot"
@@ -4697,43 +4815,43 @@ msgstr "Interacties tonen bij aanklikken"
msgid "viewer.header.sitemap"
msgstr "Sitemap"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "De laatste levering was succesvol."
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Horizontaal centreren (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "Horizontaal verdelen (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Links uitlijnen (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Rechts uitlijnen (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Onderkant uitlijnen (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Verticaal centreren (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "Verticaal verdelen (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Bovenkant uitlijnen (%s)"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:163
+#: src/app/main/ui/workspace/sidebar/assets.cljs:172
msgid "workspace.assets.add-library"
msgstr "Bibliotheek toevoegen"
@@ -4742,19 +4860,23 @@ msgstr "Bibliotheek toevoegen"
msgid "workspace.assets.assets"
msgstr "Assets"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "Alle assets"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Kleuren"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:493
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:497
msgid "workspace.assets.colors.add-color"
msgstr "Kleur toevoegen"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:81
+msgid "workspace.assets.component-group-options"
+msgstr "Componentgroep opties"
+
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Componenten"
@@ -4762,23 +4884,23 @@ msgstr "Componenten"
msgid "workspace.assets.components.add-component"
msgstr "Component toevoegen"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:176, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:535
+#: src/app/main/ui/workspace/sidebar/assets/components.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:547
msgid "workspace.assets.components.num-variants"
msgstr "%s varianten"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "Groep aanmaken"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr "Je items krijgen automatisch de naam \"groepsnaam / itemnaam\""
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Verwijderen"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "Dupliceren"
@@ -4786,11 +4908,11 @@ msgstr "Dupliceren"
msgid "workspace.assets.duplicate-main"
msgstr "Hoofdcomponent dupliceren"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Bewerken"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:177
+#: src/app/main/ui/workspace/sidebar/assets.cljs:186
msgid "workspace.assets.filter"
msgstr "Filteren"
@@ -4799,27 +4921,27 @@ msgstr "Filteren"
msgid "workspace.assets.graphics"
msgstr "Graphics"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:576
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:190, src/app/main/ui/workspace/sidebar/assets/components.cljs:576
msgid "workspace.assets.grid-view"
msgstr "Rasterweergave"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Groeperen"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "Groepsnaam"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:572
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:191, src/app/main/ui/workspace/sidebar/assets/components.cljs:572
msgid "workspace.assets.list-view"
msgstr "Lijstweergave"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "Lokale bibliotheek"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:168
+#: src/app/main/ui/workspace/sidebar/assets.cljs:177
msgid "workspace.assets.manage-library"
msgstr "Bibliotheek beheren"
@@ -4831,15 +4953,15 @@ msgstr "Geen assets gevonden"
msgid "workspace.assets.open-library"
msgstr "Open Bibliotheek-bestand"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Hernoemen"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "Groep hernoemen"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "Assets zoeken"
@@ -4855,21 +4977,21 @@ msgstr[1] "%s items geselecteerd"
msgid "workspace.assets.shared-library"
msgstr "Gedeelde bibliotheek"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:237
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:235
msgid "workspace.assets.sidebar.components"
msgid_plural "workspace.assets.sidebar.components"
msgstr[0] "1 component"
msgstr[1] "%s componenten"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:193
+#: src/app/main/ui/workspace/sidebar/assets.cljs:204
msgid "workspace.assets.sort"
msgstr "Sorteren"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Typografie"
-#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:404
+#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:405
msgid "workspace.assets.typography.add-typography"
msgstr "Typografie toevoegen"
@@ -4894,7 +5016,7 @@ msgstr "Letterafstand"
msgid "workspace.assets.typography.line-height"
msgstr "Regelafstand"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -4906,59 +5028,59 @@ msgstr "Tekststijlen"
msgid "workspace.assets.typography.text-transform"
msgstr "Tekst transformeren"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "Groep opheffen"
-#: src/app/main/ui/workspace/context_menu.cljs:791
+#: src/app/main/ui/workspace/context_menu.cljs:794
msgid "workspace.context-menu.grid-cells.area"
msgstr "Gebied aanmaken"
-#: src/app/main/ui/workspace/context_menu.cljs:794
+#: src/app/main/ui/workspace/context_menu.cljs:797
msgid "workspace.context-menu.grid-cells.create-board"
msgstr "Bord aanmaken"
-#: src/app/main/ui/workspace/context_menu.cljs:786
+#: src/app/main/ui/workspace/context_menu.cljs:789
msgid "workspace.context-menu.grid-cells.merge"
msgstr "Cellen samenvoegen"
-#: src/app/main/ui/workspace/context_menu.cljs:749
+#: src/app/main/ui/workspace/context_menu.cljs:752
msgid "workspace.context-menu.grid-track.column.add-after"
msgstr "Rechts 1 kolom toevoegen"
-#: src/app/main/ui/workspace/context_menu.cljs:748
+#: src/app/main/ui/workspace/context_menu.cljs:751
msgid "workspace.context-menu.grid-track.column.add-before"
msgstr "Links 1 kolom toevoegen"
-#: src/app/main/ui/workspace/context_menu.cljs:750
+#: src/app/main/ui/workspace/context_menu.cljs:753
msgid "workspace.context-menu.grid-track.column.delete"
msgstr "Kolom verwijderen"
-#: src/app/main/ui/workspace/context_menu.cljs:751
+#: src/app/main/ui/workspace/context_menu.cljs:754
msgid "workspace.context-menu.grid-track.column.delete-shapes"
msgstr "Kolom en vormen verwijderen"
-#: src/app/main/ui/workspace/context_menu.cljs:747
+#: src/app/main/ui/workspace/context_menu.cljs:750
msgid "workspace.context-menu.grid-track.column.duplicate"
msgstr "Kolom dupliceren"
-#: src/app/main/ui/workspace/context_menu.cljs:756
+#: src/app/main/ui/workspace/context_menu.cljs:759
msgid "workspace.context-menu.grid-track.row.add-after"
msgstr "Onder 1 rij toevoegen"
-#: src/app/main/ui/workspace/context_menu.cljs:755
+#: src/app/main/ui/workspace/context_menu.cljs:758
msgid "workspace.context-menu.grid-track.row.add-before"
msgstr "Boven 1 rij toevoegen"
-#: src/app/main/ui/workspace/context_menu.cljs:757
+#: src/app/main/ui/workspace/context_menu.cljs:760
msgid "workspace.context-menu.grid-track.row.delete"
msgstr "Rij verwijderen"
-#: src/app/main/ui/workspace/context_menu.cljs:758
+#: src/app/main/ui/workspace/context_menu.cljs:761
msgid "workspace.context-menu.grid-track.row.delete-shapes"
msgstr "Rij en vormen verwijderen"
-#: src/app/main/ui/workspace/context_menu.cljs:754
+#: src/app/main/ui/workspace/context_menu.cljs:757
msgid "workspace.context-menu.grid-track.row.duplicate"
msgstr "Rij dupliceren"
@@ -4966,7 +5088,7 @@ msgstr "Rij dupliceren"
msgid "workspace.focus.focus-mode"
msgstr "Focusmodus"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "Focus uit"
@@ -4986,11 +5108,11 @@ msgstr "Lineair verloop"
msgid "workspace.gradients.radial"
msgstr "Radiaal verloop"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "Dynamische uitlijning uitschakelen"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "Proportionele schaal uitschakelen"
@@ -4999,23 +5121,23 @@ msgstr "Proportionele schaal uitschakelen"
msgid "workspace.header.menu.disable-scale-text"
msgstr "Tekstschaal uitschakelen"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "Uitlijnen op hulplijnen uitschakelen"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "Uitlijnen op pixel uitschakelen"
-#: src/app/main/ui/workspace/main_menu.cljs:215
+#: src/app/main/ui/workspace/main_menu.cljs:243
msgid "workspace.header.menu.disable-snap-ruler-guides"
msgstr "Uitlijnen op liniaal-hulplijnen deactiveren"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "Dynamische uitlijning inschakelen"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "Proportionele schaal inschakelen"
@@ -5024,116 +5146,116 @@ msgstr "Proportionele schaal inschakelen"
msgid "workspace.header.menu.enable-scale-text"
msgstr "Tekstschaal inschakelen"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "Uitlijnen op hulplijnen"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "Uitlijnen op pixel"
-#: src/app/main/ui/workspace/main_menu.cljs:216
+#: src/app/main/ui/workspace/main_menu.cljs:244
msgid "workspace.header.menu.enable-snap-ruler-guides"
msgstr "Uitlijnen op liniaal-hulplijnen"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "Bordnamen verbergen"
-#: src/app/main/ui/workspace/main_menu.cljs:348
+#: src/app/main/ui/workspace/main_menu.cljs:376
msgid "workspace.header.menu.hide-guides"
msgstr "Hulplijnen verbergen"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "Kleurenpalet verbergen"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "Pixelraster verbergen"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "Linialen verbergen"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "Lettertype-palet verbergen"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Bewerken"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "Bestand"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "Hulp & informatie"
#: src/app/main/ui/workspace/main_menu.cljs:916
#, unused
msgid "workspace.header.menu.option.power-up"
-msgstr "Geef je plan een boost"
+msgstr "Geef je abonnement een tandje erbij"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "Voorkeuren"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "Beeld"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "Opnieuw doen"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "Alles selecteren"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "Bordnamen tonen"
-#: src/app/main/ui/workspace/main_menu.cljs:349
+#: src/app/main/ui/workspace/main_menu.cljs:377
msgid "workspace.header.menu.show-guides"
msgstr "Hulplijnen weergeven"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "Kleurenpalet tonen"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "Pixelraster tonen"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Linialen tonen"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "Lettertype-palet tonen"
-#: src/app/main/ui/workspace/main_menu.cljs:288
+#: src/app/main/ui/workspace/main_menu.cljs:316
msgid "workspace.header.menu.toggle-dark-theme"
msgstr "Donker thema inschakelen"
-#: src/app/main/ui/workspace/main_menu.cljs:286, src/app/main/ui/workspace/main_menu.cljs:289
+#: src/app/main/ui/workspace/main_menu.cljs:314, src/app/main/ui/workspace/main_menu.cljs:317
msgid "workspace.header.menu.toggle-light-theme"
msgstr "Licht thema inschakelen"
-#: src/app/main/ui/workspace/main_menu.cljs:287
+#: src/app/main/ui/workspace/main_menu.cljs:315
msgid "workspace.header.menu.toggle-system-theme"
msgstr "Systeemthema inschakelen"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "Ongedaan maken"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Herstellen"
@@ -5149,7 +5271,7 @@ msgstr "Opgeslagen"
msgid "workspace.header.saving"
msgstr "Opslaan"
-#: src/app/main/ui/workspace/right_header.cljs:239
+#: src/app/main/ui/workspace/right_header.cljs:240
msgid "workspace.header.share"
msgstr "Delen"
@@ -5158,11 +5280,11 @@ msgstr "Delen"
msgid "workspace.header.unsaved"
msgstr "Niet-opgeslagen wijzigingen"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "Weergavemodus (%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "Zoomen"
@@ -5174,7 +5296,7 @@ msgstr "Vullen - Schalen om te vullen"
msgid "workspace.header.zoom-fit"
msgstr "Passend maken - Verkleinen om te passen"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "Passend zoomen"
@@ -5182,43 +5304,43 @@ msgstr "Passend zoomen"
msgid "workspace.header.zoom-full-screen"
msgstr "Volledig scherm"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "Naar selectie zoomen"
-#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:621
msgid "workspace.layout_grid.editor.options.edit-grid"
msgstr "Raster bewerken"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1300
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1301
msgid "workspace.layout_grid.editor.options.exit"
msgstr "Sluiten"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:429, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:435
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:430, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:436
msgid "workspace.layout_grid.editor.padding.bottom"
msgstr "Vulling aan de onderkant"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:491
msgid "workspace.layout_grid.editor.padding.expand"
msgstr "4-zijdige opvulopties weergeven"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:354, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:355, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:362
msgid "workspace.layout_grid.editor.padding.horizontal"
msgstr "Horizontale vulling"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:444, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:450
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:451
msgid "workspace.layout_grid.editor.padding.left"
msgstr "Linker vulling"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:414, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:420
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:421
msgid "workspace.layout_grid.editor.padding.right"
msgstr "Rechter vulling"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:406
msgid "workspace.layout_grid.editor.padding.top"
msgstr "Vulling aan de bovenkant"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:340, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:341, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:347
msgid "workspace.layout_grid.editor.padding.vertical"
msgstr "Verticale vulling"
@@ -5234,7 +5356,7 @@ msgstr "Klaar"
msgid "workspace.layout_grid.editor.top-bar.locate"
msgstr "Lokaliseren"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1326
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1327
msgid "workspace.layout_grid.editor.top-bar.locate.tooltip"
msgstr "Raster-layout tonen"
@@ -5243,10 +5365,6 @@ msgstr "Raster-layout tonen"
msgid "workspace.libraries.add"
msgstr "Toevoegen"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s kleuren"
-
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
msgstr "Er zijn nog geen kleurstijlen in je bibliotheek"
@@ -5273,43 +5391,35 @@ msgstr "Recente kleuren"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "RGB Complementair"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Kleurstijl opslaan"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s componenten"
-
-#: src/app/main/ui/workspace/libraries.cljs:371
+#: src/app/main/ui/workspace/libraries.cljs:404
msgid "workspace.libraries.empty.add-some"
msgstr "Of voeg er enkele toe om te proberen:"
-#: src/app/main/ui/workspace/libraries.cljs:365
+#: src/app/main/ui/workspace/libraries.cljs:398
msgid "workspace.libraries.empty.no-libraries"
msgstr "Er zijn geen Gedeelde Bibliotheken bij jouw team, je kunt zoeken naar"
-#: src/app/main/ui/workspace/libraries.cljs:369
+#: src/app/main/ui/workspace/libraries.cljs:402
msgid "workspace.libraries.empty.some-templates"
msgstr "enkele sjablonen hier"
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Bestandsbibliotheek"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s afbeeldingen"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "BIBLIOTHEKEN IN DIT BESTAND"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "BIBLIOTHEKEN"
@@ -5318,11 +5428,11 @@ msgstr "BIBLIOTHEKEN"
msgid "workspace.libraries.library"
msgstr "BIBLIOTHEEK"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "BIBLIOTHEEK-UPDATES"
-#: src/app/main/ui/workspace/libraries.cljs:360
+#: src/app/main/ui/workspace/libraries.cljs:393
msgid "workspace.libraries.loading"
msgstr "Laden…"
@@ -5331,51 +5441,47 @@ msgstr "Laden…"
msgid "workspace.libraries.more-templates"
msgstr "Je kun hier "
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "Er zijn geen gedeelde bibliotheken die moeten worden bijgewerkt"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "Geen resultaten gevonden voor “%s“"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "Gedeelde bibliotheken zoeken"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "GEDEELDE BIBLIOTHEKEN"
-#: src/app/main/ui/workspace/libraries.cljs:352
+#: src/app/main/ui/workspace/libraries.cljs:385
msgid "workspace.libraries.shared-library-btn"
msgstr "Bibliotheek verbinden"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Meervoudige typografie"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Alle typografie ontkoppelen"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s typografie"
-
-#: src/app/main/ui/workspace/libraries.cljs:323
+#: src/app/main/ui/workspace/libraries.cljs:354
msgid "workspace.libraries.unlink-library-btn"
msgstr "Bibliotheekverbinding verbreken"
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Bijwerken"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "alle wijzigingen bekijken"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "UPDATES"
@@ -5383,31 +5489,31 @@ msgstr "UPDATES"
msgid "workspace.notification-pill.detail"
msgstr "Details"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "Klik op de knop + om interacties toe te voegen."
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:96
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:97
msgid "workspace.options.blur-options.add-blur"
msgstr "Vervaging toevoegen"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:117
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:118
msgid "workspace.options.blur-options.remove-blur"
msgstr "Vervaging verwijderen"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Vervagen"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "Groep vervagen"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "Selectie vervagen"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:114
msgid "workspace.options.blur-options.toggle-blur"
msgstr "Vervaging wisselen"
@@ -5415,103 +5521,113 @@ msgstr "Vervaging wisselen"
msgid "workspace.options.canvas-background"
msgstr "Canvasachtergrond"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "Content bijsnijden"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Component"
-#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:193
+#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:196
msgid "workspace.options.component.annotation"
msgstr "Aantekening"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "Kopiëren"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:185
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:188
msgid "workspace.options.component.create-annotation"
msgstr "Aantekening maken"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "Aantekening bewerken"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "Hoofd"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:706
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:721
msgid "workspace.options.component.swap"
msgstr "Component uitwisselen"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:765
msgid "workspace.options.component.swap.empty"
msgstr "Er zijn nog geen assets in deze bibliotheek"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:973
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:993
msgid "workspace.options.component.unlinked"
msgstr "Niet gekoppeld"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:512
msgid "workspace.options.component.variant.duplicated.copy.locate"
msgstr "Ga naar het hoofdonderdeel"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:496
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:509
msgid "workspace.options.component.variant.duplicated.copy.title"
msgstr ""
"Dit onderdeel kent conflicterende varianten. Zorg ervoor dat elke variatie "
"een unieke set eigenschapswaarden heeft."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1246
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1281
msgid "workspace.options.component.variant.duplicated.group.locate"
msgstr "Gedupliceerde varianten lokaliseren"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1243
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1278
msgid "workspace.options.component.variant.duplicated.group.title"
msgstr "Sommige varianten hebben identieke eigenschappen en waarden"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:267
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:268
msgid "workspace.options.component.variant.duplicated.single.all"
msgstr "Deze varianten hebben identieke eigenschappen en waarden."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:264
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:265
msgid "workspace.options.component.variant.duplicated.single.one"
msgstr ""
"Deze variant heeft identieke eigenschappen en waarden als een andere "
"variant."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:270
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:271
msgid "workspace.options.component.variant.duplicated.single.some"
msgstr "Sommige van deze varianten hebben identieke eigenschappen en waarden."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1236
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:499
+msgid "workspace.options.component.variant.malformed.copy"
+msgstr ""
+"Dit onderdeel heeft varianten met ongeldige namen. Zorg ervoor dat elke "
+"variant de juiste structuur volgt."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1271
msgid "workspace.options.component.variant.malformed.group.locate"
msgstr "Ongeldige varianten localiseren"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1233
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1268
msgid "workspace.options.component.variant.malformed.group.title"
msgstr "Sommigen varianten hebben een ongeldige naam"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:502
+msgid "workspace.options.component.variant.malformed.locate"
+msgstr "Ongeldige varianten zoeken"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:252
msgid "workspace.options.component.variant.malformed.single.all"
msgstr "Deze varianten hebben een ongeldige naam."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:247
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:249
msgid "workspace.options.component.variant.malformed.single.one"
msgstr "Deze variant heeft een ongeldige naam."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:253
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:255
msgid "workspace.options.component.variant.malformed.single.some"
msgstr "Sommige van deze varianten hebben een ongeldige naam."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:390
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:391
msgid "workspace.options.component.variant.malformed.structure.example"
msgstr "[eigenschap]=[waarde], [eigenschap]=[waarde]"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:389
msgid "workspace.options.component.variant.malformed.structure.title"
msgstr "Gebruik de volgende structuur:"
@@ -5534,7 +5650,7 @@ msgstr "Dezelfde naam delen."
#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:76
msgid "workspace.options.component.variants-help-modal.rule2"
-msgstr "Van hetzelfde type zijn"
+msgstr "Zijn hetzelfde type."
#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:77
msgid "workspace.options.component.variants-help-modal.rule2.detail"
@@ -5544,13 +5660,13 @@ msgstr ""
#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:87
msgid "workspace.options.component.variants-help-modal.rule3"
-msgstr "Hetzelfde hiërarchische niveau hebben"
+msgstr "Heben hetzelfde hiërarchieniveau."
#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:88
msgid "workspace.options.component.variants-help-modal.rule3.detail"
msgstr "Groepen, borden en lay-outs worden als gelijkwaardig beschouwd."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:935, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1157, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:47
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:955, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1191, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:47
msgid "workspace.options.component.variants-help-modal.title"
msgstr "Hoe varianten verbonden blijven"
@@ -5594,7 +5710,7 @@ msgstr "Bovenkant"
msgid "workspace.options.constraints.topbottom"
msgstr "Boven- en onderkant"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Ontwerp"
@@ -5607,21 +5723,21 @@ msgstr "Exporteren"
msgid "workspace.options.export-multiple"
msgstr "Selectie exporteren"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "1 Element exporteren"
msgstr[1] "%s Elementen exporteren"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:188
+#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:214
msgid "workspace.options.export.add-export"
msgstr "Export toevoegen"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:235
+#: 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 "Export verwijderen"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Achtervoegsel"
@@ -5629,7 +5745,7 @@ msgstr "Achtervoegsel"
msgid "workspace.options.exporting-complete"
msgstr "Export klaar"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "Exporteren…"
@@ -5641,27 +5757,27 @@ msgstr "Export mislukt"
msgid "workspace.options.exporting-object-slow"
msgstr "Export onverwacht traag"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Vullen"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:194
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:234
msgid "workspace.options.fill.add-fill"
msgstr "Vulling toevoegen"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:208
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:248
msgid "workspace.options.fill.remove-fill"
msgstr "Vulling verwijderen"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:392
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:474
msgid "workspace.options.fit-content"
msgstr "Grootte van bord aanpassen aan inhoud"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "Stroomdiagram-startpunt toevoegen"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:178
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:179
msgid "workspace.options.flows.flow"
msgstr "Stroomdiagram"
@@ -5670,19 +5786,19 @@ msgstr "Stroomdiagram"
msgid "workspace.options.flows.flow-start"
msgstr "Stroomdiagram-startpunt"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "Stroomdiagram-startpunten"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:155
msgid "workspace.options.flows.remove-flow"
msgstr "Stroomdiagram verwijderen"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Automatisch"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "Kolommen"
@@ -5691,7 +5807,7 @@ msgstr "Kolommen"
msgid "workspace.options.grid.grid-title"
msgstr "Raster"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Kleur"
@@ -5700,15 +5816,15 @@ msgstr "Kleur"
msgid "workspace.options.grid.params.columns"
msgstr "Kolommen"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "Tussenruimte"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Hoogte"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Marge"
@@ -5717,7 +5833,7 @@ msgstr "Marge"
msgid "workspace.options.grid.params.rows"
msgstr "Rijen"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "Als standaard instellen"
@@ -5731,159 +5847,159 @@ msgstr "Grootte"
msgid "workspace.options.grid.params.type"
msgstr "Type"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Onderkant"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Midden"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Links"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Rechts"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "Uitrekken"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "Bovenkant"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "Standaard gebruiken"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Breedte"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Rijen"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "Vierkant"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Groep vullen"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Groep-streek"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:326
msgid "workspace.options.guides.add-guide"
msgstr "Hulplijn toevoegen"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:187
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:188
msgid "workspace.options.guides.remove-guide"
msgstr "Hulplijn verwijderen"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:320
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
msgid "workspace.options.guides.title"
msgstr "Hulplijnen"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:183
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:184
msgid "workspace.options.guides.toggle-guide"
msgstr "Hulplijn wisselen"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "Hoogte"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "Inspecteren"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "Actie"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "Na vertraging"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "Animatie"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "Ontbinden"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "Geen"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "Duwen"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "Schuiven"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "automatisch"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "Achtergrond toevoegen"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "Sluiten als er buiten wordt geklikt"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "Overlay sluiten"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "Overlay sluiten: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "Vertraging"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "Bestemming"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "Duur"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "Easing"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "Ease"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "Ease in"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "Ease in out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "Ease out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "Lineair"
@@ -5892,47 +6008,47 @@ msgstr "Lineair"
msgid "workspace.options.interaction-in"
msgstr "In"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "Muis komt binnen"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "Muis verlaat"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "ms"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "Navigeer naar"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "Navigeer naar: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(niet ingesteld)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "Offset-effect"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "Bij klikken"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "Overlay openen"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "Overlay openen: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "URL openen"
@@ -5941,87 +6057,87 @@ msgstr "URL openen"
msgid "workspace.options.interaction-out"
msgstr "Out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "Midden onder"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "Linksonder"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "Rechtsonder"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "Gecentreerd"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "Handmatig"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "Midden boven"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "Linksboven"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "Rechtsboven"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "Positie"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "Scrollpositie behouden"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "Vorig scherm"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "Relatief tot"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "zelf"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "Overlay in/uitschakelen"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "Overlay in/uitschakelen: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "Trigger"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "Tijdens hover"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "Tijdens klikken"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "Interacties"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:735
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:736
msgid "workspace.options.interactions.add-interaction"
msgstr "Interactie toevoegen"
@@ -6030,67 +6146,67 @@ msgstr "Interactie toevoegen"
msgid "workspace.options.interactions.remove-interaction"
msgstr "Interactie verwijderen"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "Kleur"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "Kleur versterken"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "Kleur verminderen"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "Donkerder maken"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "Verschil"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "Uitsluiting"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Hard licht"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Tint"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Lichter maken"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "Helderheid"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "Vermenigvuldigen"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "Normaal"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "Overlay"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "Verzadiging"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Scherm"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "Zacht licht"
@@ -6109,7 +6225,7 @@ msgstr "Lagen groeperen"
msgid "workspace.options.layer-options.title.multiple"
msgstr "Geselecteerde lagen"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:202
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:207, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:213
msgid "workspace.options.layer-options.toggle-layer"
msgstr "Laagzichtbaarheid wisselen"
@@ -6118,19 +6234,19 @@ msgstr "Laagzichtbaarheid wisselen"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "Geavanceerde opties"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "Max.Hoogte"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "Max.Breedte"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "Min.Hoogte"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "Min.Breedte"
@@ -6244,15 +6360,15 @@ msgstr "ruimte tussen"
msgid "workspace.options.layout.top"
msgstr "Bovenkant"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "Meer kleuren"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "Meer bibliotheekkleuren"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "Dekking"
@@ -6261,35 +6377,35 @@ msgstr "Dekking"
msgid "workspace.options.position"
msgstr "Positie"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "Prototype"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "Radius"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "Onder links"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "Onder rechts"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "Boven links"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "Boven rechts"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:152
msgid "workspace.options.radius.hide-all-corners"
msgstr "Onafhankelijke radius inklappen"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:136
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:153
msgid "workspace.options.radius.show-single-corners"
msgstr "Onafhankelijke radius weergeven"
@@ -6301,7 +6417,7 @@ msgstr "Recent"
msgid "workspace.options.retry"
msgstr "Opnieuw proberen"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "Rotatie"
@@ -6309,33 +6425,33 @@ msgstr "Rotatie"
msgid "workspace.options.search-font"
msgstr "Lettertype zoeken"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr ""
"Selecteer een vorm, bord of groep om d.m.v. slepen een verbinding met een "
"ander bord te maken."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "Geselecteerde kleuren"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "Selectie vullen"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "Selectie-streek"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:341
msgid "workspace.options.shadow-options.add-shadow"
msgstr "Schaduw toevoegen"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "Vervagen"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "Schaduwkleur"
@@ -6347,63 +6463,64 @@ msgstr "Slagschaduw"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "Schaduw naar binnen"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:348
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:183, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:354
msgid "workspace.options.shadow-options.remove-shadow"
msgstr "Schaduw verwijderen"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "Spreiding"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "Schaduw"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "Groep voorzien van schaduw"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "Selectie voorzien van schaduw"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:174
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:179
msgid "workspace.options.shadow-options.toggle-shadow"
msgstr "Schaduw wisselen"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "In exports tonen"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "In weergavemodus tonen"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "Grootte"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "Groottevoorinstellingen"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:534
msgid "workspace.options.size.lock"
msgstr "Vaste verhoudingen"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:534
msgid "workspace.options.size.unlock"
msgstr "Vrije verhoudingen"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "Streek"
@@ -6412,7 +6529,7 @@ msgstr "Streek"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "Cirkelmarkering"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "Cirkel"
@@ -6421,7 +6538,7 @@ msgstr "Cirkel"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "Ruitmarkering"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "Ruit"
@@ -6430,19 +6547,19 @@ msgstr "Ruit"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "Lijn-pijl"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "Pijl"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "Geen"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "Rond"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "Vierkant"
@@ -6451,7 +6568,7 @@ msgstr "Vierkant"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "Vierkantmarkering"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "Rechthoek"
@@ -6460,83 +6577,83 @@ msgstr "Rechthoek"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "Driehoek-pijl"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "Driehoek"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "Streekkleur"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "Streekdikte"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:180
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:189
msgid "workspace.options.stroke.add-stroke"
msgstr "Streekkleur toevoegen"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "Gecentreerd"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "Gestreept"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "Gestippeld"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "Binnen"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "Gemengd"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "Buiten"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:193
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:202
msgid "workspace.options.stroke.remove-stroke"
msgstr "Streek verwijderen"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "Solide"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "Onderaan uitlijnen"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "Midden uitlijnen"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "Boven uitlijnen"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "Links naar rechts"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "Rechts naar links"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "Automatische hoogte"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "Automatische breedte"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "Vast"
@@ -6558,35 +6675,35 @@ msgstr "Kleine letters"
msgid "workspace.options.text-options.none"
msgstr "Geen"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "Doorhalen (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "Centreren"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "Uitvullen"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "Links uitlijnen"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "Rechts uitlijnen"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "Tekst"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "Groeptekst"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "Selectietekst"
@@ -6595,7 +6712,7 @@ msgstr "Selectietekst"
msgid "workspace.options.text-options.titlecase"
msgstr "Beginhoofdletters"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "Onderstrepen (%s)"
@@ -6604,19 +6721,19 @@ msgstr "Onderstrepen (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "HOOFDLETTERS"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr "Gebruik de afspeelknop in de koptekst om de prototypeweergave uit te voeren."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "Breedte"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "X-as"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Y-as"
@@ -6660,82 +6777,82 @@ msgstr "Knooppunten loskoppelen (%s)"
msgid "workspace.path.actions.snap-nodes"
msgstr "Uitlijnen op knooppunten (%s)"
-#: src/app/main/ui/workspace/plugins.cljs:83
+#: src/app/main/ui/workspace/plugins.cljs:84
msgid "workspace.plugins.button-open"
msgstr "Openen"
-#: src/app/main/ui/workspace/plugins.cljs:197
+#: src/app/main/ui/workspace/plugins.cljs:198
#, markdown
msgid "workspace.plugins.discover"
msgstr "Ontdekken [meer plug-ins](%s)"
-#: src/app/main/ui/workspace/plugins.cljs:204
+#: src/app/main/ui/workspace/plugins.cljs:205
msgid "workspace.plugins.empty-plugins"
msgstr "Nog geen plug-ins geïnstalleerd"
-#: src/app/main/ui/workspace/plugins.cljs:191
+#: src/app/main/ui/workspace/plugins.cljs:192
msgid "workspace.plugins.error.manifest"
msgstr "Het plug-in-manifest is onjuist."
-#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:755, src/app/main/ui/workspace/plugins.cljs:82
+#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:783, src/app/main/ui/workspace/plugins.cljs:83
msgid "workspace.plugins.error.need-editor"
msgstr "Je moet een redacteur zijn om deze plug-in te gebruiken"
-#: src/app/main/ui/workspace/plugins.cljs:187
+#: src/app/main/ui/workspace/plugins.cljs:188
msgid "workspace.plugins.error.url"
msgstr "De plug-in bestaat niet of de URL is niet correct."
-#: src/app/main/ui/workspace/plugins.cljs:183
+#: src/app/main/ui/workspace/plugins.cljs:184
msgid "workspace.plugins.install"
msgstr "Installeren"
-#: src/app/main/ui/workspace/plugins.cljs:213
+#: src/app/main/ui/workspace/plugins.cljs:214
msgid "workspace.plugins.installed-plugins"
msgstr "Geïnstalleerde plug-ins"
-#: src/app/main/ui/workspace/main_menu.cljs:710
+#: src/app/main/ui/workspace/main_menu.cljs:738
msgid "workspace.plugins.menu.plugins-manager"
msgstr "Plug-in-beheer"
-#: src/app/main/ui/workspace/main_menu.cljs:906
+#: src/app/main/ui/workspace/main_menu.cljs:934
msgid "workspace.plugins.menu.title"
msgstr "Plug-ins"
-#: src/app/main/ui/workspace/plugins.cljs:374
+#: src/app/main/ui/workspace/plugins.cljs:375
msgid "workspace.plugins.permissions-update.title"
msgstr "DEZE PLUGIN UPDATEN"
-#: src/app/main/ui/workspace/plugins.cljs:378
+#: src/app/main/ui/workspace/plugins.cljs:379
msgid "workspace.plugins.permissions-update.warning"
msgstr ""
"De plug-in is gewijzigd sinds je hem voor het laatst hebt geopend. Het wil "
"nu ook toegang krijgen tot:"
-#: src/app/main/ui/workspace/plugins.cljs:278
+#: src/app/main/ui/workspace/plugins.cljs:279
msgid "workspace.plugins.permissions.allow-download"
msgstr "Bestandsdownloads starten."
-#: src/app/main/ui/workspace/plugins.cljs:285
+#: src/app/main/ui/workspace/plugins.cljs:286
msgid "workspace.plugins.permissions.allow-localstorage"
msgstr "Gegevens opslaan in de browser."
-#: src/app/main/ui/workspace/plugins.cljs:271
+#: src/app/main/ui/workspace/plugins.cljs:272
msgid "workspace.plugins.permissions.comment-read"
msgstr "Jouw opmerkingen en antwoorden lezen."
-#: src/app/main/ui/workspace/plugins.cljs:265
+#: src/app/main/ui/workspace/plugins.cljs:266
msgid "workspace.plugins.permissions.comment-write"
msgstr "Lees en wijzig jouw opmerkingen en antwoord in jouw naam."
-#: src/app/main/ui/workspace/plugins.cljs:238
+#: src/app/main/ui/workspace/plugins.cljs:239
msgid "workspace.plugins.permissions.content-read"
msgstr "Lees de inhoud van bestanden waartoe gebruikers toegang hebben."
-#: src/app/main/ui/workspace/plugins.cljs:232
+#: src/app/main/ui/workspace/plugins.cljs:233
msgid "workspace.plugins.permissions.content-write"
msgstr "Lees en wijzig de inhoud van bestanden waartoe gebruikers toegang hebben."
-#: src/app/main/ui/workspace/plugins.cljs:325
+#: src/app/main/ui/workspace/plugins.cljs:326
msgid "workspace.plugins.permissions.disclaimer"
msgstr ""
"Houd er rekening mee dat deze plug-in is gemaakt door een externe partij, "
@@ -6743,31 +6860,31 @@ msgstr ""
"van jouw gegevens en beveiliging zijn belangrijk voor ons. Als je je zorgen "
"maakt, neem dan contact op met ondersteuning."
-#: src/app/main/ui/workspace/plugins.cljs:258
+#: src/app/main/ui/workspace/plugins.cljs:259
msgid "workspace.plugins.permissions.library-read"
msgstr "Jouw bibliotheken en middelen bekijken."
-#: src/app/main/ui/workspace/plugins.cljs:252
+#: src/app/main/ui/workspace/plugins.cljs:253
msgid "workspace.plugins.permissions.library-write"
msgstr "Jouw bibliotheken en middelen lezen en aanpassen."
-#: src/app/main/ui/workspace/plugins.cljs:318
+#: src/app/main/ui/workspace/plugins.cljs:319
msgid "workspace.plugins.permissions.title"
msgstr "PLUG-IN '%s' WIL TOEGANG TOT:"
-#: src/app/main/ui/workspace/plugins.cljs:245
+#: src/app/main/ui/workspace/plugins.cljs:246
msgid "workspace.plugins.permissions.user-read"
msgstr "Lees de profielinformatie van de huidige gebruiker."
-#: src/app/main/ui/workspace/plugins.cljs:209
+#: src/app/main/ui/workspace/plugins.cljs:210
msgid "workspace.plugins.plugin-list-link"
msgstr "Plug-in-lijst"
-#: src/app/main/ui/workspace/plugins.cljs:86
+#: src/app/main/ui/workspace/plugins.cljs:87
msgid "workspace.plugins.remove-plugin"
msgstr "Plug-in verwijderen"
-#: src/app/main/ui/workspace/plugins.cljs:178
+#: src/app/main/ui/workspace/plugins.cljs:179
msgid "workspace.plugins.search-placeholder"
msgstr "De URL van een plug-in invoeren"
@@ -6775,26 +6892,26 @@ msgstr "De URL van een plug-in invoeren"
msgid "workspace.plugins.success"
msgstr "Plug-in met succes geladen."
-#: src/app/main/ui/workspace/plugins.cljs:172
+#: src/app/main/ui/workspace/plugins.cljs:173
msgid "workspace.plugins.title"
msgstr "Plug-ins"
-#: src/app/main/ui/workspace/plugins.cljs:438
+#: src/app/main/ui/workspace/plugins.cljs:439
msgid "workspace.plugins.try-out.cancel"
msgstr "NIET NU"
-#: src/app/main/ui/workspace/plugins.cljs:431
+#: src/app/main/ui/workspace/plugins.cljs:432
msgid "workspace.plugins.try-out.message"
msgstr ""
"Wil je even kijken? Het wordt geopend in een nieuw concept voor je huidige "
"team. (Zo niet, dan vindt je het altijd in de geïnstalleerde plug-ins van "
"elk bestand.)"
-#: src/app/main/ui/workspace/plugins.cljs:427
+#: src/app/main/ui/workspace/plugins.cljs:428
msgid "workspace.plugins.try-out.title"
msgstr "PLUG-IN '%s' IS GEÏNSTALLEERD VOOR JE GEBRUIKER!"
-#: src/app/main/ui/workspace/plugins.cljs:444
+#: src/app/main/ui/workspace/plugins.cljs:445
msgid "workspace.plugins.try-out.try"
msgstr "PLUG-IN UITPROBEREN"
@@ -6806,15 +6923,15 @@ msgstr "Flex-indeling toevoegen"
msgid "workspace.shape.menu.add-grid"
msgstr "Rasterindeling toevoegen"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1015, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1039
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1016, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1040
msgid "workspace.shape.menu.add-layout"
msgstr "Lay-out toevoegen"
-#: src/app/main/ui/workspace/context_menu.cljs:608, src/app/main/ui/workspace/sidebar/assets/common.cljs:505, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:941, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1161
+#: src/app/main/ui/workspace/context_menu.cljs:610, src/app/main/ui/workspace/sidebar/assets/common.cljs:514, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:961, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1113, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1195
msgid "workspace.shape.menu.add-variant"
msgstr "Variant aanmaken"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:509, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:990, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1082, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1198
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:518, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1010, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1115, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1233
msgid "workspace.shape.menu.add-variant-property"
msgstr "Nieuwe eigenschap toevoegen"
@@ -6826,11 +6943,11 @@ msgstr "Naar achtergrond verplaatsen"
msgid "workspace.shape.menu.backward"
msgstr "Naar achteren verplaatsen"
-#: src/app/main/ui/workspace/context_menu.cljs:615, src/app/main/ui/workspace/sidebar/assets/components.cljs:638, src/app/main/ui/workspace/sidebar/assets/groups.cljs:74, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1021
+#: src/app/main/ui/workspace/context_menu.cljs:617, src/app/main/ui/workspace/sidebar/assets/components.cljs:634, src/app/main/ui/workspace/sidebar/assets/groups.cljs:75, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1041
msgid "workspace.shape.menu.combine-as-variants"
msgstr "Combineren als varianten"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:640
+#: src/app/main/ui/workspace/sidebar/assets/components.cljs:636
msgid "workspace.shape.menu.combine-as-variants-error"
msgstr "Componenten moeten op dezelfde pagina staan"
@@ -6866,7 +6983,7 @@ msgstr "Kopiëren als SVG"
msgid "workspace.shape.menu.copy-text"
msgstr "Kopiëren als tekst"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "Aantekening maken"
@@ -6874,11 +6991,11 @@ msgstr "Aantekening maken"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "Selectie naar bord"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "Component aanmaken"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "Meerdere componenten aanmaken"
@@ -6886,7 +7003,7 @@ msgstr "Meerdere componenten aanmaken"
msgid "workspace.shape.menu.cut"
msgstr "Knippen"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "Verwijderen"
@@ -6894,15 +7011,15 @@ msgstr "Verwijderen"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "Stroomdiagram-start verwijderen"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "Instantie losmaken"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "Instanties losmaken"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "Verschil"
@@ -6914,11 +7031,11 @@ msgstr "Dupliceren"
msgid "workspace.shape.menu.edit"
msgstr "Bewerken"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "Uitsluiten"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "Afvlakken"
@@ -6951,19 +7068,19 @@ msgstr "Ga naar hoofdcomponent"
msgid "workspace.shape.menu.group"
msgstr "Groep"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "Verbergen"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "Gebruikersinterface tonen/verbergen"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "Kruispunt"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "Vergrendelen"
@@ -6971,7 +7088,7 @@ msgstr "Vergrendelen"
msgid "workspace.shape.menu.mask"
msgstr "Masker"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "Plakken"
@@ -6991,15 +7108,15 @@ msgstr "Flex-indeling verwijderen"
msgid "workspace.shape.menu.remove-grid"
msgstr "Raster-layout verwijderen"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1033
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1034
msgid "workspace.shape.menu.remove-layout"
msgstr "Lay-out verwijderen"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1222
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1257
msgid "workspace.shape.menu.remove-variant-property"
msgstr "Eigenschap verwijderen"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1221
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1256
msgid "workspace.shape.menu.remove-variant-property.last-property"
msgstr "Variant moet ten minste één eigenschap hebben"
@@ -7007,15 +7124,15 @@ msgstr "Variant moet ten minste één eigenschap hebben"
msgid "workspace.shape.menu.rename"
msgstr "Naam wijzigen"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "Overschrijvingen opnieuw instellen"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "Hoofdcomponent herstellen"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:504
msgid "workspace.shape.menu.restore-variant"
msgstr "Variant herstellen"
@@ -7023,15 +7140,15 @@ msgstr "Variant herstellen"
msgid "workspace.shape.menu.select-layer"
msgstr "Laag selecteren"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "Tonen"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "In paneel Assets tonen"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "Hoofdcomponent tonen"
@@ -7044,6 +7161,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "Instellen als miniatuur"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "Transformeren naar pad"
@@ -7051,11 +7169,11 @@ msgstr "Transformeren naar pad"
msgid "workspace.shape.menu.ungroup"
msgstr "Groep opheffen"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "Vereniging"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "Ontgrendelen"
@@ -7068,7 +7186,7 @@ msgstr "Masker wegnemen"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "Hoofdcomponenten bijwerken"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "Hoofdcomponent bijwerken"
@@ -7080,11 +7198,11 @@ msgstr "Zijbalk inklappen"
msgid "workspace.sidebar.expand"
msgstr "Zijbalk uitklappen"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "Geschiedenis"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "Lagen"
@@ -7124,11 +7242,11 @@ msgstr "Teksten"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "Geïmporteerde SVG-kenmerken"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "Pagina's"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:248
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:249
msgid "workspace.sidebar.sitemap.add-page"
msgstr "Pagina toevoegen"
@@ -7145,27 +7263,27 @@ msgstr "%s actieve thema's"
msgid "workspace.tokens.add set"
msgstr "Verzameling toevoegen"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:329
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
msgid "workspace.tokens.add-new-theme"
msgstr "Nieuw thema toevoegen"
-#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:60
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:62
msgid "workspace.tokens.add-set-to-group"
msgstr "Verzameling aan deze groep toevoegen"
-#: src/app/main/ui/workspace/tokens/management/group.cljs:113
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:197, src/app/main/ui/workspace/tokens/management/group.cljs:115
msgid "workspace.tokens.add-token"
msgstr "Token toevoegen: %s"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:161
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:136
msgid "workspace.tokens.applied-to"
msgstr "Toegepast op"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:315
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:316
msgid "workspace.tokens.axis"
msgstr "As"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:338
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:337
msgid "workspace.tokens.back-to-themes"
msgstr "Terug naar themalijst"
@@ -7195,15 +7313,15 @@ msgstr "Kleur"
msgid "workspace.tokens.create-new-theme"
msgstr "Maak nu je eerste thema aan."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:100, src/app/main/ui/workspace/tokens/themes.cljs:44
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:96, src/app/main/ui/workspace/tokens/themes.cljs:44
msgid "workspace.tokens.create-one"
msgstr "Maak er een aan."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:534
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:552
msgid "workspace.tokens.create-token"
msgstr "Nieuw %s token aanmaken"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:337
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:338
msgid "workspace.tokens.delete"
msgstr "Token verwijderen"
@@ -7211,19 +7329,19 @@ msgstr "Token verwijderen"
msgid "workspace.tokens.delete-theme-title"
msgstr "Thema verwijderen"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:334
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:335
msgid "workspace.tokens.duplicate"
msgstr "Token dupliceren"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:201, src/app/main/data/workspace/tokens/library_edit.cljs:405
+#: src/app/main/data/workspace/tokens/library_edit.cljs:197, src/app/main/data/workspace/tokens/library_edit.cljs:415
msgid "workspace.tokens.duplicate-suffix"
msgstr "kopie"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:321
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:322
msgid "workspace.tokens.edit"
msgstr "Token bewerken"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:327
msgid "workspace.tokens.edit-theme-title"
msgstr "Thema bewerken"
@@ -7231,15 +7349,11 @@ msgstr "Thema bewerken"
msgid "workspace.tokens.edit-themes"
msgstr "Thema's bewerken"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:533
-msgid "workspace.tokens.edit-token"
-msgstr "Token bewerken"
-
#: src/app/main/data/workspace/tokens/errors.cljs:41
msgid "workspace.tokens.empty-input"
msgstr "De tokenwaarde mag niet leeg zijn"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:540
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:558
msgid "workspace.tokens.enter-token-name"
msgstr "Voer de tokennaam %s in"
@@ -7271,7 +7385,13 @@ msgstr "Voorbeeld:"
msgid "workspace.tokens.export.single-file"
msgstr "Enkel bestand"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:229
+#: src/app/main/data/workspace/tokens/application.cljs:292
+msgid "workspace.tokens.font-variant-not-found"
+msgstr ""
+"Fout bij instellen van lettertype gewicht/stijl. Deze lettertypestijl "
+"bestaat niet in het huidige lettertype"
+
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:228
msgid "workspace.tokens.gaps"
msgstr "Tussenruimtes"
@@ -7289,7 +7409,7 @@ msgstr "Groepnaam"
msgid "workspace.tokens.grouping-set-alert"
msgstr "Groepering van tokenverzamelingen is nog niet ondersteund."
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:232
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:233
msgid "workspace.tokens.import-button-prefix"
msgstr "Importeren: %s"
@@ -7297,29 +7417,29 @@ msgstr "Importeren: %s"
msgid "workspace.tokens.import-error"
msgstr "Fout bij importeren:"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:272
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:273
msgid "workspace.tokens.import-menu-folder-option"
msgstr "Map"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:271
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:272
msgid "workspace.tokens.import-menu-json-option"
msgstr "Enkel JSON-bestand"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:270
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:271
msgid "workspace.tokens.import-menu-zip-option"
msgstr "ZIP-bestand"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:240
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:241
msgid "workspace.tokens.import-multiple-files"
msgstr "In meerdere bestanden zijn de bestandsnaam / het pad de ingestelde namen."
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:239
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:240
msgid "workspace.tokens.import-single-file"
msgstr ""
"In één JSON-bestand moeten de sleutels op het eerste niveau de namen van de "
"tokenset zijn."
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:236
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:237
msgid "workspace.tokens.import-tokens"
msgstr "Tokens importeren"
@@ -7330,7 +7450,7 @@ msgstr ""
"Bij het importeren van een JSON-bestand worden alle huidige tokens, "
"verzamelingen en thema's overschreven"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:246
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:247
msgid "workspace.tokens.import-warning"
msgstr ""
"Als je tokens importeert, worden al je huidige tokens, sets en thema's "
@@ -7404,15 +7524,15 @@ msgstr "Thema"
msgid "workspace.tokens.label.theme-placeholder"
msgstr "Een thema toevoegen (bijv. Licht)"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:221
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:220
msgid "workspace.tokens.margins"
msgstr "Marges"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:257
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:256
msgid "workspace.tokens.max-size"
msgstr "Max. grootte"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:251
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:250
msgid "workspace.tokens.min-size"
msgstr "Min. grootte"
@@ -7420,7 +7540,7 @@ msgstr "Min. grootte"
msgid "workspace.tokens.missing-references"
msgstr "Ontbrekende tokenverwijzingen: "
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:148
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:123
msgid "workspace.tokens.more-options"
msgstr "Klik met de rechtermuisknop om opties te zien"
@@ -7432,7 +7552,7 @@ msgstr "Geen actieve verzamelingen"
msgid "workspace.tokens.no-active-theme"
msgstr "Geen thema actief"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:76
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:72
msgid "workspace.tokens.no-permisions-set"
msgstr "Je moet een redacteur zijn om verzamelingen in/uit te schakelen"
@@ -7440,11 +7560,11 @@ msgstr "Je moet een redacteur zijn om verzamelingen in/uit te schakelen"
msgid "workspace.tokens.no-permission-themes"
msgstr "Je moet een redacteur zijn om thema's te gebruiken"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:480
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:483
msgid "workspace.tokens.no-sets-create"
msgstr "Er zijn nog geen verzamelingen gedefinieerd. Maak er eerst een aan."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:97, src/app/main/ui/workspace/tokens/sets/lists.cljs:103
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:93, src/app/main/ui/workspace/tokens/sets/lists.cljs:99
msgid "workspace.tokens.no-sets-yet"
msgstr "Er zijn nog geen verzamelingen."
@@ -7472,12 +7592,11 @@ msgstr "Ongeldige tokenwaarde. De opgeloste waarde is te groot: %s"
msgid "workspace.tokens.opacity-range"
msgstr "De dekking moet tussen 0 en 100% of 0 en 1 zijn (bijv. 50% of 0,5)."
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:145
-#, fuzzy
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:120
msgid "workspace.tokens.original-value"
msgstr "Oorspronkelijke waarde: %s"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:205
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:204
msgid "workspace.tokens.paddings"
msgstr "Vulling"
@@ -7485,7 +7604,7 @@ msgstr "Vulling"
msgid "workspace.tokens.radius"
msgstr "Radius"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:153
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:128
msgid "workspace.tokens.ref-not-valid"
msgstr "Referentie is niet geldig of zit niet in een actieve verzameling"
@@ -7494,8 +7613,7 @@ msgstr "Referentie is niet geldig of zit niet in een actieve verzameling"
msgid "workspace.tokens.reference-error"
msgstr "Referentie fouten: "
-#: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:39, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:44, src/app/main/ui/workspace/tokens/management/token_pill.cljs:146
-#, fuzzy
+#: 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:100, 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
msgid "workspace.tokens.resolved-value"
msgstr "Opgeloste waarde: %s"
@@ -7503,7 +7621,7 @@ msgstr "Opgeloste waarde: %s"
msgid "workspace.tokens.save-theme"
msgstr "Thema opslaan"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:209, src/app/main/ui/workspace/tokens/sets/lists.cljs:315
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:204, src/app/main/ui/workspace/tokens/sets/lists.cljs:309
msgid "workspace.tokens.select-set"
msgstr "Verzameling kiezen."
@@ -7511,11 +7629,11 @@ msgstr "Verzameling kiezen."
msgid "workspace.tokens.self-reference"
msgstr "Token bevat cirkelverwijzing"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:64
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:60
msgid "workspace.tokens.set-edit-placeholder"
msgstr "Voer de naam in (gebruik '/' voor groepen)"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:343
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:342
msgid "workspace.tokens.set-selection-theme"
msgstr ""
"Bepaal welke tokenverzamelingen moeten worden gebruikt als onderdeel van "
@@ -7540,7 +7658,7 @@ msgstr ""
msgid "workspace.tokens.settings"
msgstr "Instellingen voor tokens"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:245
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:244
msgid "workspace.tokens.size"
msgstr "Grootte"
@@ -7548,13 +7666,13 @@ msgstr "Grootte"
msgid "workspace.tokens.stroke-width-range"
msgstr "De dikte van de streek moet groter zijn dan of gelijk zijn aan 0."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:865, src/app/main/ui/workspace/tokens/management/create/form.cljs:895
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1012, src/app/main/ui/workspace/tokens/management/create/form.cljs:1051
msgid "workspace.tokens.text-case-value-enter"
-msgstr "Voer in: none | uppercase | lowercase | capitalize of {alias}"
+msgstr "none | uppercase | lowercase | capitalize of {alias}"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:871, src/app/main/ui/workspace/tokens/management/create/form.cljs:898
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1018, src/app/main/ui/workspace/tokens/management/create/form.cljs:1055
msgid "workspace.tokens.text-decoration-value-enter"
-msgstr "Voer tekstdecoratie in: none | underline | strike-through"
+msgstr "none | underline | strike-through of {alias}"
#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:130
msgid "workspace.tokens.theme-name"
@@ -7570,28 +7688,27 @@ msgstr ""
msgid "workspace.tokens.themes-list"
msgstr "Lijst met thema's"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:589, src/app/main/ui/workspace/tokens/management/create/form.cljs:590
-#, fuzzy
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:608, src/app/main/ui/workspace/tokens/management/create/form.cljs:609
msgid "workspace.tokens.token-description"
msgstr "Beschrijving"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:827
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:973
msgid "workspace.tokens.token-font-family-select"
msgstr "Lettertypefamilie selecteren"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:834, src/app/main/ui/workspace/tokens/management/create/form.cljs:885
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1029
msgid "workspace.tokens.token-font-family-value"
msgstr "Lettertypefamilie"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:833, src/app/main/ui/workspace/tokens/management/create/form.cljs:886
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:979, src/app/main/ui/workspace/tokens/management/create/form.cljs:1031
msgid "workspace.tokens.token-font-family-value-enter"
msgstr "Lettertypefamilie of lijst met lettertypen gescheiden door komma (,)"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:539
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:83, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:109, src/app/main/ui/workspace/tokens/management/create/form.cljs:557
msgid "workspace.tokens.token-name"
msgstr "Naam"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:66
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:69
msgid "workspace.tokens.token-name-validation-error"
msgstr ""
" is geen geldige tokennaam.\n"
@@ -7603,11 +7720,11 @@ msgstr ""
msgid "workspace.tokens.token-not-resolved"
msgstr "Kan referentietoken met de naam: %s niet oplossen"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:567
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:585
msgid "workspace.tokens.token-value"
msgstr "Waarde"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:566, src/app/main/ui/workspace/tokens/management/create/form.cljs:883, src/app/main/ui/workspace/tokens/management/create/form.cljs:892
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:584, src/app/main/ui/workspace/tokens/management/create/form.cljs:1035
msgid "workspace.tokens.token-value-enter"
msgstr "Voer een waarde of alias in met {alias}"
@@ -7615,7 +7732,7 @@ msgstr "Voer een waarde of alias in met {alias}"
msgid "workspace.tokens.tokens-section-title"
msgstr "TOKENS - %s"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:125
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:121
msgid "workspace.tokens.tools"
msgstr "Hulpmiddelen"
@@ -7627,21 +7744,25 @@ msgstr "Importeren was succesvol. Sommige tokens zijn niet inbegrepen."
msgid "workspace.tokens.unknown-token-type-section"
msgstr "Typ '%s' wordt niet ondersteund (%s)\n"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:156
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:131
msgid "workspace.tokens.value-not-valid"
msgstr "De waarde is niet geldig"
+#: src/app/main/data/workspace/tokens/errors.cljs:69
+msgid "workspace.tokens.value-with-percent"
+msgstr "Ongeldige waarde: % is niet toegestaan."
+
#: src/app/main/data/workspace/tokens/errors.cljs:65
msgid "workspace.tokens.value-with-units"
msgstr "Ongeldige waarde: Eenheden zijn niet toegestaan."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:563
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:581
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:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "Assets"
@@ -7649,7 +7770,7 @@ msgstr "Assets"
msgid "workspace.toolbar.color-palette"
msgstr "Kleurenpalet (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "Commentaar (%s)"
@@ -7860,19 +7981,19 @@ msgstr "Voortgang van %s"
msgid "workspace.undo.title"
msgstr "Geschiedenis"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "Afwijzen"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "Meer info"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "Er zijn updates in gedeelde bibliotheken"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "Bijwerken"
@@ -7940,11 +8061,11 @@ msgstr "Wil je deze versie herstellen?"
msgid "workspace.versions.snapshot-menu"
msgstr "Snapshot-menu openen"
-#: src/app/main/ui/workspace/sidebar.cljs:236
+#: src/app/main/ui/workspace/sidebar.cljs:237
msgid "workspace.versions.tab.actions"
msgstr "Acties"
-#: src/app/main/ui/workspace/sidebar.cljs:234
+#: src/app/main/ui/workspace/sidebar.cljs:235
msgid "workspace.versions.tab.history"
msgstr "Geschiedenis"
@@ -7970,3 +8091,217 @@ msgstr "Automatisch opgeslagen versies worden %s dagen bewaard."
#, unused
msgid "workspace.viewport.click-to-close-path"
msgstr "Klik om het pad te sluiten"
+
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:98, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:105
+msgid "color-row.token-color-row.deleted-token"
+msgstr "Dit token bestaat niet of is verwijderd."
+
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:35
+msgid "color-token.empty-state"
+msgstr ""
+"Geen beschikbare kleurentokens. Controleer actieve sets/thema's of voeg "
+"nieuwe tokens toe."
+
+#: src/app/main/ui/dashboard/team.cljs:765
+msgid "dashboard.invitation-modal.delete"
+msgstr "Je gaat de uitnodigingen verwijderen op:"
+
+#: src/app/main/ui/dashboard/team.cljs:766
+msgid "dashboard.invitation-modal.resend"
+msgstr "Je gaat de uitnodigingen opnieuw versturen:"
+
+#: src/app/main/ui/dashboard/team.cljs:756
+msgid "dashboard.invitation-modal.title.delete-invitations"
+msgstr "Uitnodigingen verwijderen"
+
+#: src/app/main/ui/dashboard/team.cljs:757
+msgid "dashboard.invitation-modal.title.resend-invitations"
+msgstr "Uitnodigingen opnieuw versturen"
+
+#: src/app/main/ui/dashboard/team.cljs:949
+msgid "dashboard.order-invitations-by-role"
+msgstr "Sortering op rol"
+
+#: src/app/main/ui/dashboard/team.cljs:958
+msgid "dashboard.order-invitations-by-status"
+msgstr "Sortering op status"
+
+#: src/app/main/ui/inspect/styles/property_detail_copiable.cljs:52
+msgid "inspect.tabs.styles.panel.copy-to-clipboard"
+msgstr "Kopiëren naar klembord"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:22
+msgid "inspect.tabs.styles.panel.geometry"
+msgstr "Grootte & positie"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:59, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:179
+msgid "inspect.tabs.styles.panel.toggle-style"
+msgstr "Paneel &s wisselen"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:21
+msgid "inspect.tabs.styles.panel.token"
+msgstr "Tokens & thema's"
+
+#: src/app/main/ui/inspect/styles/panels/tokens_panel.cljs:26
+msgid "inspect.tabs.styles.panel.tokens.active-sets"
+msgstr "Actieve verzamelingen"
+
+#: src/app/main/ui/inspect/styles/panels/tokens_panel.cljs:21
+msgid "inspect.tabs.styles.panel.tokens.active-themes"
+msgstr "Actieve thema's"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:20
+msgid "inspect.tabs.styles.panel.variant"
+msgstr "Variant eigenschappen"
+
+#: src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:102, src/app/main/ui/inspect/styles/rows/properties_row.cljs:53
+msgid "inspect.tabs.styles.token.resolved-value"
+msgstr "Opgeloste waarde:"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:1043
+msgid "labels.about-penpot"
+msgstr "Over Penpot"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:26
+msgid "labels.blur"
+msgstr "Vervagen"
+
+#: src/app/main/ui/workspace/colorpicker.cljs:427
+msgid "labels.color"
+msgstr "Kleur"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:1030
+msgid "labels.community-contributions"
+msgstr "Gemeenschap & bijdragen"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:23
+msgid "labels.fill"
+msgstr "Vullen"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:1019
+msgid "labels.help-learning"
+msgstr "Hulp & studie"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:28
+msgid "labels.layout"
+msgstr "Opmaak"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:798
+msgid "labels.learning-center"
+msgstr "Studiecentrum"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:878
+msgid "labels.penpot-changelog"
+msgstr "Penpot wijzigingen"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:804
+msgid "labels.penpot-hub"
+msgstr "Penpot-hub"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:644
+msgid "labels.reference"
+msgstr "Referentie"
+
+#: src/app/main/ui/dashboard/team.cljs:788
+msgid "labels.resend"
+msgstr "Opnieuw versturen"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:27
+msgid "labels.shadow"
+msgstr "Schaduw"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:24, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:46
+msgid "labels.stroke"
+msgstr "Streek"
+
+#: src/app/main/ui/inspect/right_sidebar.cljs:107, src/app/main/ui/inspect/styles.cljs:107
+msgid "labels.styles"
+msgstr "Stijlen"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:33
+msgid "labels.svg"
+msgstr "SVG"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:25
+msgid "labels.text"
+msgstr "Tekst"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1148
+msgid "labels.typography"
+msgstr "Typografie"
+
+#: src/app/main/ui/inspect/right_sidebar.cljs:65, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:949, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:518
+msgid "labels.variant"
+msgstr "Variant"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:872
+msgid "labels.version-notes"
+msgstr "Versie %s opmerkingen"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:32
+msgid "labels.visibility"
+msgstr "Zichtbaarheid"
+
+#: src/app/main/ui/dashboard/team.cljs:825
+msgid "notifications.invitation-deleted"
+msgstr "Uitnodiging met succes verwijderd"
+
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+msgid "shortcuts.create-component-variant"
+msgstr "Component/variant aanmaken"
+
+#: src/app/main/ui/workspace/colorpicker.cljs:431, src/app/main/ui/workspace/colorpicker.cljs:443
+msgid "workspace.colorpicker.color-tokens"
+msgstr "Kleurtokens"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:464
+msgid "workspace.component.swap.loop-error"
+msgstr "Componenten kunnen niet in zichzelf worden genest."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:463
+msgid "workspace.component.switch.loop-error-multi"
+msgstr ""
+"Sommige exemplaren konden niet worden verwisseld. Componenten kunnen niet in "
+"zichzelf worden genest."
+
+#: src/app/main/ui/workspace/libraries.cljs:349
+msgid "workspace.libraries.connected-to"
+msgstr "Verbonden met"
+
+#: src/app/main/data/workspace/tokens/errors.cljs:97
+msgid "workspace.tokens.composite-line-height-needs-font-size"
+msgstr ""
+"Regelafstand is afhankelijk van de lettergrootte. Voeg een lettergrootte toe "
+"om de opgeloste waarde te verkrijgen."
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:551
+msgid "workspace.tokens.edit-token"
+msgstr "%s token bewerken"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1024, src/app/main/ui/workspace/tokens/management/create/form.cljs:1039
+msgid "workspace.tokens.font-weight-value-enter"
+msgstr "Font weight (300, Bold Italic...) of een {alias}"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:711
+msgid "workspace.tokens.individual-tokens"
+msgstr "Individuele tokens gebruiken"
+
+#: src/app/main/data/workspace/tokens/errors.cljs:93
+msgid "workspace.tokens.invalid-token-value-typography"
+msgstr "Ongeldige waarde: moet verwijzen naar een samengesteld typografietoken."
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1047
+msgid "workspace.tokens.letter-spacing-value-enter-composite"
+msgstr "Letter spacing of {alias}"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1043
+msgid "workspace.tokens.line-height-value-enter"
+msgstr "Line height (vermenigvuldigingsfactor, px, %) of {alias}"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:744
+msgid "workspace.tokens.reference-composite"
+msgstr "Voer een alias voor tokentypografie in"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:715
+msgid "workspace.tokens.use-reference"
+msgstr "Referentie gebruiken"
diff --git a/frontend/translations/pl.po b/frontend/translations/pl.po
index 9c8f57b024..298219203b 100644
--- a/frontend/translations/pl.po
+++ b/frontend/translations/pl.po
@@ -1,16 +1,16 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-11 07:21+0000\n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
"Last-Translator: Radek Sawicki \n"
-"Language-Team: Polish "
-" \n"
+"Language-Team: Polish \n"
"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && "
-"(n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Weblate 5.13-dev\n"
+"Plural-Forms: nplurals=3; plural="
+"(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -143,7 +143,7 @@ msgstr "Utwórz konto"
msgid "auth.sidebar-tagline"
msgstr "Rozwiązanie typu Open Source do projektowania i prototypowania."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Warunki świadczenia usług"
@@ -151,7 +151,7 @@ msgstr "Warunki świadczenia usług"
msgid "auth.verification-email-sent"
msgstr "Wysłaliśmy email weryfikacyjny na adres"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Opublikuj"
@@ -224,7 +224,7 @@ msgstr "Udostępnij prototypy"
msgid "common.share-link.view-all"
msgstr "Wybierz wszystko"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Cofnij publikację"
@@ -272,7 +272,7 @@ msgstr "Rozpocznij wycieczkę"
msgid "dasboard.walkthrough-hero.title"
msgstr "Przewodnik po interfejsie"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Dodaj jako Udostępnioną Bibliotekę"
@@ -280,27 +280,27 @@ msgstr "Dodaj jako Udostępnioną Bibliotekę"
msgid "dashboard.change-email"
msgstr "Zmień email"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(skopiuj)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Utwórz nowy zespół"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Twój Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Usuń zespół"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Pobierz plik Penpot (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Pobierz plik standardowy (.svg + .json)"
@@ -316,7 +316,7 @@ msgstr "Zduplikuj %s pliki"
msgid "dashboard.export-binary-multi"
msgstr "Pobierz %s plików Penpot (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Eksportuj obszary kompozycji jako PDF"
@@ -332,7 +332,7 @@ msgstr "Eksportuj %s pliki Penpot"
msgid "dashboard.export-multiple.selected"
msgstr "%s z %s elementów wybranych"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Eksportuj"
@@ -494,11 +494,11 @@ msgstr "Przesyłanie danych na serwer (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Przesyłanie pliku: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Zaproś ludzi"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Opuść zespół"
@@ -510,7 +510,7 @@ msgstr "Biblioteki i szablony"
msgid "dashboard.libraries-and-templates.explore"
msgstr "Poznaj więcej z nich i dowiedz się, jak pomóc"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "Wystąpił problem z importem szablonu. Szablon nie został zaimportowany."
@@ -542,7 +542,7 @@ msgstr "Przenieś do innego zespołu"
msgid "dashboard.new-file"
msgstr "+ Nowy plik"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Nowy plik"
@@ -550,7 +550,7 @@ msgstr "Nowy plik"
msgid "dashboard.new-project"
msgstr "+ Nowy projekt"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Nowy projekt"
@@ -558,7 +558,7 @@ msgstr "Nowy projekt"
msgid "dashboard.no-matches-for"
msgstr "Nie znaleziono dopasowań dla “%s“"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Tutaj pojawią się przypięte projekty"
@@ -574,7 +574,7 @@ msgstr "Twój adres email został pomyślnie zweryfikowany"
msgid "dashboard.notifications.password-saved"
msgstr "Hasło zostało pomyślnie zapisane!"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s członków"
@@ -590,7 +590,7 @@ msgstr "Opcje"
msgid "dashboard.password-change"
msgstr "Zmień hasło"
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Przypnij/Odepnij"
@@ -611,7 +611,7 @@ msgstr "Usuń jako Bibliotekę Udostępnioną"
msgid "dashboard.save-settings"
msgstr "Zapisz ustawienia"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Szukaj…"
@@ -639,7 +639,7 @@ msgstr "Twój projekt został pomyślnie usunięty"
msgid "dashboard.success-duplicate-project"
msgstr "Twój projekt został pomyślnie zduplikowany"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Twój plik został pomyślnie przeniesiony"
@@ -651,15 +651,15 @@ msgstr "Twoje pliki został pomyślnie przeniesione"
msgid "dashboard.success-move-project"
msgstr "Twój projekt został pomyślnie przeniesiony"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Informacje o zespole"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Członkowie zespołu"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Projekty zespołu"
@@ -675,7 +675,7 @@ msgstr "Wyniki wyszukiwania"
msgid "dashboard.type-something"
msgstr "Wpisz, aby wyszukać wyniki"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Cofnij publikację biblioteki"
@@ -683,38 +683,38 @@ msgstr "Cofnij publikację biblioteki"
msgid "dashboard.update-settings"
msgstr "Aktualizuj ustawienia"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "Jest aktywny"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "Po wywołaniu tego haka zostaną dostarczone szczegóły zdarzenia"
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "Typ treści"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "Utwórz webhooka"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "Pomyślnie utworzono webhook."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"Webhook to prosty sposób na powiadamianie innych stron internetowych i "
"aplikacji o określonych zdarzeniach w Penpot. Wyślemy żądanie POST do "
"każdego podanego przez Ciebie adresu URL."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "Naciśnij przycisk „Dodaj webhook”, aby go dodać."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "Do tej pory nie utworzono żadnych webhooków."
@@ -734,7 +734,7 @@ msgstr "Email"
msgid "dashboard.your-name"
msgstr "Twoje imię"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Twój Penpot"
@@ -750,11 +750,11 @@ msgstr "Uwaga"
msgid "ds.component-subtitle"
msgstr "Komponenty do aktualizacji:"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Anuluj"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Ok"
@@ -794,11 +794,11 @@ msgstr "E-mail został już zweryfikowany."
msgid "errors.email-as-password"
msgstr "Nie możesz użyć swojego adresu email jako hasła"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "Email «%s» zawiera wiele stałych raportów o odrzuceniu."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "Email «%s» został zgłoszony jako spam lub trwale odrzucony."
@@ -812,7 +812,7 @@ msgstr ""
msgid "errors.feature-not-supported"
msgstr "Funkcja '%s' nie jest obsługiwana."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Coś poszło nie tak."
@@ -845,7 +845,7 @@ msgstr "To zaproszenie może być anulowane lub wygasło."
msgid "errors.ldap-disabled"
msgstr "Uwierzytelnianie LDAP jest wyłączone."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "Osiągnąłeś limit '%s'. Skontaktuj się z pomocą techniczną."
@@ -861,7 +861,7 @@ msgstr "Wygląda na to, że zawartość obrazu nie pasuje do rozszerzenia pliku.
msgid "errors.media-type-not-allowed"
msgstr "Wygląda, że to nie jest prawidłowy obraz."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"W zapraszanym profilu powiadomienia email są wyciszone (zgłoszenia spamu "
@@ -881,7 +881,7 @@ msgstr "Hasło powinno zawierać co najmniej 8 znaków"
msgid "errors.profile-blocked"
msgstr "Profil jest zablokowany"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr ""
"Twój profil ma wyciszone powiadomienia email (zgłoszenia spamu lub wysokie "
@@ -891,17 +891,17 @@ msgstr ""
msgid "errors.registration-disabled"
msgstr "Rejestracja jest obecnie wyłączona."
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr ""
"Niewystarczająca liczba członków, aby opuścić zespół, prawdopodobnie chcesz "
"go usunąć."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "Członek, którego próbujesz przypisać, nie istnieje."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr ""
"Właściciel nie może opuścić zespołu, musisz ponownie przypisać rolę "
@@ -915,31 +915,31 @@ msgstr "Wystąpił nieoczekiwany błąd."
msgid "errors.unexpected-token"
msgstr "Nieznany token"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "Błąd połączenia, adres URL nieosiągalny"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "Adres URL nie przechodzi weryfikacji."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "Ostatnia wysyłka nie powiodła się."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "Błąd podczas sprawdzania poprawności SSL."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "Koniec czasu"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "Nieoczekiwany błąd podczas sprawdzania poprawności"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "Nieoczekiwany status %s"
@@ -1003,19 +1003,19 @@ msgstr "Wystąpił błąd"
msgid "inspect.attributes.blur"
msgstr "Rozmycie"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Wartość"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1023,7 +1023,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Wypełnienie"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Pobierz obraz źródłowy"
@@ -1117,73 +1117,75 @@ msgstr "Ciągły"
msgid "inspect.attributes.stroke.width"
msgstr "Szerokość"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Typografia"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Rodzina czcionek"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Rozmiar czcionki"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Styl czcionki"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Rozstaw liter"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Wysokość linii"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Dekoracja tekstu"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Brak"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Podkreślenie"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Przekształcenie tekstu"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "Kapitaliki"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "małe litery"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Brak"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "DUŻE LITERY"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr ""
"Jeśli chcesz dowiedzieć się więcej o inspekcji projektu, odwiedź centrum "
"pomocy Penpot"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "Więcej informacji o inspekcji"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr "Wybierz kształt, tablicę lub grupę, aby sprawdzić ich właściwości i kod"
@@ -1243,7 +1245,7 @@ msgstr "Tekst"
msgid "inspect.tabs.info"
msgstr "Informacje"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Skróty"
@@ -1251,7 +1253,7 @@ msgstr "Skróty"
msgid "labels.accept"
msgstr "Akceptuj"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "Aktywny"
@@ -1259,11 +1261,11 @@ msgstr "Aktywny"
msgid "labels.add-custom-font"
msgstr "Dodaj niestandardową czcionkę"
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Admin"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Wszystko"
@@ -1286,19 +1288,19 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "Bad Gateway"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Anuluj"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Zamknij"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Komentarze"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Społeczność"
@@ -1306,7 +1308,7 @@ msgstr "Społeczność"
msgid "labels.confirm-password"
msgstr "Potwierdź hasło"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Kontynuuj"
@@ -1318,11 +1320,11 @@ msgstr "Kontynuuj z"
msgid "labels.continue-with-penpot"
msgstr "Możesz kontynuować z kontem Penpot"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "Kopiuj link"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Stwórz"
@@ -1342,7 +1344,7 @@ msgstr "Niestandardowe czcionki"
msgid "labels.dashboard"
msgstr "Kokpit"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Usuń"
@@ -1354,7 +1356,7 @@ msgstr "Usuń komentarz"
msgid "labels.delete-comment-thread"
msgstr "Usuń wątek"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Usuń zaproszenie"
@@ -1362,11 +1364,11 @@ msgstr "Usuń zaproszenie"
msgid "labels.delete-multi-files"
msgstr "Usuń %s plików"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Szkice"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Edytuj"
@@ -1374,15 +1376,15 @@ msgstr "Edytuj"
msgid "labels.edit-file"
msgstr "Edytuj plik"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Edytor"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Wygasły"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Eksportuj"
@@ -1406,15 +1408,15 @@ msgstr "Dostawcy czcionek"
msgid "labels.font-variants"
msgstr "Style"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Czcionki"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "Repozytorium Github"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Dodaj opinię"
@@ -1422,15 +1424,15 @@ msgstr "Dodaj opinię"
msgid "labels.go-back"
msgstr "Wróć"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Centrum Pomocy"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Ukryj rozwiązane komentarze"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "Nieaktywny"
@@ -1448,7 +1450,7 @@ msgstr ""
msgid "labels.internal-error.main-message"
msgstr "Błąd wewnętrzny"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Zaproszenia"
@@ -1456,7 +1458,7 @@ msgstr "Zaproszenia"
msgid "labels.language"
msgstr "Język"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Biblioteki i szablony"
@@ -1464,15 +1466,15 @@ msgstr "Biblioteki i szablony"
msgid "labels.log-or-sign"
msgstr "Zaloguj się lub zarejestruj"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Wyloguj"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Członek"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Członkowie"
@@ -1480,13 +1482,13 @@ msgstr "Członkowie"
msgid "labels.new-password"
msgstr "Nowe hasło"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr ""
"Wszyscy jesteście na bieżąco! Tutaj będą pojawiać się powiadomienia o "
"nowych komentarzach."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "Brak oczekujących zaproszeń."
@@ -1499,7 +1501,7 @@ msgstr "Ta strona może nie istnieć lub nie masz do niej uprawnień dostępu."
msgid "labels.not-found.main-message"
msgstr "Kurza stopa!"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "1 plik"
@@ -1513,7 +1515,7 @@ msgstr[0] "1 artboard"
msgstr[1] "%s artboardy"
msgstr[2] "%s artboardów"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "1 projekt"
@@ -1533,7 +1535,7 @@ msgstr "Tylko twoje"
msgid "labels.or"
msgstr "lub"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Właściciel"
@@ -1541,7 +1543,7 @@ msgstr "Właściciel"
msgid "labels.password"
msgstr "Hasło"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "Oczekiwanie"
@@ -1549,11 +1551,11 @@ msgstr "Oczekiwanie"
msgid "labels.profile"
msgstr "Profil"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Projekty"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Uwagi do wydania"
@@ -1567,11 +1569,11 @@ msgstr "Przeładuj plik"
msgid "labels.remove"
msgstr "Usuń"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Usuń członka zespołu"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Zmień nazwę"
@@ -1579,7 +1581,7 @@ msgstr "Zmień nazwę"
msgid "labels.rename-team"
msgstr "Zmień nazwę zespołu"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "Wyślij ponownie zaproszenie"
@@ -1587,11 +1589,11 @@ msgstr "Wyślij ponownie zaproszenie"
msgid "labels.retry"
msgstr "Ponów"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Rola"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Zapisz"
@@ -1615,7 +1617,7 @@ msgstr "Zajmujemy się planowaną konserwacją naszych systemów."
msgid "labels.service-unavailable.main-message"
msgstr "Serwis niedostępny"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Ustawienia"
@@ -1623,11 +1625,11 @@ msgstr "Ustawienia"
msgid "labels.share-prototype"
msgstr "Udostępnij prototyp"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Biblioteki Współdzielone"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Pokaż wszystkie komentarze"
@@ -1635,15 +1637,15 @@ msgstr "Pokaż wszystkie komentarze"
msgid "labels.show-comments-list"
msgstr "Pokaż listę komentarzy"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Pokaż tylko swoje komentarze"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Status"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Samouczki"
@@ -1671,15 +1673,15 @@ msgstr "Wgraj niestandardowe czcionki"
msgid "labels.uploading"
msgstr "Wgrywanie…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "TYLKO PODGLĄD"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Widz"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Webhooki"
@@ -1687,11 +1689,11 @@ msgstr "Webhooki"
msgid "labels.write-new-comment"
msgstr "Napisz nowy komentarz"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(Ty)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "Twoje konto"
@@ -1739,19 +1741,19 @@ msgstr "Zmień email"
msgid "modals.change-email.title"
msgstr "Zmień swój email"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "Utwórz webhook"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "Utwórz webhook"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "Ładowność URL"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://example.com/postreceive"
@@ -1829,11 +1831,11 @@ msgstr ""
msgid "modals.delete-font.title"
msgstr "Usuwanie czcionki"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Czy na pewno chcesz usunąć tę stronę?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Usuń stronę"
@@ -1870,71 +1872,71 @@ msgstr[0] "Usuwanie pliku"
msgstr[1] "Usuwanie plików"
msgstr[2] "Usuwanie plików"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Usuń zespół"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Czy na pewno chcesz usunąć ten zespół? Wszystkie projekty i pliki powiązane "
"z zespołem zostaną trwale usunięte."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Usuwanie zespołu"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Usuń członka"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Czy na pewno chcesz usunąć tego członka z zespołu?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Usuń członka zespołu"
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "Usuń webhook"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "Czy na pewno chcesz usunąć ten webhook?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "Usuwanie webhooka"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "Edytuj webhook"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "Edytuj webhook"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Wyślij zaproszenie"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "Emaile, oddzielone przecinkami"
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "Zaproś członków do zespołu"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"Ponieważ jesteś jedynym członkiem tego zespołu, zespół zostanie usunięty "
"wraz z projektami i plikami."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "Czy na pewno chcesz opuścić zespół %s?"
@@ -1962,39 +1964,39 @@ msgstr "Wybierz członka do awansu"
msgid "modals.leave-and-reassign.title"
msgstr "Zanim opuścisz"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Opuść zespół"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Czy na pewno chcesz opuścić ten zespół?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Opusczanie zespołu"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "Ilość przesunięcia"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Przeniesienie własności"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"Jeśli przeniesiesz własność, zmienisz swoją rolę na administratora, tracąc "
"niektóre uprawnienia w tym zespole. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr ""
"Jesteś obecnym właścicielem tego zespołu. Czy na pewno chcesz, aby %s "
"został nowym właścicielem zespołu?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Nowy właściciel zespołu"
@@ -2052,29 +2054,29 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Aktualizuj komponenty w bibliotece współdzielonej"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Aktualizuj"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Anuluj"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"Zamierzasz zaktualizować komponent w bibliotece współdzielonej. Może to "
"wpłynąć na inne pliki, które z niego korzystają."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Zaktualizuj komponent w bibliotece współdzielonej"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "Zaproszenie wysłane pomyślnie"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "Link do zaproszenia został skopiowany"
@@ -2198,7 +2200,7 @@ msgstr ""
"Pamiętaj, aby uwzględnić wszystkich. Deweloperzy, projektanci, "
"managerowie... różnorodność się sumuje :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "Zaproś z rolą:"
@@ -2266,541 +2268,541 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "Przejdź do logowania"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "Mieszane"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Podstawy"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "Kokpit"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Widz"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Obszar roboczy"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Wyrównanie"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Edytuj"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "Ogólny"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "Ogólny"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Menu główne"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "Modyfikuj warstwy"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Nawigacja"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Nawigacja"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Nawigacja"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Panele"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Ścieżki"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Kształty"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Narzędzia"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Przybliżenie"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Przybliżenie"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Komentarze"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "Dodaj węzeł"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "Wyrównaj do dołu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "Wyrównaj do środka w poziomie"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "Wyrównaj do lewej"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "Wyrównaj do prawej"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "Wyrównaj do góry"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "Wyrównaj do środka w pionie"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "Utwórz obszar kompozycji z wybranych"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "Różnica logiczna"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "Wykluczenie logiczne"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "Logiczny punkt przecięcia"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "Związek logiczny"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "Przesuń na spód"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Przesuń niżej"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "Przesuń wyżej"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "Przesuń na wierzch"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "Wyczyść cofnięcia"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Kopiuj"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "Stwórz nowy"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Wytnij"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "Oddal"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Usuń"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "Usuń węzeł"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "Odłącz komponent"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Krzywa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "Elipsa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Obszar kompozycji"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "Rysuj ścieżkę"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Ścieżka"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Prostokąt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Tekst"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Duplikuj"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "Anuluj"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "Eksportuj kształty"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "Powiększ, aby dopasować wszystko"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "Obróć poziomo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "Obróć pionowo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "Idź do szkiców"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "Idź do bibliotek współdzielonych"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Szukaj"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Grupa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "Rozłóż w poziomie"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "Pokaż/ukryj UI"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "Przybliż"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "Wstaw obraz"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "Połącz węzły"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "Zrób narożnik"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "Zrób krzywą"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "Maska"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "Scal węzły"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "Przesuń"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "Szybko w dół"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "Szybko w lewo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "Szybko w prawo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "Szybko w górę"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "Przesuń węzeł"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "W dół"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "W lewo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "W prawo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "W górę"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "Następny obszar kompozycji"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "Nie znaleziono skrótów"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "Ustaw krycie na 100%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "Ustaw krycie na 10%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "Ustaw krycie na 20%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "Ustaw krycie na 30%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "Ustaw krycie na 40%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "Ustaw krycie na 50%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "Ustaw krycie na 60%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "Ustaw krycie na 70%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "Ustaw krycie na 80%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "Ustaw krycie na 90%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "Próbnik kolorów"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "Przejdź do sekcji komentarzy widzów"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "Idź do kokpitu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "Przejdź do sekcji kontroli widzów"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "Idź do sekcji interakcji widza"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "Idż do sekcji interakcji widza"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "Idż do obszaru roboczego"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " lub "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Wklej"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "Poprzedni artboard"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "Ponów"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "Resetuj powiększenie"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "Szukaj skrótów"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "Wybierz wszystko"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "Oddziel węzły"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "Pokaż/ukryj siatkę pikseli"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "Pokaż/ukryj skróty"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "Przyciągaj do węzłów"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "Przyciągaj do siatki pikseli"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "Rozpocznij edycję"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "Rozpocznij pomiary"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "Zakończ pomiary"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "Ustaw miniaturki"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "Skróty klawiaturowe"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "Przełącz dynamiczne wyrównanie"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "Przełącz zasoby"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "Przełącz paletę kolorów"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "Przełącz tryb skupienia"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "Przełącz tryb pełnoekranowy"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "Przełącz historię"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "Przełącz warstwy"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "Dodaj/usuń flex układu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "Zablokuj wybrane"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "Zablokuj proporcje"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "Przełącz paletę tekstu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "Przełącz sposób powiększania"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Cofnij"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Rozgrupuj"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Usuń maskę"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "Rozłóż w pionie"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "Przybliż wybrane"
@@ -2848,19 +2850,19 @@ msgstr "Hasło - Penpot"
msgid "title.settings.profile"
msgstr "Profil - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "Zaproszenia - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "Członkowie - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Ustawienia - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "Webhooki - %s - Penpot"
@@ -2932,39 +2934,39 @@ msgstr "Pokaż interakcje po kliknięciu"
msgid "viewer.header.sitemap"
msgstr "Mapa strony"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "Ostatnia wysyłka przebiegła pomyślnie."
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Wyrównaj do środka w poziomie (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "Rozłóż odstępy w poziomie (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Wyrównaj do lewej (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Wyrównaj do prawej (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Wyrównaj do dołu (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Wyrównaj do środka w pionie (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "Rozłóż odstępy w pionie (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Wyrównaj do góry (%s)"
@@ -2973,37 +2975,37 @@ msgstr "Wyrównaj do góry (%s)"
msgid "workspace.assets.assets"
msgstr "Zasoby"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "Wszystkie zasoby"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Kolory"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Komponenty"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "Utwórz grupę"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr ""
"Twoje elementy zostaną automatycznie nazwane jako „nazwa grupy / nazwa "
"elementu”"
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Usuń"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "Duplikuj"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Edytuj"
@@ -3012,15 +3014,15 @@ msgstr "Edytuj"
msgid "workspace.assets.graphics"
msgstr "Grafika"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Grupa"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "Nazwa grupy"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "lokalna biblioteka"
@@ -3028,15 +3030,15 @@ msgstr "lokalna biblioteka"
msgid "workspace.assets.not-found"
msgstr "Nie znaleziono zasobów"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Zmień nazwę"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "Zmień nazwę grupy"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "Szukaj zasobów"
@@ -3048,11 +3050,11 @@ msgstr[0] "Wybrano %s element"
msgstr[1] "Wybrano %s elementy"
msgstr[2] "Wybrano %s elementów"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Typografia"
-#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:404
+#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:405
msgid "workspace.assets.typography.add-typography"
msgstr ""
@@ -3077,7 +3079,7 @@ msgstr "Odstępy między literami"
msgid "workspace.assets.typography.line-height"
msgstr "Wysokość Linii"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -3089,7 +3091,7 @@ msgstr "Style tekstu"
msgid "workspace.assets.typography.text-transform"
msgstr "Transformacja tekstu"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "Rozgrupuj"
@@ -3097,7 +3099,7 @@ msgstr "Rozgrupuj"
msgid "workspace.focus.focus-mode"
msgstr "Tryb skupienia"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "Tryb skupienia wyłączony"
@@ -3117,7 +3119,7 @@ msgstr "Gradient liniowy"
msgid "workspace.gradients.radial"
msgstr "Gradient radialny"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "Wyłącz wyrównanie dynamiczne"
@@ -3126,15 +3128,15 @@ msgstr "Wyłącz wyrównanie dynamiczne"
msgid "workspace.header.menu.disable-scale-text"
msgstr "Wyłącz skalowanie tekstu"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "Wyłącz przyciąganie do prowadnic"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "Wyłącz przyciąganie do piksela"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "Włącz dynamiczne wyrównanie"
@@ -3143,79 +3145,79 @@ msgstr "Włącz dynamiczne wyrównanie"
msgid "workspace.header.menu.enable-scale-text"
msgstr "Włącz skalowanie tekstu"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "Przyciągaj do prowadnic"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "Włącz przyciąganie do piksela"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "Ukryj nazwy obszarów kompozycji"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "Ukryj paletę kolorów"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "Ukryj siatkę pikseli"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "Ukryj linijki"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "Ukryj paletę czcionek"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Edytuj"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "Plik"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "Pomoc i info"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "Ustawienia"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "Widok"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "Zaznacz wszystko"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "Pokaz nazwy obszarów kompozycji"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "Pokaż paletę kolorów"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "Pokaż siatkę pikseli"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Pokaż linijki"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "Pokaż paletę czcionek"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Resetuj"
@@ -3236,7 +3238,7 @@ msgstr "Zapisywanie"
msgid "workspace.header.unsaved"
msgstr "Niezapisane zmiany"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "Tryb widoku (%s)"
@@ -3248,7 +3250,7 @@ msgstr "Wypełnij — skaluj, aby wypełnić"
msgid "workspace.header.zoom-fit"
msgstr "Dopasuj — zmniejsz, aby dopasować"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "Powiększ, aby dopasować wszystko"
@@ -3256,7 +3258,7 @@ msgstr "Powiększ, aby dopasować wszystko"
msgid "workspace.header.zoom-full-screen"
msgstr "Pełny ekran"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "Powiększ wybrane"
@@ -3265,10 +3267,6 @@ msgstr "Powiększ wybrane"
msgid "workspace.libraries.add"
msgstr "Dodaj"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s kolory"
-
#: src/app/main/ui/workspace/color_palette_ctx_menu.cljs:88, src/app/main/ui/workspace/colorpicker/libraries.cljs:48, src/app/main/ui/workspace/text_palette_ctx_menu.cljs:49
msgid "workspace.libraries.colors.file-library"
msgstr "Biblioteka plików"
@@ -3287,31 +3285,23 @@ msgstr "Bieżące kolory"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "RGB - Komplementarne"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Zapisz styl koloru"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s komponenty"
-
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Biblioteka plików"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s grafiki"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "BIBLIOTEKI W TYM PLIKU"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "BIBLIOTEKI"
@@ -3320,55 +3310,51 @@ msgstr "BIBLIOTEKI"
msgid "workspace.libraries.library"
msgstr "BIBLIOTEKA"
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "Nie ma Bibliotek Współdzielonych, które wymagają aktualizacji"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "Nie znaleziono dopasowań dla “%s“"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "Przeszukaj Biblioteki Współdzielone"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "BIBLIOTEKI WSPÓŁDZIELONE"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Wiele typografii"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Odlinkuj wszystkie typografie"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s typografie"
-
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Aktualizuj"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "AKTUALIZACJE"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "Kliknij przycisk +, aby dodać interakcje."
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Rozmycie"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "Rozmycie grupowe"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "Rozmycie zaznaczenia"
@@ -3376,11 +3362,11 @@ msgstr "Rozmycie zaznaczenia"
msgid "workspace.options.canvas-background"
msgstr "Tło płótna"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "Przytnij treść"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Komponent"
@@ -3424,7 +3410,7 @@ msgstr "Góra"
msgid "workspace.options.constraints.topbottom"
msgstr "Góra i dół"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Projektowanie"
@@ -3437,14 +3423,14 @@ msgstr "Eksport"
msgid "workspace.options.export-multiple"
msgstr "Eksportuj zaznaczone"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "Eksportuj 1 element"
msgstr[1] "Eksportuj %s elementy"
msgstr[2] "Eksportuj %s elementów"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Przyrostek"
@@ -3452,7 +3438,7 @@ msgstr "Przyrostek"
msgid "workspace.options.exporting-complete"
msgstr "Eksportowanie zakończone"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "Eksportowanie…"
@@ -3464,11 +3450,11 @@ msgstr "Eksport nie powiódł się"
msgid "workspace.options.exporting-object-slow"
msgstr "Eksportowanie niespodziewanie powolne"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Wypełnij"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "Dodaj początek flow"
@@ -3477,15 +3463,15 @@ msgstr "Dodaj początek flow"
msgid "workspace.options.flows.flow-start"
msgstr "Początek Flow"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "Początek flow"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Auto"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "Kolumny"
@@ -3494,7 +3480,7 @@ msgstr "Kolumny"
msgid "workspace.options.grid.grid-title"
msgstr "Siatka"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Kolor"
@@ -3503,15 +3489,15 @@ msgstr "Kolor"
msgid "workspace.options.grid.params.columns"
msgstr "Kolumny"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "Rowek"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Wysokość"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Margines"
@@ -3520,7 +3506,7 @@ msgstr "Margines"
msgid "workspace.options.grid.params.rows"
msgstr "Rzędy"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "Ustaw jako domyślne"
@@ -3534,143 +3520,143 @@ msgstr "Rozmiar"
msgid "workspace.options.grid.params.type"
msgstr "Typ"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Dół"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Środek"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Lewo"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Prawo"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "Rozciągnij"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "Góra"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "Użyj domyślnych"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Szerokość"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Rzędy"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "Kwadrat"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Wypełnienie grupy"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Obrys grupy"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "Wysokość"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "Sprawdź"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "Akcja"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "Po opóźnieniu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "Animacja"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "Rozpłynięcie"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "Brak"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "Pchnięcie"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "Poślizg"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "auto"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "Dodaj nakładkę tła"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "Zamknij po kliknięciu na zewnątrz"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "Zamknij nakładkę"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "Zamknij nakładkę: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "Opóźnienie"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "Miejsce docelowe"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "Czas trwania"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "Złagodzenie"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "Złagódź"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "Łagodne wejście"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "Łagodne wejście wyjście"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "Łagodne wyjście"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "Liniowy"
@@ -3679,47 +3665,47 @@ msgstr "Liniowy"
msgid "workspace.options.interaction-in"
msgstr "Wejście"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "Wejście myszy"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "Wyjście myszy"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "ms"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "Nawiguj do"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "Nawiguj do: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(nie ustawiono)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "Efekt przesunięcia"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "Na kliknięcie"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "Otwórz nakładkę"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "Otwórz nakładkę: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "Otwórz URL"
@@ -3728,147 +3714,147 @@ msgstr "Otwórz URL"
msgid "workspace.options.interaction-out"
msgstr "Wyjście"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "Dolny środek"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "Dolne lewo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "Dolne prawo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "Środek"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "Ręczna"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "Górny środek"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "Górne lewo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "Górne prawo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "Pozycja"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "Zachowaj pozycję przewijania"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "Poprzedni ekran"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "Względny do"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "własne"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "Przełącz nakładkę"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "Przełącz nakładkę: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "Wyzwalacz"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "Przy najechaniu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "Przy naciśnięciu"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "Interakcje"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "Kolor"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "Ściemnianie"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "Rozjaśnienie"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "Ciemniej"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "Różnica"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "Wykluczenie"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Ostre światło"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Barwa"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Jaśniej"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "Jasność"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "Mnożenie"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "Normalny"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "Nakładka"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "Nasycenie"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Ekran"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "Łagodne światło"
@@ -3892,19 +3878,19 @@ msgstr "Wybrane warstwy"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "Zaawansowane opcje"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "Maks.Wysokość"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "Maks.Szerokość"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "Min.Wysokość"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "Min.Szerokość"
@@ -4008,15 +3994,15 @@ msgstr "przestrzeń pomiędzy"
msgid "workspace.options.layout.top"
msgstr "Góra"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "Więcej kolorów"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "Więcej kolorów z biblioteki"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "Nieprzezroczystość"
@@ -4025,27 +4011,27 @@ msgstr "Nieprzezroczystość"
msgid "workspace.options.position"
msgstr "Pozycja"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "Prototyp"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "Promień"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "Dolne lewo"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "Dolne prawo"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "Górne lewo"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "Górne prawo"
@@ -4057,7 +4043,7 @@ msgstr "Bieżące"
msgid "workspace.options.retry"
msgstr "Ponów"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "Obrót"
@@ -4065,29 +4051,29 @@ msgstr "Obrót"
msgid "workspace.options.search-font"
msgstr "Szukaj czcionki"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr ""
"Wybierz kształt, obszar roboczy lub grupę, aby przeciągnąć połączenie do "
"innego obszaru kompozycji."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "Wybrane kolory"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "Wypełnienie zaznaczenia"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "Obrys zaznaczenia"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "Rozmycie"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "Kolor cienia"
@@ -4099,47 +4085,48 @@ msgstr "Rzuć cień"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "Cień wewnętrzny"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "Rozłożenie"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "Cień"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "Cień grupy"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "Cień zaznaczenia"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "Pokaż przy eksporcie"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "Pokaż w trybie przeglądania"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "Rozmiar"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "Wstępne ustawienia rozmiaru"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "Obrys"
@@ -4158,15 +4145,15 @@ msgstr "Diamentowy znacznik"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "Grot linii"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "Brak"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "Okrągły"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "Kwadratowy"
@@ -4180,71 +4167,71 @@ msgstr "Kwadratowy znacznik"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "Trójkątny grot"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "Kolor obrysu"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "Szerokość obrysu"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "Środek"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "Przerywany"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "Kropkowany"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "W środku"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "Mieszany"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "Na zewnątrz"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "Ciągły"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "Wyrównaj do dołu"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "Wyrównaj do środka"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "Wyrównaj do góry"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "LTR"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "RTL"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "Automatyczna wysokość"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "Automatyczna szerokość"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "Stały"
@@ -4266,35 +4253,35 @@ msgstr "małe litery"
msgid "workspace.options.text-options.none"
msgstr "Brak"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "Przekreślenie (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "Wyrównaj do środka"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "Wyjustuj"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "Wyrównaj do lewej"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "Wyrównaj do prawej"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "Tekst"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "Grupa tekstu"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "Tekst zaznaczony"
@@ -4303,7 +4290,7 @@ msgstr "Tekst zaznaczony"
msgid "workspace.options.text-options.titlecase"
msgstr "Nazwy własne"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "Podkreślenie (%s)"
@@ -4312,19 +4299,19 @@ msgstr "Podkreślenie (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "DUŻE LITERY"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr "Użyj przycisku odtwarzania w nagłówku, aby uruchomić widok prototypu."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "Szerokość"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "Oś X"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Oś Y"
@@ -4388,7 +4375,7 @@ msgstr "Kopiuj"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "Zaznaczone do obszaru kompozycji"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "Utwórz komponent"
@@ -4396,7 +4383,7 @@ msgstr "Utwórz komponent"
msgid "workspace.shape.menu.cut"
msgstr "Wytnij"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "Usuń"
@@ -4404,15 +4391,15 @@ msgstr "Usuń"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "Usuń początek flow"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "Odłącz instancję"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "Odłącz instancje"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "Różnica"
@@ -4424,11 +4411,11 @@ msgstr "Duplikuj"
msgid "workspace.shape.menu.edit"
msgstr "Edytuj"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "Wyklucz"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "Spłaszcz"
@@ -4461,19 +4448,19 @@ msgstr "Przejdź do głównego pliku komponentu"
msgid "workspace.shape.menu.group"
msgstr "Grupuj"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "Ukryj"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "Pokaż/Ukryj UI"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "Przecięcie"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "Zablokuj"
@@ -4481,7 +4468,7 @@ msgstr "Zablokuj"
msgid "workspace.shape.menu.mask"
msgstr "Maskuj"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "Wklej"
@@ -4493,11 +4480,11 @@ msgstr "Ścieżka"
msgid "workspace.shape.menu.remove-flex"
msgstr "Usuń układ flex"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "Zresetuj nadpisania"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "Przywróć główny komponent"
@@ -4505,15 +4492,15 @@ msgstr "Przywróć główny komponent"
msgid "workspace.shape.menu.select-layer"
msgstr "Zaznacz warstwę"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "Pokaż"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "Pokaż w panelu zasobów"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "Pokaż główny komponent"
@@ -4526,6 +4513,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "Ustaw jako miniaturę"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "Przekształć w ścieżkę"
@@ -4533,11 +4521,11 @@ msgstr "Przekształć w ścieżkę"
msgid "workspace.shape.menu.ungroup"
msgstr "Rozgrupuj"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "Złącz"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "Odblokuj"
@@ -4550,7 +4538,7 @@ msgstr "Odmaskuj"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "Aktualizuj główne komponenty"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "Aktualizuj główny komponent"
@@ -4562,11 +4550,11 @@ msgstr "Zwiń pasek boczny"
msgid "workspace.sidebar.expand"
msgstr "Rozwiń pasek boczny"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "Historia"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "Warstwy"
@@ -4606,7 +4594,7 @@ msgstr "Teksty"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "Importowane atrybuty SVG"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "Strony"
@@ -4614,7 +4602,7 @@ msgstr "Strony"
msgid "workspace.sitemap"
msgstr "Mapa strony"
-#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "Zasoby"
@@ -4622,7 +4610,7 @@ msgstr "Zasoby"
msgid "workspace.toolbar.color-palette"
msgstr "Palety kolorów (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "Komentarze (%s)"
@@ -4812,15 +4800,15 @@ msgstr "Operacja ponad %s"
msgid "workspace.undo.title"
msgstr "Historia"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "Odrzuć"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "W bibliotekach współdzielonych są aktualizacje"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "Aktualizuj"
diff --git a/frontend/translations/pt.po b/frontend/translations/pt.po
index bc2b08673e..b5175a744d 100644
--- a/frontend/translations/pt.po
+++ b/frontend/translations/pt.po
@@ -179,7 +179,7 @@ msgstr "A solução de código aberto para design e prototipagem."
msgid "auth.terms-and-privacy-agreement"
msgstr "Concordo com os [termos de serviço](%s) e a [política de privacidade](%s)."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Termos de serviço"
@@ -206,7 +206,7 @@ msgstr "...branding, ilustrações, materiais de marketing, etc."
msgid "comments.mentions.not-found"
msgstr "Nenhuma pessoa encontrada para @%s"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Publicar"
@@ -278,7 +278,7 @@ msgstr "Compartilhar protótipos"
msgid "common.share-link.view-all"
msgstr "Selecionar tudo"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Despublicar"
@@ -401,7 +401,7 @@ msgstr "O token não tem data de expiração"
msgid "dashboard.add-file"
msgstr "Adicionar arquivo"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Adicionar como Biblioteca Compartilhada"
@@ -409,10 +409,10 @@ msgstr "Adicionar como Biblioteca Compartilhada"
msgid "dashboard.change-email"
msgstr "Alterar e-mail"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(copiar)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Criar nova equipe"
diff --git a/frontend/translations/pt_BR.po b/frontend/translations/pt_BR.po
index a721c1c471..65a92f9aa1 100644
--- a/frontend/translations/pt_BR.po
+++ b/frontend/translations/pt_BR.po
@@ -1,15 +1,15 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-11 07:21+0000\n"
-"Last-Translator: Eranot \n"
-"Language-Team: Portuguese (Brazil) "
-" \n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
+"Last-Translator: Hugo Figueira \n"
+"Language-Team: Portuguese (Brazil) \n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 5.13-dev\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -177,7 +177,7 @@ msgstr "A solução de código aberto para design e prototipação."
msgid "auth.terms-and-privacy-agreement"
msgstr "Concordo com os [termos de serviço](%s) e as [políticas de privacidade](%s)."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Termos de serviço"
@@ -204,7 +204,7 @@ msgstr "... marca, ilustrações, materiais de marketing, etc."
msgid "comments.mentions.not-found"
msgstr "Ninguém encontrado com @%s"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Publicar"
@@ -276,7 +276,7 @@ msgstr "Compartilhar protótipos"
msgid "common.share-link.view-all"
msgstr "Selecionar todos"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Cancelar publicação"
@@ -399,7 +399,7 @@ msgstr "O token não tem uma data de validade"
msgid "dashboard.add-file"
msgstr "Adicionar arquivo"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Adicionar a biblioteca compartilhada"
@@ -407,31 +407,31 @@ msgstr "Adicionar a biblioteca compartilhada"
msgid "dashboard.change-email"
msgstr "Alterar e-mail"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(copiar)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Criar nova equipe"
-#: src/app/main/ui/workspace/main_menu.cljs:631
+#: src/app/main/ui/workspace/main_menu.cljs:659
msgid "dashboard.create-version-menu"
msgstr "Fixar esta versão"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Seu Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Deletar equipe"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Baixar arquivo Penpot (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Baixar arquivo padrão (.svg + .json)"
@@ -503,7 +503,7 @@ msgstr "Ir para Bibliotecas e modelos"
msgid "dashboard.export-binary-multi"
msgstr "Baixar %s arquivos Penpot (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Exportar boards em PDF"
@@ -519,7 +519,7 @@ msgstr "Exportar %s arquivos"
msgid "dashboard.export-multiple.selected"
msgstr "%s de %s elementos selecionados"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Exportar"
@@ -681,11 +681,11 @@ msgstr "Carregando dados para o servidor (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Enviando arquivo: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Convidar pessoas"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Sair da equipe"
@@ -697,7 +697,7 @@ msgstr "Bibliotecas e Modelos"
msgid "dashboard.libraries-and-templates.explore"
msgstr "Explore mais e aprenda como contribuir"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "Ocorreu um problema ao importar o modelo. O modelo não foi importado."
@@ -729,7 +729,7 @@ msgstr "Mover para outra equipe"
msgid "dashboard.new-file"
msgstr "+ Novo arquivo"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Novo arquivo"
@@ -737,7 +737,7 @@ msgstr "Novo arquivo"
msgid "dashboard.new-project"
msgstr "+ Novo projeto"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Novo projeto"
@@ -745,7 +745,7 @@ msgstr "Novo projeto"
msgid "dashboard.no-matches-for"
msgstr "Não achamos nada com “%s“"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Projetos fixados aparecerão aqui"
@@ -761,7 +761,7 @@ msgstr "Seu endereço de e-mail foi verificado com sucesso"
msgid "dashboard.notifications.password-saved"
msgstr "Senha salva com sucesso!"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s membros"
@@ -781,7 +781,7 @@ msgstr "Alterar senha"
msgid "dashboard.permissions-change.viewer"
msgstr "Agora você é um espectador desta equipe."
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Fixar/Desafixar"
@@ -818,7 +818,7 @@ msgstr "Você não faz mais parte do time \"%s\"."
msgid "dashboard.save-settings"
msgstr "Salvar configurações"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Pesquisar…"
@@ -858,7 +858,7 @@ msgstr "Atualizar configurações"
msgid "dashboard.show-all-files"
msgstr "Mostrar todos os arquivos"
-#: src/app/main/ui/workspace/main_menu.cljs:638
+#: src/app/main/ui/workspace/main_menu.cljs:666
msgid "dashboard.show-version-history"
msgstr "Histórico de versões"
@@ -882,7 +882,7 @@ msgstr[1] "Seus arquivos foram duplicados com sucesso"
msgid "dashboard.success-duplicate-project"
msgstr "Seu projeto foi duplicado com sucesso"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Seu arquivo foi movido com sucesso"
@@ -894,15 +894,15 @@ msgstr "Seus arquivos foram movidos com sucesso"
msgid "dashboard.success-move-project"
msgstr "Seu projeto foi movido com sucesso"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Informação da equipe"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Membros da equipe"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Projetos da equipe"
@@ -922,7 +922,7 @@ msgstr "Resultados da pesquisa"
msgid "dashboard.type-something"
msgstr "Digite para pesquisar nos resultados"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Cancelar publicação da biblioteca"
@@ -930,50 +930,50 @@ msgstr "Cancelar publicação da biblioteca"
msgid "dashboard.update-settings"
msgstr "Atualizar configurações"
-#: src/app/main/ui/dashboard/sidebar.cljs:856
+#: src/app/main/ui/dashboard/sidebar.cljs:976
msgid "dashboard.upgrade-plan.no-limits"
msgstr "Sem limites para criatividade"
-#: src/app/main/ui/dashboard/sidebar.cljs:854
+#: src/app/main/ui/dashboard/sidebar.cljs:974
msgid "dashboard.upgrade-plan.penpot-free"
msgstr "Penpot Grátis"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "Está ativo"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "Quando esse hook é invocado detalhes de eventos vão ser enviados"
-#: src/app/main/ui/dashboard/team.cljs:982
+#: src/app/main/ui/dashboard/team.cljs:1160
msgid "dashboard.webhooks.cant-edit"
msgstr "Você só pode excluir ou modificar os webhooks criados por você."
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "Tipo de conteúdo"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "Criar webhook"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "Webhook criado com sucesso."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"Webhooks são uma forma simples de permitir que outros websites e "
"aplicativos sejam notificados quando certos eventos acontecem no Penpot. "
"Nós enviaremos uma solicitação POST para todas as URLs que você digite."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "Clique em \"Adicionar Webhook\" para adicionar um Webhook."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "Nenhum Webhook criado ainda."
@@ -993,7 +993,7 @@ msgstr "E-mail"
msgid "dashboard.your-name"
msgstr "Seu nome"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Seu Penpot"
@@ -1009,15 +1009,15 @@ msgstr "Atenção"
msgid "ds.component-subtitle"
msgstr "Componentes para atualizar:"
-#: src/app/main/ui/workspace/plugins.cljs:338, src/app/main/ui/workspace/plugins.cljs:392
+#: src/app/main/ui/workspace/plugins.cljs:339, src/app/main/ui/workspace/plugins.cljs:393
msgid "ds.confirm-allow"
msgstr "Permissão"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Cancelar"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Ok"
@@ -1057,7 +1057,7 @@ msgstr "Limite de caracteres excedido"
msgid "errors.clipboard-not-implemented"
msgstr "Seu navegador não pode fazer esta operação"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:266
+#: src/app/main/data/workspace/tokens/library_edit.cljs:274
msgid "errors.drop-token-set-parent-to-child"
msgstr "Não é possível remover a definição principal dentro de um caminho filho."
@@ -1077,11 +1077,11 @@ msgstr "Você não pode usar seu e-mail como senha"
msgid "errors.email-domain-not-allowed"
msgstr "Domínio não permitido"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "O e-mail «%s» tem muitos relatórios de devolução permanentes."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "O e-mail «%s» foi denunciado como spam ou devolvido permanentemente."
@@ -1096,10 +1096,9 @@ msgstr ""
msgid "errors.feature-not-supported"
msgstr "Recurso '%s' não é suportado."
-#: src/app/main/ui/auth/register.cljs, src/app/main/ui/dashboard/team_form.cljs, src/app/main/ui/onboarding/team_choice.cljs, src/app/main/ui/setti ngs/access_tokens.cljs, src/app/main/ui/settings/feedback.cljs, src/app/main/ui/settings/profile.cljs, src/app/main/ui/workspace/sidebar/assets.cljs
-#, unused
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs
msgid "errors.field-max-length"
-msgstr "Deve conter no máximo 1 caractere."
+msgstr "Deve conter no máximo %s caracteres."
#, unused
msgid "errors.field-min-length"
@@ -1121,7 +1120,7 @@ msgstr ""
"recursos do arquivo que você está tentando abrir. Migrações para '%s' "
"precisam ser aplicadas antes que o arquivo possa ser aberto."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Algo errado aconteceu."
@@ -1163,11 +1162,11 @@ msgstr "Este convite pode ter sido cancelado ou expirou."
msgid "errors.ldap-disabled"
msgstr "Autenticação por LDAP está desativada."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "Você atingiu a cota de '%s'. Entre em contato com o suporte."
-#: src/app/main/ui/dashboard/team.cljs:185, src/app/main/ui/onboarding/team_choice.cljs:101
+#: src/app/main/ui/dashboard/team.cljs:187, src/app/main/ui/dashboard/team.cljs:849, src/app/main/ui/onboarding/team_choice.cljs:101
msgid "errors.maximum-invitations-by-request-reached"
msgstr ""
"O número máximo (%s) de e-mails que podem ser convidados em uma única "
@@ -1185,7 +1184,7 @@ msgstr "Parece que o conteúdo da imagem não corresponde a extensão do arquivo
msgid "errors.media-type-not-allowed"
msgstr "Parece que esta não é uma imagem válida."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"O perfil que você está convidando tem e-mails silenciados (relatos de spam "
@@ -1213,7 +1212,7 @@ msgstr "Dados inválidos na área de transferência"
msgid "errors.profile-blocked"
msgstr "O perfil está bloqueado"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr "Seu perfil tem e-mails silenciados (relatos de spam ou altas devoluções)."
@@ -1225,33 +1224,33 @@ msgstr "O registro de contas está desativado no momento."
msgid "errors.team-feature-mismatch"
msgstr "Recurso incompatível '%s' detectado"
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr ""
"Membros insuficientes para deixar a equipe, você provavelmente deseja "
"excluí-la."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "O membro que você tentou atribuir não existe."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr ""
"O proprietário não pode sair da equipe, você deve reatribuir a função de "
"proprietário para outro membro."
-#: src/app/main/data/workspace/tokens/library_edit.cljs:153, src/app/main/data/workspace/tokens/library_edit.cljs:183
+#: src/app/main/data/workspace/tokens/library_edit.cljs:150, src/app/main/data/workspace/tokens/library_edit.cljs:180
msgid "errors.token-set-already-exists"
msgstr "Já existe uma definição com o mesmo nome"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:265
+#: src/app/main/data/workspace/tokens/library_edit.cljs:273
msgid "errors.token-set-exists-on-drop"
msgstr ""
"Não é possível concluir a remoção, uma definição com o mesmo nome já existe "
"no caminho."
-#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:99
+#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:95
msgid "errors.token-theme-already-exists"
msgstr "Existe uma opção de tema com o mesmo nome"
@@ -1271,31 +1270,31 @@ msgstr "Erro de validação"
msgid "errors.version-not-supported"
msgstr "O arquivo tem um número de versão incompatível"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "Erro de conexão, URL não acessível"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "A URL não passa na validação."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "O último envio não foi bem-sucedido."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "Erro na validação SSL."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "O tempo se esgotou"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "Erro inesperado durante a validação"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "Status inesperado %s"
@@ -1360,19 +1359,19 @@ msgstr "Um erro ocorreu"
msgid "inspect.attributes.blur"
msgstr "Desfoque"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Valor"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1380,7 +1379,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Preenchimento"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Baixar imagem original"
@@ -1474,77 +1473,80 @@ msgstr "Sólido"
msgid "inspect.attributes.stroke.width"
msgstr "Largura"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Tipografia"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Família tipográfica"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Tamanho da fonte"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Estilo da fonte"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "Peso da fonte"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Espaçamento entre letras"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Altura da linha"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Decoração de texto"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Nenhum"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Sublinhado"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Transformação de texto"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "Iniciais em maiúsculas"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "Minúsculo"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Nenhuma"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "Maiúsculo"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr ""
"Se quiser saber mais sobre inspecionar o design, visite a central de ajuda "
"do Penpot"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "Mais informações sobre inspecionar"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr ""
"Selecione uma forma, board ou grupo para inspecionar suas propriedades e "
@@ -1606,7 +1608,7 @@ msgstr "Texto"
msgid "inspect.tabs.info"
msgstr "Informação"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Atalhos"
@@ -1614,7 +1616,7 @@ msgstr "Atalhos"
msgid "labels.accept"
msgstr "Aceitar"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "Ativo"
@@ -1622,11 +1624,11 @@ msgstr "Ativo"
msgid "labels.add-custom-font"
msgstr "Adicionar fonte personalizada"
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Administrador"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Todos"
@@ -1649,19 +1651,19 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "Erro do servidor (Bad Gateway)"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Cancelar"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Fechar"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Comentários"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Comunidade"
@@ -1669,7 +1671,7 @@ msgstr "Comunidade"
msgid "labels.confirm-password"
msgstr "Confirmar senha"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Continuar"
@@ -1681,11 +1683,11 @@ msgstr "Continue com"
msgid "labels.continue-with-penpot"
msgstr "Você pode continuar com uma conta do Penpot"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "Copiar link"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Criar"
@@ -1705,7 +1707,7 @@ msgstr "Fontes personalizadas"
msgid "labels.dashboard"
msgstr "Painel"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Excluir"
@@ -1717,7 +1719,7 @@ msgstr "Excluir comentário"
msgid "labels.delete-comment-thread"
msgstr "Excluir tópico"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Excluir convite"
@@ -1725,11 +1727,11 @@ msgstr "Excluir convite"
msgid "labels.delete-multi-files"
msgstr "Excluir %s arquivos"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Rascunhos"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Editar"
@@ -1737,15 +1739,15 @@ msgstr "Editar"
msgid "labels.edit-file"
msgstr "Editar arquivo"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Editor"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Expirado"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Exportar"
@@ -1769,15 +1771,15 @@ msgstr "Provedores de fonte"
msgid "labels.font-variants"
msgstr "Estilos"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Fontes"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "Repositório do Github"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Enviar feedback"
@@ -1785,15 +1787,15 @@ msgstr "Enviar feedback"
msgid "labels.go-back"
msgstr "Voltar"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Central de Ajuda"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Ocultar comentários resolvidos"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "Inativo"
@@ -1811,7 +1813,7 @@ msgstr ""
msgid "labels.internal-error.main-message"
msgstr "Erro interno"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Convites"
@@ -1819,7 +1821,7 @@ msgstr "Convites"
msgid "labels.language"
msgstr "Linguagem"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Bibliotecas & Modelos"
@@ -1827,7 +1829,7 @@ msgstr "Bibliotecas & Modelos"
msgid "labels.log-or-sign"
msgstr "Entre ou cadastre-se"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Sair"
@@ -1835,11 +1837,11 @@ msgstr "Sair"
msgid "labels.marketing"
msgstr "Marketing"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Membro"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Membros"
@@ -1851,15 +1853,15 @@ msgstr "Menção"
msgid "labels.new-password"
msgstr "Nova senha"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "Próximo"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "Nada de novo por aqui! Novas notificações de comentários irão aparecer aqui."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "Não há convites pendentes."
@@ -1876,7 +1878,7 @@ msgstr "Ops!"
msgid "labels.notifications"
msgstr "Notificações"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "1 arquivo"
@@ -1888,7 +1890,7 @@ msgid_plural "labels.num-of-frames"
msgstr[0] "1 tela"
msgstr[1] "%s telas"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "1 projeto"
@@ -1907,7 +1909,7 @@ msgstr "Senha antiga"
msgid "labels.only-yours"
msgstr "Apenas seu"
-#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:309, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:338
+#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:310, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:339
msgid "labels.options"
msgstr "Opções"
@@ -1923,7 +1925,7 @@ msgstr "Outra (específica)"
msgid "labels.other-short"
msgstr "Outra"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Proprietário"
@@ -1931,7 +1933,7 @@ msgstr "Proprietário"
msgid "labels.password"
msgstr "Senha"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "Pendente"
@@ -1955,7 +1957,7 @@ msgstr "Gestão de Produtos"
msgid "labels.profile"
msgstr "Perfil"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Projetos"
@@ -1963,7 +1965,7 @@ msgstr "Projetos"
msgid "labels.refresh"
msgstr "Recarregar"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Notas de atualização"
@@ -1977,11 +1979,11 @@ msgstr "Recarregar arquivo"
msgid "labels.remove"
msgstr "Remover"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Remover membro"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Renomear"
@@ -2009,7 +2011,7 @@ msgstr "nova resposta"
msgid "labels.reply.thread"
msgstr "Resposta"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "Reenviar convite"
@@ -2021,15 +2023,15 @@ msgstr "Restaurar"
msgid "labels.retry"
msgstr "Tentar novamente"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Cargo"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Salvar"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:715
+#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:730
msgid "labels.search"
msgstr "Buscar"
@@ -2057,7 +2059,7 @@ msgstr "Estamos em manutenção programada de nossos sistemas."
msgid "labels.service-unavailable.main-message"
msgstr "Serviço indisponível"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Configurações"
@@ -2065,11 +2067,11 @@ msgstr "Configurações"
msgid "labels.share-prototype"
msgstr "Compartilhar protótipo"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Bibliotecas"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Mostrar todos os comentários"
@@ -2077,15 +2079,15 @@ msgstr "Mostrar todos os comentários"
msgid "labels.show-comments-list"
msgstr "Mostrar lista de comentários"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Mostrar apenas seus comentários"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Status"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Tutorial"
@@ -2113,15 +2115,15 @@ msgstr "Enviar fontes personalizadas"
msgid "labels.uploading"
msgstr "Enviando…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "SOMENTE VISUALIZAÇÃO"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Visualizador"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Webhooks"
@@ -2129,11 +2131,11 @@ msgstr "Webhooks"
msgid "labels.write-new-comment"
msgstr "Escrever um novo comentário"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(você)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "Sua conta"
@@ -2186,19 +2188,19 @@ msgstr "Alterar e-mail"
msgid "modals.change-email.title"
msgstr "Alterar seu e-mail"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "Criar webhook"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "Criar webhook"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "URL do payload"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://exemplo.com.br/postreceive"
@@ -2276,11 +2278,11 @@ msgstr ""
msgid "modals.delete-font.title"
msgstr "Excluindo fonte"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Tem certeza de que deseja excluir esta página?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Excluir página"
@@ -2314,71 +2316,71 @@ msgid_plural "modals.delete-shared-confirm.title"
msgstr[0] "Excluindo arquivo"
msgstr[1] "Excluindo arquivos"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Excluir equipe"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Tem certeza de que deseja excluir a equipe? Todos os projetos e arquivos "
"associados a essa equipe serão excluídos permanentemente."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Excluindo equipe"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Excluir membro"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Tem certeza de que deseja excluir este membro da equipe?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Excluir membro da equipe"
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "Excluir webhook"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "Tem certeza que deseja excluir este webhook?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "Excluindo webhook"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "Editar webhook"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "Editar webhook"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Enviar convite"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "E-mails, separados por vírgulas"
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "Convide membros para a equipe"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"Como você é o único membro desta equipe, a equipe será excluída junto com "
"seus projetos e arquivos."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "Tem certeza de que deseja sair da equipe %s?"
@@ -2404,39 +2406,39 @@ msgstr "Selecione um membro para promover"
msgid "modals.leave-and-reassign.title"
msgstr "Selecione um membro para promover"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Sair da equipe"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Tem certeza de que deseja sair da equipe?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Saindo da equipe"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "Quantidade de deslocamento"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Transferir equipe"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"Se você transferir a propriedade, mudará sua função para Admin, perdendo "
"algumas permissões sobre essa equipe. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr ""
"Você é o atual proprietário da equipe. Tem certeza de que deseja promover "
"este usuário a proprietário?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Novo proprietário da equipe"
@@ -2492,29 +2494,29 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Atualizar componentes em uma biblioteca compartilhada"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Atualizar"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Cancelar"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"Você está prestes a atualizar um componente em uma biblioteca "
"compartilhada. Isso pode afetar outros arquivos que a utilizam."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Atualizar componente em uma biblioteca compartilhada"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "Convite enviado com sucesso"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "Link do convite copiado"
@@ -2639,7 +2641,7 @@ msgstr ""
"Lembre-se de incluir todos. Desenvolvedores, designers, gerentes... a "
"diversidade soma :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "Convide com a função:"
@@ -2707,541 +2709,541 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "Ir para a página de login"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "Misto"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Fundamentos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "Painel"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Espectador"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Espaço de trabalho"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Alinhamento"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Editar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "Geral"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "Geral"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Menu principal"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "Modificar camadas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Navegação"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Navegação"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Navegação"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Painéis"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Curvas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Formas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Ferramentas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Comentários"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "Adicionar ponto"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "Alinhar a base"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "Centralizar horizontalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "Alinhar a esquerda"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "Alinhar a direita"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "Alinhar ao topo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "Centralizar verticalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "Criar tela a partir da seleção"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "Subtrair"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "Exclusão"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "Interseccionar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "União"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "Mover ao fundo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Mover para trás"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "Mover para a frente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "Mover ao topo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "Limpar desfazer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Copiar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "Criar novo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Recortar"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "Reduzir zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Apagar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "Apagar ponto"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "Quebrar componente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Curva"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "Elipse"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Tela"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "Desenhar caminho"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Caminho"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Retângulo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Texto"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Duplicar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "Cancelar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "Exportar formas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "Ajustar para ver tudo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "Refletir horizontalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "Refletir verticalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "Ir para rascunhos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "Ir para as bibliotecas compartilhadas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Pesquisar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Agrupar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "Distribuir horizontalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "Mostrar/ocultar interface"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "Mais zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "Inserir imagem"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "Unir pontos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "Arredondar canto"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "Criar curva"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "Máscara"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "Unir pontos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "Mover"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "Mover para baixo rápido"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "Mover para a esquerda rápido"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "Mover para a direita rápido"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "Mover para cima rápido"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "Mover ponto"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "Mover para baixo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "Mover para a esquerda"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "Mover para a direita"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "Mover para cima"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "Próximo quadro"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "Não foram encontrados atalhos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "Definir opacidade para 100%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "Definir opacidade para 10%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "Definir opacidade para 20%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "Definir opacidade para 30%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "Definir opacidade para 40%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "Definir opacidade para 50%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "Definir opacidade para 60%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "Definir opacidade para 70%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "Definir opacidade para 80%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "Definir opacidade para 90%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "Seletor de Cores"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "Ir para seção de comentários"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "Ir para o dashboard"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "Ir para seção de inspeção"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "Ir para seção de interação"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "Ir para seção de interação"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "Ir para o workspace"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " ou "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Colar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "Tela anterior"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "Refazer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "Redefinir zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "Procurar nos atalhos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "Selecionar todos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "Separar pontos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "Mostrar/ocultar grade de pixels"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "Mostrar/ocultar atalhos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "Aderir aos pontos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "Ajustar a grade de Pixels"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "Começar a editar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "Iniciar medição"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "Parar medição"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "Definir como miniatura"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "Atalhos do teclado"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "Alternar alinhamento dinâmico"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "Mostrar/Esconder ativos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "Mostrar/Esconder paleta de cores"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "Entrar/Sair do modo de foco"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "Entrar/Sair da tela cheia"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "Mostrar/Esconder histórico"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "Mostrar/Esconder camadas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "Adicionar/remover Flex Layout"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "Bloquear selecionado"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "Fixar proporções"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "Mostrar/Esconder paleta de tipografias"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "Alternar estilo de zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Desfazer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Desagrupar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Retirar máscara"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "Distribuir verticalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "Ajustar zoom a seleção"
@@ -3289,19 +3291,19 @@ msgstr "Senha - Penpot"
msgid "title.settings.profile"
msgstr "Perfil - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "Convites - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "Membros - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Configurações - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "Webhooks - %s - Penpot"
@@ -3373,39 +3375,39 @@ msgstr "Mostrar interações ao clicar"
msgid "viewer.header.sitemap"
msgstr "Mapa do site"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "O último envio foi bem-sucedido."
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Centralizar horizontalmente (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "Distribuir espaçamento horizontal (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Alinhar a esquerda (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Alinhar a direita (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Alinhar a base (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Centralizar verticalmente (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "Distribuir espaçamento vertical (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Alinhar ao topo (%s)"
@@ -3414,37 +3416,37 @@ msgstr "Alinhar ao topo (%s)"
msgid "workspace.assets.assets"
msgstr "Ativos"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "Todos os ativos"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Cores"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Componentes"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "Criar grupo"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr ""
"Seus itens serão nomeados automaticamente como \"nome do grupo / nome do "
"item\""
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Excluir"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "Duplicar"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Editar"
@@ -3453,15 +3455,15 @@ msgstr "Editar"
msgid "workspace.assets.graphics"
msgstr "Imagens"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Agrupar"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "Nome do grupo"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "biblioteca local"
@@ -3469,15 +3471,15 @@ msgstr "biblioteca local"
msgid "workspace.assets.not-found"
msgstr "Nenhum ativo encontrado"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Renomear"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "Renomear grupo"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "Procurar nos ativos"
@@ -3488,7 +3490,7 @@ msgid_plural "workspace.assets.selected-count"
msgstr[0] "%s item selecionado"
msgstr[1] "%s itens selecionados"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Tipografias"
@@ -3513,7 +3515,7 @@ msgstr "Espaçamento de letra"
msgid "workspace.assets.typography.line-height"
msgstr "Altura da linha"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -3525,7 +3527,7 @@ msgstr "Estilos de texto"
msgid "workspace.assets.typography.text-transform"
msgstr "Transformações de texto"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "Desagrupar"
@@ -3533,7 +3535,7 @@ msgstr "Desagrupar"
msgid "workspace.focus.focus-mode"
msgstr "Modo de foco"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "Foco desligado"
@@ -3553,7 +3555,7 @@ msgstr "Gradiente linear"
msgid "workspace.gradients.radial"
msgstr "Gradiente radial"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "Desabilitar alinhamento dinâmico"
@@ -3562,15 +3564,15 @@ msgstr "Desabilitar alinhamento dinâmico"
msgid "workspace.header.menu.disable-scale-text"
msgstr "Desativar escalonamento de texto"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "Desativar aderência as réguas"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "Desativar aderência a grade de pixels"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "Habilitar alinhamento dinâmico"
@@ -3579,79 +3581,79 @@ msgstr "Habilitar alinhamento dinâmico"
msgid "workspace.header.menu.enable-scale-text"
msgstr "Ativar escalonamento de texto"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "Aderir as réguas"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "Habilitar aderência a grade de pixels"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "Esconder nomes das telas"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "Esconder paleta de cores"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "Ocultar grade de pixels"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "Ocultar réguas"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "Ocultar paleta de tipografias"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Editar"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "Arquivo"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "Ajuda e informações"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "Preferências"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "Visualizar"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "Selecionar tudo"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "Mostrar nomes das telas"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "Mostrar paleta de cores"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "Mostrar grade de pixels"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Mostrar réguas"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "Mostrar paleta de tipografias"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Redefinir"
@@ -3672,7 +3674,7 @@ msgstr "Salvando"
msgid "workspace.header.unsaved"
msgstr "Há alterações não salvas"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "Ver protótipo (%s)"
@@ -3684,7 +3686,7 @@ msgstr "Ajustar até preencher"
msgid "workspace.header.zoom-fit"
msgstr "Ajustar até encaixar"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "Ajustar a janela"
@@ -3692,7 +3694,7 @@ msgstr "Ajustar a janela"
msgid "workspace.header.zoom-full-screen"
msgstr "Tela cheia"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "Zoom na seleção"
@@ -3701,10 +3703,6 @@ msgstr "Zoom na seleção"
msgid "workspace.libraries.add"
msgstr "Adicionar"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s cores"
-
#: src/app/main/ui/workspace/color_palette_ctx_menu.cljs:88, src/app/main/ui/workspace/colorpicker/libraries.cljs:48, src/app/main/ui/workspace/text_palette_ctx_menu.cljs:49
msgid "workspace.libraries.colors.file-library"
msgstr "Biblioteca do arquivo"
@@ -3723,31 +3721,23 @@ msgstr "Cores recentes"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "RGB Complementar"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Salvar estilo de cor"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s componentes"
-
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Biblioteca de arquivos"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s imagens"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "BIBLIOTECAS NESTE ARQUIVO"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "BIBLIOTECAS"
@@ -3756,55 +3746,51 @@ msgstr "BIBLIOTECAS"
msgid "workspace.libraries.library"
msgstr "BIBLIOTECA"
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "Não há bibliotecas compartilhadas para atualizar"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "Não foram encontrados resultados para “%s“"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "Procurar bibliotecas compartilhadas"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "BIBLIOTECAS COMPARTILHADAS"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Tipografias múltiplas"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Desassociar todas as tipografias"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s tipografias"
-
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Atualizar"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "ATUALIZAÇÔES"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "Clique no botão + para adicionar interações."
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Desfoque"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "Desfoque do grupo"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "Desfoque da seleção"
@@ -3812,11 +3798,11 @@ msgstr "Desfoque da seleção"
msgid "workspace.options.canvas-background"
msgstr "Fundo da tela"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "Cortar conteúdo"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Componente"
@@ -3860,7 +3846,7 @@ msgstr "Cima"
msgid "workspace.options.constraints.topbottom"
msgstr "Cima e Baixo"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Design"
@@ -3873,7 +3859,7 @@ msgstr "Exportar"
msgid "workspace.options.export-multiple"
msgstr "Exportar seleção"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Sufixo"
@@ -3881,7 +3867,7 @@ msgstr "Sufixo"
msgid "workspace.options.exporting-complete"
msgstr "Exportação completa"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "Exportando…"
@@ -3893,11 +3879,11 @@ msgstr "Exportação falhou"
msgid "workspace.options.exporting-object-slow"
msgstr "A exportação está inesperadamente lenta"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Preenchimento"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "Adicionar entrada de fluxo"
@@ -3906,15 +3892,15 @@ msgstr "Adicionar entrada de fluxo"
msgid "workspace.options.flows.flow-start"
msgstr "Início do fluxo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "Início de fluxo"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Automático"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "Colunas"
@@ -3923,7 +3909,7 @@ msgstr "Colunas"
msgid "workspace.options.grid.grid-title"
msgstr "Grade"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Cor"
@@ -3932,15 +3918,15 @@ msgstr "Cor"
msgid "workspace.options.grid.params.columns"
msgstr "Colunas"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "Espaçamento"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Altura"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Margem"
@@ -3949,7 +3935,7 @@ msgstr "Margem"
msgid "workspace.options.grid.params.rows"
msgstr "Linhas"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "Definir como padrão"
@@ -3963,143 +3949,143 @@ msgstr "Tamanho"
msgid "workspace.options.grid.params.type"
msgstr "Tipo"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Inferior"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Centro"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Esquerda"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Direita"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "Esticar"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "Superior"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "Usar padrão"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Largura"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Linhas"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "Quadrado"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Preenchimento do grupo"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Traçado do grupo"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "Altura"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "Inspecionar"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "Ação"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "Após um tempo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "Animação"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "Dissolver"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "Nenhuma"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "Empurrar"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "Deslizar"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "automático"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "Adicionar um fundo na sobreposição"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "Fechar quando clicar no fundo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "Fechar sobreposição"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "Fechar sobreposição: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "Delay"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "Destino"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "Duração"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "Atenuação"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "Ease"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "Ease in"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "Ease in out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "Ease out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "Linear"
@@ -4108,47 +4094,47 @@ msgstr "Linear"
msgid "workspace.options.interaction-in"
msgstr "Entrando"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "Mouse entra"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "Mouse sai"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "ms"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "Navegar para"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "Navegar para: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(não especificado)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "Efeito de offset"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "Ao clicar"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "Abrir sobreposição"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "Abrir sobreposição: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "Abrir URL"
@@ -4157,147 +4143,147 @@ msgstr "Abrir URL"
msgid "workspace.options.interaction-out"
msgstr "Saindo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "Centro inferior"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "Inferior esquerdo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "Inferior direito"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "Centro"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "Manual"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "Superior (no meio)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "Superior (a esquerda)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "Superior (a direita)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "Posição"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "Preservar posição da rolagem (scroll)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "Tela anterior"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "Relativo a"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "Si próprio"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "Alternar sobreposição"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "Alternar sobreposição: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "Ativador"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "Durante o hover"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "Enquanto clica"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "Interações"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "Cor"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "Queimar cor"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "Subexposição de cores"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "Escurecer"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "Diferença"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "Exclusão"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Luz direta"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Matiz"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Clarear"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "Luminusidade"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "Multiplicação"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "Normal"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "Sobreposição"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "Saturação"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Tela"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "Luz difusa"
@@ -4321,19 +4307,19 @@ msgstr "Camadas selecionadas"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "Opções avançadas"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "Altura Máx."
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "Largura Máx."
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "Altura Min."
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "Altura Min."
@@ -4437,15 +4423,15 @@ msgstr "espaçar dentro"
msgid "workspace.options.layout.top"
msgstr "Topo"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "Mais cores"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "Mais cores da biblioteca"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "Opacidade"
@@ -4454,27 +4440,27 @@ msgstr "Opacidade"
msgid "workspace.options.position"
msgstr "Posição"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "Protótipo"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "Raio"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "Inferior esquerdo"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "Inferior direito"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "Superior (a esquerda)"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "Superior (a direita)"
@@ -4486,7 +4472,7 @@ msgstr "Recente"
msgid "workspace.options.retry"
msgstr "Repetir"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "Rotação"
@@ -4494,29 +4480,29 @@ msgstr "Rotação"
msgid "workspace.options.search-font"
msgstr "Procurar fonte"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr ""
"Selecione uma forma, tela ou grupo para arrastar uma conexão para outra "
"tela."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "Cores selecionadas"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "Preenchimento da seleção"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "Selecionar traçado"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "Desfoque"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "Cor da sombra"
@@ -4528,47 +4514,48 @@ msgstr "Sombra projetada"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "Sombra interna"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "Alcance"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "Sombra"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "Sombra do grupo"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "Sombras da seleção"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "Mostrar nas exportações"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "Mostrar no modo protótipo"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "Tamanho"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "Padrões de tamanho"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "Traçado"
@@ -4587,15 +4574,15 @@ msgstr "Ponta de losango"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "Seta de linha"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "Nenhum"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "Redonda"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "Quadrada"
@@ -4609,71 +4596,71 @@ msgstr "Ponta de quadrado"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "Seta triangular"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "Cor do traçado"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "Largura do traçado"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "Centro"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "Tracejada"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "Pontilhada"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "Dentro"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "Misturado"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "Fora"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "Sólido"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "Alinhar a base"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "Alinhar no meio"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "Alinhar ao topo"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "Esquerda para a direita"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "Direita para a esquerda"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "Altura automática"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "Largura automática"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "Fixo"
@@ -4695,35 +4682,35 @@ msgstr "Minúsculo"
msgid "workspace.options.text-options.none"
msgstr "Nenhum"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "Rasurado (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "Alinhar ao centro"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "Justificar"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "Alinhar a esquerda"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "Alinhar a direita"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "Texto"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "Texto do grupo"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "Texto de seleção"
@@ -4732,7 +4719,7 @@ msgstr "Texto de seleção"
msgid "workspace.options.text-options.titlecase"
msgstr "Iniciais maiúsculas"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "Sublinhado (%s)"
@@ -4741,19 +4728,19 @@ msgstr "Sublinhado (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "Maiúsculo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr "Use o botão play no cabeçalho para visualizar o protótipo."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "Largura"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "eixo X"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "eixo Y"
@@ -4817,7 +4804,7 @@ msgstr "Copiar"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "Agrupar em uma tela"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "Criar componente"
@@ -4825,7 +4812,7 @@ msgstr "Criar componente"
msgid "workspace.shape.menu.cut"
msgstr "Cortar"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "Remover"
@@ -4833,15 +4820,15 @@ msgstr "Remover"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "Remover início de fluxo"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "Quebrar instância"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "Quebrar instâncias"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "Diferença"
@@ -4853,11 +4840,11 @@ msgstr "Duplicar"
msgid "workspace.shape.menu.edit"
msgstr "Editar"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "Excluir"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "Achatar"
@@ -4890,19 +4877,19 @@ msgstr "Ir para o arquivo do componente principal"
msgid "workspace.shape.menu.group"
msgstr "Agrupar"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "Esconder"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "Mostrar/ocultar Interface"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "Interseção"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "Bloquear"
@@ -4910,7 +4897,7 @@ msgstr "Bloquear"
msgid "workspace.shape.menu.mask"
msgstr "Máscara"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "Colar"
@@ -4922,11 +4909,11 @@ msgstr "Caminho"
msgid "workspace.shape.menu.remove-flex"
msgstr "Excluir Flex Layout"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "Redefinir substituições"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "Restaurar componente principal"
@@ -4934,15 +4921,15 @@ msgstr "Restaurar componente principal"
msgid "workspace.shape.menu.select-layer"
msgstr "Selecionar camada"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "Mostrar"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "Mostrar no painel de ativos"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "Mostrar componente principal"
@@ -4955,6 +4942,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "Definir como miniatura"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "Transformar em caminho"
@@ -4962,11 +4950,11 @@ msgstr "Transformar em caminho"
msgid "workspace.shape.menu.ungroup"
msgstr "Desagrupar"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "Unir"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "Desbloquear"
@@ -4979,7 +4967,7 @@ msgstr "Remover máscara"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "Atualizar componentes principais"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "Atualizar o componente principal"
@@ -4991,11 +4979,11 @@ msgstr "Recolher a barra lateral"
msgid "workspace.sidebar.expand"
msgstr "Expandir a barra lateral"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "Histórico"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "Camadas"
@@ -5035,11 +5023,11 @@ msgstr "Textos"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "Atributos SVG importados"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "Páginas"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:248
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:249
msgid "workspace.sidebar.sitemap.add-page"
msgstr "Adicionar página"
@@ -5047,7 +5035,7 @@ msgstr "Adicionar página"
msgid "workspace.sitemap"
msgstr "Mapa do site"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:338
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:337
msgid "workspace.tokens.back-to-themes"
msgstr "Voltar a listagem de temas"
@@ -5055,15 +5043,15 @@ msgstr "Voltar a listagem de temas"
msgid "workspace.tokens.create-new-theme"
msgstr "Crie seu primeiro tema agora."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:100, src/app/main/ui/workspace/tokens/themes.cljs:44
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:96, src/app/main/ui/workspace/tokens/themes.cljs:44
msgid "workspace.tokens.create-one"
msgstr "Criar um."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:534
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:552
msgid "workspace.tokens.create-token"
msgstr "Criar novo token %s"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:337
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:338
msgid "workspace.tokens.delete"
msgstr "Remover token"
@@ -5071,11 +5059,11 @@ msgstr "Remover token"
msgid "workspace.tokens.delete-theme-title"
msgstr "Remover tema"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:334
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:335
msgid "workspace.tokens.duplicate"
msgstr "Duplicar token"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:321
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:322
msgid "workspace.tokens.edit"
msgstr "Editar token"
@@ -5088,16 +5076,16 @@ msgstr "O conjunto de tokens ainda não é suportado."
msgid "workspace.tokens.theme-name"
msgstr "Tema %s"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:589, src/app/main/ui/workspace/tokens/management/create/form.cljs:590
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:608, src/app/main/ui/workspace/tokens/management/create/form.cljs:609
#, fuzzy
msgid "workspace.tokens.token-description"
msgstr "Descrição"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:539
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:83, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:109, src/app/main/ui/workspace/tokens/management/create/form.cljs:557
msgid "workspace.tokens.token-name"
msgstr "Nome"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:567
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:585
msgid "workspace.tokens.token-value"
msgstr "Valor"
@@ -5105,19 +5093,19 @@ msgstr "Valor"
msgid "workspace.tokens.tokens-section-title"
msgstr ""
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:125
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:121
msgid "workspace.tokens.tools"
msgstr "Ferramentas"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:156
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:131
msgid "workspace.tokens.value-not-valid"
msgstr "O valor não é válido"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:563
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:581
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:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "Ativos"
@@ -5125,7 +5113,7 @@ msgstr "Ativos"
msgid "workspace.toolbar.color-palette"
msgstr "Paleta de cores (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "Comentários (%s)"
@@ -5315,19 +5303,19 @@ msgstr "Operação em %s"
msgid "workspace.undo.title"
msgstr "Histórico"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "Dispensar"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "Mais informações"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "Existem atualizações nas bibliotecas compartilhadas"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "Atualizar"
diff --git a/frontend/translations/pt_PT.po b/frontend/translations/pt_PT.po
index 0260f16726..c7bb9c395b 100644
--- a/frontend/translations/pt_PT.po
+++ b/frontend/translations/pt_PT.po
@@ -1,15 +1,15 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-11 07:21+0000\n"
-"Last-Translator: TheScientistPT \n"
-"Language-Team: Portuguese (Portugal) "
-" \n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
+"Last-Translator: Dário \n"
+"Language-Team: Portuguese (Portugal) \n"
"Language: pt_PT\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 5.13-dev\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -177,7 +177,7 @@ msgstr "A solução de código aberto para design e prototipagem."
msgid "auth.terms-and-privacy-agreement"
msgstr "Aceito os [termos de serviço](%s) e a [política de privacidade](%s)."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Termos de serviço"
@@ -200,7 +200,7 @@ msgstr "Email profissional"
msgid "branding-illustrations-marketing-pieces"
msgstr "...branding, ilustrações, artigos de marketing, etc."
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Publicar"
@@ -272,7 +272,7 @@ msgstr "Partilha protótipos"
msgid "common.share-link.view-all"
msgstr "Seleciona tudo"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Cancelar publicação"
@@ -395,7 +395,7 @@ msgstr "O token não tem data de expiração"
msgid "dashboard.add-file"
msgstr "Adicionar ficheiro"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Adicionar como biblioteca partilhada"
@@ -403,31 +403,31 @@ msgstr "Adicionar como biblioteca partilhada"
msgid "dashboard.change-email"
msgstr "Alterar e-mail"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(copiar)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "+ Criar nova equipa"
-#: src/app/main/ui/workspace/main_menu.cljs:631
+#: src/app/main/ui/workspace/main_menu.cljs:659
msgid "dashboard.create-version-menu"
msgstr "Afixar esta versão"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "O teu Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Eliminar equipa"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Descarregar ficheiro Penpot (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Descarregar ficheiro standard (svg + json)"
@@ -499,7 +499,7 @@ msgstr "Começa a criar coisas incríveis"
msgid "dashboard.export-binary-multi"
msgstr "Descarrega %s ficheiros Penpot (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Exportar pranchetas para PDF"
@@ -515,7 +515,7 @@ msgstr "Exportar %s ficheiros Penpot"
msgid "dashboard.export-multiple.selected"
msgstr "%s de %s elementos selecionados"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Exportar"
@@ -698,11 +698,11 @@ msgstr "A carregar dados para o servidor (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "A carregar ficheiro: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Convidar para a equipa"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Sair da equipa"
@@ -710,7 +710,7 @@ msgstr "Sair da equipa"
msgid "dashboard.libraries-and-templates"
msgstr "Bibliotecas e Templates"
-#: src/app/main/ui/dashboard/templates.cljs:259
+#: src/app/main/ui/dashboard/templates.cljs:267
msgid "dashboard.libraries-and-templates.description"
msgstr ""
"Aqui estão algumas Bibliotecas e templates que podes adicionar ao teu "
@@ -720,7 +720,7 @@ msgstr ""
msgid "dashboard.libraries-and-templates.explore"
msgstr "Explora mais e sabe como contribuir"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr ""
"Ocorreu um problema com a importação do template. O template não foi "
@@ -758,7 +758,7 @@ msgstr "Mover para outra equipa"
msgid "dashboard.new-file"
msgstr "+ Novo Ficheiro"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Novo Ficheiro"
@@ -766,7 +766,7 @@ msgstr "Novo Ficheiro"
msgid "dashboard.new-project"
msgstr "+ Novo projeto"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Novo Projeto"
@@ -774,11 +774,11 @@ msgstr "Novo Projeto"
msgid "dashboard.no-matches-for"
msgstr "Não há resultados para \"%s\""
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Projetos afixados aparecerão aqui"
-#: src/app/main/ui/dashboard/comments.cljs:90
+#: src/app/main/ui/dashboard/comments.cljs:91
msgid "dashboard.notifications"
msgstr "Notificações"
@@ -790,7 +790,7 @@ msgstr "O teu endereço de e-mail foi atualizado com sucesso"
msgid "dashboard.notifications.email-verified-successfully"
msgstr "O teu endereço de e-mail foi verificado com sucesso"
-#: src/app/main/data/profile.cljs:272
+#: src/app/main/data/profile.cljs:273
msgid "dashboard.notifications.notifications-saved"
msgstr "Definições de notificação atualizadas"
@@ -798,11 +798,11 @@ msgstr "Definições de notificação atualizadas"
msgid "dashboard.notifications.password-saved"
msgstr "Palavra-passe guardada com sucesso!"
-#: src/app/main/ui/dashboard/comments.cljs:44
+#: src/app/main/ui/dashboard/comments.cljs:45
msgid "dashboard.notifications.view"
msgstr "Ver notificações"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s membros"
@@ -830,7 +830,7 @@ msgstr "Passaste a ser editor(a) nesta equipa."
msgid "dashboard.permissions-change.owner"
msgstr "Passaste a ser dono(a) nesta equipa."
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Afixar/Desafixar"
@@ -867,7 +867,7 @@ msgstr "Já não pertences à equipa “%s“."
msgid "dashboard.save-settings"
msgstr "Guardar definições"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Pesquisar…"
@@ -939,7 +939,7 @@ msgstr "Notificações"
msgid "dashboard.show-all-files"
msgstr "Mostrar todos os ficheiros"
-#: src/app/main/ui/workspace/main_menu.cljs:638
+#: src/app/main/ui/workspace/main_menu.cljs:666
msgid "dashboard.show-version-history"
msgstr "Histórico de versões"
@@ -963,7 +963,7 @@ msgstr[1] "Os teus ficheiros foram duplicados com sucesso"
msgid "dashboard.success-duplicate-project"
msgstr "O teu projeto foi duplicado com sucesso"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "O teu ficheiro foi movido com sucesso"
@@ -975,15 +975,15 @@ msgstr "Os teus ficheiros foram movidos com sucesso"
msgid "dashboard.success-move-project"
msgstr "O teu projeto foi movido com sucesso"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Informação da equipa"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Membros da equipa"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Projetos da equipa"
@@ -1003,7 +1003,7 @@ msgstr "Resultados da pesquisa"
msgid "dashboard.type-something"
msgstr "Escreve para pesquisar resultados"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Cancelar publicação da Biblioteca"
@@ -1011,50 +1011,50 @@ msgstr "Cancelar publicação da Biblioteca"
msgid "dashboard.update-settings"
msgstr "Atualizar definições"
-#: src/app/main/ui/dashboard/sidebar.cljs:856
+#: src/app/main/ui/dashboard/sidebar.cljs:976
msgid "dashboard.upgrade-plan.no-limits"
msgstr "Criatividade sem limites"
-#: src/app/main/ui/dashboard/sidebar.cljs:854
+#: src/app/main/ui/dashboard/sidebar.cljs:974
msgid "dashboard.upgrade-plan.penpot-free"
msgstr "Penpot Gratuito"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "Ativo"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "Quando este webhook for ativado serão enviados detalhes do evento"
-#: src/app/main/ui/dashboard/team.cljs:982
+#: src/app/main/ui/dashboard/team.cljs:1160
msgid "dashboard.webhooks.cant-edit"
msgstr "Só podes apagar ou modificar webhooks que criaste."
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "Tipo de conteúdo"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "Criar webhook"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "Webhook criado com sucesso."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"Os webhooks são uma forma simples de permitir a outros sites e aplicações "
"serem notificados quando acontecem certas ações no Penpot. Enviaremos um "
"pedido POST para cada um dos URLs que forneceres."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "Clica no botão \"Criar webhook\" para adicionar um."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "Ainda não há nenhum webhook criado."
@@ -1074,7 +1074,7 @@ msgstr "E-mail"
msgid "dashboard.your-name"
msgstr "O teu nome"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "O teu Penpot"
@@ -1090,15 +1090,15 @@ msgstr "Atenção"
msgid "ds.component-subtitle"
msgstr "Componentes para atualizar:"
-#: src/app/main/ui/workspace/plugins.cljs:338, src/app/main/ui/workspace/plugins.cljs:392
+#: src/app/main/ui/workspace/plugins.cljs:339, src/app/main/ui/workspace/plugins.cljs:393
msgid "ds.confirm-allow"
msgstr "Permitir"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Cancelar"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Ok"
@@ -1154,11 +1154,11 @@ msgstr "Não podes utilizar o teu e-mail como palavra-passe"
msgid "errors.email-domain-not-allowed"
msgstr "Domínio não permitido"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "O e-mail «%s» tem muitos relatórios de rejeição permanentes."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "O e-mail «%s» foi denunciado como spam ou devolvido permanentemente."
@@ -1183,7 +1183,7 @@ msgstr ""
"funcionalidades do ficheiro que estás a tentar abrir. Será necessário "
"aplicar migrações para '%s' antes de poder abrir o ficheiro."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Ocorreu algo inesperado."
@@ -1225,7 +1225,7 @@ msgstr "Este convite pode ter sido cancelado ou expirado."
msgid "errors.ldap-disabled"
msgstr "Autenticação LDAP está desativada."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "Alcançou o máximo da quota '%s'. Contacte o suporte técnico."
@@ -1241,7 +1241,7 @@ msgstr "Parece que o conteúdo da imagem não corresponde à extensão do fichei
msgid "errors.media-type-not-allowed"
msgstr "Parece que esta não é uma imagem válida."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"O perfil que estás a convidar tem e-mails silenciados (relatórios de spam "
@@ -1269,7 +1269,7 @@ msgstr "Dados inválidos na área de transferência"
msgid "errors.profile-blocked"
msgstr "O perfil está bloqueado"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr ""
"O teu perfil tem e-mails silenciados (relatórios de spam ou devoluções "
@@ -1283,15 +1283,15 @@ msgstr "A criação de contas está atualmente desativada."
msgid "errors.team-feature-mismatch"
msgstr "Funcionalidade incompatível '%s' detetada"
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr "Membros insuficientes para deixar a equipa, provavelmente queres eliminá-la."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "O membro que tentas atribuir não existe."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr ""
"O proprietário não pode sair da equipa, deverás retribuir a função de "
@@ -1313,31 +1313,31 @@ msgstr "Erro de validação"
msgid "errors.version-not-supported"
msgstr "O ficheiro tem um número de versão incompatível"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "Erro de conexão, não foi possível alcançar o URL"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "O URL não passou na validação."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "Último envio sem sucesso."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "Erro na validação SSL."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "Timeout"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "Erro inesperado ao validar"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "Estado inesperado %s"
@@ -1402,19 +1402,19 @@ msgstr "Ocorreu um erro"
msgid "inspect.attributes.blur"
msgstr "Desfoque"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Valor"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1422,7 +1422,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Preencher"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Descarregar imagem original"
@@ -1516,79 +1516,82 @@ msgstr "Sólido"
msgid "inspect.attributes.stroke.width"
msgstr "Largura"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Tipografia"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Família da Fonte"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Tamanho da Fonte"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Estilo da Fonte"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "Espessura da fonte"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Espaço entre caracteres"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Altura da Linha"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Decoração de Texto"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Nenhum"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Sublinhado"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Transformação de Texto"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "Capitalização de Título"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "Minúsculas"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Nenhum"
-#: src/app/main/ui/inspect/attributes/text.cljs:159
+#: src/app/main/ui/inspect/attributes/text.cljs:152
msgid "inspect.attributes.typography.text-transform.unset"
msgstr "Sem atribuição"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "Maiúsculas"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr "Se quiseres saber mais sobre a inspeção, visita o centro de ajuda do Penpot"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "Mais informações sobre a inspeção"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr ""
"Seleciona uma forma, prancheta, ou grupo para inspecionar os seus atributos "
@@ -1654,11 +1657,11 @@ msgstr "Texto"
msgid "inspect.tabs.info"
msgstr "Informação"
-#: src/app/main/ui/dashboard/comments.cljs:95
+#: src/app/main/ui/dashboard/comments.cljs:96
msgid "label.mark-all-as-read"
msgstr "Marcar todas como lidas"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Atalhos"
@@ -1670,11 +1673,11 @@ msgstr "Aceitar"
msgid "labels.access-tokens"
msgstr "Tokens de acesso"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "Ativo"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.add"
msgstr "Adicionar"
@@ -1682,11 +1685,11 @@ msgstr "Adicionar"
msgid "labels.add-custom-font"
msgstr "Adicionar fonte personalizada"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.adding"
msgstr "A adicionar..."
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Administração"
@@ -1694,7 +1697,7 @@ msgstr "Administração"
msgid "labels.adobe-xd"
msgstr "Adobe XD"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Todos"
@@ -1717,7 +1720,7 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "Error de Servidor (Bad Gateway)"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Cancelar"
@@ -1725,11 +1728,11 @@ msgstr "Cancelar"
msgid "labels.canva"
msgstr "Canva"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Fechar"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:186
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:181
msgid "labels.collapse"
msgstr "Colapsar"
@@ -1741,11 +1744,11 @@ msgstr "Comentário"
msgid "labels.comment.mark-as-solved"
msgstr "Marcar como resolvido"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Comentários"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Comunidade"
@@ -1753,7 +1756,7 @@ msgstr "Comunidade"
msgid "labels.confirm-password"
msgstr "Confirmar palavra-passe"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Continuar"
@@ -1765,11 +1768,11 @@ msgstr "Continuar com"
msgid "labels.continue-with-penpot"
msgstr "Podes continuar com uma conta Penpot"
-#: src/app/main/ui/inspect/attributes/common.cljs:118
+#: src/app/main/ui/inspect/attributes/common.cljs:99
msgid "labels.copy-color"
msgstr "Copiar cor"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "Copiar link"
@@ -1777,7 +1780,7 @@ msgstr "Copiar link"
msgid "labels.copyright"
msgstr "Kaleidos @2024"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Criar"
@@ -1797,7 +1800,7 @@ msgstr "Fonte personalizada"
msgid "labels.dashboard"
msgstr "Painel"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Eliminar"
@@ -1809,7 +1812,7 @@ msgstr "Eliminar comentário"
msgid "labels.delete-comment-thread"
msgstr "Eliminar tópico"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Eliminar convite"
@@ -1826,15 +1829,15 @@ msgstr "Desenvolvimento"
msgid "labels.director"
msgstr "Diretor"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "Descartar"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Rascunhos"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Editar"
@@ -1842,7 +1845,7 @@ msgstr "Editar"
msgid "labels.edit-file"
msgstr "Editar ficheiro"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Editor"
@@ -1851,11 +1854,11 @@ msgstr "Editor"
msgid "labels.event"
msgstr "Evento"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Expirado"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Exportar"
@@ -1883,7 +1886,7 @@ msgstr "Provedores de fontes"
msgid "labels.font-variants"
msgstr "Variantes"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Fontes"
@@ -1897,11 +1900,11 @@ msgstr "CEO ou Fundador"
msgid "labels.freelancer"
msgstr "Sou trabalhador(a) independente (freelancer)"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "Repositório Github"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Dá feedback"
@@ -1913,7 +1916,7 @@ msgstr "Voltar atrás"
msgid "labels.graphic-design"
msgstr "Design gráfico"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Centro de Ajuda"
@@ -1921,15 +1924,15 @@ msgstr "Centro de Ajuda"
msgid "labels.hide"
msgstr "Ocultar"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Ocultar comentários resolvidos"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:134
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:130
msgid "labels.import"
msgstr "Importar"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "Inativo"
@@ -1951,7 +1954,7 @@ msgstr "Erro interno"
msgid "labels.invision"
msgstr "InVision"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Convites"
@@ -1959,7 +1962,7 @@ msgstr "Convites"
msgid "labels.language"
msgstr "Idioma"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Bibliotecas e Templates"
@@ -1975,7 +1978,7 @@ msgstr "Iniciar sessão ou registar"
msgid "labels.login"
msgstr "Iniciar sessão"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Terminar sessão"
@@ -1983,11 +1986,11 @@ msgstr "Terminar sessão"
msgid "labels.marketing"
msgstr "Marketing"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Membro"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Membros"
@@ -1995,15 +1998,15 @@ msgstr "Membros"
msgid "labels.new-password"
msgstr "Palavra-passe nova"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "Seguinte"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "Não tens notificações de comentários pendentes."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "Não há convites."
@@ -2020,7 +2023,7 @@ msgstr "Ups!"
msgid "labels.notifications"
msgstr "Notificações"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "1 ficheiro"
@@ -2032,7 +2035,7 @@ msgid_plural "labels.num-of-frames"
msgstr[0] "1 prancheta"
msgstr[1] "%s pranchetas"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "1 projeto"
@@ -2051,7 +2054,7 @@ msgstr "Palavra-passe antiga"
msgid "labels.only-yours"
msgstr "Apenas teu"
-#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:309, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:338
+#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:310, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:339
msgid "labels.options"
msgstr "Opções"
@@ -2067,7 +2070,7 @@ msgstr "Outra (especificar)"
msgid "labels.other-short"
msgstr "Outra"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Proprietário"
@@ -2075,7 +2078,7 @@ msgstr "Proprietário"
msgid "labels.password"
msgstr "Palavra-passe"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "Pendente"
@@ -2095,11 +2098,11 @@ msgstr "Product Management"
msgid "labels.profile"
msgstr "Perfil"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Projetos"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Notas de versões"
@@ -2113,11 +2116,11 @@ msgstr "Recarregar ficheiro"
msgid "labels.remove"
msgstr "Remover"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Remover membro"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Renomear"
@@ -2145,7 +2148,7 @@ msgstr "nova resposta"
msgid "labels.reply.thread"
msgstr "Responder"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "Reenviar convite"
@@ -2157,15 +2160,15 @@ msgstr "Restaurar"
msgid "labels.retry"
msgstr "Tentar novamente"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Cargo"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Salvar"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:715
+#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:730
msgid "labels.search"
msgstr "Pesquisar"
@@ -2193,7 +2196,7 @@ msgstr "Estamos numa manutenção programada dos nossos sistemas."
msgid "labels.service-unavailable.main-message"
msgstr "Serviço Indisponível"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Definições"
@@ -2205,11 +2208,11 @@ msgstr "Partilhar"
msgid "labels.share-prototype"
msgstr "Partilhar protótipo"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Bibliotecas"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Mostrar todos os comentários"
@@ -2217,11 +2220,11 @@ msgstr "Mostrar todos os comentários"
msgid "labels.show-comments-list"
msgstr "Mostrar lista de comentários"
-#: src/app/main/ui/workspace/comments.cljs:67, src/app/main/ui/workspace/comments.cljs:139
+#: src/app/main/ui/workspace/comments.cljs:68, src/app/main/ui/workspace/comments.cljs:140
msgid "labels.show-mentions"
msgstr "Mostrar apenas as tuas menções"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Mostrar apenas os teus comentários"
@@ -2233,7 +2236,7 @@ msgstr "Sketch"
msgid "labels.start"
msgstr "Começar"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Estado"
@@ -2255,11 +2258,11 @@ msgstr "Membro de equipa"
msgid "labels.themes"
msgstr "Temas"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Tutoriais"
-#: src/app/main/data/workspace/tokens/errors.cljs:93
+#: src/app/main/data/workspace/tokens/errors.cljs:101
msgid "labels.unknown-error"
msgstr "Erro desconhecido"
@@ -2287,15 +2290,15 @@ msgstr "Carregar fontes personalizadas"
msgid "labels.uploading"
msgstr "Carregando…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "Somente leitura"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Visualizador"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Webhooks"
@@ -2303,11 +2306,11 @@ msgstr "Webhooks"
msgid "labels.write-new-comment"
msgstr "Escrever novo comentário"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(tu)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "A tua conta"
@@ -2336,7 +2339,7 @@ msgstr "Cria designs de forma flexível com controlos semelhantes a CSS."
#: src/app/main/ui/ds/product/loader.cljs:24
msgid "loader.tips.03.title"
-msgstr "Auto Layout como em CSS"
+msgstr "Layouts como em CSS"
#: src/app/main/ui/ds/product/loader.cljs:27
msgid "loader.tips.04.message"
@@ -2392,23 +2395,23 @@ msgstr "Modo Claro/Escuro"
msgid "loader.tips.10.title"
msgstr "Suporte de Plugins"
-#: src/app/main/ui/workspace/colorpicker.cljs:449, src/app/main/ui/workspace/colorpicker.cljs:450, src/app/main/ui/workspace/colorpicker.cljs:452
+#: src/app/main/ui/workspace/colorpicker.cljs:486, src/app/main/ui/workspace/colorpicker.cljs:487, src/app/main/ui/workspace/colorpicker.cljs:489
msgid "media.choose-image"
msgstr "Escolher imagem"
-#: src/app/main/ui/workspace/colorpicker.cljs:244
+#: src/app/main/ui/workspace/colorpicker.cljs:256
msgid "media.gradient"
msgstr "Gradiente"
-#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:44, src/app/main/ui/ds/utilities/swatch.cljs:57, src/app/main/ui/inspect/attributes/common.cljs:63, src/app/main/ui/workspace/colorpicker.cljs:246, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:251
+#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:45, src/app/main/ui/ds/utilities/swatch.cljs:58, src/app/main/ui/inspect/attributes/common.cljs:44, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:65, src/app/main/ui/workspace/colorpicker.cljs:258, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:395
msgid "media.image"
msgstr "Imagem"
-#: src/app/main/ui/inspect/attributes/common.cljs:74
+#: src/app/main/ui/inspect/attributes/common.cljs:55
msgid "media.image.short"
msgstr "img"
-#: src/app/main/ui/workspace/colorpicker.cljs:442
+#: src/app/main/ui/workspace/colorpicker.cljs:479
msgid "media.keep-aspect-ratio"
msgstr "Manter proporções"
@@ -2426,7 +2429,7 @@ msgstr "A carregar imagem…"
msgid "media.radial"
msgstr "Radial"
-#: src/app/main/ui/workspace/colorpicker.cljs:242
+#: src/app/main/ui/workspace/colorpicker.cljs:254
msgid "media.solid"
msgstr "Sólido"
@@ -2502,19 +2505,19 @@ msgstr "Criar token"
msgid "modals.create-access-token.title"
msgstr "Gerar token de acesso"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "Criar webhook"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "Criar webhook"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "URL do payload"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://example.com/postreceive"
@@ -2560,11 +2563,11 @@ msgstr ""
msgid "modals.delete-comment-thread.title"
msgstr "Eliminar conversa"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "Tens a certeza que queres apagar esta nota?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "Apagar nota"
@@ -2612,11 +2615,11 @@ msgstr ""
msgid "modals.delete-font.title"
msgstr "Eliminando fonte"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Tens a certeza de que pretendes eliminar esta página?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Eliminar página"
@@ -2662,29 +2665,29 @@ msgid_plural "modals.delete-shared-confirm.title"
msgstr[0] "Eliminando ficheiro"
msgstr[1] "Eliminando ficheiros"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Eliminar equipa"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Tens a certeza de que pretendes eliminar esta equipa? Todos os projetos e "
"ficheiros associados com a equipa serão eliminados permanentemente."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Eliminando equipa"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Eliminar membro"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Tens a certeza de que pretendes eliminar este membro da equipa?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Eliminar membro da equipa"
@@ -2698,57 +2701,57 @@ msgstr[1] ""
"Os recursos que estiverem a ser usados nestes ficheiros continuarão "
"presentes (nenhum design será afetado)."
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "Apagar webhook"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "Tens a certeza que queres apagar este webhook?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "A apagar webhook"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "Editar webhook"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "Editar webhook"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Enviar convite"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "E-mails, separados por vírgulas"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr ""
"Alguns endereços de email pertencem a membros atuais da equipa. Não serão "
"enviados convites para estes endereços."
-#: src/app/main/ui/dashboard/team.cljs:220
+#: src/app/main/ui/dashboard/team.cljs:222
msgid "modals.invite-team-member.text"
msgstr ""
"Podes convidar membros para a equipa para que estes possam ter acesso a "
"este ficheiro e todos os ficheiros da equipa."
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "Convidar membros para a equipa"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"Como és o único membro desta equipa, a equipa será eliminado juntamente com "
"os projetos e ficheiros."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "Tens a certeza de que pretendes sair da equipa %s?"
@@ -2776,15 +2779,15 @@ msgstr "Seleciona um membro para promover"
msgid "modals.leave-and-reassign.title"
msgstr "Antes de saires"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Sair da equipa"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Tens a certeza de que pretendes sair desta equipa?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Saindo da equipa"
@@ -2806,39 +2809,39 @@ msgid_plural "modals.move-shared-confirm.title"
msgstr[0] "Mover biblioteca"
msgstr[1] "Mover bibliotecas"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "Montante de deslocamento"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Transferir propriedade"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"Se transferires a propriedade, vais alterar a tua função para "
"Administrador, perdendo algumas permissões sobre esta equipa. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr ""
"És o proprietário atual desta equipa. Tens a certeza de que pretendes "
"promover %s a proprietário da equipa?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Novo proprietário de equipa"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "Publicar"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "A tua biblioteca está vazia. Tens a certeza que queres publicá-la?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "Publicar biblioteca vazia"
@@ -2894,21 +2897,21 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Atualizar componentes numa biblioteca partilhada"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Atualizar"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Cancelar"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"Estás prestes a atualizar componentes numa biblioteca partilhada. Pode "
"afetar outros ficheiros que o utilizam."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Atualizar componente numa biblioteca partilhada"
@@ -2994,11 +2997,11 @@ msgstr ""
msgid "notifications.by-code.upgrade-version"
msgstr "Está disponível uma nova versão, por favor atualiza a página"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "Convite enviado com sucesso"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "Link de convite copiado"
@@ -3150,7 +3153,7 @@ msgstr ""
"Lembra-te em incluir todos. Programadores, designers, gestores... "
"acrescenta diversidade :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "Convidar com a função:"
@@ -3370,665 +3373,649 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "Ir para login"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "Desacoplar"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "Misturado"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:283
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:423
msgid "settings.remove-color"
msgstr "Remover cor"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:288
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:428
msgid "settings.select-this-color"
msgstr "Selecionar itens que usem este estilo"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Básicos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "Painel"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Visualizador"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Área de Trabalho"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Alinhamento"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Editar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "Genérico"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "Genérico"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Menu Principal"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "Modificar camadas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Navegação"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Navegação"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Navegação"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Painéis"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Caminhos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Formas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "Textos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Ferramentas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Comentários"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "Adicionar nó"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "Alinhar abaixo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "Alinhar ao centro"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "Alinhar ao centro horizontalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "Alinhar justificado"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "Alinhar à esquerda"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "Alinhar à direita"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "Alinhar topo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "Alinhar ao centro verticalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "Criar prancheta a partir da seleção"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "Alternar negrito"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "Diferença booleana"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "Exclusão Booleana"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "Intersecção Booleana"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "União Booleana"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "Enviar para trás"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Mover para trás"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "Mover para a frente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "Enviar para a frente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "Limpar historial"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Copiar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
msgid "shortcuts.copy-link"
msgstr "Copiar ligação para a área de transferência"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "Criar novo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Recortar"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "Menos zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Eliminar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "Eliminar nó"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "Desanexar componente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Curva"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "Elipse"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Quadro"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "Desenhar caminho"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Caminho"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Rectângulo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Texto"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Duplicar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "Cancelar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "Exportar formas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "Ajustar tudo à janela"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "Virar horizontalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "Virar verticalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "Decrementar tamanho de fonte"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "Incrementar tamanho da fonte"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "Ir para rascunhos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "Ir para bibliotecas partilhadas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Pesquisa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Grupo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "Distribuir horizontalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "Mostrar/ocultar interface"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "Mais zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "Inserir imagem"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "Alternar itálico"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "Unir nós"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
-msgid "shortcuts.letter-spacing-dec"
-msgstr "Decrementar espaçamento de letras"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "Incrementar espaçamento de letras"
-
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
-msgid "shortcuts.line-height-dec"
-msgstr "Decrementar espaçamento entre linhas"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
-msgid "shortcuts.line-height-inc"
-msgstr "Incrementar espaçamento entre linhas"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.line-through"
msgstr "Alternar texto rasurado"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "Fazer canto"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "Fazer curva"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "Máscara"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "Fundir nós"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "Mover"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "Mover para baixo rápido"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "Mover para a esquerda rápido"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "Mover para a direita rápido"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "Mover para cima rápido"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "Mover nó"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "Mover para baixo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "Mover para a esquerda"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "Mover para a direita"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "Mover para cima"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "Próximo quadro"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "Nenhum atalho encontrado"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "Definir opacidade a 100%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "Definir opacidade a 10%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "Definir opacidade a 20%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "Definir opacidade a 30%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "Definir opacidade a 40%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "Definir opacidade a 50%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "Definir opacidade a 60%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "Definir opacidade a 70%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "Definir opacidade a 80%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "Definir opacidade a 90%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "Selector de cores"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "Ir para secção de comentários"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "Ir para painel"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "Ir para secção de inspeção"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "Ir para secção de interações"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "Ir para secção de interações"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "Ir para a área de trabalho"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " ou "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Colar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "Quadro anterior"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "Refazer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
msgid "shortcuts.rename"
msgstr "Renomear"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "Redefinir zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
msgid "shortcuts.scale"
msgstr "Redimensionar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "Pesquisar atalhos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "Selecionar tudo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
msgid "shortcuts.select-next"
msgstr "Selecionar camada seguinte"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
msgid "shortcuts.select-parent-layer"
msgstr "Selecionar camada pai"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
msgid "shortcuts.select-prev"
msgstr "Selecionar camada anterior"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "Separar nós"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "Mostrar/ocultar grade de píxeis"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "Mostrar/ocultar atalhos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "Ajustar aos nós"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "Ajustar à grade de píxeis"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "Iniciar edição"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "Iniciar medição"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "Parar medição"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "Definir imagem destaque"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "Atalhos do teclado"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "Alternar alinhamento dinâmico"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "Alternar recursos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "Alternar selector de cores"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "Alternar modo de foco"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "Alternar tela cheia"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
msgid "shortcuts.toggle-guides"
msgstr "Mostrar / Ocultar guias"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "Alternar histórico"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "Alternar camadas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "Adicionar / Remover layout flex"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
msgid "shortcuts.toggle-layout-grid"
msgstr "Adicionar/remover layout em grelha"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "Bloquear selecionado"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "Bloquear proporções"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
msgid "shortcuts.toggle-rulers"
msgstr "Mostrar / Ocultar réguas"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
msgid "shortcuts.toggle-snap-guides"
msgstr "Ajustar às guias"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
msgid "shortcuts.toggle-snap-ruler-guide"
msgstr "Ajustar às guias de régua"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "Alternar paleta de texto"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
msgid "shortcuts.toggle-theme"
msgstr "Mudar tema"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "Mostrar / Ocultar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "Alternar estilo de zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "Alternar sublinhado"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Desfazer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Desagrupar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Retirar máscara"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "Distribuir verticalmente"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "Reduzir zoom na lupa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "Aumentar zoom na lupa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "Zoom para selecionados"
@@ -4084,19 +4071,19 @@ msgstr "Palavra-passe - Penpot"
msgid "title.settings.profile"
msgstr "Perfil - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "Convites - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "Membros - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Definições - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "Webhooks - %s - Penpot"
@@ -4168,43 +4155,43 @@ msgstr "Mostrar interações com click"
msgid "viewer.header.sitemap"
msgstr "Mapa do site"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "Último envio com sucesso."
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Alinhar horizontal ao centro (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "Distribuir espaçamento horizontal (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Alinhar à esquerda (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Alinhar à direita (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Alinhar abaixo (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Alinhar ao centro verticalmente (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "Distribuir espaçamento vertical (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Alinhar ao topo (%s)"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:163
+#: src/app/main/ui/workspace/sidebar/assets.cljs:172
msgid "workspace.assets.add-library"
msgstr "Adicionar biblioteca"
@@ -4213,19 +4200,19 @@ msgstr "Adicionar biblioteca"
msgid "workspace.assets.assets"
msgstr "Recursos"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "Todos os recursos"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Cores"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:493
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:497
msgid "workspace.assets.colors.add-color"
msgstr "Adicionar cor"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Componentes"
@@ -4233,21 +4220,21 @@ msgstr "Componentes"
msgid "workspace.assets.components.add-component"
msgstr "Adicionar componente"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "Criar grupo"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr ""
"Os teus itens serão nomeados automaticamente como \"nome do grupo / nome do "
"item\""
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Eliminar"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "Duplicar"
@@ -4255,11 +4242,11 @@ msgstr "Duplicar"
msgid "workspace.assets.duplicate-main"
msgstr "Duplicar principal"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Editar"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:177
+#: src/app/main/ui/workspace/sidebar/assets.cljs:186
msgid "workspace.assets.filter"
msgstr "Filtrar"
@@ -4268,15 +4255,15 @@ msgstr "Filtrar"
msgid "workspace.assets.graphics"
msgstr "Gráficos"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Agrupar"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "Nome do grupo"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "biblioteca local"
@@ -4288,15 +4275,15 @@ msgstr "Recursos não encontrados"
msgid "workspace.assets.open-library"
msgstr "Abrir ficheiro de biblioteca"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Renomear"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "Renomear grupo"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "Pesquisar recursos"
@@ -4312,21 +4299,21 @@ msgstr[1] "%s itens selecionados"
msgid "workspace.assets.shared-library"
msgstr "Biblioteca partilhada"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:237
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:235
msgid "workspace.assets.sidebar.components"
msgid_plural "workspace.assets.sidebar.components"
msgstr[0] "1 componente"
msgstr[1] "%s componentes"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:193
+#: src/app/main/ui/workspace/sidebar/assets.cljs:204
msgid "workspace.assets.sort"
msgstr "Ordenar"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Tipografias"
-#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:404
+#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:405
msgid "workspace.assets.typography.add-typography"
msgstr "Adicionar tipografia"
@@ -4351,7 +4338,7 @@ msgstr "Espaço entre letras"
msgid "workspace.assets.typography.line-height"
msgstr "Altura da Linha"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -4363,59 +4350,59 @@ msgstr "Estilos de texto"
msgid "workspace.assets.typography.text-transform"
msgstr "Transformar Texto"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "Desagrupar"
-#: src/app/main/ui/workspace/context_menu.cljs:791
+#: src/app/main/ui/workspace/context_menu.cljs:794
msgid "workspace.context-menu.grid-cells.area"
msgstr "Criar área"
-#: src/app/main/ui/workspace/context_menu.cljs:794
+#: src/app/main/ui/workspace/context_menu.cljs:797
msgid "workspace.context-menu.grid-cells.create-board"
msgstr "Criar prancheta"
-#: src/app/main/ui/workspace/context_menu.cljs:786
+#: src/app/main/ui/workspace/context_menu.cljs:789
msgid "workspace.context-menu.grid-cells.merge"
msgstr "Unir células"
-#: src/app/main/ui/workspace/context_menu.cljs:749
+#: src/app/main/ui/workspace/context_menu.cljs:752
msgid "workspace.context-menu.grid-track.column.add-after"
msgstr "Adicionar 1 coluna à direita"
-#: src/app/main/ui/workspace/context_menu.cljs:748
+#: src/app/main/ui/workspace/context_menu.cljs:751
msgid "workspace.context-menu.grid-track.column.add-before"
msgstr "Adicionar 1 coluna à esquerda"
-#: src/app/main/ui/workspace/context_menu.cljs:750
+#: src/app/main/ui/workspace/context_menu.cljs:753
msgid "workspace.context-menu.grid-track.column.delete"
msgstr "Eliminar coluna"
-#: src/app/main/ui/workspace/context_menu.cljs:751
+#: src/app/main/ui/workspace/context_menu.cljs:754
msgid "workspace.context-menu.grid-track.column.delete-shapes"
msgstr "Apagar coluna e conteúdos"
-#: src/app/main/ui/workspace/context_menu.cljs:747
+#: src/app/main/ui/workspace/context_menu.cljs:750
msgid "workspace.context-menu.grid-track.column.duplicate"
msgstr "Duplicar coluna"
-#: src/app/main/ui/workspace/context_menu.cljs:756
+#: src/app/main/ui/workspace/context_menu.cljs:759
msgid "workspace.context-menu.grid-track.row.add-after"
msgstr "Adicionar 1 fila abaixo"
-#: src/app/main/ui/workspace/context_menu.cljs:755
+#: src/app/main/ui/workspace/context_menu.cljs:758
msgid "workspace.context-menu.grid-track.row.add-before"
msgstr "Adicionar 1 fila acima"
-#: src/app/main/ui/workspace/context_menu.cljs:757
+#: src/app/main/ui/workspace/context_menu.cljs:760
msgid "workspace.context-menu.grid-track.row.delete"
msgstr "Apagar fila"
-#: src/app/main/ui/workspace/context_menu.cljs:758
+#: src/app/main/ui/workspace/context_menu.cljs:761
msgid "workspace.context-menu.grid-track.row.delete-shapes"
msgstr "Apagar fila e conteúdos"
-#: src/app/main/ui/workspace/context_menu.cljs:754
+#: src/app/main/ui/workspace/context_menu.cljs:757
msgid "workspace.context-menu.grid-track.row.duplicate"
msgstr "Duplicar fila"
@@ -4423,7 +4410,7 @@ msgstr "Duplicar fila"
msgid "workspace.focus.focus-mode"
msgstr "Modo de foco"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "Foco desativado"
@@ -4443,11 +4430,11 @@ msgstr "Gradiente linear"
msgid "workspace.gradients.radial"
msgstr "Gradiente radial"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "Desativar alinhamento dinâmico"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "Desativar escala proporcional"
@@ -4456,23 +4443,23 @@ msgstr "Desativar escala proporcional"
msgid "workspace.header.menu.disable-scale-text"
msgstr "Desativar escala de texto"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "Desativar ajuste às guias"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "Desativar ajuste ao pixel"
-#: src/app/main/ui/workspace/main_menu.cljs:215
+#: src/app/main/ui/workspace/main_menu.cljs:243
msgid "workspace.header.menu.disable-snap-ruler-guides"
msgstr "Desativar ajuste às guias de régua"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "Ativar alinhamento dinâmico"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "Ativar escala proporcional"
@@ -4481,107 +4468,107 @@ msgstr "Ativar escala proporcional"
msgid "workspace.header.menu.enable-scale-text"
msgstr "Ativar escalar texto"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "Ajustar às guias"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "Ativar ajuste ao pixel"
-#: src/app/main/ui/workspace/main_menu.cljs:216
+#: src/app/main/ui/workspace/main_menu.cljs:244
msgid "workspace.header.menu.enable-snap-ruler-guides"
msgstr "Ajustar às guias de régua"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "Ocultar nome das pranchetas"
-#: src/app/main/ui/workspace/main_menu.cljs:348
+#: src/app/main/ui/workspace/main_menu.cljs:376
msgid "workspace.header.menu.hide-guides"
msgstr "Ocultar guias"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "Ocultar paleta de cor"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "Ocultar grade de píxeis"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "Ocultar réguas"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "Ocultar paleta de texto"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Editar"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "Ficheiro"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "Ajuda e Informações"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "Preferências"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "Visualização"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "Refazer"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "Selecionar tudo"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "Mostrar nomes das pranchetas"
-#: src/app/main/ui/workspace/main_menu.cljs:349
+#: src/app/main/ui/workspace/main_menu.cljs:377
msgid "workspace.header.menu.show-guides"
msgstr "Mostrar guias"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "Mostrar paleta de cor"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "Mostrar grade de píxeis"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Mostrar réguas"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "Mostrar paleta de texto"
-#: src/app/main/ui/workspace/main_menu.cljs:288
+#: src/app/main/ui/workspace/main_menu.cljs:316
msgid "workspace.header.menu.toggle-dark-theme"
msgstr "Alterar para tema escuro"
-#: src/app/main/ui/workspace/main_menu.cljs:286, src/app/main/ui/workspace/main_menu.cljs:289
+#: src/app/main/ui/workspace/main_menu.cljs:314, src/app/main/ui/workspace/main_menu.cljs:317
msgid "workspace.header.menu.toggle-light-theme"
msgstr "Mudar para tema claro"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "Desfazer"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Ampliar em 100%"
@@ -4597,7 +4584,7 @@ msgstr "Guardado"
msgid "workspace.header.saving"
msgstr "A salvar"
-#: src/app/main/ui/workspace/right_header.cljs:239
+#: src/app/main/ui/workspace/right_header.cljs:240
msgid "workspace.header.share"
msgstr "Partilhar"
@@ -4606,11 +4593,11 @@ msgstr "Partilhar"
msgid "workspace.header.unsaved"
msgstr "Alterações não guardadas"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "Modo de visualização (%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "Zoom"
@@ -4622,7 +4609,7 @@ msgstr "Ajustar para preencher"
msgid "workspace.header.zoom-fit"
msgstr "Ajustar para encaixar"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "Ajustar para mostrar tudo"
@@ -4630,19 +4617,19 @@ msgstr "Ajustar para mostrar tudo"
msgid "workspace.header.zoom-full-screen"
msgstr "Tela cheia"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "Aumentar para seleção"
-#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:621
msgid "workspace.layout_grid.editor.options.edit-grid"
msgstr "Editar grelha"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1300
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1301
msgid "workspace.layout_grid.editor.options.exit"
msgstr "Sair"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:491
msgid "workspace.layout_grid.editor.padding.expand"
msgstr "Mostrar 4 opções de preenchimento de lados"
@@ -4658,7 +4645,7 @@ msgstr "Feito"
msgid "workspace.layout_grid.editor.top-bar.locate"
msgstr "Localizar"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1326
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1327
msgid "workspace.layout_grid.editor.top-bar.locate.tooltip"
msgstr "Localizar layout em grelha"
@@ -4667,10 +4654,6 @@ msgstr "Localizar layout em grelha"
msgid "workspace.libraries.add"
msgstr "Adicionar"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s cores"
-
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
msgstr "Ainda não existem estilos de cor na tua biblioteca"
@@ -4697,31 +4680,23 @@ msgstr "Cores recentes"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "RGB Complementar"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Guardar estilo de cor"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s componentes"
-
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Biblioteca de ficheiros"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s gráficos"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "BIBLIOTECAS NESTE FICHEIRO"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "BIBLIOTECAS"
@@ -4730,83 +4705,79 @@ msgstr "BIBLIOTECAS"
msgid "workspace.libraries.library"
msgstr "BIBLIOTECA"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "ATUALIZAÇÕES DE BIBLIOTECAS"
-#: src/app/main/ui/workspace/libraries.cljs:360
+#: src/app/main/ui/workspace/libraries.cljs:393
msgid "workspace.libraries.loading"
msgstr "A carregar…"
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "Não há bibliotecas partilhadas que precisem de atualização"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "Não há resultados para \"%s\""
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "Pesquisar bibliotecas partilhadas"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "BIBLIOTECAS PARTILHADAS"
-#: src/app/main/ui/workspace/libraries.cljs:352
+#: src/app/main/ui/workspace/libraries.cljs:385
msgid "workspace.libraries.shared-library-btn"
msgstr "Conectar biblioteca"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Múltiplas tipografias"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Desassociar todas as tipografias"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s tipografias"
-
-#: src/app/main/ui/workspace/libraries.cljs:323
+#: src/app/main/ui/workspace/libraries.cljs:354
msgid "workspace.libraries.unlink-library-btn"
msgstr "Desconectar biblioteca"
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Atualizar"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "ver todas as alterações"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "ATUALIZAÇÕES"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "Clica no botão + para adicionar interações."
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:96
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:97
msgid "workspace.options.blur-options.add-blur"
msgstr "Adicionar desfoque"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:117
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:118
msgid "workspace.options.blur-options.remove-blur"
msgstr "Remover desfoque"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Desfoque"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "Desfoque de grupo"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "Desfoque de seleção"
@@ -4814,39 +4785,39 @@ msgstr "Desfoque de seleção"
msgid "workspace.options.canvas-background"
msgstr "Plano de fundo"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "Recorte do conteúdo"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Componente"
-#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:193
+#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:196
msgid "workspace.options.component.annotation"
msgstr "Nota"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "Cópia"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:185
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:188
msgid "workspace.options.component.create-annotation"
msgstr "Criar uma nota"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "Editar uma nota"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "Principal"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:706
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:721
msgid "workspace.options.component.swap"
msgstr "Trocar de componente"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:765
msgid "workspace.options.component.swap.empty"
msgstr "Ainda não existem recursos nesta biblioteca"
@@ -4890,7 +4861,7 @@ msgstr "Topo"
msgid "workspace.options.constraints.topbottom"
msgstr "Topo e Abaixo"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Design"
@@ -4903,17 +4874,17 @@ msgstr "Exportar"
msgid "workspace.options.export-multiple"
msgstr "Exportar seleção"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "Exportar 1 elemento"
msgstr[1] "Exportar %s elementos"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:235
+#: 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 "Eliminar exportação"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Sufixo"
@@ -4921,7 +4892,7 @@ msgstr "Sufixo"
msgid "workspace.options.exporting-complete"
msgstr "Exportação completa"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "A exportar…"
@@ -4933,27 +4904,27 @@ msgstr "A exportação falhou"
msgid "workspace.options.exporting-object-slow"
msgstr "Exportação inesperadamente lenta"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Preenchimento"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:194
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:234
msgid "workspace.options.fill.add-fill"
msgstr "Adicionar cor de preenchimento"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:208
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:248
msgid "workspace.options.fill.remove-fill"
msgstr "Remover preenchimento"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:392
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:474
msgid "workspace.options.fit-content"
msgstr "Redimensionar para ajustar ao conteúdo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "Adicionar início de fluxo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:178
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:179
msgid "workspace.options.flows.flow"
msgstr "Fluxo"
@@ -4962,15 +4933,15 @@ msgstr "Fluxo"
msgid "workspace.options.flows.flow-start"
msgstr "Início de fluxo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "Início de fluxo"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Automático"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "Colunas"
@@ -4979,7 +4950,7 @@ msgstr "Colunas"
msgid "workspace.options.grid.grid-title"
msgstr "Grade"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Cor"
@@ -4988,15 +4959,15 @@ msgstr "Cor"
msgid "workspace.options.grid.params.columns"
msgstr "Colunas"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "Espaço"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Altura"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Margem"
@@ -5005,7 +4976,7 @@ msgstr "Margem"
msgid "workspace.options.grid.params.rows"
msgstr "Linhas"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "Definir como padrão"
@@ -5019,155 +4990,155 @@ msgstr "Tamanho"
msgid "workspace.options.grid.params.type"
msgstr "Tipo"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Abaixo"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Centro"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Esquerda"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Direita"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "Esticar"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "Topo"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "Utilizar padrão"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Largura"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Linhas"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "Quadrado"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Preenchimento de grupo"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Traço de grupo"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:326
msgid "workspace.options.guides.add-guide"
msgstr "Adicionar guia"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:187
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:188
msgid "workspace.options.guides.remove-guide"
msgstr "Remover guia"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:320
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
msgid "workspace.options.guides.title"
msgstr "Guias"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "Altura"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "Inspecionar"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "Ação"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "Após atraso"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "Animação"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "Dissolver"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "Nenhum"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "Empurrar"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "Deslizar"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "Automático"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "Adicionar sobreposição de fundo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "Fechar ao clicar no exterior"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "Fechar sobreposição"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "Fechar sobreposição: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "Atraso"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "Destino"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "Duração"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "Easing"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "Ease"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "Ease in"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "Ease in out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "Ease out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "Linear"
@@ -5176,47 +5147,47 @@ msgstr "Linear"
msgid "workspace.options.interaction-in"
msgstr "Dentro"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "Cursor entra"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "Cursor sai"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "ms"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "Navegar para"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "Navegar para: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(indefinido)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "Efeito Offset"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "No Clique"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "Abrir sobreposição"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "Abrir sobreposição: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "Abrir url"
@@ -5225,87 +5196,87 @@ msgstr "Abrir url"
msgid "workspace.options.interaction-out"
msgstr "Fora"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "Inferior centro"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "Inferior esquerdo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "Inferior direito"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "Centro"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "Manual"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "Superior centro"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "Superior esquerdo"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "Superior direito"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "Posição"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "Preservar posição do scroll"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "Ecrã anterior"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "Relativa a"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "auto"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "Alternar a sobreposição"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "Alternar a sobreposição: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "Ativador"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "Durante o hover"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "Durante a premir"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "Interações"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:735
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:736
msgid "workspace.options.interactions.add-interaction"
msgstr "Adicionar interação"
@@ -5314,67 +5285,67 @@ msgstr "Adicionar interação"
msgid "workspace.options.interactions.remove-interaction"
msgstr "Remover interação"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "Cor"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "Superexposição de cor"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "Subexposição Linear (Adicionar)"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "Escurecer"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "Diferença"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "Exclusão"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Luz direta"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Matiz"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Clarear"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "Luminosidade"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "Multiplicação"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "Normal"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "Sobrepor"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "Saturação"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Tela"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "Luz indireta"
@@ -5398,19 +5369,19 @@ msgstr "Camadas selecionadas"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "Opções avançadas"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "Altura.Máx"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "Largura.Máx"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "Altura.Min"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "Largura.Min"
@@ -5524,15 +5495,15 @@ msgstr "espaço entre"
msgid "workspace.options.layout.top"
msgstr "Topo"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "Mais cores"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "Mais bibliotecas de cor"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "Opacidade"
@@ -5541,27 +5512,27 @@ msgstr "Opacidade"
msgid "workspace.options.position"
msgstr "Posição"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "Protótipo"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "Raio"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "Inferior esquerdo"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "Inferior direito"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "Superior esquerdo"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "Superior direito"
@@ -5573,7 +5544,7 @@ msgstr "Recente"
msgid "workspace.options.retry"
msgstr "Repetir"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "Rotação"
@@ -5581,33 +5552,33 @@ msgstr "Rotação"
msgid "workspace.options.search-font"
msgstr "Pesquisar fonte"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr ""
"Selecionar a forma, prancheta ou grupo para arrastar uma conexão para outra "
"prancheta."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "Cores selecionadas"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "Preenchimento de seleção"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "Traço da seleção"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:341
msgid "workspace.options.shadow-options.add-shadow"
msgstr "Adicionar sombra"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "Desfoque"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "Cor da sombra"
@@ -5619,51 +5590,52 @@ msgstr "Sombra"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "Sombra interna"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:348
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:183, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:354
msgid "workspace.options.shadow-options.remove-shadow"
msgstr "Remover sombra"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "Difundir"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "Sombra"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "Grupo de sombras"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "Seleção de sombras"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "Mostrar na exportação"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "Mostrar no modo de visualização"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "Tamanho"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "Tamanho pré-definido"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "Traço"
@@ -5672,7 +5644,7 @@ msgstr "Traço"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "Marcador circular"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "Círculo"
@@ -5681,7 +5653,7 @@ msgstr "Círculo"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "Marcador em diamante"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "Diamante"
@@ -5690,19 +5662,19 @@ msgstr "Diamante"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "Seta de linha"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "Seta"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "Nenhum"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "Arredondado"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "Quadrado"
@@ -5711,7 +5683,7 @@ msgstr "Quadrado"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "Marcador quadrado"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "Retângulo"
@@ -5720,83 +5692,83 @@ msgstr "Retângulo"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "Seta triangular"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "Triângulo"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "Cor do traço"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "Largura do traço"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:180
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:189
msgid "workspace.options.stroke.add-stroke"
msgstr "Adicionar cor de traço"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "Centro"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "Tracejado"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "Pontilhado"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "Interior"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "Misto"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "Exterior"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:193
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:202
msgid "workspace.options.stroke.remove-stroke"
msgstr "Remover traço"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "Sólido"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "Alinhar abaixo"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "Alinhar ao meio"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "Alinhar ao topo"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "LTR"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "RTL"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "Altura automática"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "Largura automática"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "Fixo"
@@ -5818,35 +5790,35 @@ msgstr "Minúsculas"
msgid "workspace.options.text-options.none"
msgstr "Nenhum"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "Rasurado (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "Alinhar ao centro"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "Justificar"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "Alinhar à esquerda"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "Alinhar à direita"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "Texto"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "Grupo de texto"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "Texto selecionado"
@@ -5855,7 +5827,7 @@ msgstr "Texto selecionado"
msgid "workspace.options.text-options.titlecase"
msgstr "Capitalizar iniciais"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "Sublinhado (%s)"
@@ -5864,21 +5836,21 @@ msgstr "Sublinhado (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "Maiúsculas"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr ""
"Utiliza o botão de play no cabeçalho para iniciar a visualização do "
"protótipo."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "Largura"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "Eixo X"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Y"
@@ -5922,80 +5894,80 @@ msgstr "Separar nós (%s)"
msgid "workspace.path.actions.snap-nodes"
msgstr "Ajustar nós (%s)"
-#: src/app/main/ui/workspace/plugins.cljs:83
+#: src/app/main/ui/workspace/plugins.cljs:84
msgid "workspace.plugins.button-open"
msgstr "Abrir"
-#: src/app/main/ui/workspace/plugins.cljs:197
+#: src/app/main/ui/workspace/plugins.cljs:198
#, markdown
msgid "workspace.plugins.discover"
msgstr "Descobre [mais plugins](%s)"
-#: src/app/main/ui/workspace/plugins.cljs:204
+#: src/app/main/ui/workspace/plugins.cljs:205
msgid "workspace.plugins.empty-plugins"
msgstr "Sem plugins instalados"
-#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:755, src/app/main/ui/workspace/plugins.cljs:82
+#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:783, src/app/main/ui/workspace/plugins.cljs:83
msgid "workspace.plugins.error.need-editor"
msgstr "Precisas de ser um(a) editor(a) para usar este plugin"
-#: src/app/main/ui/workspace/plugins.cljs:187
+#: src/app/main/ui/workspace/plugins.cljs:188
msgid "workspace.plugins.error.url"
msgstr "O plugin não existe ou o URL está incorreto."
-#: src/app/main/ui/workspace/plugins.cljs:183
+#: src/app/main/ui/workspace/plugins.cljs:184
msgid "workspace.plugins.install"
msgstr "Instalar"
-#: src/app/main/ui/workspace/plugins.cljs:213
+#: src/app/main/ui/workspace/plugins.cljs:214
msgid "workspace.plugins.installed-plugins"
msgstr "Plugins instalados"
-#: src/app/main/ui/workspace/main_menu.cljs:710
+#: src/app/main/ui/workspace/main_menu.cljs:738
msgid "workspace.plugins.menu.plugins-manager"
msgstr "Gestor de plugins"
-#: src/app/main/ui/workspace/main_menu.cljs:906
+#: src/app/main/ui/workspace/main_menu.cljs:934
msgid "workspace.plugins.menu.title"
msgstr "Plugins"
-#: src/app/main/ui/workspace/plugins.cljs:374
+#: src/app/main/ui/workspace/plugins.cljs:375
msgid "workspace.plugins.permissions-update.title"
msgstr "ATUALIZAR ESTE PLUGIN"
-#: src/app/main/ui/workspace/plugins.cljs:271
+#: src/app/main/ui/workspace/plugins.cljs:272
msgid "workspace.plugins.permissions.comment-read"
msgstr "Ler os teus comentários e respostas."
-#: src/app/main/ui/workspace/plugins.cljs:265
+#: src/app/main/ui/workspace/plugins.cljs:266
msgid "workspace.plugins.permissions.comment-write"
msgstr "Ler e modificar os teus comentários, e enviar respostas em teu nome."
-#: src/app/main/ui/workspace/plugins.cljs:258
+#: src/app/main/ui/workspace/plugins.cljs:259
msgid "workspace.plugins.permissions.library-read"
msgstr "Ler informações sobre as tuas bibliotecas e recursos."
-#: src/app/main/ui/workspace/plugins.cljs:252
+#: src/app/main/ui/workspace/plugins.cljs:253
msgid "workspace.plugins.permissions.library-write"
msgstr "Ler e modificar as tuas bibliotecas e recursos."
-#: src/app/main/ui/workspace/plugins.cljs:318
+#: src/app/main/ui/workspace/plugins.cljs:319
msgid "workspace.plugins.permissions.title"
msgstr "O PLUGIN '%s' SOLICITA ACESSO A:"
-#: src/app/main/ui/workspace/plugins.cljs:245
+#: src/app/main/ui/workspace/plugins.cljs:246
msgid "workspace.plugins.permissions.user-read"
msgstr "Ler as informações de perfil do utilizador atual."
-#: src/app/main/ui/workspace/plugins.cljs:209
+#: src/app/main/ui/workspace/plugins.cljs:210
msgid "workspace.plugins.plugin-list-link"
msgstr "Lista de plugins"
-#: src/app/main/ui/workspace/plugins.cljs:86
+#: src/app/main/ui/workspace/plugins.cljs:87
msgid "workspace.plugins.remove-plugin"
msgstr "Remover plugin"
-#: src/app/main/ui/workspace/plugins.cljs:178
+#: src/app/main/ui/workspace/plugins.cljs:179
msgid "workspace.plugins.search-placeholder"
msgstr "Introduz um URL de plugin"
@@ -6003,19 +5975,19 @@ msgstr "Introduz um URL de plugin"
msgid "workspace.plugins.success"
msgstr "Plugin carregado com sucesso."
-#: src/app/main/ui/workspace/plugins.cljs:172
+#: src/app/main/ui/workspace/plugins.cljs:173
msgid "workspace.plugins.title"
msgstr "Plugins"
-#: src/app/main/ui/workspace/plugins.cljs:438
+#: src/app/main/ui/workspace/plugins.cljs:439
msgid "workspace.plugins.try-out.cancel"
msgstr "AGORA NÃO"
-#: src/app/main/ui/workspace/plugins.cljs:427
+#: src/app/main/ui/workspace/plugins.cljs:428
msgid "workspace.plugins.try-out.title"
msgstr "O PLUGIN '%s' FOI INSTALADO PARA O TEU UTILIZADOR!"
-#: src/app/main/ui/workspace/plugins.cljs:444
+#: src/app/main/ui/workspace/plugins.cljs:445
msgid "workspace.plugins.try-out.try"
msgstr "TESTAR PLUGIN"
@@ -6027,7 +5999,7 @@ msgstr "Adicionar layout flex"
msgid "workspace.shape.menu.add-grid"
msgstr "Adicionar layout em grelha"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1015, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1039
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1016, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1040
msgid "workspace.shape.menu.add-layout"
msgstr "Adicionar layout"
@@ -6063,7 +6035,7 @@ msgstr "Copiar propriedades"
msgid "workspace.shape.menu.copy-text"
msgstr "Copiar como texto"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "Criar nota"
@@ -6071,11 +6043,11 @@ msgstr "Criar nota"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "Seleção para a prancheta"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "Criar componente"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "Criar múltiplos componentes"
@@ -6083,7 +6055,7 @@ msgstr "Criar múltiplos componentes"
msgid "workspace.shape.menu.cut"
msgstr "Recortar"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "Eliminar"
@@ -6091,15 +6063,15 @@ msgstr "Eliminar"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "Eliminar início de fluxo"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "Desprender instância"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "Desprender instâncias"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "Diferença"
@@ -6111,11 +6083,11 @@ msgstr "Duplicar"
msgid "workspace.shape.menu.edit"
msgstr "Editar"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "Excluir"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "Achatar"
@@ -6148,19 +6120,19 @@ msgstr "Ir para ficheiro do componente principal"
msgid "workspace.shape.menu.group"
msgstr "Agrupar"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "Ocultar"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "Mostrar/Ocultar interface"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "Interseção"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "Bloquear"
@@ -6168,7 +6140,7 @@ msgstr "Bloquear"
msgid "workspace.shape.menu.mask"
msgstr "Máscara"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "Colar"
@@ -6188,7 +6160,7 @@ msgstr "Remover layout flex"
msgid "workspace.shape.menu.remove-grid"
msgstr "Remover layout em grelha"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1033
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1034
msgid "workspace.shape.menu.remove-layout"
msgstr "Remover layout"
@@ -6196,11 +6168,11 @@ msgstr "Remover layout"
msgid "workspace.shape.menu.rename"
msgstr "Renomear"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "Anular alterações"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "Restaurar componente principal"
@@ -6208,15 +6180,15 @@ msgstr "Restaurar componente principal"
msgid "workspace.shape.menu.select-layer"
msgstr "Selecionar camada"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "Mostrar"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "Mostrar recursos no painel"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "Mostrar componente principal"
@@ -6229,6 +6201,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "Definir como miniatura"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "Transformar em vector"
@@ -6236,11 +6209,11 @@ msgstr "Transformar em vector"
msgid "workspace.shape.menu.ungroup"
msgstr "Desagrupar"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "União"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "Desbloquear"
@@ -6253,7 +6226,7 @@ msgstr "Retirar máscara"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "Atualizar componentes principais"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "Atualizar componente principal"
@@ -6265,11 +6238,11 @@ msgstr "Fechar barra lateral"
msgid "workspace.sidebar.expand"
msgstr "Expandir barra lateral"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "Histórico"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "Camadas"
@@ -6309,11 +6282,11 @@ msgstr "Textos"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "Importar atributos do SVG"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "Páginas"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:248
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:249
msgid "workspace.sidebar.sitemap.add-page"
msgstr "Adicionar página"
@@ -6325,11 +6298,11 @@ msgstr "Mapa do site"
msgid "workspace.tokens.active-themes"
msgstr "%s temas ativos"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:161
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:136
msgid "workspace.tokens.applied-to"
msgstr "Aplicado a"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:338
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:337
msgid "workspace.tokens.back-to-themes"
msgstr "Voltar à lista de temas"
@@ -6341,7 +6314,7 @@ msgstr "Cor"
msgid "workspace.tokens.delete-theme-title"
msgstr "Eliminar tema"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:327
msgid "workspace.tokens.edit-theme-title"
msgstr "Editar tema"
@@ -6358,19 +6331,19 @@ msgstr "Erro: "
msgid "workspace.tokens.label.theme"
msgstr "Tema"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:221
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:220
msgid "workspace.tokens.margins"
msgstr "Margens"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:257
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:256
msgid "workspace.tokens.max-size"
msgstr "Tamanho máx."
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:251
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:250
msgid "workspace.tokens.min-size"
msgstr "Tamanho mín."
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:145
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:120
#, fuzzy
msgid "workspace.tokens.original-value"
msgstr "Valor original: %s"
@@ -6383,7 +6356,7 @@ msgstr "Raio"
msgid "workspace.tokens.save-theme"
msgstr "Guardar tema"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:245
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:244
msgid "workspace.tokens.size"
msgstr "Tamanho"
@@ -6395,28 +6368,28 @@ msgstr "Tema %s"
msgid "workspace.tokens.themes-list"
msgstr "Lista de temas"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:589, src/app/main/ui/workspace/tokens/management/create/form.cljs:590
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:608, src/app/main/ui/workspace/tokens/management/create/form.cljs:609
#, fuzzy
msgid "workspace.tokens.token-description"
msgstr "Descrição"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:539
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:83, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:109, src/app/main/ui/workspace/tokens/management/create/form.cljs:557
msgid "workspace.tokens.token-name"
msgstr "Nome"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:567
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:585
msgid "workspace.tokens.token-value"
msgstr "Valor"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:125
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:121
msgid "workspace.tokens.tools"
msgstr "Ferramentas"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:156
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:131
msgid "workspace.tokens.value-not-valid"
msgstr "O valor não é válido"
-#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "Recursos"
@@ -6424,7 +6397,7 @@ msgstr "Recursos"
msgid "workspace.toolbar.color-palette"
msgstr "Paleta de cores (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "Comentários (%s)"
@@ -6631,19 +6604,19 @@ msgstr "Operação sobre %s"
msgid "workspace.undo.title"
msgstr "Histórico"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "Ignorar"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "Mais informações"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "Existem atualizações nas bibliotecas partilhadas"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "Atualizar"
@@ -6687,11 +6660,11 @@ msgstr "A carregar..."
msgid "workspace.versions.restore-warning"
msgstr "Queres restaurar esta versão?"
-#: src/app/main/ui/workspace/sidebar.cljs:236
+#: src/app/main/ui/workspace/sidebar.cljs:237
msgid "workspace.versions.tab.actions"
msgstr "Ações"
-#: src/app/main/ui/workspace/sidebar.cljs:234
+#: src/app/main/ui/workspace/sidebar.cljs:235
msgid "workspace.versions.tab.history"
msgstr "Histórico"
diff --git a/frontend/translations/ro.po b/frontend/translations/ro.po
index af5cf435d8..598947dda0 100644
--- a/frontend/translations/ro.po
+++ b/frontend/translations/ro.po
@@ -1,16 +1,16 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-11 07:21+0000\n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
"Last-Translator: AlexTECPlayz \n"
-"Language-Team: Romanian "
-" \n"
+"Language-Team: Romanian \n"
"Language: ro\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
-"20)) ? 1 : 2;\n"
-"X-Generator: Weblate 5.13-dev\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : "
+"(n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -181,7 +181,7 @@ msgstr ""
"Sunt de acord cu [termenii și condițiile](%s) și [politica de "
"confidențialitate](%s)."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Termenii serviciului"
@@ -208,7 +208,7 @@ msgstr "... mărci, ilustrații, piese de marketing, etc."
msgid "comments.mentions.not-found"
msgstr "Nicio persoană găsită pentru @%s"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Publică"
@@ -281,7 +281,7 @@ msgstr "Distribuiți prototipuri"
msgid "common.share-link.view-all"
msgstr "Selectează Tot"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Anulați publicarea"
@@ -406,7 +406,7 @@ msgstr "Jetonul nu are dată de expirare"
msgid "dashboard.add-file"
msgstr "Adaugă filă"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Adăugați ca bibliotecă partajată"
@@ -414,31 +414,31 @@ msgstr "Adăugați ca bibliotecă partajată"
msgid "dashboard.change-email"
msgstr "Schimbă adresa de e-mail"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(copiază)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Creează o nouă echipă"
-#: src/app/main/ui/workspace/main_menu.cljs:631
+#: src/app/main/ui/workspace/main_menu.cljs:659
msgid "dashboard.create-version-menu"
msgstr "Fixați această versiune"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Contul Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Șterge echipa"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Descărcați fișierul Penpot (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Descărcați fișierul standard (.svg + .json)"
@@ -510,7 +510,7 @@ msgstr "Începe să creezi lucruri uimitoare"
msgid "dashboard.export-binary-multi"
msgstr "Descărcați %s fișiere Penpot (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Exportați table ca PDF"
@@ -526,7 +526,7 @@ msgstr "Exportați %s fișiere Penpot"
msgid "dashboard.export-multiple.selected"
msgstr "%s din %s elemente selectate"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Exportă"
@@ -731,11 +731,11 @@ msgstr "Încărcarea datelor pe server (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Încărcarea fișierului: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Invitați persoane"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Părăsește echipa"
@@ -747,7 +747,7 @@ msgstr "Biblioteci & Șabloane"
msgid "dashboard.libraries-and-templates.explore"
msgstr "Explorează mai multe dintre ele și află cum să contribui"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "A apărut o problemă la importarea șablonului. Șablonul nu a fost importat."
@@ -779,7 +779,7 @@ msgstr "Mutați la altă echipă"
msgid "dashboard.new-file"
msgstr "+ Fișier nou"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Fișer nou"
@@ -787,7 +787,7 @@ msgstr "Fișer nou"
msgid "dashboard.new-project"
msgstr "+ Proiect nou"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Proiect nou"
@@ -795,11 +795,11 @@ msgstr "Proiect nou"
msgid "dashboard.no-matches-for"
msgstr "Nu există rezultate pentru “%s“"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Proiectele fixate vor apărea aici"
-#: src/app/main/ui/dashboard/comments.cljs:90
+#: src/app/main/ui/dashboard/comments.cljs:91
msgid "dashboard.notifications"
msgstr "Notificări"
@@ -815,11 +815,11 @@ msgstr "Adresa ta de email este confirmată"
msgid "dashboard.notifications.password-saved"
msgstr "Parolă actualizată cu success!"
-#: src/app/main/ui/dashboard/comments.cljs:44
+#: src/app/main/ui/dashboard/comments.cljs:45
msgid "dashboard.notifications.view"
msgstr "Afișați notificările"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s membrii"
@@ -851,7 +851,7 @@ msgstr "Dețineți acum această echipă."
msgid "dashboard.permissions-change.viewer"
msgstr "Sunteți acum un cititor în această echipă."
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Fixați/Anulați fixarea"
@@ -876,7 +876,7 @@ msgstr "Nu mai sunteți parte din echipa \"%s\"."
msgid "dashboard.save-settings"
msgstr "Salvează setările"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Căutare…"
@@ -896,7 +896,7 @@ msgstr "Selectați o temă"
msgid "dashboard.show-all-files"
msgstr "Afișați toate fișierele"
-#: src/app/main/ui/workspace/main_menu.cljs:638
+#: src/app/main/ui/workspace/main_menu.cljs:666
msgid "dashboard.show-version-history"
msgstr "Istoric versiuni"
@@ -922,7 +922,7 @@ msgstr[2] "Fișierele dumneavoastră au fost duplicate cu succes"
msgid "dashboard.success-duplicate-project"
msgstr "Proiectul s-a duplicat cu succes"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Fișierul a fost mutat cu succes"
@@ -934,15 +934,15 @@ msgstr "Fișerele au fost mutate cu succes"
msgid "dashboard.success-move-project"
msgstr "Proiectul a fost mutat cu succes"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Informațiile echipei"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Membrii echipei"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Proiectele echipei"
@@ -958,7 +958,7 @@ msgstr "Rezultatele căutării"
msgid "dashboard.type-something"
msgstr "Scrie pentru a începe căutarea"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Anulați publicarea bibliotecii"
@@ -966,27 +966,27 @@ msgstr "Anulați publicarea bibliotecii"
msgid "dashboard.update-settings"
msgstr "Actualizare setări"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "Este activ"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "Când acest hook este declanșat, se vor furniza detalii despre eveniment"
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "Tip de conținut"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "Creați webhook"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "Webhook creat cu succes."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"Webhook-urile sunt o modalitate simplă de a permite altor site-uri web și "
@@ -994,11 +994,11 @@ msgstr ""
"Penpot. Vom trimite o solicitare POST la fiecare dintre adresele URL pe "
"care le furnizați."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "Apăsați butonul \"Adăugați webhook\" pentru a adăuga unul."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "Niciun webhook creat până acum."
@@ -1018,7 +1018,7 @@ msgstr "Email"
msgid "dashboard.your-name"
msgstr "Numele tău"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Contul Penpot"
@@ -1034,11 +1034,11 @@ msgstr "Atenţie"
msgid "ds.component-subtitle"
msgstr "Componente de actualizat:"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Anulează"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Ok"
@@ -1082,11 +1082,11 @@ msgstr "Adresa de email este deja validată."
msgid "errors.email-as-password"
msgstr "Nu vă puteți folosi e-mailul ca parolă"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "Adresa de email «%s» are multe rapoarte permanente de respingere."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "E-mailul «%s» a fost raportat ca spam sau respins permanent."
@@ -1100,7 +1100,7 @@ msgstr ""
msgid "errors.feature-not-supported"
msgstr "Funcția \"%s\" nu este acceptată."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "S-a întâmplat ceva în neregulă."
@@ -1133,7 +1133,7 @@ msgstr "Această invitație poate fi anulată sau expirată."
msgid "errors.ldap-disabled"
msgstr "Autentificarea cu LDAP este dezactivată."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "Ați ajuns la cota \"%s\". Luați legătura cu serviciul de asistență."
@@ -1149,7 +1149,7 @@ msgstr "Se pare că conținutul imaginii nu se potrivește cu extensia de fișie
msgid "errors.media-type-not-allowed"
msgstr "Se pare că aceasta nu este o imagine validă."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"Profilul pe care încercați să îl invitați este dezactivat (din cauza spam "
@@ -1169,7 +1169,7 @@ msgstr "Parola trebuie să conțină cel puțin 8 caractere"
msgid "errors.profile-blocked"
msgstr "Profilul este blocat"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr ""
"Profilul tău conține adrese de email dezactivate (rapoarte spam sau "
@@ -1179,17 +1179,17 @@ msgstr ""
msgid "errors.registration-disabled"
msgstr "Înregistrarea este dezactivată în prezent."
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr ""
"Nu există suficienți membri pentru a părăsi echipa, probabil că doriți să o "
"ștergeți."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "Membrul pe care încercați să-l atribuiți nu există."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr ""
"Proprietarul nu poate părăsi echipa, trebuie să reatribuiți rolul de "
@@ -1203,31 +1203,31 @@ msgstr "A apărut o eroare neașteptată."
msgid "errors.unexpected-token"
msgstr "Cod necunoscut"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "Eroare de conexiune, URL-ul nu poate fi accesat"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "URL-ul nu a trecut validarea."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "Ultima livrare nu a avut succes."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "Eroare la validarea SSL."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "Timeout"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "Eroare neașteptată la validare"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "Stare neașteptată %s"
@@ -1291,19 +1291,19 @@ msgstr "Am întâmpinat o eroare"
msgid "inspect.attributes.blur"
msgstr "Estompare"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Valoare"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1311,7 +1311,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Umple"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Descarcă imaginea sursă"
@@ -1405,77 +1405,80 @@ msgstr "Solid"
msgid "inspect.attributes.stroke.width"
msgstr "Lățime"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Tipografie"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Familie de Fonturi"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Dimensiune Font"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Stil Font"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "Greutate Font"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Spațiere"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Înălțimea rândului"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Decorare Text"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Niciunul"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Subliniat"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Transformare Text"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "Majuscule Titlu"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "Minuscule"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Niciunul"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "Majuscule"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr ""
"Dacă doriți să aflați mai multe despre inspectorul de design, vizitați "
"centrul de ajutor Penpot"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "Mai multe informații despre inspector"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr ""
"Selectați o formă, o placă sau un grup pentru a le inspecta proprietățile "
@@ -1537,7 +1540,7 @@ msgstr "Text"
msgid "inspect.tabs.info"
msgstr "Info"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Comenzi rapide"
@@ -1549,7 +1552,7 @@ msgstr "Acceptă"
msgid "labels.access-tokens"
msgstr "Jetoane acces"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "Activ"
@@ -1557,7 +1560,7 @@ msgstr "Activ"
msgid "labels.add-custom-font"
msgstr "Adăugați font personalizat"
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Administrator"
@@ -1565,7 +1568,7 @@ msgstr "Administrator"
msgid "labels.adobe-xd"
msgstr "Adobe XD"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Toate"
@@ -1586,7 +1589,7 @@ msgstr "Momentan serverele noastre sunt în mentenanță. Revino în scurt timp.
msgid "labels.bad-gateway.main-message"
msgstr "Eroare de Server"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Anulează"
@@ -1594,15 +1597,15 @@ msgstr "Anulează"
msgid "labels.canva"
msgstr "Canva"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Închide"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Comentarii"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Comunitate"
@@ -1610,7 +1613,7 @@ msgstr "Comunitate"
msgid "labels.confirm-password"
msgstr "Confirmă parola"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Continuă"
@@ -1622,11 +1625,11 @@ msgstr "Continuă cu"
msgid "labels.continue-with-penpot"
msgstr "Poți continua cu un cont Penpot"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "Copiați link-ul"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Creează"
@@ -1646,7 +1649,7 @@ msgstr "Fonturi personalizate"
msgid "labels.dashboard"
msgstr "Administrare"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Șterge"
@@ -1658,7 +1661,7 @@ msgstr "Șterge comentariu"
msgid "labels.delete-comment-thread"
msgstr "Șterge discuție"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Șterge invitație"
@@ -1666,15 +1669,15 @@ msgstr "Șterge invitație"
msgid "labels.delete-multi-files"
msgstr "Șterge %s fișiere"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "Anulați"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Drafturi"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Editează"
@@ -1682,15 +1685,15 @@ msgstr "Editează"
msgid "labels.edit-file"
msgstr "Editează fișier"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Editor"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Expirat"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Exportă"
@@ -1718,7 +1721,7 @@ msgstr "Provideri de Fonturi"
msgid "labels.font-variants"
msgstr "Stiluri"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Fonturi"
@@ -1727,11 +1730,11 @@ msgstr "Fonturi"
msgid "labels.freelancer"
msgstr "Sunt un freelancer"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "Repozitoriu Github"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Lasă un feedback"
@@ -1739,15 +1742,15 @@ msgstr "Lasă un feedback"
msgid "labels.go-back"
msgstr "Întoarce-te"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Centru Ajutor"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Ascunde comentariile rezolvate"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "Inactiv"
@@ -1769,7 +1772,7 @@ msgstr "Eroare internă"
msgid "labels.invision"
msgstr "InVision"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Invitații"
@@ -1777,7 +1780,7 @@ msgstr "Invitații"
msgid "labels.language"
msgstr "Limbă"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Biblioteci & Șabloane"
@@ -1785,15 +1788,15 @@ msgstr "Biblioteci & Șabloane"
msgid "labels.log-or-sign"
msgstr "Conectați-vă sau înregistrați-vă"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Deconectare"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Membru"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Membri"
@@ -1801,15 +1804,15 @@ msgstr "Membri"
msgid "labels.new-password"
msgstr "Parolă nouă"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "Următor"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "Sunteți la zi! Notificările de comentarii noi vor apărea aici."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "Nu există invitații în așteptare."
@@ -1822,7 +1825,7 @@ msgstr "Această pagină nu există sau nu ai permisiunea să o accesezi."
msgid "labels.not-found.main-message"
msgstr "Opa!"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "1 fişier"
@@ -1836,7 +1839,7 @@ msgstr[0] "1 planșă"
msgstr[1] "%s planșe"
msgstr[2] "%s de planșe"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "1 proiecte"
@@ -1860,7 +1863,7 @@ msgstr "sau"
msgid "labels.other"
msgstr "Alta (specificați)"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Autor"
@@ -1868,7 +1871,7 @@ msgstr "Autor"
msgid "labels.password"
msgstr "Parola"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "În curs"
@@ -1880,11 +1883,11 @@ msgstr "Anterior"
msgid "labels.profile"
msgstr "Profil"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Proiecte"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Mențiuni"
@@ -1898,11 +1901,11 @@ msgstr "Reîncărcați fișierul"
msgid "labels.remove"
msgstr "Elimină"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Eliminați membru"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Redenumire"
@@ -1910,7 +1913,7 @@ msgstr "Redenumire"
msgid "labels.rename-team"
msgstr "Modifică numele echipei"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "Retrimite invitația"
@@ -1918,11 +1921,11 @@ msgstr "Retrimite invitația"
msgid "labels.retry"
msgstr "Încearcă din nou"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Rol"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Salvează"
@@ -1950,7 +1953,7 @@ msgstr "Momentan suntem în mentenanță."
msgid "labels.service-unavailable.main-message"
msgstr "Serviciul nu este disponibil"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Setări"
@@ -1958,11 +1961,11 @@ msgstr "Setări"
msgid "labels.share-prototype"
msgstr "Distribuie link"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Biblioteci distribuite"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Afișează toate comentariile"
@@ -1970,7 +1973,7 @@ msgstr "Afișează toate comentariile"
msgid "labels.show-comments-list"
msgstr "Arată lista de comentarii"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Afișează doar comentariile mele"
@@ -1982,7 +1985,7 @@ msgstr "Sketch"
msgid "labels.start"
msgstr "Începeți"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Stare"
@@ -1990,7 +1993,7 @@ msgstr "Stare"
msgid "labels.student-teacher"
msgstr "Student sau profesor"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Tutoriale"
@@ -2018,15 +2021,15 @@ msgstr "Încarcă fonturi personalizate"
msgid "labels.uploading"
msgstr "Se încarcă…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "NUMAI VIZUALIZARE"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Vizitator"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Webhook-uri"
@@ -2034,11 +2037,11 @@ msgstr "Webhook-uri"
msgid "labels.write-new-comment"
msgstr "Scrie un comentariu"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(tu)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "Contul tău"
@@ -2115,19 +2118,19 @@ msgstr "Creați jeton"
msgid "modals.create-access-token.title"
msgstr "Generați jeton acces"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "Creați webhook"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "Creați webhook"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "URL a încărcăturii"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://example.com/postreceive"
@@ -2173,11 +2176,11 @@ msgstr ""
msgid "modals.delete-comment-thread.title"
msgstr "Șterge conversație"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "Sunteți sigur că doriți să ștergeți această notă?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "Ștergeți notă"
@@ -2225,11 +2228,11 @@ msgstr ""
msgid "modals.delete-font.title"
msgstr "Ștergere font"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Ești sigur că dorești să ștergi această pagină?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Șterge pagină"
@@ -2280,29 +2283,29 @@ msgstr[0] "Se șterge fișierul"
msgstr[1] "Se șterg fișierele"
msgstr[2] "Se șterg fișierele"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Șterge echipă"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Ești sigur că dorești să ștergi această echipă? Toate proiectele și "
"fișierele asociate acesteia vor fi permanent șterse."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Ștergere echipă în curs"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Elimină membru"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Ești sigur că dorești să elimini acest membru din echipă?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Elimină un membru al echipei"
@@ -2319,51 +2322,51 @@ msgstr[2] ""
"Obiectele care au fost folosite deja în aceste fișiere vor rămâne acolo "
"(niciun design nu va fi stricat)."
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "Ștergeți webhook"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "Sunteți sigur că doriți să ștergeți acest webhook?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "Ștergerea webhook-ului"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "Editați webhook"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "Editați webhook"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Trimite invitație"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "E-mailuri, separate prin virgulă"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr ""
"Unele e-mailuri provin de la membri actuali ai echipei. Invitațiile lor nu "
"vor fi trimise."
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "Invitați membri în echipă"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"Deoarece ești singurul membru al acestei echipe, echipa va fi ștearsă "
"împreună cu proiectele și fișierele sale."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "Sigur doriți să părăsiți echipa %s?"
@@ -2389,49 +2392,49 @@ msgstr "Selectează un membru pentru promovare"
msgid "modals.leave-and-reassign.title"
msgstr "Selectează un membru pentru promovare"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Părăsește echipa"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Ești sigur că dorești să părăsești această echipă?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Părăsire echipă în curs"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "Suma înghiontului"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Promovează"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"Dacă transferați dreptul de proprietate, vă veți schimba rolul în "
"Administrator, pierzând unele permisiuni asupra acestei echipe. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr "Ești sigur că dorești să promovezi acest utilizator ca deținător al echipei?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Confirmare promovare"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "Publicați"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "Librăria dvs. este goală. Sunteți sigur că doriți să o publicați?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "Publicați librărie goală"
@@ -2489,21 +2492,21 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Actualizează componentele într-o bibliotecă partajată"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Actualizare componentă"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Anulează"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"Actualizezi o componentă dintr-o colecţie distribuită. Pot fi afectate alte "
"fişiere ce o folosesc."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Actualizaţi o componentă dintr-o colecţie distribuită"
@@ -2511,11 +2514,11 @@ msgstr "Actualizaţi o componentă dintr-o colecţie distribuită"
msgid "notifications.by-code.upgrade-version"
msgstr "O versiune nouă este valabilă, vă rugăm să reîncărcați pagina"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "Invitaţie trimisă cu succes"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "Link de invitație copiat"
@@ -2637,7 +2640,7 @@ msgstr ""
"Nu uitați să includeți pe toată lumea. Dezvoltatori, designeri, manageri... "
"diversitatea se adaugă :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "Invitați cu rolul:"
@@ -2729,621 +2732,605 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "Mergi la autentificare"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "Detașați"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "Multiple"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Bazele"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "Bord"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Vizualizator"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Spațiu de lucru"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Aliniere"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Editează"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "Generic"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "Generic"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Meniul principal"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "Modifică straturi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Navigație"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Navigație"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Navigație"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Panouri"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Drumuri"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Forme"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "Texte"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Unelte"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Comentarii"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "Adaugă nod"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "Aliniați jos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "Aliniere la centru"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "Aliniați centrul orizontal"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "Aliniere justificată"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "Aliniați stânga"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "Aliniați dreapta"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "Aliniați sus"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "Aliniați centrul vertical"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "Creează tablă din selecție"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "Comutare bold"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "Diferența booleană"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "Exclude boolean"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "Intersecție boolean"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "Uniune boolean"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "Trimite la spate"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Trimite în spate"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "Aduce în față"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "Aduce în față"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "Ștergeți anularea"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Copiază"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "Creează nou"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Taie"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "Micșorează"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Șterge"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "Șterge nod"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "Detașează component"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Curbă"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "Elipsă"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Tablă"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "Trasează drum"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Drum"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Dreptunghi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Text"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Duplică"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "Anulează"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "Exportați formele"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "Măriți pentru a încăpea tot"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "Întoarceți pe orizontală"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "Întoarceți pe verticală"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "Reducere dimensiune font"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "Creștere dimensiune font"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "Accesați schițele"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "Accesați bibliotecile partajate"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Căutați"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Grup"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "Distribuiți pe orizontală"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "Arată/ascunde interfața"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "Măriți"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "Inserați imagine"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "Comutare cursiv"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "Uniți noduri"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
-msgid "shortcuts.letter-spacing-dec"
-msgstr "Reducere spațiere litere"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "Creștere spațiere litere"
-
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
-msgid "shortcuts.line-height-dec"
-msgstr "Reducere înălțime linie"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
-msgid "shortcuts.line-height-inc"
-msgstr "Creștere înălțime linie"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.line-through"
msgstr "Comutare tăiere"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "Faceți colț"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "Faceți o curbă"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "Mască"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "Îmbinați nodurile"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "Mutați"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "Mutați jos rapid"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "Mutați în stânga rapid"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "Mutați în dreapta rapid"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "Mutați sus rapid"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "Mutați noduri"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "Mutați jos"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "Mutați în stânga"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "Mutați în dreapta"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "Mutați sus"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "Următoarea tablă"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "Nu s-au găsit comenzi rapide"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "Setați opacitatea la 100%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "Setați opacitatea la 10%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "Setați opacitatea la 20%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "Setați opacitatea la 30%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "Setați opacitatea la 40%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "Setați opacitatea la 50%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "Setați opacitatea la 60%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "Setați opacitatea la 70%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "Setați opacitatea la 80%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "Setați opacitatea la 90%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "Selector de culoare"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "Accesați secțiunea de comentarii ale spectatorului"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "Accesați tabloul de bord"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "Mergeți la secțiunea de inspecție a vizualizatorului"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "Accesați secțiunea de interacțiuni ale spectatorului"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "Accesați secțiunea de interacțiuni ale spectatorului"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "Accesați spațiul de lucru"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " sau "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Lipește"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "Tabla anterioară"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "Refaceți"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "Resetați zoomul"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "Căutați comenzi rapide"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "Selectează tot"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
msgid "shortcuts.select-next"
msgstr "Selectare strat următor"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
msgid "shortcuts.select-parent-layer"
msgstr "Selectați strat părinte"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
msgid "shortcuts.select-prev"
msgstr "Selectare strat anterior"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "Noduri separate"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "Afișați/ascundeți grila de pixeli"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "Afișați/ascundeți comenzile rapide"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "Fixare la noduri"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "Fixare la grila de pixeli"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "Începeți editarea"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "Începeți măsurarea"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "Opriți măsurarea"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "Setați miniaturile"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "Comenzi rapide de la tastatură"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "Comutați alinierea dinamică"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "Comutați obiectele"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "Comutați paleta de culori"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "Comutați modul de focus"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "Comutați la ecran complet"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "Comutați istoricul"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "Comutați straturile"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "Adăugare/eliminare aspect flexibil"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "Blocați selecția"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "Blocați proporțiile"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "Comutați paleta de text"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "Comutați vizibilitatea"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "Comutați stilul zoomului"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "Comutare subliniere"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Anulați"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Degrupați"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Demascați"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "Distribuiți vertical"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "Reducere obiectiv de zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "Creștere obiectiv de zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "Mărește la selecție"
@@ -3395,19 +3382,19 @@ msgstr "Parolă - Penpot"
msgid "title.settings.profile"
msgstr "Profil - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "Invitații -%s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "Membri - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Setări - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "Webhooks - %s - Penpot"
@@ -3479,39 +3466,39 @@ msgstr "Afişează interacţiunile la click"
msgid "viewer.header.sitemap"
msgstr "Harta site-ului"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "Ultima livrare a fost cu succes."
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Aliniază orizontal (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "Introdu spaţierea orizontală (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Aliniază la stânga (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Aliniază la dreapta (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Aliniază jos (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Aliniază vertical (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "Introdu spaţierea pe verticală (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Aliniază sus (%s)"
@@ -3520,31 +3507,31 @@ msgstr "Aliniază sus (%s)"
msgid "workspace.assets.assets"
msgstr "Obiecte"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "Toate obiectele"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Culori"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Componente"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "Creează grup"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr "Obiectele vor fi numite automat ca \"nume grup / nume obiect\""
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Şterge"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "Duplică"
@@ -3552,7 +3539,7 @@ msgstr "Duplică"
msgid "workspace.assets.duplicate-main"
msgstr "Duplicare principală"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Editează"
@@ -3561,15 +3548,15 @@ msgstr "Editează"
msgid "workspace.assets.graphics"
msgstr "Obiecte grafice"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Grup"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "Nume grup"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "biblioteca locală"
@@ -3581,15 +3568,15 @@ msgstr "Nu au fost găsite obiecte"
msgid "workspace.assets.open-library"
msgstr "Deschideți fișier librărie"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Redenumeşte"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "Redenumiți grupul"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "Caută obiecte"
@@ -3606,7 +3593,7 @@ msgstr[2] "%s obiecte selectate"
msgid "workspace.assets.shared-library"
msgstr "Librărie partajată"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Tipografii"
@@ -3631,7 +3618,7 @@ msgstr "Spaţiere Litere"
msgid "workspace.assets.typography.line-height"
msgstr "Înălţime linie"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -3643,7 +3630,7 @@ msgstr "Stiluri de text"
msgid "workspace.assets.typography.text-transform"
msgstr "Transformare Text"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "Degrupați"
@@ -3651,7 +3638,7 @@ msgstr "Degrupați"
msgid "workspace.focus.focus-mode"
msgstr "Mod focus"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "Focus oprit"
@@ -3671,11 +3658,11 @@ msgstr "Gradient liniar"
msgid "workspace.gradients.radial"
msgstr "Gradient radial"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "Dezactivează alinierea dinamică"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "Dezactivare scară proporțională"
@@ -3684,19 +3671,19 @@ msgstr "Dezactivare scară proporțională"
msgid "workspace.header.menu.disable-scale-text"
msgstr "Dezactivează dimensionarea textului"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "Dezactivați fixarea la ghiduri"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "Dezactivați fixarea la pixel"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "Aliniere dinamică"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "Activare scară proporțională"
@@ -3705,87 +3692,87 @@ msgstr "Activare scară proporțională"
msgid "workspace.header.menu.enable-scale-text"
msgstr "Activează scalarea textului"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "Fixare la ghiduri"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "Activați fixarea la pixel"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "Ascundeți numele tablelor"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "Ascunde paleta de culori"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "Ascundeți grila de pixeli"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "Ascunde ghidul liniar"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "Ascundeți paleta de fonturi"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Editați"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "Fișier"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "Ajutor & info"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "Preferințe"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "Vezi"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "Refacere"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "Selectează tot"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "Afișați numele tablelor"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "Afişează paleta de culori"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "Afișați grila de pixeli"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Afişează Liniarul"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "Afișați paleta de fonturi"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "Anulare"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Resetați"
@@ -3806,11 +3793,11 @@ msgstr "Salvare în curs"
msgid "workspace.header.unsaved"
msgstr "Modificări nesalvate"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "Vizualizare (%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "Zoom"
@@ -3822,7 +3809,7 @@ msgstr "Umplere - Scalare pentru a umple"
msgid "workspace.header.zoom-fit"
msgstr "Potrivire - Scalare în jos a se potrivi"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "Zoom pentru a potrivi tot"
@@ -3830,7 +3817,7 @@ msgstr "Zoom pentru a potrivi tot"
msgid "workspace.header.zoom-full-screen"
msgstr "Ecran complet"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "Zoom la selecție"
@@ -3843,10 +3830,6 @@ msgstr "Editare grilă"
msgid "workspace.libraries.add"
msgstr "Adaugă"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s culori"
-
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
msgstr "Nu există stiluri de culori în librăria dvs. încă"
@@ -3873,31 +3856,23 @@ msgstr "Culori recente"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "RGB Complementar"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Salvează stilul culorii"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s componente"
-
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Bibliotecă de fișiere"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s obiecte grafice"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "BIBLIOTECILE FIŞIERULUI"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "BIBLIOTECI"
@@ -3906,63 +3881,59 @@ msgstr "BIBLIOTECI"
msgid "workspace.libraries.library"
msgstr "BIBLIOTECĂ"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "ACTUALIZĂRI LIBRĂRII"
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "Nu există Biblioteci Distribuite ce necesită update"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "Nu au fost găsite asemănări pentru “%s“"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "Caută în bibliotecile distribuite"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "BIBLIOTECI DISTRIBUITE"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Tipografii multiple"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Deconectează toate tipografiile"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s tipografii"
-
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Actualizați"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "vedeți toate schimbările"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "ACTUALIZĂRI"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "Faceți clic pe butonul + pentru a adăuga interacțiuni."
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Estompare"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "Blur pe grup"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "Selecţie de blur"
@@ -3970,31 +3941,31 @@ msgstr "Selecţie de blur"
msgid "workspace.options.canvas-background"
msgstr "Fundal canvas"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "Conținutul clipului"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Componentă"
-#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:193
+#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:196
msgid "workspace.options.component.annotation"
msgstr "Notă"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "Copiați"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:185
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:188
msgid "workspace.options.component.create-annotation"
msgstr "Creați o notă"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "Editați o notă"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "Principal"
@@ -4038,7 +4009,7 @@ msgstr "Sus"
msgid "workspace.options.constraints.topbottom"
msgstr "Sus & Jos"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Design"
@@ -4051,14 +4022,14 @@ msgstr "Exportă"
msgid "workspace.options.export-multiple"
msgstr "Exportați selecția"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "Exportați 1 element"
msgstr[1] "Exportați %s elemente"
msgstr[2] "Exportați %s elemente"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Sufix"
@@ -4066,7 +4037,7 @@ msgstr "Sufix"
msgid "workspace.options.exporting-complete"
msgstr "Export finalizat"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "Se exportă…"
@@ -4078,11 +4049,11 @@ msgstr "Export eșuat"
msgid "workspace.options.exporting-object-slow"
msgstr "Export neașteptat de lent"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Umple"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "Adăugați început flux"
@@ -4091,15 +4062,15 @@ msgstr "Adăugați început flux"
msgid "workspace.options.flows.flow-start"
msgstr "Pornirea fluxului"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "Fluxul începe"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Auto"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "Coloane"
@@ -4108,7 +4079,7 @@ msgstr "Coloane"
msgid "workspace.options.grid.grid-title"
msgstr "Grilă"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Culoare"
@@ -4117,15 +4088,15 @@ msgstr "Culoare"
msgid "workspace.options.grid.params.columns"
msgstr "Coloane"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "Spaţiere"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Înălţime"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Margine"
@@ -4134,7 +4105,7 @@ msgstr "Margine"
msgid "workspace.options.grid.params.rows"
msgstr "Rânduri"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "Setează ca predefinit"
@@ -4148,143 +4119,143 @@ msgstr "Mărime"
msgid "workspace.options.grid.params.type"
msgstr "Tip"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Jos"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Centru"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Stânga"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Dreapta"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "Întinde"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "Sus"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "Foloseşte default"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Lăţime"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Rânduri"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "Pătrat"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Umplere grup"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Conturare grup"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "Înălțime"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "Inspectați"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "Acțiune"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "După întârziere"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "Animație"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "Dizolvare"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "Nimic"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "Împinge"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "Alunecă"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "auto"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "Adăugați suprapunere de fundal"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "Închideți atunci când faceți clic în exterior"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "Închideți suprapunerea"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "Închideți suprapunerea: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "Întârziere"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "Destinație"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "Durată"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "Easing"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "Ease"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "Ease in"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "Ease in out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "Ease out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "Liniar"
@@ -4293,47 +4264,47 @@ msgstr "Liniar"
msgid "workspace.options.interaction-in"
msgstr "În"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "Intrarea mouse-ului"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "Plecarea mouse-ului"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "ms"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "Navigați la"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "Navigați la: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(nedefinit)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "Efect de offset"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "La clic"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "Deschideți suprapunerea"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "Deschideți suprapunerea: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "Deschideți adresa URL"
@@ -4342,147 +4313,147 @@ msgstr "Deschideți adresa URL"
msgid "workspace.options.interaction-out"
msgstr "Afară"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "Centru jos"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "Stânga jos"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "Dreapta jos"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "Centru"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "Manual"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "Centru sus"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "Stânga sus"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "Dreapta sus"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "Poziție"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "Păstrați poziția derulării"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "Ecranul anterior"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "Relativ la"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "sine"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "Comutare suprapunere"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "Comutați suprapunerea: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "Declanșator"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "În timp ce plutește"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "În timp ce este apăsat"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "Interacțiuni"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "Culoare"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "Arderea culorii"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "Evitare culoare"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "Întunecat"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "Diferență"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "Excludere"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Lumină Puternică"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Nuanță"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Luminat"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "Luminozitate"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "Multiplică"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "Normal"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "Strat"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "Saturaţie"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Screen"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "Lumină slabă"
@@ -4506,19 +4477,19 @@ msgstr "Layere selectate"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "Opțiuni avansate"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "Înălțime maximă"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "Lățime maximă"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "Înălțime minimă"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "Lățime minimă"
@@ -4632,15 +4603,15 @@ msgstr "spațiu între"
msgid "workspace.options.layout.top"
msgstr "Sus"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "Mai multe culori"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "Mai multe culori de bibliotecă"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "Opacitate"
@@ -4649,27 +4620,27 @@ msgstr "Opacitate"
msgid "workspace.options.position"
msgstr "Poziţie"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "Prototip"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "Rază"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "Stânga jos"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "Dreapta jos"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "Stânga sus"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "Dreapta sus"
@@ -4681,7 +4652,7 @@ msgstr "Recente"
msgid "workspace.options.retry"
msgstr "Reîncercați"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "Rotaţie"
@@ -4689,27 +4660,27 @@ msgstr "Rotaţie"
msgid "workspace.options.search-font"
msgstr "Căutați font"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr "Selectează o formă, o planşă sau grupează pentru a conecta o altă planşă."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "Culori selectate"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "Umplere selecție"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "Contur selecție"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "Estompare"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "Culoare umbră"
@@ -4721,47 +4692,48 @@ msgstr "Umbră proiectată"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "Umbră interioară"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "Accentuare"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "Umbră"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "Umbră grup"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "Umbre de selecție"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "Afișați în exporturi"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "Afișare în modul de vizualizare"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "Mărime"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "Dimensiuni presetate"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "Contur"
@@ -4770,7 +4742,7 @@ msgstr "Contur"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "Marcator cerc"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "Cerc"
@@ -4779,7 +4751,7 @@ msgstr "Cerc"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "Marcator diamant"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "Diamant"
@@ -4788,19 +4760,19 @@ msgstr "Diamant"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "Săgeată linie"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "Săgeată"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "Nimic"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "Rotund"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "Pătrat"
@@ -4809,7 +4781,7 @@ msgstr "Pătrat"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "Marcator pătrat"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "Dreptunghi"
@@ -4818,75 +4790,75 @@ msgstr "Dreptunghi"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "Săgeată triunghi"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "Triunghi"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "Culoare contur"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "Lățimea conturului"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "Centru"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "Întrerupt"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "Punctat"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "Interior"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "Mixed"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "Exterior"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "Solid"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "Aliniază jos"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "Aliniază la mijloc"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "Aliniază sus"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "LTR"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "RTL"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "Înălţime auto"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "Lăţime auto"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "Fix"
@@ -4908,35 +4880,35 @@ msgstr "Minuscule"
msgid "workspace.options.text-options.none"
msgstr "Nici unul"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "Barat (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "Aliniază centru"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "Justifică"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "Aliniază la stânga"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "Aliniază la dreapta"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "Text"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "Grupează text"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "Selecţie text"
@@ -4945,7 +4917,7 @@ msgstr "Selecţie text"
msgid "workspace.options.text-options.titlecase"
msgstr "Majuscule titlu"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "Subliniază (%s)"
@@ -4954,19 +4926,19 @@ msgstr "Subliniază (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "Majuscule"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr "Foloseşte butonul play din header pentru a porni vizualizarea prototip."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "Lăţime"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "Axa X"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Axa Y"
@@ -5030,7 +5002,7 @@ msgstr "Trimite în urmă"
msgid "workspace.shape.menu.copy"
msgstr "Copiază"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "Creați notă"
@@ -5038,11 +5010,11 @@ msgstr "Creați notă"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "Selecție la planșă"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "Creează componentă"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "Creați componente multiple"
@@ -5050,7 +5022,7 @@ msgstr "Creați componente multiple"
msgid "workspace.shape.menu.cut"
msgstr "Taie"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "Şterge"
@@ -5058,15 +5030,15 @@ msgstr "Şterge"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "Ștergeți începutul fluxului"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "Detaşează instanţă"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "Detașați instanțele"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "Diferență"
@@ -5078,11 +5050,11 @@ msgstr "Duplică"
msgid "workspace.shape.menu.edit"
msgstr "Editează"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "Excludeți"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "Aplatizați"
@@ -5115,19 +5087,19 @@ msgstr "Mergi la componenta principală"
msgid "workspace.shape.menu.group"
msgstr "Grupează"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "Ascunde"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "Afișați/ Ascundeți UI"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "Intersecție"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "Blochează"
@@ -5135,7 +5107,7 @@ msgstr "Blochează"
msgid "workspace.shape.menu.mask"
msgstr "Maschează"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "Lipeşte"
@@ -5147,11 +5119,11 @@ msgstr "Drum"
msgid "workspace.shape.menu.remove-flex"
msgstr "Îndepărtați aspect flexibil"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "Resetează suprascrierile"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "Restaurați componenta principală"
@@ -5159,15 +5131,15 @@ msgstr "Restaurați componenta principală"
msgid "workspace.shape.menu.select-layer"
msgstr "Selectați stratul"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "Afişează"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "Afișați în panoul de obiecte"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "Afişează componenta principală"
@@ -5180,6 +5152,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "Setați ca miniatură"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "Transformați în drum"
@@ -5187,11 +5160,11 @@ msgstr "Transformați în drum"
msgid "workspace.shape.menu.ungroup"
msgstr "Degrupează"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "Uniune"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "Deblochează"
@@ -5204,7 +5177,7 @@ msgstr "Demaschează"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "Actualizați componentele principale"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "Actualizaţi principala componentă"
@@ -5216,11 +5189,11 @@ msgstr "Restrângeți bara laterală"
msgid "workspace.sidebar.expand"
msgstr "Extindeți bara laterală"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "Istoric"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "Layere"
@@ -5260,7 +5233,7 @@ msgstr "Texte"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "Atribute SVG importate"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "Pagini"
@@ -5268,7 +5241,7 @@ msgstr "Pagini"
msgid "workspace.sitemap"
msgstr "Harta site-ului"
-#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "Obiecte"
@@ -5276,7 +5249,7 @@ msgstr "Obiecte"
msgid "workspace.toolbar.color-palette"
msgstr "Paletă de culori (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "Comentarii (%s)"
@@ -5466,19 +5439,19 @@ msgstr "Operaţiune terminată %s"
msgid "workspace.undo.title"
msgstr "Istoric"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "Renunţă"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "Mai multe informații"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "Există actualizări în bibliotecile distribuite"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "Actualizează"
diff --git a/frontend/translations/ru.po b/frontend/translations/ru.po
index 90025284f4..c0efd016ce 100644
--- a/frontend/translations/ru.po
+++ b/frontend/translations/ru.po
@@ -1,15 +1,15 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-11 07:21+0000\n"
-"Last-Translator: The_BadUser \n"
-"Language-Team: Russian "
-" \n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
+"Last-Translator: Vint Prox \n"
+"Language-Team: Russian \n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Weblate 5.13-dev\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -179,7 +179,7 @@ msgstr ""
"Я согласен с [условиями обслуживания](%s) и [политикой "
"конфиденциальности](%s)."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Условия использования"
@@ -202,7 +202,7 @@ msgstr "Рабочая эл. почта"
msgid "branding-illustrations-marketing-pieces"
msgstr "...брендинг, иллюстрации, маркетинговые материалы и т.д."
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Опубликовать"
@@ -274,7 +274,7 @@ msgstr "Поделиться прототипами"
msgid "common.share-link.view-all"
msgstr "Выбрать все"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Снять с публикации"
@@ -397,7 +397,7 @@ msgstr "Токен не имеет срока действия"
msgid "dashboard.add-file"
msgstr "Добавить файл"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Добавить как общую библиотеку"
@@ -405,31 +405,31 @@ msgstr "Добавить как общую библиотеку"
msgid "dashboard.change-email"
msgstr "Изменить эл. почту"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(копия)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Создать новую команду"
-#: src/app/main/ui/workspace/main_menu.cljs:631
+#: src/app/main/ui/workspace/main_menu.cljs:659
msgid "dashboard.create-version-menu"
msgstr "Закрепить эту версию"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Ваш Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Удалить команду"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Скачать файл Penpot (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Скачать стандартный файл (.svg + .json)"
@@ -485,7 +485,7 @@ msgstr "Библиотек пока нет."
msgid "dashboard.export-binary-multi"
msgstr "Скачать файлы Penpot (.penpot) (%s)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Экспорт кадров в PDF"
@@ -501,7 +501,7 @@ msgstr "Экспорт файлов Penpot (%s)"
msgid "dashboard.export-multiple.selected"
msgstr "Выбрано %s из %s элементов"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Экспорт"
@@ -684,11 +684,11 @@ msgstr "Загрузка данных на сервер (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Загрузка файла: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Пригласить людей"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Покинуть команду"
@@ -700,7 +700,7 @@ msgstr "Библиотеки и шаблоны"
msgid "dashboard.libraries-and-templates.explore"
msgstr "Узнайте больше о них и о том, как внести свой вклад"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "Возникла проблема с импортом шаблона. Шаблон не был импортирован."
@@ -732,7 +732,7 @@ msgstr "Перевести в другую команду"
msgid "dashboard.new-file"
msgstr "+ Новый файл"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Новый файл"
@@ -740,7 +740,7 @@ msgstr "Новый файл"
msgid "dashboard.new-project"
msgstr "+ Новый проект"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Новый проект"
@@ -748,11 +748,11 @@ msgstr "Новый проект"
msgid "dashboard.no-matches-for"
msgstr "Совпадений для “%s“ не найдено"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Закреплённые проекты будут здесь"
-#: src/app/main/ui/dashboard/comments.cljs:90
+#: src/app/main/ui/dashboard/comments.cljs:91
msgid "dashboard.notifications"
msgstr "Уведомления"
@@ -764,7 +764,7 @@ msgstr "Ваш адрес эл. почты был успешно обновлё
msgid "dashboard.notifications.email-verified-successfully"
msgstr "Ваш адрес эл. почты был успешно подтверждён"
-#: src/app/main/data/profile.cljs:272
+#: src/app/main/data/profile.cljs:273
msgid "dashboard.notifications.notifications-saved"
msgstr "Настройки уведомлений обновлены"
@@ -772,11 +772,11 @@ msgstr "Настройки уведомлений обновлены"
msgid "dashboard.notifications.password-saved"
msgstr "Пароль успешно сохранён!"
-#: src/app/main/ui/dashboard/comments.cljs:44
+#: src/app/main/ui/dashboard/comments.cljs:45
msgid "dashboard.notifications.view"
msgstr "Просмотреть уведомления"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "Участников: %s"
@@ -808,7 +808,7 @@ msgstr "Теперь вы владелец этой команды."
msgid "dashboard.permissions-change.viewer"
msgstr "Теперь вы наблюдатель в этой команде."
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Закрепить/Открепить"
@@ -841,7 +841,7 @@ msgstr "Снять статус общей библиотеки"
msgid "dashboard.save-settings"
msgstr "Сохранить настройки"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Поиск…"
@@ -921,7 +921,7 @@ msgstr "Уведомления"
msgid "dashboard.show-all-files"
msgstr "Показать все файлы"
-#: src/app/main/ui/workspace/main_menu.cljs:638
+#: src/app/main/ui/workspace/main_menu.cljs:666
msgid "dashboard.show-version-history"
msgstr "История версий"
@@ -945,7 +945,7 @@ msgstr[1] "Ваши файлы были успешно продублирова
msgid "dashboard.success-duplicate-project"
msgstr "Ваш проект продублирован"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Ваш файл успешно перемещён"
@@ -957,15 +957,15 @@ msgstr "Ваши файлы успешно перемещены"
msgid "dashboard.success-move-project"
msgstr "Ваш проект перемещён"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "О команде"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Участники команды"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Командные проекты"
@@ -981,7 +981,7 @@ msgstr "Результаты поиска"
msgid "dashboard.type-something"
msgstr "Введите для поиска"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Снять библиотеку с публикации"
@@ -989,38 +989,38 @@ msgstr "Снять библиотеку с публикации"
msgid "dashboard.update-settings"
msgstr "Обновить настройки"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "Активен"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "Когда этот хук сработает, будут доставлены подробные сведения о событии"
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "Тип контента"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "Создать вебхук"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "Вебхук успешно создан."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"Вебхуки - это простой способ уведомлять другие веб-сайты и приложения о тех "
"или иных событиях в Penpot. Мы отправим POST-запрос на каждый из указанных "
"вами URL-адресов."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "Нажмите кнопку «Добавить вебхук», чтобы добавить его."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "Вебхуки пока не созданы."
@@ -1040,7 +1040,7 @@ msgstr "Эл. почта"
msgid "dashboard.your-name"
msgstr "Ваше имя"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Ваш Penpot"
@@ -1056,11 +1056,11 @@ msgstr "Внимание"
msgid "ds.component-subtitle"
msgstr "Компоненты для обновления:"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Отмена"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Oк"
@@ -1112,11 +1112,11 @@ msgstr "Нельзя указывать в качестве пароля адр
msgid "errors.email-domain-not-allowed"
msgstr "Домен не разрешён"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "Эл. почта «%s» постоянно недоступна."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "Эл. почта «%s» была отмечена как спам или постоянно недоступна."
@@ -1137,7 +1137,7 @@ msgstr ""
"функциями файла, который вы пытаетесь открыть. Прежде чем файл можно будет "
"открыть, необходимо применить миграцию для «%s»."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Что-то пошло не так."
@@ -1165,7 +1165,7 @@ msgstr "Возможно, это приглашение отменено или
msgid "errors.ldap-disabled"
msgstr "Вход c LDAP отключён."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "Вы достигли указанного значения «%s». Обратитесь в службу поддержки."
@@ -1181,7 +1181,7 @@ msgstr "Формат медиа не соответует расширению
msgid "errors.media-type-not-allowed"
msgstr "Неверное медиа."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr "Невозможно пригласить адресата с недоступным адресом электронной почты."
@@ -1203,7 +1203,7 @@ msgstr "Недопустимые данные в буфере обмена"
msgid "errors.profile-blocked"
msgstr "Профиль заблокирован"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr "Ваш адрес электронной почты не доступен."
@@ -1215,17 +1215,17 @@ msgstr "Регистрация сейчас отключена."
msgid "errors.team-feature-mismatch"
msgstr "Обнаружена несовместимая функция «%s»"
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr ""
"Недостаточно участников, чтобы покинуть команду, вероятно, вы хотите её "
"удалить."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "Участник, которого вы пытаетесь назначить, не существует."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr "Нужно переназначить роль владельца перед тем, как покинуть команду."
@@ -1245,31 +1245,31 @@ msgstr "Ошибка проверки"
msgid "errors.version-not-supported"
msgstr "Файл имеет несовместимый номер версии"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "Ошибка подключения, URL недоступен"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "URL-адрес не проходит проверку."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "Последняя доставка не удалась."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "Ошибка при проверке SSL."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "Время вышло"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "Неожиданная ошибка при проверке"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "Неожиданный статус %s"
@@ -1333,19 +1333,19 @@ msgstr "Произошла ошибка"
msgid "inspect.attributes.blur"
msgstr "Размытие"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Значение"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1353,7 +1353,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Заливка"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Скачать оригинал"
@@ -1447,81 +1447,84 @@ msgstr "Сплошная"
msgid "inspect.attributes.stroke.width"
msgstr "Толщина"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Текст"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Гарнитура"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Размер"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Шрифт"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "Толщина шрифта"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Трекинг"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Интерлиньяж"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Оформление"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Нет"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Подчёркнутый"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Регистр"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "Регистр Заголовка"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "Нижний регистр"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Какой есть"
-#: src/app/main/ui/inspect/attributes/text.cljs:159
+#: src/app/main/ui/inspect/attributes/text.cljs:152
msgid "inspect.attributes.typography.text-transform.unset"
msgstr "Не установлено"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "Верхний регистр"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr ""
"Если вы хотите узнать больше о осмотре дизайна, посетите справочный центр "
"Penpot"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "Подробнее об осмотре"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr "Выберите фигуру, доску или группу, чтобы просмотреть свойства и код"
@@ -1581,7 +1584,7 @@ msgstr "Текст"
msgid "inspect.tabs.info"
msgstr "Информация"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Сочетания клавиш"
@@ -1593,7 +1596,7 @@ msgstr "Принять"
msgid "labels.access-tokens"
msgstr "Токены доступа"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "Действующий"
@@ -1601,7 +1604,7 @@ msgstr "Действующий"
msgid "labels.add-custom-font"
msgstr "Добавить произвольный шрифт"
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Администратор"
@@ -1609,7 +1612,7 @@ msgstr "Администратор"
msgid "labels.adobe-xd"
msgstr "Adobe XD"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Все"
@@ -1630,7 +1633,7 @@ msgstr "Возможны технические работы. Пожалуйст
msgid "labels.bad-gateway.main-message"
msgstr "Bad Gateway"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Отмена"
@@ -1638,15 +1641,15 @@ msgstr "Отмена"
msgid "labels.canva"
msgstr "Canva"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Закрыть"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Комментарии"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Сообщество"
@@ -1654,7 +1657,7 @@ msgstr "Сообщество"
msgid "labels.confirm-password"
msgstr "Подтвердите пароль"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Продолжить"
@@ -1666,11 +1669,11 @@ msgstr "Продолжить с"
msgid "labels.continue-with-penpot"
msgstr "Вы можете продолжить с аккаунтом Penpot"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "Копировать ссылку"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Создать"
@@ -1690,7 +1693,7 @@ msgstr "Произвольные шрифты"
msgid "labels.dashboard"
msgstr "Панель управления"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Удалить"
@@ -1702,7 +1705,7 @@ msgstr "Удалить комментарий"
msgid "labels.delete-comment-thread"
msgstr "Удалить обсуждение"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Удалить приглашение"
@@ -1719,15 +1722,15 @@ msgstr "Разработка"
msgid "labels.director"
msgstr "Директор"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "Отказаться"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Черновики"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Редактировать"
@@ -1735,7 +1738,7 @@ msgstr "Редактировать"
msgid "labels.edit-file"
msgstr "Редактировать"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Редактор"
@@ -1744,11 +1747,11 @@ msgstr "Редактор"
msgid "labels.event"
msgstr "Событие"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Истекло"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Экспорт"
@@ -1776,7 +1779,7 @@ msgstr "Поставщики шрифтов"
msgid "labels.font-variants"
msgstr "Начертания"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Шрифты"
@@ -1790,11 +1793,11 @@ msgstr "Генеральный директор или основатель"
msgid "labels.freelancer"
msgstr "Фрилансер"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "Репозиторий на Github"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Оставить отзыв"
@@ -1806,15 +1809,15 @@ msgstr "Назад"
msgid "labels.graphic-design"
msgstr "Графический дизайн"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Помощь"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Скрыть решённые комментарии"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "Недействующий"
@@ -1834,7 +1837,7 @@ msgstr "Внутренняя ошибка"
msgid "labels.invision"
msgstr "InVision"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Приглашения"
@@ -1842,7 +1845,7 @@ msgstr "Приглашения"
msgid "labels.language"
msgstr "Язык"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Библиотеки и шаблоны"
@@ -1850,7 +1853,7 @@ msgstr "Библиотеки и шаблоны"
msgid "labels.log-or-sign"
msgstr "Войти или зарегистрироваться"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Выйти"
@@ -1858,11 +1861,11 @@ msgstr "Выйти"
msgid "labels.marketing"
msgstr "Маркетинг"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Участник"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Участники"
@@ -1870,17 +1873,17 @@ msgstr "Участники"
msgid "labels.new-password"
msgstr "Новый пароль"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "Далее"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr ""
"Вы ничего не пропустили! Здесь будут появляться уведомления о новых "
"комментариях."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "Нет ожидающих приглашений."
@@ -1897,7 +1900,7 @@ msgstr "Ой!"
msgid "labels.notifications"
msgstr "Уведомления"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "Файл"
@@ -1909,7 +1912,7 @@ msgid_plural "labels.num-of-frames"
msgstr[0] "Кадр"
msgstr[1] "Кадры (%s)"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "Проект"
@@ -1936,7 +1939,7 @@ msgstr "Другое (укажите)"
msgid "labels.other-short"
msgstr "Другое"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Владелец"
@@ -1944,7 +1947,7 @@ msgstr "Владелец"
msgid "labels.password"
msgstr "Пароль"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "Ожидание"
@@ -1964,11 +1967,11 @@ msgstr "Управление продуктом"
msgid "labels.profile"
msgstr "Профиль"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Проекты"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Примечания к выпуску"
@@ -1982,11 +1985,11 @@ msgstr "Перезагрузить файл"
msgid "labels.remove"
msgstr "Удалить"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Удалить участника"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Переименовать"
@@ -1994,7 +1997,7 @@ msgstr "Переименовать"
msgid "labels.rename-team"
msgstr "Переименовать команду"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "Снова отправить приглашение"
@@ -2002,15 +2005,15 @@ msgstr "Снова отправить приглашение"
msgid "labels.retry"
msgstr "Заново"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Роль"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Сохранить"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:715
+#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:730
msgid "labels.search"
msgstr "Поиск"
@@ -2038,7 +2041,7 @@ msgstr "Мы проводим диагностику наших систем."
msgid "labels.service-unavailable.main-message"
msgstr "Сервис недоступен"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Настройки"
@@ -2050,11 +2053,11 @@ msgstr "Поделиться"
msgid "labels.share-prototype"
msgstr "Поделиться ссылкой"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Библиотеки"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Все комментарии"
@@ -2062,11 +2065,11 @@ msgstr "Все комментарии"
msgid "labels.show-comments-list"
msgstr "Показать список комментариев"
-#: src/app/main/ui/workspace/comments.cljs:67, src/app/main/ui/workspace/comments.cljs:139
+#: src/app/main/ui/workspace/comments.cljs:68, src/app/main/ui/workspace/comments.cljs:140
msgid "labels.show-mentions"
msgstr "Показать только упоминания"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Только мои"
@@ -2078,7 +2081,7 @@ msgstr "Sketch"
msgid "labels.start"
msgstr "Начать"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Состояние"
@@ -2096,7 +2099,7 @@ msgstr "Руководитель группы"
msgid "labels.team-member"
msgstr "Член команды"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Руководства"
@@ -2124,15 +2127,15 @@ msgstr "Загрузить произвольные шрифты"
msgid "labels.uploading"
msgstr "Загрузка…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "Только просмотр"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Наблюдатель"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Вебхуки"
@@ -2140,11 +2143,11 @@ msgstr "Вебхуки"
msgid "labels.write-new-comment"
msgstr "Написать комментарий"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(вы)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "Ваш аккаунт"
@@ -2153,23 +2156,23 @@ msgstr "Ваш аккаунт"
msgid "labels.youtube"
msgstr "YouTube"
-#: src/app/main/ui/workspace/colorpicker.cljs:449, src/app/main/ui/workspace/colorpicker.cljs:450, src/app/main/ui/workspace/colorpicker.cljs:452
+#: src/app/main/ui/workspace/colorpicker.cljs:486, src/app/main/ui/workspace/colorpicker.cljs:487, src/app/main/ui/workspace/colorpicker.cljs:489
msgid "media.choose-image"
msgstr "Выбрать изображение"
-#: src/app/main/ui/workspace/colorpicker.cljs:244
+#: src/app/main/ui/workspace/colorpicker.cljs:256
msgid "media.gradient"
msgstr "Градиент"
-#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:44, src/app/main/ui/ds/utilities/swatch.cljs:57, src/app/main/ui/inspect/attributes/common.cljs:63, src/app/main/ui/workspace/colorpicker.cljs:246, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:251
+#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:45, src/app/main/ui/ds/utilities/swatch.cljs:58, src/app/main/ui/inspect/attributes/common.cljs:44, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:65, src/app/main/ui/workspace/colorpicker.cljs:258, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:395
msgid "media.image"
msgstr "Изображение"
-#: src/app/main/ui/inspect/attributes/common.cljs:74
+#: src/app/main/ui/inspect/attributes/common.cljs:55
msgid "media.image.short"
msgstr "изобр."
-#: src/app/main/ui/workspace/colorpicker.cljs:442
+#: src/app/main/ui/workspace/colorpicker.cljs:479
msgid "media.keep-aspect-ratio"
msgstr "Сохранять соотношение сторон"
@@ -2187,7 +2190,7 @@ msgstr "Загрузка изображения…"
msgid "media.radial"
msgstr "Радиальный"
-#: src/app/main/ui/workspace/colorpicker.cljs:242
+#: src/app/main/ui/workspace/colorpicker.cljs:254
msgid "media.solid"
msgstr "Сплошной"
@@ -2262,19 +2265,19 @@ msgstr "Создать токен"
msgid "modals.create-access-token.title"
msgstr "Сгенерировать токен доступа"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "Создать вебхук"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "Создать вебхук"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "Ссылка полезной нагрузки"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://пример.com/postreceive"
@@ -2320,11 +2323,11 @@ msgstr ""
msgid "modals.delete-comment-thread.title"
msgstr "Удалить обсуждение"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "Вы уверены, что хотите удалить эту аннотацию?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "Удалить аннотацию"
@@ -2372,11 +2375,11 @@ msgstr ""
msgid "modals.delete-font.title"
msgstr "Удаление шрифта"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Вы уверены, что хотите удалить эту страницу?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Удаление страницы"
@@ -2422,29 +2425,29 @@ msgid_plural "modals.delete-shared-confirm.title"
msgstr[0] "Удаление файла"
msgstr[1] "Удаление файлов"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Удалить команду"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Вы уверены, что хотите удалить эту команду? Все проекты и файлы этой "
"команды также будут безвозвратно удалены."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Удаление команды"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Удалить участника"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Вы уверены, что хотите удалить этого участника из команды?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Удалить участника команды"
@@ -2458,51 +2461,51 @@ msgstr[1] ""
"Ресурсы, которые уже использовались в этих файлах, останутся там (дизайн не "
"будет нарушен)."
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "Удалить вебхук"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "Вы уверены, что хотите удалить этот вебхук?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "Удаление вебхука"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "Изменить вебхук"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "Изменить вебхук"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Отправить приглашение"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "Эл. почты, разделённые запятой"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr ""
"Некоторые электронные письма отправлены от текущих членов команды. Их "
"приглашения не будут отправлены."
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "Пригласить участников в команду"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"Так как вы единственный участник этой команды, она будет удалена вместе с "
"проектами и файлами."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "Вы уверены, что хотите покинуть команду %s?"
@@ -2530,15 +2533,15 @@ msgstr "Выберите участника для назначения"
msgid "modals.leave-and-reassign.title"
msgstr "Прежде чем вы уйдёте"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Покинуть команду"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Вы уверены, что хотите покинуть эту команду?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Выход из команды"
@@ -2560,39 +2563,39 @@ msgid_plural "modals.move-shared-confirm.title"
msgstr[0] "Переместить библиотеку"
msgstr[1] "Переместить библиотеки"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "Величина сдвига"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Передача прав собственности"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"Если вы передадите права собственности, вы измените свою роль на "
"администратора, потеряв некоторые права доступа в этой команде. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr ""
"Вы текущий владелец этой команды. Вы уверены, что хотите сделать %s новым "
"владельцем команды?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Новый владелец команды"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "Опубликовать"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "Ваша библиотека пуста. Вы уверены, что хотите опубликовать её?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "Опубликовать пустую библиотеку"
@@ -2647,21 +2650,21 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Обновить компоненты в общей библиотеке"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Обновить"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Отменить"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"Вы собираетесь обновить компонент в общей библиотеке. Это может повлиять на "
"другие файлы, которые её используют."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Обновить компонент в общей библиотеке"
@@ -2675,11 +2678,11 @@ msgstr ""
msgid "notifications.by-code.upgrade-version"
msgstr "Доступна новая версия, обновите страницу"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "Приглашение успешно отправлено"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "Ссылка на приглашение скопирована"
@@ -2831,7 +2834,7 @@ msgstr ""
"Никого не забудьте. Разработчики, дизайнеры, менеджеры... разнообразие "
"развивает :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "Пригласить с ролью:"
@@ -3036,653 +3039,637 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "Перейти к входу"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "Отсоединить"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "Смешаный"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:288
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:428
msgid "settings.select-this-color"
msgstr "Выбрать элементы, использующие этот стиль"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Основное"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "Панель управления"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Просмотрщик"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Рабочая область"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Выравнивание"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Редактировать"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "Общее"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "Общее"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Главное меню"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "Изменить слои"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Навигация"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Навигация"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Навигация"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Панели"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Пути"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Фигуры"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "Тексты"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Инструменты"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Увеличение"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Увеличение"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Комментарии"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "Добавить узел"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "Выровнять по нижнему краю"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "Выровнять по центру"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "Выровнять по центру по горизонтали"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "Выровнять по ширине"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "Выровнять по левому краю"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "Выровнять по правому краю"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "Выровнять по верхнему краю"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "Выровнять по центру по вертикали"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "Создать доску из выбора"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "Переключить толщину"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "Логическая разница"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "Логическое исключение"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "Логическое пересечение"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "Логическое объединение"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "Переместить на задний план"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Переместить назад"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "Перенести вперёд"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "Вынести на передний план"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "Очистить отмену"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Скопировать"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "Создать новый"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Вырезать"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "Отдалить"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Удалить"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "Удалить узел"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "Отсоединить компонент"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Кривая"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "Эллипс"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Доска"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "Нарисовать контур"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Контур"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Прямоугольник"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Текст"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Дублировать"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "Отмена"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "Экспорт фигур"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "Увеличить, чтобы вместить все"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "Отразить по горизонтали"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "Отразить по вертикали"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "Уменьшить размер шрифта"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "Увеличить размер шрифта"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "Перейти к черновикам"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "Перейти к общим библиотекам"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Поиск"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Группа"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "Распределить горизонтально"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "Показать/скрыть интерфейс"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "Приблизить"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "Вставить изображение"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "Переключить курсив"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "Соединение узлов"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
-msgid "shortcuts.letter-spacing-dec"
-msgstr "Уменьшить межбуквенный интервал"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "Увеличить междустрочный интервал"
-
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
-msgid "shortcuts.line-height-dec"
-msgstr "Уменьшить высоту строки"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
-msgid "shortcuts.line-height-inc"
-msgstr "Увеличить высоту строки"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.line-through"
msgstr "Переключить междустрочность"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "Сделать угол"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "Сделать изгиб"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "Маска"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "Объединить узлы"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "Переместить"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "Быстрое перемещение вниз"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "Быстрое перемещение влево"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "Быстрое перемещение вправо"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "Быстрое перемещение вверх"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "Переместить узел"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "Переместить вниз"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "Переместить влево"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "Переместить вправо"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "Переместить вверх"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "Следующая доска"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "Ярлыки не найдены"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "Установить непрозрачность на 100%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "Установить непрозрачность на 10%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "Установить непрозрачность на 20%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "Установить непрозрачность на 30%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "Установить непрозрачность на 40%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "Установить непрозрачность на 50%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "Установить непрозрачность на 60%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "Установить непрозрачность на 70%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "Установить непрозрачность на 80%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "Установить непрозрачность на 90%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "Выбор цвета"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "Перейти в раздел комментариев"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "Перейти в панель управления"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "Перейти в раздел осмотра"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "Перейти в раздел взаимодействия"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "Перейти в раздел взаимодействия"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "Перейти к рабочей области"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " или "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Вставить"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "Предыдущая доска"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "Вернуть"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "Сбросить масштаб"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
msgid "shortcuts.scale"
msgstr "Масштаб"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "Поиск ярлыков"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "Выбрать все"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
msgid "shortcuts.select-next"
msgstr "Выбрать следующий слой"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
msgid "shortcuts.select-parent-layer"
msgstr "Выбрать родительский слой"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
msgid "shortcuts.select-prev"
msgstr "Выбрать предыдущий слой"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "Отдельные узлы"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "Показать/скрыть пиксельную сетку"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "Показать/скрыть горячие клавиши"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "Привязать к узлам"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "Привязать к пиксельной сетке"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "Начать редактирование"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "Начать измерение"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "Остановить измерение"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "Установить миниатюры"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "Горячие клавиши"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "Переключить динамическое выравнивание"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "Переключить ресурсы"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "Переключить палитру цветов"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "Переключить режим фокуса"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "Переключить полноэкранный режим"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
msgid "shortcuts.toggle-guides"
msgstr "Показать/скрыть направляющие"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "Переключить историю"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "Переключить слои"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "Добавить/удалить макет гибкости"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
msgid "shortcuts.toggle-layout-grid"
msgstr "Добавить/удалить макет сетки"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "Запереть/Отпереть"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "Запереть пропорции"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
msgid "shortcuts.toggle-rulers"
msgstr "Показать/скрыть линейки"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
msgid "shortcuts.toggle-snap-guides"
msgstr "Привязать к направляющим"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
msgid "shortcuts.toggle-snap-ruler-guide"
msgstr "Привязать к направляющим линейки"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "Переключить текстовую палитру"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
msgid "shortcuts.toggle-theme"
msgstr "Сменить тему"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "Показать/скрыть"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "Переключить стиль масштабирования"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "Переключить подчёркивание"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Отменить"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Разгруппировать"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Убрать маску"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "Распределить вертикально"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "Уменьшить зум-объектив"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "Увеличить зум-объектив"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "Приблизить выбранное"
@@ -3738,19 +3725,19 @@ msgstr "Пароль - Penpot"
msgid "title.settings.profile"
msgstr "Профиль - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "Приглашения - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "Участники - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Настройки - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "Вебхуки - %s - Penpot"
@@ -3822,39 +3809,39 @@ msgstr "Показывать взаимодействия по клику"
msgid "viewer.header.sitemap"
msgstr "План сайта"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "Последняя доставка прошла успешно."
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Выровнять по горизонтали (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "Распределить горизонтальное пространство (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Выровнять по левому краю (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Выровнять по правому краю (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Выровнять по нижнему краю (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Выровнять по вертикали (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "Распределить вертикальное пространство (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Выровнять по верхнему краю (%s)"
@@ -3863,33 +3850,33 @@ msgstr "Выровнять по верхнему краю (%s)"
msgid "workspace.assets.assets"
msgstr "Ресурсы"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "Все ресурсы"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Цвета"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Компоненты"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "Создать группу"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr ""
"Вашим элементам будет автоматически присвоено название «название "
"группы/название элемента»"
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Удалить"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "Дублировать"
@@ -3897,11 +3884,11 @@ msgstr "Дублировать"
msgid "workspace.assets.duplicate-main"
msgstr "Дублировать главное"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Редактировать"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:177
+#: src/app/main/ui/workspace/sidebar/assets.cljs:186
msgid "workspace.assets.filter"
msgstr "Фильтр"
@@ -3910,15 +3897,15 @@ msgstr "Фильтр"
msgid "workspace.assets.graphics"
msgstr "Графика"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Группа"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "Имя группы"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "локальная библиотека"
@@ -3930,15 +3917,15 @@ msgstr "Ресурсы не найдены"
msgid "workspace.assets.open-library"
msgstr "Открыть файл библиотеки"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Переименовать"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "Переименовать группу"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "Поиск ресурсов"
@@ -3954,17 +3941,17 @@ msgstr[1] "Выбраны ресурсы (%s)"
msgid "workspace.assets.shared-library"
msgstr "Общая библиотека"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:237
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:235
msgid "workspace.assets.sidebar.components"
msgid_plural "workspace.assets.sidebar.components"
msgstr[0] "1 компонент"
msgstr[1] "%s компонентов"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:193
+#: src/app/main/ui/workspace/sidebar/assets.cljs:204
msgid "workspace.assets.sort"
msgstr "Сортировка"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Типографика"
@@ -3989,7 +3976,7 @@ msgstr "Кернинг"
msgid "workspace.assets.typography.line-height"
msgstr "Интерлиньяж"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -4001,59 +3988,59 @@ msgstr "Стиль текста"
msgid "workspace.assets.typography.text-transform"
msgstr "Регистр"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "Разгруппировать"
-#: src/app/main/ui/workspace/context_menu.cljs:791
+#: src/app/main/ui/workspace/context_menu.cljs:794
msgid "workspace.context-menu.grid-cells.area"
msgstr "Создать область"
-#: src/app/main/ui/workspace/context_menu.cljs:794
+#: src/app/main/ui/workspace/context_menu.cljs:797
msgid "workspace.context-menu.grid-cells.create-board"
msgstr "Создать доску"
-#: src/app/main/ui/workspace/context_menu.cljs:786
+#: src/app/main/ui/workspace/context_menu.cljs:789
msgid "workspace.context-menu.grid-cells.merge"
msgstr "Объединить ячейки"
-#: src/app/main/ui/workspace/context_menu.cljs:749
+#: src/app/main/ui/workspace/context_menu.cljs:752
msgid "workspace.context-menu.grid-track.column.add-after"
msgstr "Добавить 1 столбец справа"
-#: src/app/main/ui/workspace/context_menu.cljs:748
+#: src/app/main/ui/workspace/context_menu.cljs:751
msgid "workspace.context-menu.grid-track.column.add-before"
msgstr "Добавить 1 столбец слева"
-#: src/app/main/ui/workspace/context_menu.cljs:750
+#: src/app/main/ui/workspace/context_menu.cljs:753
msgid "workspace.context-menu.grid-track.column.delete"
msgstr "Удалить столбец"
-#: src/app/main/ui/workspace/context_menu.cljs:751
+#: src/app/main/ui/workspace/context_menu.cljs:754
msgid "workspace.context-menu.grid-track.column.delete-shapes"
msgstr "Удалить столбец и фигуры"
-#: src/app/main/ui/workspace/context_menu.cljs:747
+#: src/app/main/ui/workspace/context_menu.cljs:750
msgid "workspace.context-menu.grid-track.column.duplicate"
msgstr "Дублировать столбец"
-#: src/app/main/ui/workspace/context_menu.cljs:756
+#: src/app/main/ui/workspace/context_menu.cljs:759
msgid "workspace.context-menu.grid-track.row.add-after"
msgstr "Добавить 1 строку ниже"
-#: src/app/main/ui/workspace/context_menu.cljs:755
+#: src/app/main/ui/workspace/context_menu.cljs:758
msgid "workspace.context-menu.grid-track.row.add-before"
msgstr "Добавить 1 строку выше"
-#: src/app/main/ui/workspace/context_menu.cljs:757
+#: src/app/main/ui/workspace/context_menu.cljs:760
msgid "workspace.context-menu.grid-track.row.delete"
msgstr "Удалить строку"
-#: src/app/main/ui/workspace/context_menu.cljs:758
+#: src/app/main/ui/workspace/context_menu.cljs:761
msgid "workspace.context-menu.grid-track.row.delete-shapes"
msgstr "Удалить строку и фигуры"
-#: src/app/main/ui/workspace/context_menu.cljs:754
+#: src/app/main/ui/workspace/context_menu.cljs:757
msgid "workspace.context-menu.grid-track.row.duplicate"
msgstr "Дублировать строку"
@@ -4061,7 +4048,7 @@ msgstr "Дублировать строку"
msgid "workspace.focus.focus-mode"
msgstr "Режим фокусировки"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "Фокусировка выключена"
@@ -4081,11 +4068,11 @@ msgstr "Линейный градиент"
msgid "workspace.gradients.radial"
msgstr "Радиальный градиент"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "Отключить активное выравнивание"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "Отключить пропорциональное масштабирование"
@@ -4094,23 +4081,23 @@ msgstr "Отключить пропорциональное масштабиро
msgid "workspace.header.menu.disable-scale-text"
msgstr "Отключить масштабирование текста"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "Отключить привязку к направляющим"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "Отключить привязку к пикселю"
-#: src/app/main/ui/workspace/main_menu.cljs:215
+#: src/app/main/ui/workspace/main_menu.cljs:243
msgid "workspace.header.menu.disable-snap-ruler-guides"
msgstr "Отключить привязку к направляющим линейки"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "Включить активное выравнивание"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "Включить пропорциональный масштаб"
@@ -4119,51 +4106,51 @@ msgstr "Включить пропорциональный масштаб"
msgid "workspace.header.menu.enable-scale-text"
msgstr "Включить масштабирование текста"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "Привязка к направляющим"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "Включить привязку к пикселю"
-#: src/app/main/ui/workspace/main_menu.cljs:216
+#: src/app/main/ui/workspace/main_menu.cljs:244
msgid "workspace.header.menu.enable-snap-ruler-guides"
msgstr "Привязка к направляющим линейки"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "Скрыть имена кадров"
-#: src/app/main/ui/workspace/main_menu.cljs:348
+#: src/app/main/ui/workspace/main_menu.cljs:376
msgid "workspace.header.menu.hide-guides"
msgstr "Скрыть направляющие"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "Скрыть палитру цветов"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "Скрыть сетку пикселей"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "Скрыть линейки"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "Скрыть палитру шрифтов"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Изменить"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "Файл"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "Помощь и информация"
@@ -4172,59 +4159,59 @@ msgstr "Помощь и информация"
msgid "workspace.header.menu.option.power-up"
msgstr "Расширьте свой план"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "Предпочтения"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "Вид"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "Вернуть"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "Выбрать все"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "Показать имена кадров"
-#: src/app/main/ui/workspace/main_menu.cljs:349
+#: src/app/main/ui/workspace/main_menu.cljs:377
msgid "workspace.header.menu.show-guides"
msgstr "Показать направляющие"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "Показать палитру цветов"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "Показать пиксельную сетку"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Показать линейки"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "Показать палитру шрифтов"
-#: src/app/main/ui/workspace/main_menu.cljs:288
+#: src/app/main/ui/workspace/main_menu.cljs:316
msgid "workspace.header.menu.toggle-dark-theme"
msgstr "Переключить на тёмную тему"
-#: src/app/main/ui/workspace/main_menu.cljs:286, src/app/main/ui/workspace/main_menu.cljs:289
+#: src/app/main/ui/workspace/main_menu.cljs:314, src/app/main/ui/workspace/main_menu.cljs:317
msgid "workspace.header.menu.toggle-light-theme"
msgstr "Переключить на светлую тему"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "Отменить"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Сброс"
@@ -4245,11 +4232,11 @@ msgstr "Сохранение"
msgid "workspace.header.unsaved"
msgstr "Есть несохранённые изменения"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "Открыть предпросмотр (%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "Масштаб"
@@ -4261,7 +4248,7 @@ msgstr "Заполнение - Масштаб заполнения"
msgid "workspace.header.zoom-fit"
msgstr "Подогнать - масштабировать до необходимого размера"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "Масштабировать, чтобы всё вместилось"
@@ -4269,19 +4256,19 @@ msgstr "Масштабировать, чтобы всё вместилось"
msgid "workspace.header.zoom-full-screen"
msgstr "На весь экран"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "Масштабировать до выбранного"
-#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:621
msgid "workspace.layout_grid.editor.options.edit-grid"
msgstr "Изменить сетку"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1300
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1301
msgid "workspace.layout_grid.editor.options.exit"
msgstr "Выход"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:491
msgid "workspace.layout_grid.editor.padding.expand"
msgstr "Настроить внутренний отступ по отдельности"
@@ -4297,7 +4284,7 @@ msgstr "Готово"
msgid "workspace.layout_grid.editor.top-bar.locate"
msgstr "Разместить"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1326
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1327
msgid "workspace.layout_grid.editor.top-bar.locate.tooltip"
msgstr "Размещение макета сетки"
@@ -4306,10 +4293,6 @@ msgstr "Размещение макета сетки"
msgid "workspace.libraries.add"
msgstr "Добавить"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s цветов"
-
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
msgstr "В вашей библиотеке ещё нет цветовых стилей"
@@ -4336,31 +4319,23 @@ msgstr "Недавние цвета"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "Дополнительный цвет RGB"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Сохранить стиль цвета"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s компонентов"
-
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Библиотека файлов"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s графики"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "БИБЛИОТЕКИ В ЭТОМ ФАЙЛЕ"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "БИБЛИОТЕКИ"
@@ -4369,75 +4344,71 @@ msgstr "БИБЛИОТЕКИ"
msgid "workspace.libraries.library"
msgstr "БИБЛИОТЕКА"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "ОБНОВЛЕНИЯ БИБЛИОТЕКИ"
-#: src/app/main/ui/workspace/libraries.cljs:360
+#: src/app/main/ui/workspace/libraries.cljs:393
msgid "workspace.libraries.loading"
msgstr "Загрузка…"
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "Нет общих библиотек, требующих обновления"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "Совпадений для \"%s\" не найдено"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "Искать общие библиотеки"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "ОБЩИЕ БИБЛИОТЕКИ"
-#: src/app/main/ui/workspace/libraries.cljs:352
+#: src/app/main/ui/workspace/libraries.cljs:385
msgid "workspace.libraries.shared-library-btn"
msgstr "Подключить библиотеку"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Несколько типографик"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Отвязать все типографики"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "Типографики (%s)"
-
-#: src/app/main/ui/workspace/libraries.cljs:323
+#: src/app/main/ui/workspace/libraries.cljs:354
msgid "workspace.libraries.unlink-library-btn"
msgstr "Отключить библиотеку"
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Обновить"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "смотреть все изменения"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "ОБНОВЛЕНИЯ"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "Нажмите кнопку \"+\" для добавления интерактива."
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Размытие"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "Групповое размытие"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "Выборка размытия"
@@ -4445,39 +4416,39 @@ msgstr "Выборка размытия"
msgid "workspace.options.canvas-background"
msgstr "Фон холста"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "Зажать содержимое"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Компонент"
-#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:193
+#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:196
msgid "workspace.options.component.annotation"
msgstr "Аннотация"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "Копировать"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:185
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:188
msgid "workspace.options.component.create-annotation"
msgstr "Создать аннотацию"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "Изменить аннотацию"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "Главный"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:706
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:721
msgid "workspace.options.component.swap"
msgstr "Заменить компонент"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:765
msgid "workspace.options.component.swap.empty"
msgstr "В этой библиотеке ещё нет ресурсов"
@@ -4521,7 +4492,7 @@ msgstr "Верх"
msgid "workspace.options.constraints.topbottom"
msgstr "Верх и низ"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Дизайн"
@@ -4534,13 +4505,13 @@ msgstr "Экспорт"
msgid "workspace.options.export-multiple"
msgstr "Экспорт выбранного"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "Экспорт 1 элемента"
msgstr[1] "Экспорт %s элементов"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Суффикс"
@@ -4548,7 +4519,7 @@ msgstr "Суффикс"
msgid "workspace.options.exporting-complete"
msgstr "Экспорт завершён"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "Экспортирование…"
@@ -4560,15 +4531,15 @@ msgstr "Экспорт не удался"
msgid "workspace.options.exporting-object-slow"
msgstr "Неожиданно медленный экспорт"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Заливка"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "Добавить начало потока"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:178
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:179
msgid "workspace.options.flows.flow"
msgstr "Поток"
@@ -4577,15 +4548,15 @@ msgstr "Поток"
msgid "workspace.options.flows.flow-start"
msgstr "Начало потока"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "Начала потоков"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Авто"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "Колонки"
@@ -4594,7 +4565,7 @@ msgstr "Колонки"
msgid "workspace.options.grid.grid-title"
msgstr "Сетка"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Цвет"
@@ -4603,15 +4574,15 @@ msgstr "Цвет"
msgid "workspace.options.grid.params.columns"
msgstr "Колонки"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "Желоб"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Высота"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Поле"
@@ -4620,7 +4591,7 @@ msgstr "Поле"
msgid "workspace.options.grid.params.rows"
msgstr "Строки"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "Установить по умолчанию"
@@ -4634,147 +4605,147 @@ msgstr "Размер"
msgid "workspace.options.grid.params.type"
msgstr "Тип"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Низ"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Центр"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Левый"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Правый"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "Растягивать"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "Верх"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "Использовать значение по умолчанию"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Ширина"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Строки"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "Квадрат"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Заливка для группы"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Обводка для группы"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:320
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
msgid "workspace.options.guides.title"
msgstr "Направляющие"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "Высота"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "Осмотр"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "Действие"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "После задержки"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "Анимация"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "Растворение"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "Ничего"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "Толчок"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "Слайд"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "авто"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "Добавить фоновое наложение"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "Закрывать при нажатии снаружи"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "Закрыть наложение"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "Закрыть наложение: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "Задержка"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "Место назначения"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "Длительность"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "Поведение"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "Ease"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "Ease in"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "Ease in out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "Ease out"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "Линейно"
@@ -4783,47 +4754,47 @@ msgstr "Линейно"
msgid "workspace.options.interaction-in"
msgstr "Внутри"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "Наведение мыши"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "Отведение мыши"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "мс"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "Перейти к"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "Перейти к: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(не задано)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "Эффект смещения"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "При клике"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "Открыть наложение"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "Открыть наложение: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "Открыть ссылку"
@@ -4832,147 +4803,147 @@ msgstr "Открыть ссылку"
msgid "workspace.options.interaction-out"
msgstr "Снаружи"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "Снизу по центру"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "Снизу слева"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "Снизу справа"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "По центру"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "Вручную"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "Сверху по центру"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "Сверху слева"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "Сверху справа"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "Позиция"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "Сохранить положение прокрутки"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "Предыдущий экран"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "Относительно"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "само"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "Переключить наложение"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "Переключить наложение: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "Триггер"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "Ссылка"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "При наведении"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "При нажатии"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "Интерактив"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "Цвет"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "Затемнение основы"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "Осветление основы"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "Затемнение"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "Разница"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "Исключение"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Жёсткий свет"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Цветовой тон"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Замена светлым"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "Яркость"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "Умножение"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "Нормально"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "Наложение"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "Насыщенность"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Экран"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "Мягкий свет"
@@ -4996,19 +4967,19 @@ msgstr "Выделенные слои"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "Дополнительные параметры"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "Макс. высота"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "Макс. ширина"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "Мин. высота"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "Мин. ширина"
@@ -5122,15 +5093,15 @@ msgstr "пространство между"
msgid "workspace.options.layout.top"
msgstr "Сверху"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "Больше цветов"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "Больше цветов библиотеки"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "Непрозрачность"
@@ -5139,27 +5110,27 @@ msgstr "Непрозрачность"
msgid "workspace.options.position"
msgstr "Позиция"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "Прототип"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "Радиус"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "Снизу слева"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "Снизу справа"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "Сверху слева"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "Сверху справа"
@@ -5171,7 +5142,7 @@ msgstr "Последние"
msgid "workspace.options.retry"
msgstr "Повторить"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "Вращение"
@@ -5179,27 +5150,27 @@ msgstr "Вращение"
msgid "workspace.options.search-font"
msgstr "Искать шрифт"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr "Выберите фигуру, кадр или группу для соединения с другим кадром."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "Выбранные цвета"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "Заливка выбранного"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "Обводка выбранного"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "Размытие"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "Цвет тени"
@@ -5211,47 +5182,48 @@ msgstr "Отбрасывание тени"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "Внутренняя тень"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "Распространение"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "Тень"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "Групповая тень"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "Выборочные тени"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "Показать в экспорте"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "Показать в режиме просмотра"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "Размер"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "Предустановки размеров"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "Обводка"
@@ -5260,7 +5232,7 @@ msgstr "Обводка"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "Круговой маркер"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "Круг"
@@ -5269,7 +5241,7 @@ msgstr "Круг"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "Алмазный маркер"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "Алмаз"
@@ -5278,19 +5250,19 @@ msgstr "Алмаз"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "Линия со стрелкой"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "Стрелка"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "Ничего"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "Круг"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "Квадрат"
@@ -5299,7 +5271,7 @@ msgstr "Квадрат"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "Квадратный маркер"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "Прямоугольник"
@@ -5308,75 +5280,75 @@ msgstr "Прямоугольник"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "Треугольная стрела"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "Треугольник"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "Цвет обводки"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "Толщина обводки"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "Центр"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "Пунктирный"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "Точечный"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "Внутрь"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "Смешаный"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "Наружу"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "Сплошной"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "Выровнять низ"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "Выравнивание по центру"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "Выравнивание по верхнему краю"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "Слева направо"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "Справа налево"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "Автовысота"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "Автоширина"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "Фиксированно"
@@ -5398,35 +5370,35 @@ msgstr "Нижний регистр"
msgid "workspace.options.text-options.none"
msgstr "Не задано"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "Перечеркнутый (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "Выравнивание по центру"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "Выравнивание по ширине"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "Выравнивание по левому краю"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "Выравнивание по правому краю"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "Текст"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "Текст группы"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "Выбранный текст"
@@ -5435,7 +5407,7 @@ msgstr "Выбранный текст"
msgid "workspace.options.text-options.titlecase"
msgstr "Слова с заглавной буквы"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "Подчеркнутый (%s)"
@@ -5444,19 +5416,19 @@ msgstr "Подчеркнутый (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "Верхний регистр"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr "Нажмите кнопку воспроизведения вверху для показа прототипа."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "Ширина"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "Ось X"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Ось Y"
@@ -5500,48 +5472,48 @@ msgstr "Разделить узлы (%s)"
msgid "workspace.path.actions.snap-nodes"
msgstr "Прилипать узлами (%s)"
-#: src/app/main/ui/workspace/plugins.cljs:83
+#: src/app/main/ui/workspace/plugins.cljs:84
msgid "workspace.plugins.button-open"
msgstr "Открыть"
-#: src/app/main/ui/workspace/plugins.cljs:197
+#: src/app/main/ui/workspace/plugins.cljs:198
#, markdown
msgid "workspace.plugins.discover"
msgstr "Откройте для себя [больше плагинов](%s)"
-#: src/app/main/ui/workspace/plugins.cljs:204
+#: src/app/main/ui/workspace/plugins.cljs:205
msgid "workspace.plugins.empty-plugins"
msgstr "Плагины ещё не установлены"
-#: src/app/main/ui/workspace/plugins.cljs:191
+#: src/app/main/ui/workspace/plugins.cljs:192
msgid "workspace.plugins.error.manifest"
msgstr "Манифест плагина неверен."
-#: src/app/main/ui/workspace/plugins.cljs:187
+#: src/app/main/ui/workspace/plugins.cljs:188
msgid "workspace.plugins.error.url"
msgstr "Плагин не существует или его URL-адрес неверен."
-#: src/app/main/ui/workspace/plugins.cljs:183
+#: src/app/main/ui/workspace/plugins.cljs:184
msgid "workspace.plugins.install"
msgstr "Установить"
-#: src/app/main/ui/workspace/plugins.cljs:213
+#: src/app/main/ui/workspace/plugins.cljs:214
msgid "workspace.plugins.installed-plugins"
msgstr "Установленные плагины"
-#: src/app/main/ui/workspace/main_menu.cljs:710
+#: src/app/main/ui/workspace/main_menu.cljs:738
msgid "workspace.plugins.menu.plugins-manager"
msgstr "Менеджер плагинов"
-#: src/app/main/ui/workspace/main_menu.cljs:906
+#: src/app/main/ui/workspace/main_menu.cljs:934
msgid "workspace.plugins.menu.title"
msgstr "Плагины"
-#: src/app/main/ui/workspace/plugins.cljs:209
+#: src/app/main/ui/workspace/plugins.cljs:210
msgid "workspace.plugins.plugin-list-link"
msgstr "Список плагинов"
-#: src/app/main/ui/workspace/plugins.cljs:178
+#: src/app/main/ui/workspace/plugins.cljs:179
msgid "workspace.plugins.search-placeholder"
msgstr "Введите URL-адрес плагина"
@@ -5549,7 +5521,7 @@ msgstr "Введите URL-адрес плагина"
msgid "workspace.plugins.success"
msgstr "Плагин загружен правильно."
-#: src/app/main/ui/workspace/plugins.cljs:172
+#: src/app/main/ui/workspace/plugins.cljs:173
msgid "workspace.plugins.title"
msgstr "Плагины"
@@ -5573,7 +5545,7 @@ msgstr "Перенести назад"
msgid "workspace.shape.menu.copy"
msgstr "Скопировать"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "Создать аннотацию"
@@ -5581,11 +5553,11 @@ msgstr "Создать аннотацию"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "Выделенное в кадр"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "Создать компонент"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "Создать несколько компонентов"
@@ -5593,7 +5565,7 @@ msgstr "Создать несколько компонентов"
msgid "workspace.shape.menu.cut"
msgstr "Вырезать"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "Удалить"
@@ -5601,15 +5573,15 @@ msgstr "Удалить"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "Удалить начало потока"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "Отсоединить экземпляр"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "Отсоединить экземпляры"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "Разница"
@@ -5621,11 +5593,11 @@ msgstr "Дублировать"
msgid "workspace.shape.menu.edit"
msgstr "Редактировать"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "Исключить"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "Flatten"
@@ -5658,19 +5630,19 @@ msgstr "Перейти к основному файлу компонента"
msgid "workspace.shape.menu.group"
msgstr "Группа"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "Скрыть"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "Показать/скрыть UI"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "Пересечь"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "Заблокировать"
@@ -5678,7 +5650,7 @@ msgstr "Заблокировать"
msgid "workspace.shape.menu.mask"
msgstr "Маска"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "Вставить"
@@ -5694,11 +5666,11 @@ msgstr "Удалить макет гибкости"
msgid "workspace.shape.menu.remove-grid"
msgstr "Удалить макет сетки"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "Сбросить переопределения"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "Восстановить основной компонент"
@@ -5706,15 +5678,15 @@ msgstr "Восстановить основной компонент"
msgid "workspace.shape.menu.select-layer"
msgstr "Выбрать слой"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "Показать"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "Показать на панели ресурсов"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "Показать основной компонент"
@@ -5727,6 +5699,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "Сделать миниатюрой"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "Преобразовать в контур"
@@ -5734,11 +5707,11 @@ msgstr "Преобразовать в контур"
msgid "workspace.shape.menu.ungroup"
msgstr "Разгруппировать"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "Суммировать"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "Paзблокировать"
@@ -5751,7 +5724,7 @@ msgstr "Убрать маску"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "Обновить основные компоненты"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "Обновить основной компонент"
@@ -5763,11 +5736,11 @@ msgstr "Свернуть боковую панель"
msgid "workspace.sidebar.expand"
msgstr "Расширить боковую панель"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "История"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "Слои"
@@ -5807,7 +5780,7 @@ msgstr "Тексты"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "Импортированные атрибуты SVG"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "Страницы"
@@ -5819,7 +5792,7 @@ msgstr "Карта сайта"
msgid "workspace.tokens.save-theme"
msgstr "Сохранить тему"
-#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "Ресурсы"
@@ -5827,7 +5800,7 @@ msgstr "Ресурсы"
msgid "workspace.toolbar.color-palette"
msgstr "Палитра цветов (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "Комментарии (%s)"
@@ -6030,19 +6003,19 @@ msgstr "Работа над %s"
msgid "workspace.undo.title"
msgstr "История"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "Отклонить"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "Дополнительная информация"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "Обнаружены обновления общих библиотек"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "Обновить"
@@ -6050,11 +6023,11 @@ msgstr "Обновить"
msgid "workspace.versions.button.save"
msgstr "Сохранить версию"
-#: src/app/main/ui/workspace/sidebar.cljs:236
+#: src/app/main/ui/workspace/sidebar.cljs:237
msgid "workspace.versions.tab.actions"
msgstr "Действия"
-#: src/app/main/ui/workspace/sidebar.cljs:234
+#: src/app/main/ui/workspace/sidebar.cljs:235
msgid "workspace.versions.tab.history"
msgstr "История"
diff --git a/frontend/translations/sr.po b/frontend/translations/sr.po
index 385d4a0329..eb12100a90 100644
--- a/frontend/translations/sr.po
+++ b/frontend/translations/sr.po
@@ -1,16 +1,17 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-11 07:21+0000\n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
"Last-Translator: Црнобог <68vuletic@gmail.com>\n"
-"Language-Team: Serbian "
-" \n"
+"Language-Team: Serbian \n"
"Language: sr\n"
"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==1 && n%100!=11 ? 0 : n%10>=2 && "
-"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Weblate 5.13-dev\n"
+"Plural-Forms: nplurals=3; plural="
+"(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? "
+"1 : 2);\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -176,7 +177,7 @@ msgstr "Решење отвореног кода за дизајн и израд
msgid "auth.terms-and-privacy-agreement"
msgstr "Слажем се са [условима коришћења](%s) и [политиком приватности](%s)."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Услови коришћења"
@@ -199,7 +200,7 @@ msgstr "Радна е-пошта"
msgid "branding-illustrations-marketing-pieces"
msgstr "...брендирање, илустрације, маркетиншки комади, итд."
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Објави"
@@ -272,7 +273,7 @@ msgstr "Дели прототипе"
msgid "common.share-link.view-all"
msgstr "Изабери све"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Опозови објављивање"
@@ -391,7 +392,7 @@ msgstr "Токен ће истећи на %s"
msgid "dashboard.access-tokens.token-will-not-expire"
msgstr "Токен нема датум истека"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Додај као дељену библиотеку"
@@ -399,27 +400,27 @@ msgstr "Додај као дељену библиотеку"
msgid "dashboard.change-email"
msgstr "Промените е-пошту"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(копија)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Направите нови тим"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Ваш Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Избришите тим"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Преузмите Penpot датотеку (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Преузмите стандардну датотеку (.svg + .json)"
@@ -435,7 +436,7 @@ msgstr "Дуплирај %s датотека"
msgid "dashboard.export-binary-multi"
msgstr "Преузмите % Penpot датотека (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Извезите табле као PDF"
@@ -451,7 +452,7 @@ msgstr "Извези Penpot %s датотека"
msgid "dashboard.export-multiple.selected"
msgstr "%s од %s елемената изабрано"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Извези"
@@ -631,11 +632,11 @@ msgstr "Отпремање података на сервер (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Отпремање датотеке: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Позовите људе"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Напустите тим"
@@ -647,7 +648,7 @@ msgstr "Библиотеке и шаблони"
msgid "dashboard.libraries-and-templates.explore"
msgstr "Истражите више њих и знајте како да допринесете"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "Дошло је до проблема при увозу шаблона. Шаблон није увезен."
@@ -679,7 +680,7 @@ msgstr "Премести у други тим"
msgid "dashboard.new-file"
msgstr "+ Нова датотека"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Нова датотека"
@@ -687,7 +688,7 @@ msgstr "Нова датотека"
msgid "dashboard.new-project"
msgstr "+ Нови пројекат"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Нови пројекат"
@@ -695,7 +696,7 @@ msgstr "Нови пројекат"
msgid "dashboard.no-matches-for"
msgstr "Нема подударања за \"%s\""
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Закачени пројекти ће се појавити овде"
@@ -711,7 +712,7 @@ msgstr "Ваша адреса е-поште је успешно верифико
msgid "dashboard.notifications.password-saved"
msgstr "Лозинка је успешно сачувана!"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s чланова"
@@ -727,7 +728,7 @@ msgstr "Опције"
msgid "dashboard.password-change"
msgstr "Промените лозинку"
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Прикачи/Откачи"
@@ -748,7 +749,7 @@ msgstr "Уклони као дељену библиотеку"
msgid "dashboard.save-settings"
msgstr "Сачувај подешавања"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Претражи…"
@@ -790,7 +791,7 @@ msgstr[2] "Ваше датотеке су успешно дуплиране"
msgid "dashboard.success-duplicate-project"
msgstr "Ваш пројекат је успешно дуплиран"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Ваша датотека је успешно премештена"
@@ -802,15 +803,15 @@ msgstr "Ваше датотеке су успешно премештене"
msgid "dashboard.success-move-project"
msgstr "Ваш пројекат је успешно премештен"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Информације о тиму"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Чланови тима"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Тимски пројекти"
@@ -826,7 +827,7 @@ msgstr "Резултати претраге"
msgid "dashboard.type-something"
msgstr "Унесите за резултате претраге"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Опозови објављивање библиотеке"
@@ -834,38 +835,38 @@ msgstr "Опозови објављивање библиотеке"
msgid "dashboard.update-settings"
msgstr "Ажурирајте подешавања"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "Је активно"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "Када се ова кука покрене биће испоручени детаљи догађаја"
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "Тип садржаја"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "Креирајте веб-куку"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "Веб-кука је успешно креирана."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"Веб-куке су једноставан начин да омогућите другим веб-сајтовима и "
"апликацијама да буду обавештени када се одређени догађаји догоде у "
"Penpot-у. Послаћемо POST захтев на сваку од URL адреса које наведете."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "Притисните дугме „Додај веб-куку“ да бисте је додали."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "До сада није направљена ниједана веб-кука."
@@ -885,7 +886,7 @@ msgstr "Е-пошта"
msgid "dashboard.your-name"
msgstr "Ваше име"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Ваш Penpot"
@@ -901,11 +902,11 @@ msgstr "Пажња"
msgid "ds.component-subtitle"
msgstr "Компоненте за ажурирање:"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Откажите"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Уреду"
@@ -957,11 +958,11 @@ msgstr "Не можете да користите своју е-пошту ка
msgid "errors.email-domain-not-allowed"
msgstr "Домен није дозвољен"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "Е-пошта «%s» има много сталних извештаја о одбијању."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "Е-пошта «%s» је пријављеа као непожељана или трајно одбијена."
@@ -982,7 +983,7 @@ msgstr ""
"датотеке коју покушавате да отворите. Миграције за \"%s\" морају бити "
"примењене пре него што се датотека може отворити."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Нешто погрешно се десило."
@@ -1002,7 +1003,7 @@ msgstr "Ова позивница је можда отказана или ист
msgid "errors.ldap-disabled"
msgstr "LDAP аутентификација је онемогућена."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "Достигли сте квоту од '%s'. Контактирајте подршку."
@@ -1018,7 +1019,7 @@ msgstr "Чини се да садржај слике не одговара ек
msgid "errors.media-type-not-allowed"
msgstr "Чини се да ово није исправна слика."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"Профил који сте позвали има искључене поруке е-поште (извештаји о нежељеној "
@@ -1042,7 +1043,7 @@ msgstr "Неважећи подаци у међуспремнику"
msgid "errors.profile-blocked"
msgstr "Налог је блокиран"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr ""
"Ваш профил има искључене поруке е-поште (извештаји о нежељеној пошти или "
@@ -1056,15 +1057,15 @@ msgstr "Регистрација је тренутно онемогућена."
msgid "errors.team-feature-mismatch"
msgstr "Откривена је некомпатибилна функција \"%s\""
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr "Нема довољно чланова за напуштање тима, вероватно желите да га избришете."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "Члан којег покушавате да доделите не постоји."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr "Власник не може да напусти тим, морате да пренесете улогу власника."
@@ -1084,31 +1085,31 @@ msgstr "Грешка при валидацији"
msgid "errors.version-not-supported"
msgstr "Датотека има некомпатибилан број верзије"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "Грешка у вези, URL није доступан"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "URL не пролази валидацију."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "Последња испорука није успела."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "Грешка при SSL валидацији."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "Време је истекло"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "Неочекивана грешка при валидацији"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "Неочекивани статус %s"
@@ -1172,19 +1173,19 @@ msgstr "Дошло је до грешке"
msgid "inspect.attributes.blur"
msgstr "Замућење"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Вредност"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1192,7 +1193,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Попуњење"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Преузмите изворну слику"
@@ -1286,81 +1287,84 @@ msgstr "Чврсто"
msgid "inspect.attributes.stroke.width"
msgstr "Ширина"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Типографија"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Породица фонта"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Величина фонта"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Стил фонта"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "Тежина фонта"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Размак између слова"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Висина линије"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Декорација текста"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Ништа"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Подвачење"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Трансформација текста"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "Насловно слово"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "Мала слова"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Ништа"
-#: src/app/main/ui/inspect/attributes/text.cljs:159
+#: src/app/main/ui/inspect/attributes/text.cljs:152
msgid "inspect.attributes.typography.text-transform.unset"
msgstr "Без вредности"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "Велико слово"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr ""
"Ако желите да сазнате више о прегледу дизајна, посетите Помоћни центар "
"Penpot-а"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "Више информација о прегледу"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr "Изаберите облик, таблу или групу да бисте прегледали њихова својства и код"
@@ -1420,7 +1424,7 @@ msgstr "Текст"
msgid "inspect.tabs.info"
msgstr "Инфо"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Пречице"
@@ -1432,7 +1436,7 @@ msgstr "Прихвати"
msgid "labels.access-tokens"
msgstr "Токени за приступ"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "Активно"
@@ -1440,7 +1444,7 @@ msgstr "Активно"
msgid "labels.add-custom-font"
msgstr "Додај прилагођени фонт"
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Админ"
@@ -1448,7 +1452,7 @@ msgstr "Админ"
msgid "labels.adobe-xd"
msgstr "Adobe XD"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Све"
@@ -1471,7 +1475,7 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "Лош Gateway"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Откажите"
@@ -1479,15 +1483,15 @@ msgstr "Откажите"
msgid "labels.canva"
msgstr "Canva"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Затвори"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Коментари"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Заједница"
@@ -1495,7 +1499,7 @@ msgstr "Заједница"
msgid "labels.confirm-password"
msgstr "Потврди лозинку"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Настави"
@@ -1507,11 +1511,11 @@ msgstr "Настави са"
msgid "labels.continue-with-penpot"
msgstr "Можете наставити са Penpot налогом"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "Копирај везу"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Створи"
@@ -1531,7 +1535,7 @@ msgstr "Прилагођени фонтови"
msgid "labels.dashboard"
msgstr "Управљачка табла"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Избришите"
@@ -1543,7 +1547,7 @@ msgstr "Избришите коментар"
msgid "labels.delete-comment-thread"
msgstr "Избришите дискусију"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Избришите позивницу"
@@ -1560,15 +1564,15 @@ msgstr "Развој"
msgid "labels.director"
msgstr "Директор"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "Одбаци"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Нацрти"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Уреди"
@@ -1576,7 +1580,7 @@ msgstr "Уреди"
msgid "labels.edit-file"
msgstr "Уреди датотеку"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Уредник"
@@ -1585,11 +1589,11 @@ msgstr "Уредник"
msgid "labels.event"
msgstr "Догађај"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Истекло"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Извези"
@@ -1617,7 +1621,7 @@ msgstr "Добављачи фонтова"
msgid "labels.font-variants"
msgstr "Стилови"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Фонтови"
@@ -1631,11 +1635,11 @@ msgstr "Извршни директор или оснивач"
msgid "labels.freelancer"
msgstr "Фриленсер"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "Github репозиторијум"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Оставите повратне информације"
@@ -1647,15 +1651,15 @@ msgstr "Иди назад"
msgid "labels.graphic-design"
msgstr "Графички дизајн"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Центар за помоћ"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Сакриј решене коментаре"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "Неактиван"
@@ -1677,7 +1681,7 @@ msgstr "Унутрашња гершка"
msgid "labels.invision"
msgstr "InVision"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Позивнице"
@@ -1685,7 +1689,7 @@ msgstr "Позивнице"
msgid "labels.language"
msgstr "Језик"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Библиотеке и шаблони"
@@ -1693,7 +1697,7 @@ msgstr "Библиотеке и шаблони"
msgid "labels.log-or-sign"
msgstr "Пријава или регистрација"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Одјава"
@@ -1701,11 +1705,11 @@ msgstr "Одјава"
msgid "labels.marketing"
msgstr "Маркетинг"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Члан"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Чланови"
@@ -1713,15 +1717,15 @@ msgstr "Чланови"
msgid "labels.new-password"
msgstr "Нова лозинка"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "Даље"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "Све сте прегледали! Нова обавештења о коментарима ће се појавити овде."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "Нема позивница на чекању."
@@ -1734,7 +1738,7 @@ msgstr "Ова страница можда не постоји или немат
msgid "labels.not-found.main-message"
msgstr "Упс!"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "датотека"
@@ -1748,7 +1752,7 @@ msgstr[0] "табла"
msgstr[1] "%s табле"
msgstr[2] "%s табли"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "пројекат"
@@ -1776,7 +1780,7 @@ msgstr "Друго (навести)"
msgid "labels.other-short"
msgstr "Друго"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Власник"
@@ -1784,7 +1788,7 @@ msgstr "Власник"
msgid "labels.password"
msgstr "Лозинка"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "На чекању"
@@ -1804,11 +1808,11 @@ msgstr "Управљање производима"
msgid "labels.profile"
msgstr "Налог"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Пројекти"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Напомене о издању"
@@ -1822,11 +1826,11 @@ msgstr "Поново учитај датотеку"
msgid "labels.remove"
msgstr "Уколни"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Уклони члана"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Преименуј"
@@ -1834,7 +1838,7 @@ msgstr "Преименуј"
msgid "labels.rename-team"
msgstr "Преименуј тим"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "Поново пошаљите позивницу"
@@ -1842,15 +1846,15 @@ msgstr "Поново пошаљите позивницу"
msgid "labels.retry"
msgstr "Покушај поново"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Улога"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Сачувај"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:715
+#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:730
msgid "labels.search"
msgstr "Претражи"
@@ -1878,7 +1882,7 @@ msgstr "Тренутно вршимо програмско одржавање н
msgid "labels.service-unavailable.main-message"
msgstr "Услуга недоступна"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Подешавања"
@@ -1890,11 +1894,11 @@ msgstr "Дели"
msgid "labels.share-prototype"
msgstr "Дели прототип"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Библиотеке"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Прикажи све коментаре"
@@ -1902,7 +1906,7 @@ msgstr "Прикажи све коментаре"
msgid "labels.show-comments-list"
msgstr "Прикажи листу кометара"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Покажите само своје коментаре"
@@ -1914,7 +1918,7 @@ msgstr "Sketch"
msgid "labels.start"
msgstr "Почните"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Стање"
@@ -1932,7 +1936,7 @@ msgstr "Вођа тима"
msgid "labels.team-member"
msgstr "Члан тима"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Туторијали"
@@ -1960,15 +1964,15 @@ msgstr "Отпреми прилагођене фонтове"
msgid "labels.uploading"
msgstr "Отпремање…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "Само за преглед"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Прегледник"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Веб-куке"
@@ -1976,11 +1980,11 @@ msgstr "Веб-куке"
msgid "labels.write-new-comment"
msgstr "Напиши нови коментар"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(ти)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "Ваш налог"
@@ -1989,23 +1993,23 @@ msgstr "Ваш налог"
msgid "labels.youtube"
msgstr "YouTube"
-#: src/app/main/ui/workspace/colorpicker.cljs:449, src/app/main/ui/workspace/colorpicker.cljs:450, src/app/main/ui/workspace/colorpicker.cljs:452
+#: src/app/main/ui/workspace/colorpicker.cljs:486, src/app/main/ui/workspace/colorpicker.cljs:487, src/app/main/ui/workspace/colorpicker.cljs:489
msgid "media.choose-image"
msgstr "Изаберите слику"
-#: src/app/main/ui/workspace/colorpicker.cljs:244
+#: src/app/main/ui/workspace/colorpicker.cljs:256
msgid "media.gradient"
msgstr "Градијент"
-#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:44, src/app/main/ui/ds/utilities/swatch.cljs:57, src/app/main/ui/inspect/attributes/common.cljs:63, src/app/main/ui/workspace/colorpicker.cljs:246, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:251
+#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:45, src/app/main/ui/ds/utilities/swatch.cljs:58, src/app/main/ui/inspect/attributes/common.cljs:44, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:65, src/app/main/ui/workspace/colorpicker.cljs:258, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:395
msgid "media.image"
msgstr "Слика"
-#: src/app/main/ui/inspect/attributes/common.cljs:74
+#: src/app/main/ui/inspect/attributes/common.cljs:55
msgid "media.image.short"
msgstr "img"
-#: src/app/main/ui/workspace/colorpicker.cljs:442
+#: src/app/main/ui/workspace/colorpicker.cljs:479
msgid "media.keep-aspect-ratio"
msgstr "Задржите однос ширине и висине"
@@ -2023,7 +2027,7 @@ msgstr "Учитавање слике…"
msgid "media.radial"
msgstr "Радијалан"
-#: src/app/main/ui/workspace/colorpicker.cljs:242
+#: src/app/main/ui/workspace/colorpicker.cljs:254
msgid "media.solid"
msgstr "Чврст"
@@ -2098,19 +2102,19 @@ msgstr "Направи токен"
msgid "modals.create-access-token.title"
msgstr "Генериши нови токен за приступ"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "Направи веб-куку"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "Направи веб-куку"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "URL оптерећења"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://example.com/postreceive"
@@ -2156,11 +2160,11 @@ msgstr ""
msgid "modals.delete-comment-thread.title"
msgstr "Избришите разговор"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "Да ли сте сигурни да желите да избришете ову напомену?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "Избришите напомену"
@@ -2208,11 +2212,11 @@ msgstr ""
msgid "modals.delete-font.title"
msgstr "Брисање фонта"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Да ли сте сигурни да желите да обришете ову страницу?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Избришите страницу"
@@ -2263,29 +2267,29 @@ msgstr[0] "Брисање датотеке"
msgstr[1] "Брисање датотека"
msgstr[2] "Брисање датотека"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Избришите тим"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Да ли сте сигурни да желите да обришете овај тим? Сви пројекти и датотеке "
"повезани са тимом биће трајно обрисани."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Брисање тима"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Избришите члана"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Да ли сте сигурни да желите да избришете овог члана из тима?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Избришите члана тима"
@@ -2302,51 +2306,51 @@ msgstr[2] ""
"Средства која су већ коришћена у овој датотеци ће остати тамо (ниједан "
"дизајн неће бити покварен)."
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "Избришите веб-куку"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "Да ли сте сигурни да желите да избришете ову веб-куку?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "Брисање веб-куке"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "Уреди веб-куку"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "Уреди веб-куку"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Пошаљи позивницу"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "Е-поште, раздвојене зарезима"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr ""
"Неки е-поште су од тренутних чланова тима. Њихове позивнице неће бити "
"послате."
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "Позовите чланове у тим"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"Пошто сте једини члан овог тима, тим ће бити избрисан заједно са пројектима "
"и датотекама."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "Да ли сте сигурни да желите да напустите тим %s?"
@@ -2374,15 +2378,15 @@ msgstr "Изаберите члана за унапређње"
msgid "modals.leave-and-reassign.title"
msgstr "Пре него што напустите"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Напустите тим"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Да ли сте сигурни да желите да напустите овај тим?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Напуштање тима"
@@ -2407,39 +2411,39 @@ msgstr[0] "Премести библиотеку"
msgstr[1] "Преместите библиотеке"
msgstr[2] "Преместите библиотеке"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "Гурните износ"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Пренесите власништво"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"Ако пренесете власништво, променићете своју улогу у администратора, чиме "
"ћете изгубити неке дозволе над овим тимом. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr ""
"Ви сте тренутни власник овог тима. Да ли сте сигурни да желите да %s буде "
"нови власник тима?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Нови власник тима"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "Објавите"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "Ваша библиотека је празна. Да ли сте сигурни да желите да је објавите?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "Објавите празну библиотеку"
@@ -2497,21 +2501,21 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Ажурирајте компоненте у дељеној библиотеци"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Ажурирајте"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Откажите"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"Управо ћете ажурирати компоненту у дељеној библиотеци. Ово може утицати на "
"друге датотеке које га користе."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Ажурирајте компоненту у дељеној библиотеци"
@@ -2519,11 +2523,11 @@ msgstr "Ажурирајте компоненту у дељеној библио
msgid "notifications.by-code.upgrade-version"
msgstr "Доступна је нова верзија, молимо Вас да освежите страницу"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "Позивница је успешно послата"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "Веза за позивницу је копирана"
@@ -2675,7 +2679,7 @@ msgstr ""
"Не заборавите да укључите све. Програмере, дизајнере, менаџере... "
"различитост се збраја :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "Позовите са улогом:"
@@ -2878,653 +2882,637 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "Идите на пријаву"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "Одвоји"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "Мешано"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:288
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:428
msgid "settings.select-this-color"
msgstr "Изаберите ставке користећи овај стил"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Основе"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "Управљачка табла"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Прегледач"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Радни простор"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Поравнање"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Уреди"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "Опште"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "Опште"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Главни мени"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "Измените слојеве"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Навигација"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Навигација"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Навигација"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Панели"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Путање"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Облици"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "Текстови"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Алатке"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Увећање"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Увећање"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Коментари"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "Додај чвор"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "Поравнај на дно"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "Поравнај по центру"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "Поравнај по центру водоравно"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "Поравнај по ширини"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "Поравнај на лево"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "Поравнај на десно"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "Поравнај по врху"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "Поравнај по центру усправно"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "Направите таблу из избора"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "Укључите подебљано"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "Boolean разлика"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "Boolean изузми"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "Boolean пресек"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "Boolean унија"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "Пошаљи позади"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Пошаљи назад"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "Изнесите напред"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "Изнесите на предњи део"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "Очисти отказивање"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Копирај"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "Направи ново"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Исеци"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "Умањи"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Избриши"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "Избриши чвор"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "Одвојите компоненту"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Кривина"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "Елипса"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Табла"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "Нацртај путању"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Путања"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Правоугаоник"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Текст"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Дуплирај"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "Откажи"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "Извезите облике"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "Увећај да све стане"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "Окрени водоравно"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "Окрени усправно"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "Смањите величину фонта"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "Повећајте величину фонта"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "Иди на нацрте"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "Иди на дељене библиотеке"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Претражи"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Групирај"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "Распореди водоравно"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "Прикажи / Сакриј интерфејс"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "Увећај"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "Уметни слику"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "Укључи курзив"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "Придружи чворове"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
-msgid "shortcuts.letter-spacing-dec"
-msgstr "Смањи размак између слова"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "Повећај размак између слова"
-
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
-msgid "shortcuts.line-height-dec"
-msgstr "Смањење висине линије"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
-msgid "shortcuts.line-height-inc"
-msgstr "Повећај висину линије"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.line-through"
msgstr "Укључи прелазну линију"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "Направи угао"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "Направи кривину"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "Маска"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "Спаји чворове"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "Премести"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "Премести доле брзо"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "Премести лево брзо"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "Премести десно брзо"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "Премести горе брзо"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "Премести чвор"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "Премести доле"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "Премести лево"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "Премести десно"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "Премести горе"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "Следећа табла"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "Нису пронађене пречице"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "Подеси непрозирност на 100%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "Подеси непрозирност на 10%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "Подеси непрозирност на 20%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "Подеси непрозирност на 30%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "Подеси непрозирност на 40%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "Подеси непрозирност на 50%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "Подеси непрозирност на 60%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "Подеси непрозирност на 70%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "Подеси непрозирност на 80%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "Подеси непрозирност на 90%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "Бирач боја"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "Иди на одељак за коментаре гледалаца"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "Иди на управљачку таблу"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "Иди на одељак за преглед гледалаца"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "Иди на одељак интеракције са гледаоцима"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "Иди на одељак интеракције са гледаоцима"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "Иди на радни простор"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " или "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Налепи"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "Претходна табла"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "Поврати"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "Врати увећање на почетне вредности"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
msgid "shortcuts.scale"
msgstr "Размера"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "Претражи пречице"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "Изабери све"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
msgid "shortcuts.select-next"
msgstr "Изабери следећи слој"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
msgid "shortcuts.select-parent-layer"
msgstr "Изабери родитељски слој"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
msgid "shortcuts.select-prev"
msgstr "Изабери претходни слој"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "Раздвоји чворове"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "Прикажи / Сакриј мрежу пиксела"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "Прикажи / Сакриј пречице"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "Залепи на чворове"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "Залепи на мрежу пиксела"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "Започни уређивање"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "Започни мерење"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "Заустави мерење"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "Подеси сличице"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "Пречице на тастатури"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "Укључи динамичко поравнање"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "Укључи средства"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "Укључи палету боја"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "Укључи режим фокуса"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "Режим целог екрана"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
msgid "shortcuts.toggle-guides"
msgstr "Прикажи / Сакриј вођице"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "Укључи историју"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "Укључи слојеве"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "Додај / уклони флексибилни распоред"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
msgid "shortcuts.toggle-layout-grid"
msgstr "Додај/уклони мрежни распоред"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "Закључај / Откључај"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "Закључај пропорције"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
msgid "shortcuts.toggle-rulers"
msgstr "Прикажи / Сакриј лењире"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
msgid "shortcuts.toggle-snap-guides"
msgstr "Залепи за вођице"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
msgid "shortcuts.toggle-snap-ruler-guide"
msgstr "Залепи на линије за поравнања"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "Укљичи палету текста"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
msgid "shortcuts.toggle-theme"
msgstr "Промени тему"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "Прикажи / Сакриј"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "Укљичи стил увећања"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "Укљичи подвачење"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Опозови"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Разгрупиши"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Демаскирај"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "Распореди усправно"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "Смањи увећање"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "Увећај увећање"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "Увећај на изабрано"
@@ -3576,19 +3564,19 @@ msgstr "Лозинка - Penpot"
msgid "title.settings.profile"
msgstr "Налог - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "Позивнице - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "Чланови - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Подешавања - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "Веб-куке - %s - Penpot"
@@ -3660,39 +3648,39 @@ msgstr "Прикажи интеракције на клик"
msgid "viewer.header.sitemap"
msgstr "Мапа сајта"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "Последња испорука је била успешна."
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Поравнај на водоравну средину (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "Распореди водоравни размак (%с)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Поравнај на лево (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Поравнај на десно (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Поравнај по дну (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Поравнај на усправну средину (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "Распореди усправни размак (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Поравнај по врху (%s)"
@@ -3701,31 +3689,31 @@ msgstr "Поравнај по врху (%s)"
msgid "workspace.assets.assets"
msgstr "Средства"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "Сва средства"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Боје"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Компоненте"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "Направите групу"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr "Ваше ставке ће бити аутоматски именоване као \"име групе / име ставке“"
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Избирши"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "Дуплирај"
@@ -3733,11 +3721,11 @@ msgstr "Дуплирај"
msgid "workspace.assets.duplicate-main"
msgstr "Дуплирај главно"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Уреди"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:177
+#: src/app/main/ui/workspace/sidebar/assets.cljs:186
msgid "workspace.assets.filter"
msgstr "Филтер"
@@ -3746,15 +3734,15 @@ msgstr "Филтер"
msgid "workspace.assets.graphics"
msgstr "Графика"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Група"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "Име групе"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "локална библиотека"
@@ -3766,15 +3754,15 @@ msgstr "Нема пронађених средстава"
msgid "workspace.assets.open-library"
msgstr "Отворите датотеку библиотеке"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Преименуј"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "Преименуј гурпу"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "Претражите средства"
@@ -3791,18 +3779,18 @@ msgstr[2] "%s изабраних ставки"
msgid "workspace.assets.shared-library"
msgstr "Дељена библиотека"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:237
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:235
msgid "workspace.assets.sidebar.components"
msgid_plural "workspace.assets.sidebar.components"
msgstr[0] "компонента"
msgstr[1] "%s компоненте"
msgstr[2] "%s компоненти"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:193
+#: src/app/main/ui/workspace/sidebar/assets.cljs:204
msgid "workspace.assets.sort"
msgstr "Сортирај"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Тиупографије"
@@ -3827,7 +3815,7 @@ msgstr "Размак између слова"
msgid "workspace.assets.typography.line-height"
msgstr "Висина линије"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -3839,59 +3827,59 @@ msgstr "Стилови текста"
msgid "workspace.assets.typography.text-transform"
msgstr "Трансформација текста"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "Разгрупиши"
-#: src/app/main/ui/workspace/context_menu.cljs:791
+#: src/app/main/ui/workspace/context_menu.cljs:794
msgid "workspace.context-menu.grid-cells.area"
msgstr "Направи област"
-#: src/app/main/ui/workspace/context_menu.cljs:794
+#: src/app/main/ui/workspace/context_menu.cljs:797
msgid "workspace.context-menu.grid-cells.create-board"
msgstr "Направи таблу"
-#: src/app/main/ui/workspace/context_menu.cljs:786
+#: src/app/main/ui/workspace/context_menu.cljs:789
msgid "workspace.context-menu.grid-cells.merge"
msgstr "Споји ћелије"
-#: src/app/main/ui/workspace/context_menu.cljs:749
+#: src/app/main/ui/workspace/context_menu.cljs:752
msgid "workspace.context-menu.grid-track.column.add-after"
msgstr "Додај 1 колону десно"
-#: src/app/main/ui/workspace/context_menu.cljs:748
+#: src/app/main/ui/workspace/context_menu.cljs:751
msgid "workspace.context-menu.grid-track.column.add-before"
msgstr "Додај 1 колону лево"
-#: src/app/main/ui/workspace/context_menu.cljs:750
+#: src/app/main/ui/workspace/context_menu.cljs:753
msgid "workspace.context-menu.grid-track.column.delete"
msgstr "Избирши колону"
-#: src/app/main/ui/workspace/context_menu.cljs:751
+#: src/app/main/ui/workspace/context_menu.cljs:754
msgid "workspace.context-menu.grid-track.column.delete-shapes"
msgstr "Избриши колоне и облике"
-#: src/app/main/ui/workspace/context_menu.cljs:747
+#: src/app/main/ui/workspace/context_menu.cljs:750
msgid "workspace.context-menu.grid-track.column.duplicate"
msgstr "Дуплирај колону"
-#: src/app/main/ui/workspace/context_menu.cljs:756
+#: src/app/main/ui/workspace/context_menu.cljs:759
msgid "workspace.context-menu.grid-track.row.add-after"
msgstr "Додај 1 ред испод"
-#: src/app/main/ui/workspace/context_menu.cljs:755
+#: src/app/main/ui/workspace/context_menu.cljs:758
msgid "workspace.context-menu.grid-track.row.add-before"
msgstr "Додај 1 ред изнад"
-#: src/app/main/ui/workspace/context_menu.cljs:757
+#: src/app/main/ui/workspace/context_menu.cljs:760
msgid "workspace.context-menu.grid-track.row.delete"
msgstr "Избриши ред"
-#: src/app/main/ui/workspace/context_menu.cljs:758
+#: src/app/main/ui/workspace/context_menu.cljs:761
msgid "workspace.context-menu.grid-track.row.delete-shapes"
msgstr "Избриши редове и облике"
-#: src/app/main/ui/workspace/context_menu.cljs:754
+#: src/app/main/ui/workspace/context_menu.cljs:757
msgid "workspace.context-menu.grid-track.row.duplicate"
msgstr "Дуплирај ред"
@@ -3899,7 +3887,7 @@ msgstr "Дуплирај ред"
msgid "workspace.focus.focus-mode"
msgstr "Режим фокуса"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "Искључи фокус"
@@ -3919,11 +3907,11 @@ msgstr "Линеарни градијент"
msgid "workspace.gradients.radial"
msgstr "Радијални градијент"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "Онемогућите динамичко поравнање"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "Онемогући пропорционалну размеру"
@@ -3932,23 +3920,23 @@ msgstr "Онемогући пропорционалну размеру"
msgid "workspace.header.menu.disable-scale-text"
msgstr "Онемогући размеру текста"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "Искључи лепљење на вођице"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "Искључи лепљење на пиксел"
-#: src/app/main/ui/workspace/main_menu.cljs:215
+#: src/app/main/ui/workspace/main_menu.cljs:243
msgid "workspace.header.menu.disable-snap-ruler-guides"
msgstr "Искључи лепљење на линије за поравнања"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "Омогућите динамичко поравнање"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "Омогући пропорционалну скалу"
@@ -3957,107 +3945,107 @@ msgstr "Омогући пропорционалну скалу"
msgid "workspace.header.menu.enable-scale-text"
msgstr "Омогући размеру текста"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "Заклепи на вођице"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "Омогући лепљење на пиксел"
-#: src/app/main/ui/workspace/main_menu.cljs:216
+#: src/app/main/ui/workspace/main_menu.cljs:244
msgid "workspace.header.menu.enable-snap-ruler-guides"
msgstr "Залепи на линије за поравнања"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "Сакриј имена табли"
-#: src/app/main/ui/workspace/main_menu.cljs:348
+#: src/app/main/ui/workspace/main_menu.cljs:376
msgid "workspace.header.menu.hide-guides"
msgstr "Сакриј вођице"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "Сакриј палету боја"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "Сакриј мрежу пиксела"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "Сакриј лењире"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "Сакриј палету фонтова"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Уреди"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "Датотека"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "Помоћ и информације"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "Поставке"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "Поглед"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "Поврати"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "Изабери све"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "Прикажи имена табли"
-#: src/app/main/ui/workspace/main_menu.cljs:349
+#: src/app/main/ui/workspace/main_menu.cljs:377
msgid "workspace.header.menu.show-guides"
msgstr "Прикажи вођице"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "Прикажи палету боја"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "Прикажи мрежу пиксела"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Прикажи лењире"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "Прикажи палету фонтова"
-#: src/app/main/ui/workspace/main_menu.cljs:288
+#: src/app/main/ui/workspace/main_menu.cljs:316
msgid "workspace.header.menu.toggle-dark-theme"
msgstr "Пребаците се на тамну тему"
-#: src/app/main/ui/workspace/main_menu.cljs:286, src/app/main/ui/workspace/main_menu.cljs:289
+#: src/app/main/ui/workspace/main_menu.cljs:314, src/app/main/ui/workspace/main_menu.cljs:317
msgid "workspace.header.menu.toggle-light-theme"
msgstr "Пребаците се на светлу тему"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "Опозови"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Почни поново"
@@ -4078,11 +4066,11 @@ msgstr "Чување"
msgid "workspace.header.unsaved"
msgstr "Несачуване промене"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "Режим прегледа (%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "Увећај"
@@ -4094,7 +4082,7 @@ msgstr "Попуњавање - Размера за попуњавање"
msgid "workspace.header.zoom-fit"
msgstr "Прилагоди - Смањи да се уклопи"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "Увећај да се све уклопи"
@@ -4102,19 +4090,19 @@ msgstr "Увећај да се све уклопи"
msgid "workspace.header.zoom-full-screen"
msgstr "Цели екран"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "Увећај на изабрано"
-#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:621
msgid "workspace.layout_grid.editor.options.edit-grid"
msgstr "Уреди мрежу"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1300
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1301
msgid "workspace.layout_grid.editor.options.exit"
msgstr "Изађи"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:491
msgid "workspace.layout_grid.editor.padding.expand"
msgstr "Прикажи опције за 4-страни padding"
@@ -4130,7 +4118,7 @@ msgstr "Готово"
msgid "workspace.layout_grid.editor.top-bar.locate"
msgstr "Пронађи"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1326
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1327
msgid "workspace.layout_grid.editor.top-bar.locate.tooltip"
msgstr "Пронађи распоред мреже"
@@ -4139,10 +4127,6 @@ msgstr "Пронађи распоред мреже"
msgid "workspace.libraries.add"
msgstr "Додај"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s боја"
-
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
msgstr "У вашој библиотеци још увек нема стилова боја"
@@ -4169,31 +4153,23 @@ msgstr "Недавне боје"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "Додатна РГБ боја"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Сачувајте стил боја"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s компоненти"
-
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Библиотека датотека"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s графика"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "БИБЛИОТЕКЕ У ОВОЈ ДАТОТЕЦИ"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "БИБЛИОТЕКЕ"
@@ -4202,75 +4178,71 @@ msgstr "БИБЛИОТЕКЕ"
msgid "workspace.libraries.library"
msgstr "БИБЛИОТЕКА"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "АЖУРИРАЊА БИБЛИОТЕКЕ"
-#: src/app/main/ui/workspace/libraries.cljs:360
+#: src/app/main/ui/workspace/libraries.cljs:393
msgid "workspace.libraries.loading"
msgstr "Учитавање…"
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "Нема дељених библиотека које треба ажурирати"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "Нема резултата за %s"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "Претражите заједничке библиотеке"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "ДЕЉЕНЕ БИБЛИОТЕКЕ"
-#: src/app/main/ui/workspace/libraries.cljs:352
+#: src/app/main/ui/workspace/libraries.cljs:385
msgid "workspace.libraries.shared-library-btn"
msgstr "Повежите библиотеку"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Више типографија"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Прекините везу са свим типографијама"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s типографија"
-
-#: src/app/main/ui/workspace/libraries.cljs:323
+#: src/app/main/ui/workspace/libraries.cljs:354
msgid "workspace.libraries.unlink-library-btn"
msgstr "Прекините везу са библиотеком"
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Ажурирај"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "види све промене"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "АЖУРИРАЊА"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "Кликните на + дугме да бисте додали интеракције."
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Замућење"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "Групно замућење"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "Замућење избора"
@@ -4278,39 +4250,39 @@ msgstr "Замућење избора"
msgid "workspace.options.canvas-background"
msgstr "Позадина платна"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "Ограничите садржај"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Компонента"
-#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:193
+#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:196
msgid "workspace.options.component.annotation"
msgstr "Напомена"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "Копирај"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:185
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:188
msgid "workspace.options.component.create-annotation"
msgstr "Направи напомену"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "Уреди напомену"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "Главно"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:706
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:721
msgid "workspace.options.component.swap"
msgstr "Замени компоненту"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:765
msgid "workspace.options.component.swap.empty"
msgstr "У овој библиотеци још увек нема средстава"
@@ -4354,7 +4326,7 @@ msgstr "Врх"
msgid "workspace.options.constraints.topbottom"
msgstr "Врх и Дно"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Дизајн"
@@ -4367,14 +4339,14 @@ msgstr "Извоз"
msgid "workspace.options.export-multiple"
msgstr "Избор извоза"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "Извоз 1 елемента"
msgstr[1] "Извоз %s елемента"
msgstr[2] "Извоз %s елементата"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Суфикс"
@@ -4382,7 +4354,7 @@ msgstr "Суфикс"
msgid "workspace.options.exporting-complete"
msgstr "Извоз је завршен"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "Извоз…"
@@ -4394,15 +4366,15 @@ msgstr "Извоз није успео"
msgid "workspace.options.exporting-object-slow"
msgstr "Извоз је неочекивано спор"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Попуни"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "Додајте почетак протока"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:178
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:179
msgid "workspace.options.flows.flow"
msgstr "Проток"
@@ -4411,15 +4383,15 @@ msgstr "Проток"
msgid "workspace.options.flows.flow-start"
msgstr "Почетак протока"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "Проток почиње"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Ауто"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "колоне"
@@ -4428,7 +4400,7 @@ msgstr "колоне"
msgid "workspace.options.grid.grid-title"
msgstr "Мрежа"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Боја"
@@ -4437,15 +4409,15 @@ msgstr "Боја"
msgid "workspace.options.grid.params.columns"
msgstr "Колоне"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "Гутер (Gutter)"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Висина"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Маргина"
@@ -4454,7 +4426,7 @@ msgstr "Маргина"
msgid "workspace.options.grid.params.rows"
msgstr "Редови"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "Постави као подразумевано"
@@ -4468,147 +4440,147 @@ msgstr "Величина"
msgid "workspace.options.grid.params.type"
msgstr "Врста"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Дно"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Средина"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Лево"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Десно"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "Прошири"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "Врх"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "Користи подразумевао"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Ширина"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Редови"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "Квадрат"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Попуни за групу"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Контура групе"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:320
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
msgid "workspace.options.guides.title"
msgstr "Вођице"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "Висина"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "Преглед"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "Акција"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "После одлагања"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "Анимација"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "Раствори"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "Ништа"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "Гурни"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "Клизање"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "ауто"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "Додај позадински оквир"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "Затвори када се кликне изван"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "Затвори оквир"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "Затвори оквир: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "Кашњење"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "Одредиште"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "Трајање"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "Олакшавање"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "Олакшање"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "Глатки улазак"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "Глатко улазак и излазак"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "Глатки излазак"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "Линијски"
@@ -4617,47 +4589,47 @@ msgstr "Линијски"
msgid "workspace.options.interaction-in"
msgstr "у"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "При уласку миша"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "При изласку миша"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "мс"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "Иди на"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "Иди на: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(није постављено)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "Ефекат померања"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "На клик"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "Отвори оквир"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "Отвори оквир: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "Отори URL"
@@ -4666,147 +4638,147 @@ msgstr "Отори URL"
msgid "workspace.options.interaction-out"
msgstr "Излаз"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "Доња средина"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "Доле лево"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "Доле десно"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "Средина"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "Ручно"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "Горња средина"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "Горе лево"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "Горе десно"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "Положај"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "Задржи положај скроловања"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "Претходни екран"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "У односу на"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "себе"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "Укључи оквир"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "Укључи оквир: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "Окидач"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "Током лебдења"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "Током притиска"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "Интеракције"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "Боја"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "Изгоревање боје"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "Избегавање боја"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "Потамни"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "Разлика"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "Искључење"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Тешко светло"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Нијанса"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Посветли"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "Осветљење"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "Помножи"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "Нормално"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "Оквир"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "Засићеност"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Екран"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "Меко светло"
@@ -4830,19 +4802,19 @@ msgstr "Изабрани слојеви"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "Напредна подешавања"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "Макс.Висина"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "Макс.Ширина"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "Мин.Висина"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "Мин.Ширина"
@@ -4956,15 +4928,15 @@ msgstr "простор између"
msgid "workspace.options.layout.top"
msgstr "Врх"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "Више боја"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "Више боја библиотеке"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "Непрозирност"
@@ -4973,27 +4945,27 @@ msgstr "Непрозирност"
msgid "workspace.options.position"
msgstr "Положај"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "Прототип"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "Радијус"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "Доле лево"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "Доле десно"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "Горе лево"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "Горе десно"
@@ -5005,7 +4977,7 @@ msgstr "Недавно"
msgid "workspace.options.retry"
msgstr "Покушајте поново"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "Ротација"
@@ -5013,27 +4985,27 @@ msgstr "Ротација"
msgid "workspace.options.search-font"
msgstr "Претражите фонт"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr "Изаберите облик, таблу или групу да бисте превукли везу на другу таблу."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "Изабране боје"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "Попуна избора"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "Избор контуре"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "Замућење"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "Боја сенке"
@@ -5045,47 +5017,48 @@ msgstr "Бацање сенке"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "Унутрашња сенка"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "Ширење"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "Сенка"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "Групна сенка"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "Избор сенки"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "Прикажи у извозу"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "Прикажи у режиму приказа"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "Величина"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "Унапред подешене величине"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "Контура"
@@ -5094,7 +5067,7 @@ msgstr "Контура"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "Кружни маркер"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "Круг"
@@ -5103,7 +5076,7 @@ msgstr "Круг"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "Дијамантски маркер"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "Дијамант"
@@ -5112,19 +5085,19 @@ msgstr "Дијамант"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "Линија са стрелицом"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "Стрелица"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "Ништа"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "Забољено"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "Квадратно"
@@ -5133,7 +5106,7 @@ msgstr "Квадратно"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "Квадратни маркер"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "Правоугаоник"
@@ -5142,75 +5115,75 @@ msgstr "Правоугаоник"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "Троугласта стрелицa"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "Троугао"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "Боја контуре"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "Ширина контуре"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "Средина"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "Испрекидана"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "Тачкаста"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "Унутрашња"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "Мешана"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "Спољашња"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "Чврста"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "Поравнај по дну"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "Поравнај по средини"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "Поравнај по врху"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "LTR"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "RTL"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "Ауто висина"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "Ауто ширина"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "Фиксно"
@@ -5232,35 +5205,35 @@ msgstr "Мала слова"
msgid "workspace.options.text-options.none"
msgstr "Ништа"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "Прелазна линија (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "Поравнај по средини"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "Оправдај"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "Поравнај на лево"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "Поравнај на десно"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "Текст"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "Групни текст"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "Текст избора"
@@ -5269,7 +5242,7 @@ msgstr "Текст избора"
msgid "workspace.options.text-options.titlecase"
msgstr "Насловно слово"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "Подвачење (%s)"
@@ -5278,21 +5251,21 @@ msgstr "Подвачење (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "Велико слово"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr ""
"Користите дугме за репродукцију у заглављу да бисте покренули приказ "
"прототипа."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "Ширина"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "X оса"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Y оса"
@@ -5336,39 +5309,39 @@ msgstr "Раздвоји чворове (%s)"
msgid "workspace.path.actions.snap-nodes"
msgstr "Залепи чворове (%s)"
-#: src/app/main/ui/workspace/plugins.cljs:83
+#: src/app/main/ui/workspace/plugins.cljs:84
msgid "workspace.plugins.button-open"
msgstr "Отвори"
-#: src/app/main/ui/workspace/plugins.cljs:204
+#: src/app/main/ui/workspace/plugins.cljs:205
msgid "workspace.plugins.empty-plugins"
msgstr "Још увек нема инсталираних додатака"
-#: src/app/main/ui/workspace/plugins.cljs:187
+#: src/app/main/ui/workspace/plugins.cljs:188
msgid "workspace.plugins.error.url"
msgstr "Додатак не постоји или URL није исправан."
-#: src/app/main/ui/workspace/plugins.cljs:183
+#: src/app/main/ui/workspace/plugins.cljs:184
msgid "workspace.plugins.install"
msgstr "Инсталирај"
-#: src/app/main/ui/workspace/plugins.cljs:213
+#: src/app/main/ui/workspace/plugins.cljs:214
msgid "workspace.plugins.installed-plugins"
msgstr "Инсталирани додаци"
-#: src/app/main/ui/workspace/main_menu.cljs:710
+#: src/app/main/ui/workspace/main_menu.cljs:738
msgid "workspace.plugins.menu.plugins-manager"
msgstr "Управљач додатака"
-#: src/app/main/ui/workspace/main_menu.cljs:906
+#: src/app/main/ui/workspace/main_menu.cljs:934
msgid "workspace.plugins.menu.title"
msgstr "Додаци"
-#: src/app/main/ui/workspace/plugins.cljs:209
+#: src/app/main/ui/workspace/plugins.cljs:210
msgid "workspace.plugins.plugin-list-link"
msgstr "Листа додатака"
-#: src/app/main/ui/workspace/plugins.cljs:178
+#: src/app/main/ui/workspace/plugins.cljs:179
msgid "workspace.plugins.search-placeholder"
msgstr "Напишите URL додатка"
@@ -5376,7 +5349,7 @@ msgstr "Напишите URL додатка"
msgid "workspace.plugins.success"
msgstr "Додатак је исправно учитан."
-#: src/app/main/ui/workspace/plugins.cljs:172
+#: src/app/main/ui/workspace/plugins.cljs:173
msgid "workspace.plugins.title"
msgstr "Додаци"
@@ -5400,7 +5373,7 @@ msgstr "Пошаљи назад"
msgid "workspace.shape.menu.copy"
msgstr "Копирај"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "Направи напомену"
@@ -5408,11 +5381,11 @@ msgstr "Направи напомену"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "Избор на табли"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "Направи компоненту"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "Направи више компоненти"
@@ -5420,7 +5393,7 @@ msgstr "Направи више компоненти"
msgid "workspace.shape.menu.cut"
msgstr "Исеци"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "Избриши"
@@ -5428,15 +5401,15 @@ msgstr "Избриши"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "Избриши почетак протока"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "Раздвоји инстанцу"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "Раздвоји инстанце"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "Разлика"
@@ -5448,11 +5421,11 @@ msgstr "Дуплицирај"
msgid "workspace.shape.menu.edit"
msgstr "Уреди"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "Изузми"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "Изравнај"
@@ -5485,19 +5458,19 @@ msgstr "Идите на датотеку главне компоненте"
msgid "workspace.shape.menu.group"
msgstr "Групиши"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "Сакриј"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "Прикажи / Сакриј интерфејс"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "Раскрсница"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "Закључај"
@@ -5505,7 +5478,7 @@ msgstr "Закључај"
msgid "workspace.shape.menu.mask"
msgstr "Маскирај"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "Залепи"
@@ -5521,11 +5494,11 @@ msgstr "Уклоните флексибилни распоред"
msgid "workspace.shape.menu.remove-grid"
msgstr "Уклоните распоред мреже"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "Врати преиначења на подразумеване вредности"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "Врати главну компоненту"
@@ -5533,15 +5506,15 @@ msgstr "Врати главну компоненту"
msgid "workspace.shape.menu.select-layer"
msgstr "Изабери слој"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "Прикажи"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "Прикажи на панелу са средствима"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "Прикажи главну компоненту"
@@ -5554,6 +5527,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "Постави као сличицу"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "Претвори у путanju"
@@ -5561,11 +5535,11 @@ msgstr "Претвори у путanju"
msgid "workspace.shape.menu.ungroup"
msgstr "Разгрупиши"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "Унија"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "Откључај"
@@ -5578,7 +5552,7 @@ msgstr "Демаскирај"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "Ажурирај главне компоненте"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "Ажурирајте главну компоненту"
@@ -5590,11 +5564,11 @@ msgstr "Скупи бочну траку"
msgid "workspace.sidebar.expand"
msgstr "Прошири бочну траку"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "Историја"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "Слојеви"
@@ -5634,7 +5608,7 @@ msgstr "Текстови"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "Увезена SVG својства"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "Странице"
@@ -5642,7 +5616,7 @@ msgstr "Странице"
msgid "workspace.sitemap"
msgstr "Мапа сајта"
-#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "Средства"
@@ -5650,7 +5624,7 @@ msgstr "Средства"
msgid "workspace.toolbar.color-palette"
msgstr "Палета боја (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "Коментари (%s)"
@@ -5853,19 +5827,19 @@ msgstr "Операција над %s"
msgid "workspace.undo.title"
msgstr "Историја"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "Одбаци"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "Више информација"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "Постоје ажурирања у дељеним библиотекама"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "Ажурирај"
diff --git a/frontend/translations/sv.po b/frontend/translations/sv.po
index a80247192c..dc4ef30650 100644
--- a/frontend/translations/sv.po
+++ b/frontend/translations/sv.po
@@ -1,15 +1,15 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-11 07:21+0000\n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
"Last-Translator: Henrik Allberg \n"
-"Language-Team: Swedish "
-" \n"
+"Language-Team: Swedish \n"
"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.13-dev\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -176,7 +176,7 @@ msgstr "Den öppna källkodslösningen för design och prototyper."
msgid "auth.terms-and-privacy-agreement"
msgstr "Jag godkänner [terms of service](%s) och [privacy policy](%s)."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Användarvillkor"
@@ -203,7 +203,7 @@ msgstr "...varumärkesbyggande, illustrationer, marknadsföringsmaterial, etc."
msgid "comments.mentions.not-found"
msgstr "Inga personer hittades för @%s"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Publicera"
@@ -275,7 +275,7 @@ msgstr "Dela prototyper"
msgid "common.share-link.view-all"
msgstr "Markera allt"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Avpublicera"
@@ -396,7 +396,7 @@ msgstr "Token kommer att förfalla den %"
msgid "dashboard.access-tokens.token-will-not-expire"
msgstr "Token har inget förfallodatum"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Lägg till som delat bibliotek"
@@ -404,31 +404,31 @@ msgstr "Lägg till som delat bibliotek"
msgid "dashboard.change-email"
msgstr "Ändra e-post"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(kopia)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Skapa nytt team"
-#: src/app/main/ui/workspace/main_menu.cljs:631
+#: src/app/main/ui/workspace/main_menu.cljs:659
msgid "dashboard.create-version-menu"
msgstr "Nåla fast denna version"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Ditt Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Radera team"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Ladda ner Penpot-fil (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Ladda ner standardfil (.svg + .json)"
@@ -484,7 +484,7 @@ msgstr "Inga bibliotek än."
msgid "dashboard.export-binary-multi"
msgstr "Ladda ner % Penpot-filer (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Exportera tavla som PDF"
@@ -500,7 +500,7 @@ msgstr "Exportera Penpot %s filer"
msgid "dashboard.export-multiple.selected"
msgstr "%s av %s objekt markerade"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Exportera"
@@ -698,11 +698,11 @@ msgstr "Laddar upp data till server (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Laddar upp fil: %"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Bjud in personer"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Lämna teamet"
@@ -714,7 +714,7 @@ msgstr "Bibliotek & mallar"
msgid "dashboard.libraries-and-templates.explore"
msgstr "Ta reda på mer om dem och hur du kan bidra"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "Problem när mallen importerades. Mallen importerades inte."
@@ -746,7 +746,7 @@ msgstr "Flytta till andra team"
msgid "dashboard.new-file"
msgstr "+ Ny fil"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Ny fil"
@@ -754,7 +754,7 @@ msgstr "Ny fil"
msgid "dashboard.new-project"
msgstr "+ Nytt projekt"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Nytt projekt"
@@ -762,11 +762,11 @@ msgstr "Nytt projekt"
msgid "dashboard.no-matches-for"
msgstr "Inga träffar hittades för ”%s”"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Fastklistrade projekt visas här"
-#: src/app/main/ui/dashboard/comments.cljs:90
+#: src/app/main/ui/dashboard/comments.cljs:91
msgid "dashboard.notifications"
msgstr "Notifieringar"
@@ -778,7 +778,7 @@ msgstr "Din e-postadress har uppdaterats"
msgid "dashboard.notifications.email-verified-successfully"
msgstr "Din e-postadress har verifierats"
-#: src/app/main/data/profile.cljs:272
+#: src/app/main/data/profile.cljs:273
msgid "dashboard.notifications.notifications-saved"
msgstr "Notifieringsinställningar uppdaterade"
@@ -786,11 +786,11 @@ msgstr "Notifieringsinställningar uppdaterade"
msgid "dashboard.notifications.password-saved"
msgstr "Lösenordet sparat!"
-#: src/app/main/ui/dashboard/comments.cljs:44
+#: src/app/main/ui/dashboard/comments.cljs:45
msgid "dashboard.notifications.view"
msgstr "Visa notifieringar"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s medlemmar"
@@ -822,7 +822,7 @@ msgstr "Du är nu ägare till detta team."
msgid "dashboard.permissions-change.viewer"
msgstr "Du är nu en tittare i det här teamet."
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Klistra fast/Lossa"
@@ -859,7 +859,7 @@ msgstr "Du är inte längre en del av teamet ”%s”."
msgid "dashboard.save-settings"
msgstr "Spara inställningar"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Sök…"
@@ -939,7 +939,7 @@ msgstr "Notifieringar"
msgid "dashboard.show-all-files"
msgstr "Visa alla filer"
-#: src/app/main/ui/workspace/main_menu.cljs:638
+#: src/app/main/ui/workspace/main_menu.cljs:666
msgid "dashboard.show-version-history"
msgstr "Versionshistorik"
@@ -963,7 +963,7 @@ msgstr[1] "Dina filer har duplicerats"
msgid "dashboard.success-duplicate-project"
msgstr "Ditt projekt har duplicerats"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Din fil har flyttats"
@@ -975,15 +975,15 @@ msgstr "Dina filer har flyttats"
msgid "dashboard.success-move-project"
msgstr "Ditt projekt har flyttats"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Team info"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Teammedlemmar"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Teamprojekt"
@@ -999,7 +999,7 @@ msgstr "Sökresultat"
msgid "dashboard.type-something"
msgstr "Skriv för att söka i resultatet"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Avpublicera biblioteket"
@@ -1007,50 +1007,50 @@ msgstr "Avpublicera biblioteket"
msgid "dashboard.update-settings"
msgstr "Uppdatera inställningarna"
-#: src/app/main/ui/dashboard/sidebar.cljs:856
+#: src/app/main/ui/dashboard/sidebar.cljs:976
msgid "dashboard.upgrade-plan.no-limits"
msgstr "Inga gränser för kreativitet"
-#: src/app/main/ui/dashboard/sidebar.cljs:854
+#: src/app/main/ui/dashboard/sidebar.cljs:974
msgid "dashboard.upgrade-plan.penpot-free"
msgstr "Gratis Penpot"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "Är aktiv"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "När denna hook triggas kommer händelsedetaljer att sändas"
-#: src/app/main/ui/dashboard/team.cljs:982
+#: src/app/main/ui/dashboard/team.cljs:1160
msgid "dashboard.webhooks.cant-edit"
msgstr "Du kan bara ta bort eller ändra webhooks som du har skapat."
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "Innehållstyp"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "Skapa webhook"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "Webhook skapades."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"Webhooks är ett enkelt sätt att låta andra webbplatser och appar bli "
"meddelade när vissa händelser inträffar i Penpot. Vi skickar en "
"POST-begäran till var och en av de webbadresser du anger."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "Tryck på knappen \"Lägg till webhook\" för att lägga till en."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "Det finns inga webhooks."
@@ -1070,7 +1070,7 @@ msgstr "E-post"
msgid "dashboard.your-name"
msgstr "Ditt namn"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Ditt Penpot"
@@ -1086,15 +1086,15 @@ msgstr "Observera"
msgid "ds.component-subtitle"
msgstr "Komponenter att uppdatera:"
-#: src/app/main/ui/workspace/plugins.cljs:338, src/app/main/ui/workspace/plugins.cljs:392
+#: src/app/main/ui/workspace/plugins.cljs:339, src/app/main/ui/workspace/plugins.cljs:393
msgid "ds.confirm-allow"
msgstr "Tillåt"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Avbryt"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Ok"
@@ -1146,11 +1146,11 @@ msgstr "Du kan inte använda e-postadressen som lösenord"
msgid "errors.email-domain-not-allowed"
msgstr "Domänen är inte tillåten"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "E-postmeddelandet «%s» har genererat många returmeddelanden."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr ""
"E-postmeddelandet ”%s” har rapporterats som skräppost eller permanenta "
@@ -1166,11 +1166,6 @@ msgstr ""
msgid "errors.feature-not-supported"
msgstr "Funktionen \"%s\" stöds inte."
-#: src/app/main/ui/auth/register.cljs, src/app/main/ui/dashboard/team_form.cljs, src/app/main/ui/onboarding/team_choice.cljs, src/app/main/ui/setti ngs/access_tokens.cljs, src/app/main/ui/settings/feedback.cljs, src/app/main/ui/settings/profile.cljs, src/app/main/ui/workspace/sidebar/assets.cljs
-#, unused
-msgid "errors.field-max-length"
-msgstr "Får innehålla högst 1 tecken."
-
#, unused
msgid "errors.field-min-length"
msgstr "Måste innehålla minst 1 tecken."
@@ -1187,7 +1182,7 @@ msgstr ""
"aktiverade funktionerna och funktionerna i den fil du försöker öppna. "
"Migreringar för ”%s” måste tillämpas innan filen kan öppnas."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Något fel har inträffat."
@@ -1220,11 +1215,11 @@ msgstr "Denna inbjudan kan vara avbruten eller har upphört att gälla."
msgid "errors.ldap-disabled"
msgstr "LDAP-autentisering är inaktiverad."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "Du har nått \"%s\" kvoten. Kontakta supporten."
-#: src/app/main/ui/dashboard/team.cljs:185, src/app/main/ui/onboarding/team_choice.cljs:101
+#: src/app/main/ui/dashboard/team.cljs:187, src/app/main/ui/dashboard/team.cljs:849, src/app/main/ui/onboarding/team_choice.cljs:101
msgid "errors.maximum-invitations-by-request-reached"
msgstr ""
"Det maximala (%s) antalet e-postmeddelanden som kan bjudas in i en enda "
@@ -1242,7 +1237,7 @@ msgstr "Det verkar som om innehållet i bilden inte stämmer överens med filtil
msgid "errors.media-type-not-allowed"
msgstr "Det här är inte en giltig bild."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"Den profil du bjuder in har e-postmeddelanden som är avstängda "
@@ -1270,7 +1265,7 @@ msgstr "Ogiltiga data i urklipp"
msgid "errors.profile-blocked"
msgstr "Profilen är blockerad"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr "Din profil har e-post avstängd (spamrapporter eller många returmeddelanden)."
@@ -1282,17 +1277,17 @@ msgstr "Registreringen är för närvarande inaktiverad."
msgid "errors.team-feature-mismatch"
msgstr "Upptäckt av inkompatibel funktion '%s'"
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr ""
"Otillräckligt med medlemmar för att lämna teamet, du vill förmodligen ta "
"bort det."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "Medlemmen du försöker tilldela finns inte."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr "Ägare kan inte lämna teamet, du måste tilldela ägarrollen till någon annan."
@@ -1312,31 +1307,31 @@ msgstr "Valideringsfel"
msgid "errors.version-not-supported"
msgstr "Filen har ett inkompatibelt versionsnummer"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "Anslutningsfel, URL:en är inte tillgänglig"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "Valideringsfel av URL:en."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "Den sista leveransen lyckades inte."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "Fel på SSL validering."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "Timeout"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "Oväntat fel vid validering"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "Oväntad status %"
@@ -1401,19 +1396,19 @@ msgstr "Ett fel har inträffat"
msgid "inspect.attributes.blur"
msgstr "Oskärpa"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Värde"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1421,7 +1416,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Fylla"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Ladda ner källbilden"
@@ -1515,79 +1510,82 @@ msgstr "Ifylld"
msgid "inspect.attributes.stroke.width"
msgstr "Bredd"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Typografi"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Teckensnittsfamilj"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Teckenstorlek"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Teckensnitt"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "Teckensnittsvikt"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Teckenavstånd"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Radavstånd"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Textdekorering"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Ingen"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Understrykning"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Texttransformation"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "Versalbörjan"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "Gemener"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Ingen"
-#: src/app/main/ui/inspect/attributes/text.cljs:159
+#: src/app/main/ui/inspect/attributes/text.cljs:152
msgid "inspect.attributes.typography.text-transform.unset"
msgstr "Oinställt"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "Versaler"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr "Om du vill veta mer om designinspektion kan du besöka Penpots hjälpcenter"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "Mer information om inspektion"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr ""
"Välj en form, ett tavla eller en grupp för att inspektera deras egenskaper "
@@ -1649,7 +1647,7 @@ msgstr "Text"
msgid "inspect.tabs.info"
msgstr "Info"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Genvägar"
@@ -1661,11 +1659,11 @@ msgstr "Acceptera"
msgid "labels.access-tokens"
msgstr "Accesstokens"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "Aktiv"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.add"
msgstr "Lägg till"
@@ -1673,11 +1671,11 @@ msgstr "Lägg till"
msgid "labels.add-custom-font"
msgstr "Lägg till teckensnitt"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.adding"
msgstr "Lägger till..."
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Admin"
@@ -1685,7 +1683,7 @@ msgstr "Admin"
msgid "labels.adobe-xd"
msgstr "Adobe XD"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Allt"
@@ -1708,7 +1706,7 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "Bad Gateway"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Avbryt"
@@ -1716,11 +1714,11 @@ msgstr "Avbryt"
msgid "labels.canva"
msgstr "Canva"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Stäng"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:186
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:181
msgid "labels.collapse"
msgstr "Dra ihop"
@@ -1732,11 +1730,11 @@ msgstr "Kommentar"
msgid "labels.comment.mark-as-solved"
msgstr "Markera som löst"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Kommentarer"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Community"
@@ -1744,7 +1742,7 @@ msgstr "Community"
msgid "labels.confirm-password"
msgstr "Bekräfta lösenordet"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Fortsätt"
@@ -1756,7 +1754,7 @@ msgstr "Fortsätt med"
msgid "labels.continue-with-penpot"
msgstr "Du kan fortsätta med ett Penpot-konto"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "Kopiera länk"
@@ -1764,7 +1762,7 @@ msgstr "Kopiera länk"
msgid "labels.copyright"
msgstr "Kaleidos @2024"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Skapa"
@@ -1784,7 +1782,7 @@ msgstr "Anpassade teckensnitt"
msgid "labels.dashboard"
msgstr "Översiktsvy"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Radera"
@@ -1796,7 +1794,7 @@ msgstr "Radera kommentar"
msgid "labels.delete-comment-thread"
msgstr "Radera tråd"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Ta bort inbjudan"
@@ -1813,15 +1811,15 @@ msgstr "Utveckling"
msgid "labels.director"
msgstr "Direktör"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "Kassera"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Utkast"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Redigera"
@@ -1829,7 +1827,7 @@ msgstr "Redigera"
msgid "labels.edit-file"
msgstr "Redigera fil"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Redaktör"
@@ -1838,11 +1836,11 @@ msgstr "Redaktör"
msgid "labels.event"
msgstr "Evenemang"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Löpt ut"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Exportera"
@@ -1870,7 +1868,7 @@ msgstr "Teckensnittsleverantör"
msgid "labels.font-variants"
msgstr "Stilar"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Teckensnitt"
@@ -1884,11 +1882,11 @@ msgstr "VD eller Grundare"
msgid "labels.freelancer"
msgstr "Frilansare"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "Github repo"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Ge feedback"
@@ -1900,19 +1898,19 @@ msgstr "Gå tillbaka"
msgid "labels.graphic-design"
msgstr "Grafisk design"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Hjälpcenter"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Dölj åtgärdade kommentarer"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:134
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:130
msgid "labels.import"
msgstr "Importera"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "Inaktiv"
@@ -1934,7 +1932,7 @@ msgstr "Internt fel"
msgid "labels.invision"
msgstr "InVision"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Inbjudningar"
@@ -1942,7 +1940,7 @@ msgstr "Inbjudningar"
msgid "labels.language"
msgstr "Språk"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Bibliotek & mallar"
@@ -1958,7 +1956,7 @@ msgstr "Logga in eller registrera dig"
msgid "labels.login"
msgstr "Logga in"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Logga ut"
@@ -1966,11 +1964,11 @@ msgstr "Logga ut"
msgid "labels.marketing"
msgstr "Marknadsföring"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Medlem"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Medlemmar"
@@ -1978,15 +1976,15 @@ msgstr "Medlemmar"
msgid "labels.new-password"
msgstr "Nytt lösenord"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "Nästa"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "Du har kommit ikapp! Nya meddelanden om kommentarer visas här."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "Inga pågående inbjudningar."
@@ -2005,7 +2003,7 @@ msgstr "Oops!"
msgid "labels.notifications"
msgstr "Notifieringar"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "1 fil"
@@ -2017,7 +2015,7 @@ msgid_plural "labels.num-of-frames"
msgstr[0] "1 tavla"
msgstr[1] "%s tavlor"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "1 projekt"
@@ -2036,7 +2034,7 @@ msgstr "Gammalt lösenord"
msgid "labels.only-yours"
msgstr "Endast din"
-#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:309, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:338
+#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:310, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:339
msgid "labels.options"
msgstr "Alternativ"
@@ -2052,7 +2050,7 @@ msgstr "Annat (ange)"
msgid "labels.other-short"
msgstr "Andra"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Ägare"
@@ -2060,7 +2058,7 @@ msgstr "Ägare"
msgid "labels.password"
msgstr "Lösenord"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "Pågående"
@@ -2084,11 +2082,11 @@ msgstr "Produktledning"
msgid "labels.profile"
msgstr "Profil"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Projekt"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Releaseinformation"
@@ -2102,11 +2100,11 @@ msgstr "Ladda om fil"
msgid "labels.remove"
msgstr "Ta bort"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Ta bort medlem"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Byt namn"
@@ -2134,7 +2132,7 @@ msgstr "nytt svar"
msgid "labels.reply.thread"
msgstr "Svara"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "Skicka inbjudan igen"
@@ -2146,15 +2144,15 @@ msgstr "Återställ"
msgid "labels.retry"
msgstr "Försök igen"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Roll"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Spara"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:715
+#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:730
msgid "labels.search"
msgstr "Sök"
@@ -2182,11 +2180,11 @@ msgstr "Vi utför schemalagt underhåll av våra system."
msgid "labels.service-unavailable.main-message"
msgstr "Tjänsten är inte tillgänglig"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:79
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:75
msgid "labels.sets"
msgstr "Uppsättningar"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Inställningar"
@@ -2198,11 +2196,11 @@ msgstr "Dela"
msgid "labels.share-prototype"
msgstr "Dela prototyp"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Bibliotek"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Visa alla kommentarer"
@@ -2210,11 +2208,11 @@ msgstr "Visa alla kommentarer"
msgid "labels.show-comments-list"
msgstr "Visa kommentarslista"
-#: src/app/main/ui/workspace/comments.cljs:67, src/app/main/ui/workspace/comments.cljs:139
+#: src/app/main/ui/workspace/comments.cljs:68, src/app/main/ui/workspace/comments.cljs:140
msgid "labels.show-mentions"
msgstr "Visa bara dina omnämnanden"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Visa bara dina kommentarer"
@@ -2226,7 +2224,7 @@ msgstr "Koncept"
msgid "labels.start"
msgstr "Start"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Status"
@@ -2248,7 +2246,7 @@ msgstr "Teammedlem"
msgid "labels.themes"
msgstr "Teman"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Självstudier"
@@ -2276,15 +2274,15 @@ msgstr "Ladda upp teckensnitt"
msgid "labels.uploading"
msgstr "Laddar upp…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "Enbart visning"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Visare"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Webhooks"
@@ -2292,11 +2290,11 @@ msgstr "Webhooks"
msgid "labels.write-new-comment"
msgstr "Skriv ny kommentar"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(du)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "Ditt konto"
@@ -2305,23 +2303,23 @@ msgstr "Ditt konto"
msgid "labels.youtube"
msgstr "YouTube"
-#: src/app/main/ui/workspace/colorpicker.cljs:449, src/app/main/ui/workspace/colorpicker.cljs:450, src/app/main/ui/workspace/colorpicker.cljs:452
+#: src/app/main/ui/workspace/colorpicker.cljs:486, src/app/main/ui/workspace/colorpicker.cljs:487, src/app/main/ui/workspace/colorpicker.cljs:489
msgid "media.choose-image"
msgstr "Välj bild"
-#: src/app/main/ui/workspace/colorpicker.cljs:244
+#: src/app/main/ui/workspace/colorpicker.cljs:256
msgid "media.gradient"
msgstr "Gradient"
-#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:44, src/app/main/ui/ds/utilities/swatch.cljs:57, src/app/main/ui/inspect/attributes/common.cljs:63, src/app/main/ui/workspace/colorpicker.cljs:246, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:251
+#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:45, src/app/main/ui/ds/utilities/swatch.cljs:58, src/app/main/ui/inspect/attributes/common.cljs:44, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:65, src/app/main/ui/workspace/colorpicker.cljs:258, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:395
msgid "media.image"
msgstr "Bild"
-#: src/app/main/ui/inspect/attributes/common.cljs:74
+#: src/app/main/ui/inspect/attributes/common.cljs:55
msgid "media.image.short"
msgstr "img"
-#: src/app/main/ui/workspace/colorpicker.cljs:442
+#: src/app/main/ui/workspace/colorpicker.cljs:479
msgid "media.keep-aspect-ratio"
msgstr "Behåll aspektförhållandet"
@@ -2339,7 +2337,7 @@ msgstr "Laddar bild…"
msgid "media.radial"
msgstr "Radiell"
-#: src/app/main/ui/workspace/colorpicker.cljs:242
+#: src/app/main/ui/workspace/colorpicker.cljs:254
msgid "media.solid"
msgstr "Fylld"
@@ -2415,19 +2413,19 @@ msgstr "Skapa token"
msgid "modals.create-access-token.title"
msgstr "Generera accesstoken"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "Skapa webhook"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "Skapa webhook"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "Payload URL"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://example.com/postreceive"
@@ -2473,11 +2471,11 @@ msgstr ""
msgid "modals.delete-comment-thread.title"
msgstr "Radera konversation"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "Är du säker på att du vill radera anteckningen?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "Radera anteckningen"
@@ -2525,11 +2523,11 @@ msgstr ""
msgid "modals.delete-font.title"
msgstr "Ta bort teckensnitt"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Är du säker på att du vill ta bort den här sidan?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Radera sida"
@@ -2575,29 +2573,29 @@ msgid_plural "modals.delete-shared-confirm.title"
msgstr[0] "Raderar fil"
msgstr[1] "Raderar filer"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Radera team"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Är du säker på att du vill ta bort det här teamet? Alla projekt och filer "
"som är kopplade till teamet raderas permanent."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Ta bort team"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Ta bort medlemmar"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Är du säker på att du vill ta bort den här medlemmen från teamet?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Ta bort teammedlem"
@@ -2611,57 +2609,57 @@ msgstr[1] ""
"Tillgångar som redan har använts i dessa filer kommer att finnas kvar där "
"(ingen design kommer att förstöras)."
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "Ta bort webhook"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "Är du säker på att du vill ta bort denna webhook?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "Raderar webhook"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "Redigera webhook"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "Redigera webhook"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Skicka inbjudan"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "E-post, kommaseparerad"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr ""
"Vissa e-postmeddelanden är från nuvarande teammedlemmar. Deras inbjudningar "
"kommer inte att skickas."
-#: src/app/main/ui/dashboard/team.cljs:220
+#: src/app/main/ui/dashboard/team.cljs:222
msgid "modals.invite-team-member.text"
msgstr ""
"Du kan bjuda in medlemmar till teamet så att de får tillgång till den här "
"filen och alla teamets filer."
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "Bjud in teammedlemmar till teamet"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"Eftersom du är den enda medlemmen i det här teamet raderas teamet "
"tillsammans med sina projekt och filer."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "Är du säker på att du vill lämna %s teamet?"
@@ -2689,15 +2687,15 @@ msgstr "Välj en medlem att befordra"
msgid "modals.leave-and-reassign.title"
msgstr "Innan du lämnar"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Lämna teamet"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Är du säker på att du vill lämna teamet?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Lämnar teamet"
@@ -2719,39 +2717,39 @@ msgid_plural "modals.move-shared-confirm.title"
msgstr[0] "Flytta biblioteket"
msgstr[1] "Flytta biblioteken"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "Knuffmängd"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Överför ägandet"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"Om du överför ägandet kommer du att ändra din roll till Admin och förlora "
"vissa behörigheter över det här teamet. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr ""
"Du är den nuvarande ägaren av detta team. Är du säker på att du vill göra "
"%s till den nya ägaren av teamet?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Ny teamägare"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "Publicera"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "Ditt bibliotek är tomt. Är du säker på att du vill publicera den?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "Publicera tomt bibliotek"
@@ -2807,21 +2805,21 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Uppdaterar komponenter i ett delat bibliotek"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Uppdatera"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Avbryt"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"Du håller på att uppdatera komponenter i ett delat bibliotek. Detta kan "
"påverka andra filer som använder den."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Uppdatera en komponent i ett delat bibliotek"
@@ -2933,11 +2931,11 @@ msgstr ""
msgid "notifications.by-code.upgrade-version"
msgstr "En ny version är tillgänglig, uppdatera sidan"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "Inbjudan skickades"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "Inbjudningslänken kopierades"
@@ -3087,7 +3085,7 @@ msgstr ""
"Kom ihåg att inkludera alla. Utvecklare, designers, chefer... mångfald gör "
"skillnad :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "Bjud in med rollen:"
@@ -3307,665 +3305,649 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "Gå till Logga in"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "Separera"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "Mixad"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:283
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:423
msgid "settings.remove-color"
msgstr "Ta bort färg"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:288
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:428
msgid "settings.select-this-color"
msgstr "Välj objekt med denna stil"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Grundläggande"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "Översiktsvy"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Visare"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Arbetsyta"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Justering"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Redigera"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "Allmän"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "Allmän"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Huvudmeny"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "Redigera lager"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Navigation"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Navigation"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Navigation"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Paneler"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Banor"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Former"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "Texter"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Verktyg"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Kommentarer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "Lägg till nod"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "Justera botten"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "Justera centrum"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "Justera centrum horisontellt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "Justera text till båda marginalerna"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "Justera vänster"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "Justera höger"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "Justera toppen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "Justera centrum vertikalt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "Skapa tavla från markering"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "Växla mellan fetstil"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "Boolesk skillnad"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "Boolean exkluderar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "Boolean korsning"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "Booleansk union"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "Flytta längst bak"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Flytta bakåt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "Flytta framåt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "Flytta längst fram"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "Ångra rensa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Kopiera"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
msgid "shortcuts.copy-link"
msgstr "Kopiera länk till urklipp"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "Skapa ny"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Klipp ut"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "Zooma ut"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Radera"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "Radera nod"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "Separera komponent"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Kurva"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "Ellips"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Tavla"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "Rita bana"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Bana"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Rektangel"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Text"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Duplicera"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "Avbryt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "Exportera former"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "Zooma för att få plats med alla"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "Vänd horisontellt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "Vänd vertikalt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "Minska teckenstorleken"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "Öka teckenstorleken"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "Gå till utkast"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "Gå till delade bibliotek"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Sök"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Grupp"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "Distribuera horisontellt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "Visa / dölja UI"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "Zooma in"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "Infoga bild"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "Växla mellan kursiv stil"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "Sammanfoga noder"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
-msgid "shortcuts.letter-spacing-dec"
-msgstr "Minska bokstavsavståndet"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "Öka bokstavsavståndet"
-
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
-msgid "shortcuts.line-height-dec"
-msgstr "Minska radhöjden"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
-msgid "shortcuts.line-height-inc"
-msgstr "Öka radhöjden"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.line-through"
msgstr "Växla mellan linje igenom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "Gör ett hörn"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "Gör en kurva"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "Mask"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "Sammanfoga noder"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "Flytta"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "Flytta ner snabbt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "Flytta vänster snabbt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "Flytta höger snabbt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "Flytta upp snabbt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "Flytta nod"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "Flytta ner"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "Flytta vänster"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "Flytta höger"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "Flytta upp"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "Nästa tavla"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "Inga genvägar hittades"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "Ställ in opacitet på 100%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "Ställ in opacitet på 10%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "Ställ in opacitet på 20%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "Ställ in opacitet på 30%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "Ställ in opacitet på 40%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "Ställ in opacitet på 50%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "Ställ in opacitet på 60%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "Ställ in opacitet på 70%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "Ställ in opacitet på 80%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "Ställ in opacitet på 90%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "Färgväljare"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "Gå till visarens kommentarsektion"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "Gå till översiktsvyn"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "Gå till visarens inspektionssektion"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "Gå till visarens interaktionssektion"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "Gå till visarens interaktionssektion"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "Gå till arbetsytan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " eller "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Klistra in"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "Föregående tavla"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "Återställ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
msgid "shortcuts.rename"
msgstr "Byt namn"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "Nollställ zoomen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
msgid "shortcuts.scale"
msgstr "Skala"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "Sök genvägar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "Markera allt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
msgid "shortcuts.select-next"
msgstr "Välj nästa lager"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
msgid "shortcuts.select-parent-layer"
msgstr "Välj överordnat lager"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
msgid "shortcuts.select-prev"
msgstr "Välj föregående lager"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "Separera noder"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "Visa / dölj pixelrutnät"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "Visa / dölj genvägar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "Fäst vid noder"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "Fäst till pixelrutnät"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "Börja redigera"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "Starta mätningen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "Stoppa mätningen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "Ställ in miniatyrbilder"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "Snabbkommandon"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "Växla dynamisk justering"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "Växla tillgångar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "Växla färgpalett"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "Växla fokusläge"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "Växla till helskärm"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
msgid "shortcuts.toggle-guides"
msgstr "Visa / dölj guidelinjer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "Växla historia"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "Växla lager"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "Lägg till/ta bort flex layout"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
msgid "shortcuts.toggle-layout-grid"
msgstr "Lägg till/ta bort grid-layout"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "Lås / lås upp"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "Lås proportioner"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
msgid "shortcuts.toggle-rulers"
msgstr "Visa / dölja linjaler"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
msgid "shortcuts.toggle-snap-guides"
msgstr "Fäst till guidelinjer"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
msgid "shortcuts.toggle-snap-ruler-guide"
msgstr "Fäst till linjaler"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "Växla textpalett"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
msgid "shortcuts.toggle-theme"
msgstr "Ändra tema"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "Visa / dölj"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "Växla zoomstil"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "Växla understrykning"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Ångra"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Avgruppera"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Avmaska"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "Distribuera vertikalt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "Minskning av zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "Ökning av zoom"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "Zooma in markerad"
@@ -4021,19 +4003,19 @@ msgstr "Lösenord - Penpot"
msgid "title.settings.profile"
msgstr "Profil - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "Inbjudningar - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "Medlemmar - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Inställningar - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "Webhooks - %s - Penpot"
@@ -4105,43 +4087,43 @@ msgstr "Visa interaktioner på klick"
msgid "viewer.header.sitemap"
msgstr "Översiktsplan"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "Senaste leveransen lyckades."
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Justera horisontellt centrum (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "Distribuera horisontellt avstånd (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Justera vänster (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Justera höger (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Justera botten (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Justera vertikalt centrum (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "Distribuera vertikalt avstånd (%)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Justera toppen (%s)"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:163
+#: src/app/main/ui/workspace/sidebar/assets.cljs:172
msgid "workspace.assets.add-library"
msgstr "Lägg till bibliotek"
@@ -4150,19 +4132,19 @@ msgstr "Lägg till bibliotek"
msgid "workspace.assets.assets"
msgstr "Tillgångar"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "Alla tillgångar"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Färger"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:493
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:497
msgid "workspace.assets.colors.add-color"
msgstr "Lägg till färg"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Komponenter"
@@ -4170,19 +4152,19 @@ msgstr "Komponenter"
msgid "workspace.assets.components.add-component"
msgstr "Lägg till komponent"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "Skapa en grupp"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr "Dina objekt kommer att namnges automatiskt som \"gruppnamn / objektnamn\""
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Radera"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "Duplicera"
@@ -4190,11 +4172,11 @@ msgstr "Duplicera"
msgid "workspace.assets.duplicate-main"
msgstr "Duplicera huvudarbetsytan"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Redigera"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:177
+#: src/app/main/ui/workspace/sidebar/assets.cljs:186
msgid "workspace.assets.filter"
msgstr "Filter"
@@ -4203,23 +4185,23 @@ msgstr "Filter"
msgid "workspace.assets.graphics"
msgstr "Grafik"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:576
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:190, src/app/main/ui/workspace/sidebar/assets/components.cljs:576
msgid "workspace.assets.grid-view"
msgstr "Rutnätsvy"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Grupp"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "Gruppnamn"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:572
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:191, src/app/main/ui/workspace/sidebar/assets/components.cljs:572
msgid "workspace.assets.list-view"
msgstr "Listvy"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "lokala bibliotek"
@@ -4231,15 +4213,15 @@ msgstr "Inga tillgångar hittades"
msgid "workspace.assets.open-library"
msgstr "Öppna bibliotek fil"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Byt namn"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "Byt namn på gruppen"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "Sök tillgångar"
@@ -4255,21 +4237,21 @@ msgstr[1] "%s objekt markerade"
msgid "workspace.assets.shared-library"
msgstr "Delat bibliotek"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:237
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:235
msgid "workspace.assets.sidebar.components"
msgid_plural "workspace.assets.sidebar.components"
msgstr[0] "1 komponent"
msgstr[1] "%s komponenter"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:193
+#: src/app/main/ui/workspace/sidebar/assets.cljs:204
msgid "workspace.assets.sort"
msgstr "Sortera"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Typografi"
-#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:404
+#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:405
msgid "workspace.assets.typography.add-typography"
msgstr "Lägg till teckenssnitt"
@@ -4294,7 +4276,7 @@ msgstr "Teckenavstånd"
msgid "workspace.assets.typography.line-height"
msgstr "Radavstånd"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -4306,59 +4288,59 @@ msgstr "Textstilar"
msgid "workspace.assets.typography.text-transform"
msgstr "Texttransformation"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "Avgruppera"
-#: src/app/main/ui/workspace/context_menu.cljs:791
+#: src/app/main/ui/workspace/context_menu.cljs:794
msgid "workspace.context-menu.grid-cells.area"
msgstr "Skapa område"
-#: src/app/main/ui/workspace/context_menu.cljs:794
+#: src/app/main/ui/workspace/context_menu.cljs:797
msgid "workspace.context-menu.grid-cells.create-board"
msgstr "Skapa tavla"
-#: src/app/main/ui/workspace/context_menu.cljs:786
+#: src/app/main/ui/workspace/context_menu.cljs:789
msgid "workspace.context-menu.grid-cells.merge"
msgstr "Sammanfoga celler"
-#: src/app/main/ui/workspace/context_menu.cljs:749
+#: src/app/main/ui/workspace/context_menu.cljs:752
msgid "workspace.context-menu.grid-track.column.add-after"
msgstr "Lägg till 1 kolumn till höger"
-#: src/app/main/ui/workspace/context_menu.cljs:748
+#: src/app/main/ui/workspace/context_menu.cljs:751
msgid "workspace.context-menu.grid-track.column.add-before"
msgstr "Lägg till 1 kolumn till vänster"
-#: src/app/main/ui/workspace/context_menu.cljs:750
+#: src/app/main/ui/workspace/context_menu.cljs:753
msgid "workspace.context-menu.grid-track.column.delete"
msgstr "Radera kolumn"
-#: src/app/main/ui/workspace/context_menu.cljs:751
+#: src/app/main/ui/workspace/context_menu.cljs:754
msgid "workspace.context-menu.grid-track.column.delete-shapes"
msgstr "Ta bort kolumn och former"
-#: src/app/main/ui/workspace/context_menu.cljs:747
+#: src/app/main/ui/workspace/context_menu.cljs:750
msgid "workspace.context-menu.grid-track.column.duplicate"
msgstr "Duplicera kolumn"
-#: src/app/main/ui/workspace/context_menu.cljs:756
+#: src/app/main/ui/workspace/context_menu.cljs:759
msgid "workspace.context-menu.grid-track.row.add-after"
msgstr "Lägg till 1 rad nedanför"
-#: src/app/main/ui/workspace/context_menu.cljs:755
+#: src/app/main/ui/workspace/context_menu.cljs:758
msgid "workspace.context-menu.grid-track.row.add-before"
msgstr "Lägg till 1 rad ovanför"
-#: src/app/main/ui/workspace/context_menu.cljs:757
+#: src/app/main/ui/workspace/context_menu.cljs:760
msgid "workspace.context-menu.grid-track.row.delete"
msgstr "Ta bort rad"
-#: src/app/main/ui/workspace/context_menu.cljs:758
+#: src/app/main/ui/workspace/context_menu.cljs:761
msgid "workspace.context-menu.grid-track.row.delete-shapes"
msgstr "Ta bort rad och former"
-#: src/app/main/ui/workspace/context_menu.cljs:754
+#: src/app/main/ui/workspace/context_menu.cljs:757
msgid "workspace.context-menu.grid-track.row.duplicate"
msgstr "Duplicera rad"
@@ -4366,7 +4348,7 @@ msgstr "Duplicera rad"
msgid "workspace.focus.focus-mode"
msgstr "Fokusläge"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "Fokusera av"
@@ -4386,11 +4368,11 @@ msgstr "Linjär gradient"
msgid "workspace.gradients.radial"
msgstr "Radiell gradient"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "Inaktivera dynamisk justering"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "Inaktivera proportionell skala"
@@ -4399,23 +4381,23 @@ msgstr "Inaktivera proportionell skala"
msgid "workspace.header.menu.disable-scale-text"
msgstr "Inaktivera skala text"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "Inaktivera fäst till guidelinjer"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "Inaktivera fäst till pixelrutnät"
-#: src/app/main/ui/workspace/main_menu.cljs:215
+#: src/app/main/ui/workspace/main_menu.cljs:243
msgid "workspace.header.menu.disable-snap-ruler-guides"
msgstr "Inaktivera fäst till linjaler"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "Aktivera dynamisk justering"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "Aktivera proportionell skalning"
@@ -4424,51 +4406,51 @@ msgstr "Aktivera proportionell skalning"
msgid "workspace.header.menu.enable-scale-text"
msgstr "Aktivera textskalning"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "Fäst till guidelinjer"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "Aktivera fäste till pixelrutnät"
-#: src/app/main/ui/workspace/main_menu.cljs:216
+#: src/app/main/ui/workspace/main_menu.cljs:244
msgid "workspace.header.menu.enable-snap-ruler-guides"
msgstr "Fäst till linjaler"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "Dölj tavelnamn"
-#: src/app/main/ui/workspace/main_menu.cljs:348
+#: src/app/main/ui/workspace/main_menu.cljs:376
msgid "workspace.header.menu.hide-guides"
msgstr "Dölj guidelinjer"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "Dölj färgpalett"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "Dölj pixelrutnät"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "Dölj linjaler"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "Dölj teckensnittspaletten"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Redigera"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "Fil"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "Hjälp & info"
@@ -4477,59 +4459,59 @@ msgstr "Hjälp & info"
msgid "workspace.header.menu.option.power-up"
msgstr "Starta upp dina plan"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "Inställningar"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "Visa"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "Återställ"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "Markera allt"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "Visa kartnamn"
-#: src/app/main/ui/workspace/main_menu.cljs:349
+#: src/app/main/ui/workspace/main_menu.cljs:377
msgid "workspace.header.menu.show-guides"
msgstr "Visa guidelinjer"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "Visa färgpalett"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "Visa pixelrutnät"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Visa linjaler"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "Visa teckensnittpalett"
-#: src/app/main/ui/workspace/main_menu.cljs:288
+#: src/app/main/ui/workspace/main_menu.cljs:316
msgid "workspace.header.menu.toggle-dark-theme"
msgstr "Växla till mörkt tema"
-#: src/app/main/ui/workspace/main_menu.cljs:286, src/app/main/ui/workspace/main_menu.cljs:289
+#: src/app/main/ui/workspace/main_menu.cljs:314, src/app/main/ui/workspace/main_menu.cljs:317
msgid "workspace.header.menu.toggle-light-theme"
msgstr "Växla till ljust tema"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "Ångra"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Återställ"
@@ -4545,7 +4527,7 @@ msgstr "Sparad"
msgid "workspace.header.saving"
msgstr "Sparar"
-#: src/app/main/ui/workspace/right_header.cljs:239
+#: src/app/main/ui/workspace/right_header.cljs:240
msgid "workspace.header.share"
msgstr "Dela"
@@ -4554,11 +4536,11 @@ msgstr "Dela"
msgid "workspace.header.unsaved"
msgstr "Osparade ändringar"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "Visningsläge (%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "Zoom"
@@ -4570,7 +4552,7 @@ msgstr "Fylla - Skala för att fylla"
msgid "workspace.header.zoom-fit"
msgstr "Anpassa - Skala ner för att passa"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "Zooma för att få plats med alla"
@@ -4578,19 +4560,19 @@ msgstr "Zooma för att få plats med alla"
msgid "workspace.header.zoom-full-screen"
msgstr "Helskärm"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "Zooma in markerad"
-#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:621
msgid "workspace.layout_grid.editor.options.edit-grid"
msgstr "Redigera grid"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1300
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1301
msgid "workspace.layout_grid.editor.options.exit"
msgstr "Avsluta"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:491
msgid "workspace.layout_grid.editor.padding.expand"
msgstr "Visa padding-inställningar för 4 sidor"
@@ -4606,7 +4588,7 @@ msgstr "Klart"
msgid "workspace.layout_grid.editor.top-bar.locate"
msgstr "Lokalisera"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1326
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1327
msgid "workspace.layout_grid.editor.top-bar.locate.tooltip"
msgstr "Lokalisera rutnätslayout"
@@ -4615,10 +4597,6 @@ msgstr "Lokalisera rutnätslayout"
msgid "workspace.libraries.add"
msgstr "Lägg till"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s färger"
-
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
msgstr "Du har inga färgstilar i ditt bibliotek"
@@ -4645,43 +4623,35 @@ msgstr "Nyligen använda färger"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "RGB komplementerande"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Spara färgstil"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s komponenter"
-
-#: src/app/main/ui/workspace/libraries.cljs:371
+#: src/app/main/ui/workspace/libraries.cljs:404
msgid "workspace.libraries.empty.add-some"
msgstr "Eller lägg till några av dessa för att prova:"
-#: src/app/main/ui/workspace/libraries.cljs:365
+#: src/app/main/ui/workspace/libraries.cljs:398
msgid "workspace.libraries.empty.no-libraries"
msgstr "Det finns inga delade bibliotek i ditt team, du kan leta efter"
-#: src/app/main/ui/workspace/libraries.cljs:369
+#: src/app/main/ui/workspace/libraries.cljs:402
msgid "workspace.libraries.empty.some-templates"
msgstr "några mallar här"
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Filbibliotek"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s grafik"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "BIBLIOTEK I DENNA FIL"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "BIBLIOTEK"
@@ -4690,11 +4660,11 @@ msgstr "BIBLIOTEK"
msgid "workspace.libraries.library"
msgstr "BIBLIOTEK"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "BIBLIOTEKUPDATERINGAR"
-#: src/app/main/ui/workspace/libraries.cljs:360
+#: src/app/main/ui/workspace/libraries.cljs:393
msgid "workspace.libraries.loading"
msgstr "Laddar…"
@@ -4703,79 +4673,75 @@ msgstr "Laddar…"
msgid "workspace.libraries.more-templates"
msgstr "Du kan titta efter "
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "Det finns inga delade bibliotek som behöver uppdateras"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "Inga träffar hittades för ”%s”"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "Sök delade bibliotek"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "DELADE BIBLIOTEK"
-#: src/app/main/ui/workspace/libraries.cljs:352
+#: src/app/main/ui/workspace/libraries.cljs:385
msgid "workspace.libraries.shared-library-btn"
msgstr "Anslut bibliotek"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Flera typografier"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Avlänka alla typografier"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s typografier"
-
-#: src/app/main/ui/workspace/libraries.cljs:323
+#: src/app/main/ui/workspace/libraries.cljs:354
msgid "workspace.libraries.unlink-library-btn"
msgstr "Koppla från biblioteket"
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Uppdatera"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "se alla ändringar"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "UPDATERINGAR"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "Klicka på + knappen för att lägga till interaktioner."
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:96
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:97
msgid "workspace.options.blur-options.add-blur"
msgstr "Lägg till oskärpa"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:117
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:118
msgid "workspace.options.blur-options.remove-blur"
msgstr "Ta bort oskärpa"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Oskärpa"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "Grupposkärpa"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "Oskärpemarkering"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:114
msgid "workspace.options.blur-options.toggle-blur"
msgstr "Växla oskärpa"
@@ -4783,39 +4749,39 @@ msgstr "Växla oskärpa"
msgid "workspace.options.canvas-background"
msgstr "Canvas bakgrund"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "Innehåll i urklipp"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Komponent"
-#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:193
+#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:196
msgid "workspace.options.component.annotation"
msgstr "Anteckning"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "Kopiera"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:185
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:188
msgid "workspace.options.component.create-annotation"
msgstr "Skapa en anteckning"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "Redigera en anteckning"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "Huvuddel"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:706
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:721
msgid "workspace.options.component.swap"
msgstr "Växla komponent"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:765
msgid "workspace.options.component.swap.empty"
msgstr "Det finns inga tillgångar i detta bibliotek"
@@ -4859,7 +4825,7 @@ msgstr "Topp"
msgid "workspace.options.constraints.topbottom"
msgstr "Topp & Botten"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Design"
@@ -4872,21 +4838,21 @@ msgstr "Exportera"
msgid "workspace.options.export-multiple"
msgstr "Exportera markerade"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "Exportera 1 element"
msgstr[1] "Exportera %s element"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:188
+#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:214
msgid "workspace.options.export.add-export"
msgstr "Lägg till export"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:235
+#: 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 "Ta bort export"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Suffix"
@@ -4894,7 +4860,7 @@ msgstr "Suffix"
msgid "workspace.options.exporting-complete"
msgstr "Exporten lyckades"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "Exporterar…"
@@ -4906,23 +4872,23 @@ msgstr "Exporten misslyckades"
msgid "workspace.options.exporting-object-slow"
msgstr "Exporten oväntat långsam"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Fylla"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:194
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:234
msgid "workspace.options.fill.add-fill"
msgstr "Lägg till fyllningsfärg"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:208
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:248
msgid "workspace.options.fill.remove-fill"
msgstr "Ta bort fyllningsfärg"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "Lägg till flödesstart"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:178
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:179
msgid "workspace.options.flows.flow"
msgstr "Flöde"
@@ -4931,19 +4897,19 @@ msgstr "Flöde"
msgid "workspace.options.flows.flow-start"
msgstr "Flödesstart"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "Flödet startar"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:155
msgid "workspace.options.flows.remove-flow"
msgstr "Ta bort flöde"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Auto"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "Kolumner"
@@ -4952,7 +4918,7 @@ msgstr "Kolumner"
msgid "workspace.options.grid.grid-title"
msgstr "Rutnät"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Färg"
@@ -4961,15 +4927,15 @@ msgstr "Färg"
msgid "workspace.options.grid.params.columns"
msgstr "Kolumner"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "Mellanrum"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Höjd"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Marginal"
@@ -4978,7 +4944,7 @@ msgstr "Marginal"
msgid "workspace.options.grid.params.rows"
msgstr "Rader"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "Sätt som standard"
@@ -4992,159 +4958,159 @@ msgstr "Storlek"
msgid "workspace.options.grid.params.type"
msgstr "Typ"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Botten"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Center"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Vänster"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Höger"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "Stretcha"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "Topp"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "Använd standard"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Bredd"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Rader"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "Kvadrat"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Gruppfyllning"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Gruppera fet"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:326
msgid "workspace.options.guides.add-guide"
msgstr "Lägg till guide"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:187
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:188
msgid "workspace.options.guides.remove-guide"
msgstr "Ta bort guide"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:320
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
msgid "workspace.options.guides.title"
msgstr "Guidelinjer"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:183
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:184
msgid "workspace.options.guides.toggle-guide"
msgstr "Växla guide"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "Höjd"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "Inspektion"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "Åtgärd"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "Efter fördröjning"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "Animering"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "Lös upp"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "Ingen"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "Täck"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "Sida"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "auto"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "Lägg till bakgrundsöverlagring"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "Stäng när du klickar utanför"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "Stäng överlagring"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "Stäng överlagring: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "Fördröj"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "Destination"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "Varaktighet"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "Rörelsemönster"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "Mjuk start snabb"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "Mjuk start"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "Mjuk start och avslut"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "Mjukt avslut"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "Linjär"
@@ -5153,47 +5119,47 @@ msgstr "Linjär"
msgid "workspace.options.interaction-in"
msgstr "I"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "Musmarkören kommer in"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "Musmarkören lämnar"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "ms"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "Navigera till"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "Navigera till: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(inte inställd)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "Förskjutningseffekt"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "På klick"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "Öppna överlagring"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "Öppna överlagring: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "Öppna URL"
@@ -5202,87 +5168,87 @@ msgstr "Öppna URL"
msgid "workspace.options.interaction-out"
msgstr "Ut"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "Botten centrum"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "Vänster botten"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "Höger botten"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "Center"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "Manuell"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "Topp centrum"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "Topp vänster"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "Topp höger"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "Position"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "Bevara scroll position"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "Föregående skärm"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "Relativ till"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "själv"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "Växla överlagring"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "Växla överlagring: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "Utlösare"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "När du håller muspekaren över"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "När du trycker"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "Interaktioner"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:735
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:736
msgid "workspace.options.interactions.add-interaction"
msgstr "Lägg till interaktion"
@@ -5291,67 +5257,67 @@ msgstr "Lägg till interaktion"
msgid "workspace.options.interactions.remove-interaction"
msgstr "Ta bort interaktion"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "Färg"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "Efterbelys färg"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "Färgskugga"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "Mörkare"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "Differens"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "Uteslutning"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Skarpt ljus"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Nyans"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Ljusare"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "Luminiscens"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "Multiplicera"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "Normal"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "Täcka över"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "Mättnad"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Raster"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "Mjukt ljus"
@@ -5370,7 +5336,7 @@ msgstr "Gruppera lager"
msgid "workspace.options.layer-options.title.multiple"
msgstr "Markerade lager"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:202
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:207, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:213
msgid "workspace.options.layer-options.toggle-layer"
msgstr "Växla lagersynlighet"
@@ -5379,19 +5345,19 @@ msgstr "Växla lagersynlighet"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "Avancerade alternativ"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "Max.höjd"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "Max.bredd"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "Min.höjd"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "Min.bredd"
@@ -5505,15 +5471,15 @@ msgstr "utrymme mellan"
msgid "workspace.options.layout.top"
msgstr "Topp"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "Fler färger"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "Fler biblioteksfärger"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "Opacitet"
@@ -5522,35 +5488,35 @@ msgstr "Opacitet"
msgid "workspace.options.position"
msgstr "Position"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "Prototyp"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "Radie"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "Vänster botten"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "Höger botten"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "Topp vänster"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "Topp höger"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:152
msgid "workspace.options.radius.hide-all-corners"
msgstr "Dra ihop oberoende radie"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:136
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:153
msgid "workspace.options.radius.show-single-corners"
msgstr "Visa oberoende radie"
@@ -5562,7 +5528,7 @@ msgstr "Nyligen"
msgid "workspace.options.retry"
msgstr "Försök igen"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "Rotering"
@@ -5570,31 +5536,31 @@ msgstr "Rotering"
msgid "workspace.options.search-font"
msgstr "Sök teckensnitt"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr "Välj en form, tavla eller grupp för att dra en anslutning till andra kartor."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "Markerade färger"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "Fyllning inom markering"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "Markeringskontur"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:341
msgid "workspace.options.shadow-options.add-shadow"
msgstr "Lägg till skugga"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "Oskärpa"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "Skuggfärg"
@@ -5606,55 +5572,56 @@ msgstr "Släpskugga"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "Innerskugga"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:348
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:183, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:354
msgid "workspace.options.shadow-options.remove-shadow"
msgstr "Ta bort skugga"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "Spridning"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "Skugga"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "Gruppskugga"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "Urvalda skuggor"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:174
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:179
msgid "workspace.options.shadow-options.toggle-shadow"
msgstr "Växla skugga"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "Visa i exporter"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "Visa i visningsläge"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "Storlek"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "Storleksinställningar"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "Fet"
@@ -5663,7 +5630,7 @@ msgstr "Fet"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "Cirkelmarkör"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "Cirkel"
@@ -5672,7 +5639,7 @@ msgstr "Cirkel"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "Diamantmarkör"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "Diamant"
@@ -5681,19 +5648,19 @@ msgstr "Diamant"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "Linjepil"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "Pil"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "Ingen"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "Runda"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "Kvadrat"
@@ -5702,7 +5669,7 @@ msgstr "Kvadrat"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "Kvadratmarkör"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "Rektangel"
@@ -5711,83 +5678,83 @@ msgstr "Rektangel"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "Triangelpil"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "Triangel"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "Konturfärg"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "Konturbredd"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:180
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:189
msgid "workspace.options.stroke.add-stroke"
msgstr "Lägg till streckfärg"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "Center"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "Streckad"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "Prickad"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "Inuti"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "Mixad"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "Utanför"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:193
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:202
msgid "workspace.options.stroke.remove-stroke"
msgstr "Ta bort streckfärg"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "Fylld"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "Justera botten"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "Justera mitten"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "Justera toppen"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "LTR"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "RTL"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "Autohöjd"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "Autobredd"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "Fast"
@@ -5809,35 +5776,35 @@ msgstr "Gemener"
msgid "workspace.options.text-options.none"
msgstr "Ingen"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "Genomstruken (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "Justera center"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "Rättfärdiga"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "Justera vänster"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "Justera höger"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "Text"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "Grupptext"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "Markerad text"
@@ -5846,7 +5813,7 @@ msgstr "Markerad text"
msgid "workspace.options.text-options.titlecase"
msgstr "Versalbörjan"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "Understruken (%s)"
@@ -5855,19 +5822,19 @@ msgstr "Understruken (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "Versaler"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr "Använd spelknappen i sidhuvudet för att köra prototypvisaren."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "Bredd"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "X axel"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Y axel"
@@ -5911,109 +5878,109 @@ msgstr "Separera noder (%s)"
msgid "workspace.path.actions.snap-nodes"
msgstr "Fästnoder (%s)"
-#: src/app/main/ui/workspace/plugins.cljs:83
+#: src/app/main/ui/workspace/plugins.cljs:84
msgid "workspace.plugins.button-open"
msgstr "Öppna"
-#: src/app/main/ui/workspace/plugins.cljs:197
+#: src/app/main/ui/workspace/plugins.cljs:198
#, markdown
msgid "workspace.plugins.discover"
msgstr "Upptäck [fler plugins](%s)"
-#: src/app/main/ui/workspace/plugins.cljs:204
+#: src/app/main/ui/workspace/plugins.cljs:205
msgid "workspace.plugins.empty-plugins"
msgstr "Inga plugins installerade"
-#: src/app/main/ui/workspace/plugins.cljs:191
+#: src/app/main/ui/workspace/plugins.cljs:192
msgid "workspace.plugins.error.manifest"
msgstr "Pluginmanifestet är felaktigt."
-#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:755, src/app/main/ui/workspace/plugins.cljs:82
+#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:783, src/app/main/ui/workspace/plugins.cljs:83
msgid "workspace.plugins.error.need-editor"
msgstr "Du måste vara redaktör för att kunna använda detta plugin"
-#: src/app/main/ui/workspace/plugins.cljs:187
+#: src/app/main/ui/workspace/plugins.cljs:188
msgid "workspace.plugins.error.url"
msgstr "Pluginen finns inte eller är URL:en fel."
-#: src/app/main/ui/workspace/plugins.cljs:183
+#: src/app/main/ui/workspace/plugins.cljs:184
msgid "workspace.plugins.install"
msgstr "Installera"
-#: src/app/main/ui/workspace/plugins.cljs:213
+#: src/app/main/ui/workspace/plugins.cljs:214
msgid "workspace.plugins.installed-plugins"
msgstr "Installerade plugins"
-#: src/app/main/ui/workspace/main_menu.cljs:710
+#: src/app/main/ui/workspace/main_menu.cljs:738
msgid "workspace.plugins.menu.plugins-manager"
msgstr "Pluginhanterare"
-#: src/app/main/ui/workspace/main_menu.cljs:906
+#: src/app/main/ui/workspace/main_menu.cljs:934
msgid "workspace.plugins.menu.title"
msgstr "Plugins"
-#: src/app/main/ui/workspace/plugins.cljs:374
+#: src/app/main/ui/workspace/plugins.cljs:375
msgid "workspace.plugins.permissions-update.title"
msgstr "UPPDATERA DETTA PLUGIN"
-#: src/app/main/ui/workspace/plugins.cljs:378
+#: src/app/main/ui/workspace/plugins.cljs:379
msgid "workspace.plugins.permissions-update.warning"
msgstr ""
"Detta plugin har ändrats sedan du senast öppnade det. Det vill nu också få "
"tillgång till:"
-#: src/app/main/ui/workspace/plugins.cljs:278
+#: src/app/main/ui/workspace/plugins.cljs:279
msgid "workspace.plugins.permissions.allow-download"
msgstr "Starta nedladdning av filer."
-#: src/app/main/ui/workspace/plugins.cljs:271
+#: src/app/main/ui/workspace/plugins.cljs:272
msgid "workspace.plugins.permissions.comment-read"
msgstr "Läs dina kommentarer och svar."
-#: src/app/main/ui/workspace/plugins.cljs:265
+#: src/app/main/ui/workspace/plugins.cljs:266
msgid "workspace.plugins.permissions.comment-write"
msgstr "Läs och modifiera dina kommentarer och svara i ditt namn."
-#: src/app/main/ui/workspace/plugins.cljs:238
+#: src/app/main/ui/workspace/plugins.cljs:239
msgid "workspace.plugins.permissions.content-read"
msgstr "Läs innehållet i filer som användarna har tillgång till."
-#: src/app/main/ui/workspace/plugins.cljs:232
+#: src/app/main/ui/workspace/plugins.cljs:233
msgid "workspace.plugins.permissions.content-write"
msgstr "Läs och ändra innehållet i filer som användarna har tillgång till."
-#: src/app/main/ui/workspace/plugins.cljs:325
+#: src/app/main/ui/workspace/plugins.cljs:326
msgid "workspace.plugins.permissions.disclaimer"
msgstr ""
"Observera att detta plugin har skapats av en extern part, så se till att du "
"litar på den innan du ger åtkomst. Din datasekretess och säkerhet är "
"viktiga för oss. Om du har några frågor, vänligen kontakta support."
-#: src/app/main/ui/workspace/plugins.cljs:258
+#: src/app/main/ui/workspace/plugins.cljs:259
msgid "workspace.plugins.permissions.library-read"
msgstr "Läs dina bibliotek och tillgångar."
-#: src/app/main/ui/workspace/plugins.cljs:252
+#: src/app/main/ui/workspace/plugins.cljs:253
msgid "workspace.plugins.permissions.library-write"
msgstr "Läs och modifiera dina bibliotek och tillgångar."
-#: src/app/main/ui/workspace/plugins.cljs:318
+#: src/app/main/ui/workspace/plugins.cljs:319
msgid "workspace.plugins.permissions.title"
msgstr "'%s' PLUGIN ÖNSKAR TILLGÅNG TILL:"
-#: src/app/main/ui/workspace/plugins.cljs:245
+#: src/app/main/ui/workspace/plugins.cljs:246
msgid "workspace.plugins.permissions.user-read"
msgstr "Läs den aktuella användarens profilinformation."
-#: src/app/main/ui/workspace/plugins.cljs:209
+#: src/app/main/ui/workspace/plugins.cljs:210
msgid "workspace.plugins.plugin-list-link"
msgstr "Lista på plugins"
-#: src/app/main/ui/workspace/plugins.cljs:86
+#: src/app/main/ui/workspace/plugins.cljs:87
msgid "workspace.plugins.remove-plugin"
msgstr "Ta bort plugin"
-#: src/app/main/ui/workspace/plugins.cljs:178
+#: src/app/main/ui/workspace/plugins.cljs:179
msgid "workspace.plugins.search-placeholder"
msgstr "Skriv in plugin URL"
@@ -6021,26 +5988,26 @@ msgstr "Skriv in plugin URL"
msgid "workspace.plugins.success"
msgstr "Pluginen laddades."
-#: src/app/main/ui/workspace/plugins.cljs:172
+#: src/app/main/ui/workspace/plugins.cljs:173
msgid "workspace.plugins.title"
msgstr "Plugins"
-#: src/app/main/ui/workspace/plugins.cljs:438
+#: src/app/main/ui/workspace/plugins.cljs:439
msgid "workspace.plugins.try-out.cancel"
msgstr "INTE NU"
-#: src/app/main/ui/workspace/plugins.cljs:431
+#: src/app/main/ui/workspace/plugins.cljs:432
msgid "workspace.plugins.try-out.message"
msgstr ""
"Vill du ta en titt? Det kommer att öppnas i ett nytt utkast för ditt "
"nuvarande team. (Om inte, kan du alltid hitta det i de installerade plugins "
"för alla filer.)"
-#: src/app/main/ui/workspace/plugins.cljs:427
+#: src/app/main/ui/workspace/plugins.cljs:428
msgid "workspace.plugins.try-out.title"
msgstr "'%s' PLUGIN ÄR INSTALLERAD FÖR DIN ANVÄNDARE!"
-#: src/app/main/ui/workspace/plugins.cljs:444
+#: src/app/main/ui/workspace/plugins.cljs:445
msgid "workspace.plugins.try-out.try"
msgstr "TESTA PLUGIN"
@@ -6052,7 +6019,7 @@ msgstr "Lägg till flex layout"
msgid "workspace.shape.menu.add-grid"
msgstr "Lägg till grid layout"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1015, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1039
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1016, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1040
msgid "workspace.shape.menu.add-layout"
msgstr "Lägg till layout"
@@ -6088,7 +6055,7 @@ msgstr "Kopiera/Klistra in som ..."
msgid "workspace.shape.menu.copy-props"
msgstr "Kopiera egenskaper"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "Skapa anteckning"
@@ -6096,11 +6063,11 @@ msgstr "Skapa anteckning"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "Markering till tavla"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "Skapa komponent"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "Skapa flera komponenter"
@@ -6108,7 +6075,7 @@ msgstr "Skapa flera komponenter"
msgid "workspace.shape.menu.cut"
msgstr "Klipp ut"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "Radera"
@@ -6116,15 +6083,15 @@ msgstr "Radera"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "Ta bort flödesstart"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "Koppla från instans"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "Koppla från instanser"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "Skillnad"
@@ -6136,11 +6103,11 @@ msgstr "Duplicera"
msgid "workspace.shape.menu.edit"
msgstr "Redigera"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "Exkludera"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "Platta ut"
@@ -6173,19 +6140,19 @@ msgstr "Gå till huvudkomponentfil"
msgid "workspace.shape.menu.group"
msgstr "Grupp"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "Dölj"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "Via / Dölj UI"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "Intersektion"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "Lås"
@@ -6193,7 +6160,7 @@ msgstr "Lås"
msgid "workspace.shape.menu.mask"
msgstr "Mask"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "Klistra in"
@@ -6213,7 +6180,7 @@ msgstr "Ta bort flex layout"
msgid "workspace.shape.menu.remove-grid"
msgstr "Ta bort grid layout"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1033
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1034
msgid "workspace.shape.menu.remove-layout"
msgstr "Ta bort layout"
@@ -6221,11 +6188,11 @@ msgstr "Ta bort layout"
msgid "workspace.shape.menu.rename"
msgstr "Byt namn"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "Återställ standardvärden"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "Återställ huvudkomponent"
@@ -6233,15 +6200,15 @@ msgstr "Återställ huvudkomponent"
msgid "workspace.shape.menu.select-layer"
msgstr "Välj lager"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "Visa"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "Visa i tillgångspanelen"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "Visa huvudkomponent"
@@ -6254,6 +6221,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "Ställ in som miniatyrbild"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "Gör om till bana"
@@ -6261,11 +6229,11 @@ msgstr "Gör om till bana"
msgid "workspace.shape.menu.ungroup"
msgstr "Avgruppera"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "Sammanfoga"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "Lås upp"
@@ -6278,7 +6246,7 @@ msgstr "Avmaska"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "Uppdatera huvudkomponenter"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "Uppdatera huvudkomponent"
@@ -6290,11 +6258,11 @@ msgstr "Minimera sidonavigation"
msgid "workspace.sidebar.expand"
msgstr "Expandera sidonavigation"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "Historia"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "Lager"
@@ -6334,11 +6302,11 @@ msgstr "Texter"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "Importerade SVG attribut"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "Sidor"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:248
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:249
msgid "workspace.sidebar.sitemap.add-page"
msgstr "Lägg till sida"
@@ -6355,7 +6323,7 @@ msgstr "%s aktiva teman"
msgid "workspace.tokens.add set"
msgstr "Lägg till uppsättning"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:338
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:337
msgid "workspace.tokens.back-to-themes"
msgstr "Tillbaka till temalista"
@@ -6363,15 +6331,15 @@ msgstr "Tillbaka till temalista"
msgid "workspace.tokens.create-new-theme"
msgstr "Skapa ditt första tema nu."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:100, src/app/main/ui/workspace/tokens/themes.cljs:44
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:96, src/app/main/ui/workspace/tokens/themes.cljs:44
msgid "workspace.tokens.create-one"
msgstr "Skapa ett."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:534
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:552
msgid "workspace.tokens.create-token"
msgstr "Skapa en ny %s token"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:337
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:338
msgid "workspace.tokens.delete"
msgstr "Ta bort token"
@@ -6379,15 +6347,15 @@ msgstr "Ta bort token"
msgid "workspace.tokens.delete-theme-title"
msgstr "Ta bort tema"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:334
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:335
msgid "workspace.tokens.duplicate"
msgstr "Duplicera token"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:321
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:322
msgid "workspace.tokens.edit"
msgstr "Redigera token"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:327
msgid "workspace.tokens.edit-theme-title"
msgstr "Redigera tema"
@@ -6395,11 +6363,7 @@ msgstr "Redigera tema"
msgid "workspace.tokens.edit-themes"
msgstr "Redigera teman"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:533
-msgid "workspace.tokens.edit-token"
-msgstr "Redigera token"
-
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:540
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:558
msgid "workspace.tokens.enter-token-name"
msgstr "Ange %s tokennamn"
@@ -6412,11 +6376,11 @@ msgstr "Gruppering av Token Set stöds inte."
msgid "workspace.tokens.no-active-theme"
msgstr "Inget tema aktiverat"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:480
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:483
msgid "workspace.tokens.no-sets-create"
msgstr "Det finns inga uppsättningar definierade. Skapa ett först."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:97, src/app/main/ui/workspace/tokens/sets/lists.cljs:103
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:93, src/app/main/ui/workspace/tokens/sets/lists.cljs:99
msgid "workspace.tokens.no-sets-yet"
msgstr "Det finns inga uppsättningar."
@@ -6428,12 +6392,12 @@ msgstr "Det finns inga teman."
msgid "workspace.tokens.no-themes-currently"
msgstr "Du har för närvarande inga teman."
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:145
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:120
#, fuzzy
msgid "workspace.tokens.original-value"
msgstr "Originalvärde: "
-#: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:39, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:44, src/app/main/ui/workspace/tokens/management/token_pill.cljs:146
+#: 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:100, 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 "Lösta värden: "
@@ -6442,11 +6406,11 @@ msgstr "Lösta värden: "
msgid "workspace.tokens.save-theme"
msgstr "Spara tema"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:209, src/app/main/ui/workspace/tokens/sets/lists.cljs:315
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:204, src/app/main/ui/workspace/tokens/sets/lists.cljs:309
msgid "workspace.tokens.select-set"
msgstr "Välj uppsättning."
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:343
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:342
msgid "workspace.tokens.set-selection-theme"
msgstr ""
"Definiera vilka tokenuppsättningar som ska användas som en del av detta "
@@ -6461,24 +6425,24 @@ msgstr "Token set är inte aktivt"
msgid "workspace.tokens.theme-name"
msgstr "Tema %s"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:589, src/app/main/ui/workspace/tokens/management/create/form.cljs:590
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:608, src/app/main/ui/workspace/tokens/management/create/form.cljs:609
#, fuzzy
msgid "workspace.tokens.token-description"
msgstr "Beskrivning"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:539
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:83, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:109, src/app/main/ui/workspace/tokens/management/create/form.cljs:557
msgid "workspace.tokens.token-name"
msgstr "Namn"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:567
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:585
msgid "workspace.tokens.token-value"
msgstr "Värde"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:125
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:121
msgid "workspace.tokens.tools"
msgstr "Verktyg"
-#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "Tillgångar"
@@ -6486,7 +6450,7 @@ msgstr "Tillgångar"
msgid "workspace.toolbar.color-palette"
msgstr "Färgpalett (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "Kommentarer (%s)"
@@ -6693,19 +6657,19 @@ msgstr "Körning över %s"
msgid "workspace.undo.title"
msgstr "Historia"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "Avfärda"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "Mer info"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "Det finns uppdateringar i delade bibliotek"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "Uppdatera"
@@ -6765,11 +6729,11 @@ msgstr "Vill du återställa den här versionen?"
msgid "workspace.versions.snapshot-menu"
msgstr "Öppna snapshot-menyn"
-#: src/app/main/ui/workspace/sidebar.cljs:236
+#: src/app/main/ui/workspace/sidebar.cljs:237
msgid "workspace.versions.tab.actions"
msgstr "Åtgärder"
-#: src/app/main/ui/workspace/sidebar.cljs:234
+#: src/app/main/ui/workspace/sidebar.cljs:235
msgid "workspace.versions.tab.history"
msgstr "Historik"
diff --git a/frontend/translations/ta.po b/frontend/translations/ta.po
index 7fd2e61ea6..e05958e391 100644
--- a/frontend/translations/ta.po
+++ b/frontend/translations/ta.po
@@ -144,7 +144,7 @@ msgstr "ஒரு கணக்கை உருவாக்கவும்"
msgid "auth.sidebar-tagline"
msgstr "வடிவமைப்பு மற்றும் முன்மாதிரிக்கான திறந்த மூல தீர்வு."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "சேவை விதிமுறைகள்"
@@ -152,7 +152,7 @@ msgstr "சேவை விதிமுறைகள்"
msgid "auth.verification-email-sent"
msgstr "சரிபார்ப்பு மின்னஞ்சலை அனுப்பியுள்ளோம் இந்த முகவரிக்கு"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "வெளியிடுங்கள்"
diff --git a/frontend/translations/th.po b/frontend/translations/th.po
index 8c44cc1e02..cf3b0a5c01 100644
--- a/frontend/translations/th.po
+++ b/frontend/translations/th.po
@@ -164,7 +164,7 @@ msgstr "โซลูชันโอเพนซอร์สสำหรับก
msgid "auth.terms-and-privacy-agreement"
msgstr "ฉันยอมรับ [ข้อกำหนดการให้บริการ](%s)และ[นโยบายความเป็นส่วนตัว](%s)"
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "เงื่อนไขการให้บริการ"
@@ -339,27 +339,27 @@ msgstr "โทเคนนี้ไม่มีวันหมดอายุ"
msgid "dashboard.change-email"
msgstr "เปลี่ยนอีเมล"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(คัดลอก)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "สร้างทีมใหม่"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Penpot ของคุณ"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "ลบทีม"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "ดาวน์โหลดไฟล์ Penpot (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "ดาวน์โหลดไฟล์มาตรฐาน (.svg + .json)"
@@ -407,7 +407,7 @@ msgstr "ยังไม่มีไลบรารี"
msgid "dashboard.export-binary-multi"
msgstr "ดาวน์โหลด %s ไฟล์ Penpot (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "ส่งออกบอร์ดเป็น PDF"
@@ -419,7 +419,7 @@ msgstr "ส่งออกเป็น PDF"
msgid "dashboard.export-multi"
msgstr "ส่งออก %s ไฟล์ Penpot"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "ส่งออก"
@@ -515,7 +515,7 @@ msgstr "กำลังอัปโหลดข้อมูลไปยังเ
msgid "dashboard.import.progress.upload-media"
msgstr "กำลังอัปโหลดไฟล์: %s"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "ออกจากทีม"
@@ -523,7 +523,7 @@ msgstr "ออกจากทีม"
msgid "dashboard.libraries-and-templates"
msgstr "ไลบรารีและเทมเพลต"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "พบปัญหาในการนำเข้าเทมเพลต เทมเพลตนี้จึงไม่ถูกนำเข้า"
@@ -555,7 +555,7 @@ msgstr "ย้ายไปยังทีมอื่น"
msgid "dashboard.new-file"
msgstr "+ สร้างไฟล์ใหม่"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "สร้างไฟล์ใหม่"
@@ -563,7 +563,7 @@ msgstr "สร้างไฟล์ใหม่"
msgid "dashboard.new-project"
msgstr "+ สร้างโปรเจกต์ใหม่"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "สร้างโปรเจกต์ใหม่"
@@ -603,7 +603,7 @@ msgstr "คุณเป็นเจ้าของในทีมนี้แล
msgid "dashboard.save-settings"
msgstr "บันทึกการตั้งค่า"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "ค้นหา…"
@@ -619,15 +619,15 @@ msgstr "เลือกธีม"
msgid "dashboard.show-all-files"
msgstr "แสดงไฟล์ทั้งหมด"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "ข้อมูลของทีม"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "สมาชิกของทีม"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "โปรเจกต์ของทีม"
@@ -643,15 +643,15 @@ msgstr "ผลการค้นหา"
msgid "dashboard.update-settings"
msgstr "อัปเดตการตั้งค่า"
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "ประเภทเนื้อหา"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "สร้าง Webhook"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "สร้าง Webhook แล้ว"
@@ -671,15 +671,15 @@ msgstr "อีเมล"
msgid "dashboard.your-name"
msgstr "ชื่อของคุณ"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Penpot ของคุณ"
-#: src/app/main/ui/workspace/plugins.cljs:338, src/app/main/ui/workspace/plugins.cljs:392
+#: src/app/main/ui/workspace/plugins.cljs:339, src/app/main/ui/workspace/plugins.cljs:393
msgid "ds.confirm-allow"
msgstr "อนุญาต"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "ยกเลิก"
@@ -691,11 +691,6 @@ msgstr "อีเมลถูกใช้ไปแล้ว"
msgid "errors.email-domain-not-allowed"
msgstr "โดเมนนี้ไม่ได้รับอนุญาต"
-#: src/app/main/ui/auth/register.cljs, src/app/main/ui/dashboard/team_form.cljs, src/app/main/ui/onboarding/team_choice.cljs, src/app/main/ui/setti ngs/access_tokens.cljs, src/app/main/ui/settings/feedback.cljs, src/app/main/ui/settings/profile.cljs, src/app/main/ui/workspace/sidebar/assets.cljs
-#, unused
-msgid "errors.field-max-length"
-msgstr "ต้องมีไม่เกิน 1 ตัวอักษร"
-
#, unused
msgid "errors.field-min-length"
msgstr "ต้องมีอย่างน้อย 1 ตัวอักษร"
@@ -749,11 +744,11 @@ msgstr "เงา"
msgid "inspect.attributes.stroke.width"
msgstr "ความกว้าง"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "ขนาดฟอนต์"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "ระยะห่างระหว่างตัวอักษร"
@@ -769,7 +764,7 @@ msgstr "บอร์ด"
msgid "inspect.tabs.code.selected.svg-raw"
msgstr "SVG"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "ชุมชน"
@@ -777,7 +772,7 @@ msgstr "ชุมชน"
msgid "labels.confirm-password"
msgstr "ยืนยันรหัสผ่าน"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "คัดลอกลิงก์"
@@ -797,15 +792,15 @@ msgstr "ฟอนต์ที่กำหนดเอง"
msgid "labels.dashboard"
msgstr "แดชบอร์ด"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "แก้ไข"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "เอดิเตอร์"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "ส่งออก"
@@ -813,7 +808,7 @@ msgstr "ส่งออก"
msgid "labels.figma"
msgstr "Figma"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "ฟอนต์"
@@ -825,7 +820,7 @@ msgstr "กราฟิกดีไซน์"
msgid "labels.language"
msgstr "ภาษา"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "ไลบรารีและเทมเพลต"
@@ -833,15 +828,15 @@ msgstr "ไลบรารีและเทมเพลต"
msgid "labels.loading"
msgstr "กำลังโหลด…"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "ลงชื่อออก"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "สมาชิก"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "สมาชิก"
@@ -857,7 +852,7 @@ msgstr "รหัสผ่านเดิม"
msgid "labels.or"
msgstr "หรือ"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "เจ้าของ"
@@ -869,6 +864,6 @@ msgstr "รหัสผ่าน"
msgid "labels.profile"
msgstr "โปรไฟล์"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "โปรเจกต์"
diff --git a/frontend/translations/tr.po b/frontend/translations/tr.po
index 876dadb612..ccbf2131a6 100644
--- a/frontend/translations/tr.po
+++ b/frontend/translations/tr.po
@@ -1,15 +1,15 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-11 07:21+0000\n"
-"Last-Translator: Merih Güz \n"
-"Language-Team: Turkish "
-" \n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
+"Last-Translator: Çağlar Yeşilyurt \n"
+"Language-Team: Turkish \n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.13-dev\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -68,7 +68,7 @@ msgstr "Oturum aç"
#: src/app/main/ui/auth/login.cljs:285
msgid "auth.login-tagline"
msgstr ""
-"Penpot, tasarım ve kod işbirliği için özgür ve açık kaynaklı tasarım "
+"Penpot, tasarım ve kod iş birliği için özgür ve açık kaynaklı tasarım "
"aracıdır"
#: src/app/main/ui/auth/login.cljs:222
@@ -177,7 +177,7 @@ msgstr "Tasarım ve prototipleme için açık-kaynak çözüm."
msgid "auth.terms-and-privacy-agreement"
msgstr "[Hizmet koşullarını](%s) ve [gizlilik politikasını](%s) kabul ediyorum."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Hizmet şartları"
@@ -200,7 +200,7 @@ msgstr "İş e-postası"
msgid "branding-illustrations-marketing-pieces"
msgstr "...marka çalışması, çizimler, pazarlama materyalleri, vb."
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Yayınla"
@@ -272,7 +272,7 @@ msgstr "Prototipleri paylaş"
msgid "common.share-link.view-all"
msgstr "Tümünü Seç"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Yayından kaldır"
@@ -324,23 +324,23 @@ msgstr "Arayüz İncelemesi"
#: src/app/main/ui/settings/access_tokens.cljs:103
msgid "dashboard.access-tokens.copied-success"
-msgstr "Belirteç kopyalandı"
+msgstr "Token kopyalandı"
#: src/app/main/ui/settings/access_tokens.cljs:189
msgid "dashboard.access-tokens.create"
-msgstr "Yeni belirteç oluştur"
+msgstr "Yeni token oluştur"
#: src/app/main/ui/settings/access_tokens.cljs:64
msgid "dashboard.access-tokens.create.success"
-msgstr "Erişim belirteci başarıyla oluşturuldu."
+msgstr "Erişim tokeni başarıyla oluşturuldu."
#: src/app/main/ui/settings/access_tokens.cljs:286
msgid "dashboard.access-tokens.empty.add-one"
-msgstr "Bir belirteç oluşturmak için \"Yeni belirteç oluştur\" düğmesine basın."
+msgstr "Bir token oluşturmak için \"Yeni token oluştur\" düğmesine basın."
#: src/app/main/ui/settings/access_tokens.cljs:285
msgid "dashboard.access-tokens.empty.no-access-tokens"
-msgstr "Şu ana kadar hiç belirteciniz yok."
+msgstr "Şu ana kadar hiç tokeniniz yok."
#: src/app/main/ui/settings/access_tokens.cljs:135
msgid "dashboard.access-tokens.expiration-180-days"
@@ -376,24 +376,24 @@ msgstr "Süresiz"
#: src/app/main/ui/settings/access_tokens.cljs:184
msgid "dashboard.access-tokens.personal"
-msgstr "Kişisel erişim belirteçleri"
+msgstr "Kişisel erişim tokenleri"
#: src/app/main/ui/settings/access_tokens.cljs:185
msgid "dashboard.access-tokens.personal.description"
msgstr ""
-"Kişisel erişim belirteçleri, oturum açma/parola kimlik doğrulama "
-"sistemimize alternatif olarak işlev görür ve bir uygulamanın dahili Penpot "
-"API'sine erişmesine izin vermek için kullanılabilir"
+"Kişisel erişim tokenleri, oturum açma/parola kimlik doğrulama sistemimize "
+"alternatif olarak işlev görür ve bir uygulamanın dahili Penpot API'sine "
+"erişmesine izin vermek için kullanılabilir"
#: src/app/main/ui/settings/access_tokens.cljs:142
msgid "dashboard.access-tokens.token-will-expire"
-msgstr "Belirtecin süresi %s tarihinde sona erecek"
+msgstr "Tokenin süresi %s tarihinde sona erecek"
#: src/app/main/ui/settings/access_tokens.cljs:143
msgid "dashboard.access-tokens.token-will-not-expire"
-msgstr "Belirtecin sona erme tarihi yok"
+msgstr "Tokenin sona erme tarihi yok"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Paylaşılan Kütüphane olarak ekle"
@@ -401,27 +401,27 @@ msgstr "Paylaşılan Kütüphane olarak ekle"
msgid "dashboard.change-email"
msgstr "E-posta adresini değiştir"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(kopya)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Yeni takım oluştur"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Penpot'un"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Takımı sil"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Penpot dosyasını indir (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Standart dosyayı indir (.svg + .json)"
@@ -437,7 +437,7 @@ msgstr "%s dosyanın kopyasını oluştur"
msgid "dashboard.export-binary-multi"
msgstr "%s Penpot dosyasını indir (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Çalışma yüzeylerini PDF olarak dışa aktar"
@@ -453,7 +453,7 @@ msgstr "Penpot %s dosyalarını dışa aktar"
msgid "dashboard.export-multiple.selected"
msgstr "%s / %s öge seçildi"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Dışa aktar"
@@ -633,11 +633,11 @@ msgstr "Veriler sunucuya yükleniyor (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Dosya yükleniyor: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "İnsanları davet et"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Takımdan ayrıl"
@@ -649,7 +649,7 @@ msgstr "Kütüphaneler ve Şablonlar"
msgid "dashboard.libraries-and-templates.explore"
msgstr "Daha fazlasını keşfedin ve nasıl katkıda bulunacağınızı öğrenin"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "Şablon içe aktarılırken bir sorun oluştu. Şablon içe aktarılmadı."
@@ -681,7 +681,7 @@ msgstr "Başka takıma taşı"
msgid "dashboard.new-file"
msgstr "+ Yeni Dosya"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Yeni Dosya"
@@ -689,7 +689,7 @@ msgstr "Yeni Dosya"
msgid "dashboard.new-project"
msgstr "+ Yeni Proje"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Yeni Proje"
@@ -697,7 +697,7 @@ msgstr "Yeni Proje"
msgid "dashboard.no-matches-for"
msgstr "\"%s\" için sonuç bulunamadı"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Sabitlenmiş projeler burada görünür"
@@ -713,7 +713,7 @@ msgstr "E-posta adresin başarıyla doğrulandı"
msgid "dashboard.notifications.password-saved"
msgstr "Parola başarıyla kaydedildi!"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s üye"
@@ -729,7 +729,7 @@ msgstr "Seçenekler"
msgid "dashboard.password-change"
msgstr "Parola değiştir"
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Sabitle/Sabitleme"
@@ -750,7 +750,7 @@ msgstr "Paylaşılan Kütüphane olarak sil"
msgid "dashboard.save-settings"
msgstr "Ayarları kaydet"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Ara…"
@@ -790,7 +790,7 @@ msgstr[1] "Dosyalarınız başarıyla kopyalandı"
msgid "dashboard.success-duplicate-project"
msgstr "Projenin kopyası başarıyla oluşturuldu"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Dosyan başarıyla taşındı"
@@ -802,15 +802,15 @@ msgstr "Dosyaların başarıyla taşındı"
msgid "dashboard.success-move-project"
msgstr "Projen başarıyla taşındı"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Takım bilgisi"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Takım üyeleri"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Takım projeleri"
@@ -826,7 +826,7 @@ msgstr "Arama sonuçları"
msgid "dashboard.type-something"
msgstr "Aramak için yazın"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Kütüphaneyi Yayından Kaldır"
@@ -834,38 +834,38 @@ msgstr "Kütüphaneyi Yayından Kaldır"
msgid "dashboard.update-settings"
msgstr "Ayarları güncelle"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "Etkin"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "Bu kanca tetiklendiğinde olay ayrıntıları iletilecektir"
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "İçerik türü"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "Web kancası oluştur"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "Web kancası başarıyla oluşturuldu."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"Web kancaları, Penpot'ta belirli olaylar gerçekleştiğinde diğer web "
"sitelerinin ve uygulamaların bilgilendirilmesine izin vermenin basit bir "
"yoludur. Belirttiğiniz URL'lerin her birine bir POST isteği göndereceğiz."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "Bir tane eklemek için \"Web kancası ekle\" düğmesine basın."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "Şimdiye kadar web kancası oluşturulmadı."
@@ -885,7 +885,7 @@ msgstr "E-posta"
msgid "dashboard.your-name"
msgstr "Adın"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Penpot'un"
@@ -901,15 +901,15 @@ msgstr "Dikkat"
msgid "ds.component-subtitle"
msgstr "Güncellenecek bileşenler:"
-#: src/app/main/ui/workspace/plugins.cljs:338, src/app/main/ui/workspace/plugins.cljs:392
+#: src/app/main/ui/workspace/plugins.cljs:339, src/app/main/ui/workspace/plugins.cljs:393
msgid "ds.confirm-allow"
msgstr "İzin ver"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "İptal"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Tamam"
@@ -961,11 +961,11 @@ msgstr "E-postanızı parola olarak kullanamazsınız"
msgid "errors.email-domain-not-allowed"
msgstr "Etki alanına izin verilmiyor"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "«%s» adresi için çok fazla geri dönme raporu var."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "«%s» e-postasının spam veya kalıcı olarak geri döndüğü bildirildi."
@@ -979,11 +979,6 @@ msgstr ""
msgid "errors.feature-not-supported"
msgstr "'%s' özelliği desteklenmiyor."
-#: src/app/main/ui/auth/register.cljs, src/app/main/ui/dashboard/team_form.cljs, src/app/main/ui/onboarding/team_choice.cljs, src/app/main/ui/setti ngs/access_tokens.cljs, src/app/main/ui/settings/feedback.cljs, src/app/main/ui/settings/profile.cljs, src/app/main/ui/workspace/sidebar/assets.cljs
-#, unused
-msgid "errors.field-max-length"
-msgstr "En fazla 1 karakter içermelidir."
-
#, unused
msgid "errors.field-min-length"
msgstr "En az 1 karakter içermelidir."
@@ -1000,7 +995,7 @@ msgstr ""
"arasında bir uyumsuzluk var gibi görünüyor. Dosyanın açılabilmesi için önce "
"'%s' için geçişlerin uygulanması gerekiyor."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Bir şeyler ters gitti."
@@ -1033,7 +1028,7 @@ msgstr "Bu davet iptal edilmiş veya süresi dolmuş olabilir."
msgid "errors.ldap-disabled"
msgstr "LDAP ile oturum açma devre dışı bırakıldı."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "'%s' sınırına ulaştınız. Destek ile iletişime geçin."
@@ -1049,7 +1044,7 @@ msgstr "Görselin içeriği, dosya uzantısı ile eşleşmiyor gibi görünüyor
msgid "errors.media-type-not-allowed"
msgstr "Geçerli bir görsel gibi görünmüyor."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"Davet ettiğiniz profilin e-posta adresine ait çok fazla geri dönme raporu "
@@ -1073,7 +1068,7 @@ msgstr "Panoda geçersiz veri"
msgid "errors.profile-blocked"
msgstr "Profil engellendi"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr ""
"Profilinizde sessize alınmış e-postalar var (spam raporları veya yüksek "
@@ -1087,15 +1082,15 @@ msgstr "Kayıt olma şu anda devre dışı."
msgid "errors.team-feature-mismatch"
msgstr "Uyumsuz '%s' özelliği algılandı"
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr "Takımdan ayrılmak için yeterli üye yok, onu silmek isteyebilirsiniz."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "Atamaya çalıştığınız üye mevcut değil."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr "Sahip takımdan ayrılamaz, sahip rolünü yeniden atamanız gerekir."
@@ -1115,31 +1110,31 @@ msgstr "Doğrulama Hatası"
msgid "errors.version-not-supported"
msgstr "Dosyanın uyumsuz bir sürüm numarası var"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "Bağlantı hatası, URL'ye erişilemiyor"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "URL doğrulamayı geçemiyor."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "Son iletim başarılı olmadı."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "SSL doğrulamasında hata."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "Zaman aşımı"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "Doğrulamada beklenmeyen hata"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "Beklenmeyen durum %s"
@@ -1203,19 +1198,19 @@ msgstr "Bir hata oluştu"
msgid "inspect.attributes.blur"
msgstr "Bulanıklık"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "Değer"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1223,7 +1218,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Doldur"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Kaynak görselini indir"
@@ -1317,81 +1312,84 @@ msgstr "Düz"
msgid "inspect.attributes.stroke.width"
msgstr "Genişlik"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Tipografi"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Yazı Tipi Ailesi"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Yazı Tipi Boyutu"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Yazı Tipi Biçimi"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "Yazı Tipi Kalınlığı"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Harf Aralığı"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Satır Yüksekliği"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Metin Süsleme"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Hiçbiri"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Altı Çizili"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Metin Dönüşümü"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "İlk Harfleri Büyük"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "Küçük Harf"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Hiçbiri"
-#: src/app/main/ui/inspect/attributes/text.cljs:159
+#: src/app/main/ui/inspect/attributes/text.cljs:152
msgid "inspect.attributes.typography.text-transform.unset"
msgstr "Ayarlanmadı"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "Büyük Harf"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr ""
"Tasarım incelemesi hakkında daha fazla bilgi edinmek istiyorsanız Penpot "
"yardım merkezini ziyaret edin"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "İnceleme hakkında daha fazla bilgi"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr ""
"Özelliklerini ve kodunu incelemek için bir şekil, çalışma yüzeyi veya grup "
@@ -1453,7 +1451,7 @@ msgstr "Metin"
msgid "inspect.tabs.info"
msgstr "Bilgi"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Kısayollar"
@@ -1463,9 +1461,9 @@ msgstr "Kabul et"
#: src/app/main/ui/settings/sidebar.cljs:123
msgid "labels.access-tokens"
-msgstr "Erişim belirteçleri"
+msgstr "Erişim tokenleri"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "Etkin"
@@ -1473,7 +1471,7 @@ msgstr "Etkin"
msgid "labels.add-custom-font"
msgstr "Özel yazı tipi ekle"
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Yönetici"
@@ -1481,7 +1479,7 @@ msgstr "Yönetici"
msgid "labels.adobe-xd"
msgstr "Adobe XD"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Hepsi"
@@ -1504,7 +1502,7 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "Hatalı Ağ Geçidi"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "İptal"
@@ -1512,15 +1510,15 @@ msgstr "İptal"
msgid "labels.canva"
msgstr "Canva"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Kapat"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Yorumlar"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Topluluk"
@@ -1528,7 +1526,7 @@ msgstr "Topluluk"
msgid "labels.confirm-password"
msgstr "Parolayı onayla"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Devam et"
@@ -1540,7 +1538,7 @@ msgstr "İle devam et"
msgid "labels.continue-with-penpot"
msgstr "Penpot hesabıyla devam edebilirsiniz"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "Bağlantıyı kopyala"
@@ -1548,7 +1546,7 @@ msgstr "Bağlantıyı kopyala"
msgid "labels.copyright"
msgstr "Kaleidos @2024"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Oluştur"
@@ -1568,7 +1566,7 @@ msgstr "Özel yazı tipleri"
msgid "labels.dashboard"
msgstr "Denetim paneli"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Sil"
@@ -1580,7 +1578,7 @@ msgstr "Yorumu sil"
msgid "labels.delete-comment-thread"
msgstr "Mesaj dizisini sil"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Daveti sil"
@@ -1597,15 +1595,15 @@ msgstr "Geliştirici"
msgid "labels.director"
msgstr "Yönetici"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "At"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Taslak"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Düzenle"
@@ -1613,7 +1611,7 @@ msgstr "Düzenle"
msgid "labels.edit-file"
msgstr "Dosya düzenle"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Düzenleyici"
@@ -1622,11 +1620,11 @@ msgstr "Düzenleyici"
msgid "labels.event"
msgstr "Etkinlik"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Süresi doldu"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Dışa aktar"
@@ -1654,7 +1652,7 @@ msgstr "Yazı tipi sağlayıcıları"
msgid "labels.font-variants"
msgstr "Biçimler"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Yazı tipleri"
@@ -1668,11 +1666,11 @@ msgstr "Kurucu/Başkan Yardımcısı"
msgid "labels.freelancer"
msgstr "Serbest çalışıyorum"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "Github deposu"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Geri bildirimde bulun"
@@ -1684,15 +1682,15 @@ msgstr "Geri dön"
msgid "labels.graphic-design"
msgstr "Grafik tasarımı"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Yardım Merkezi"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
-msgstr "Çözülmüş yorumları gizle"
+msgstr "Çözülen yorumları gizle"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "Etkin değil"
@@ -1714,7 +1712,7 @@ msgstr "İç Hata"
msgid "labels.invision"
msgstr "InVision"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Davetler"
@@ -1722,7 +1720,7 @@ msgstr "Davetler"
msgid "labels.language"
msgstr "Dil"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Kütüphaneler ve Şablonlar"
@@ -1738,7 +1736,7 @@ msgstr "Oturum açın veya kaydolun"
msgid "labels.login"
msgstr "Oturum aç"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Oturumu kapat"
@@ -1746,11 +1744,11 @@ msgstr "Oturumu kapat"
msgid "labels.marketing"
msgstr "Pazarlama"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Üye"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Üyeler"
@@ -1758,15 +1756,15 @@ msgstr "Üyeler"
msgid "labels.new-password"
msgstr "Yeni parola"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "Sonraki"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "Hepsini bitirdiniz! Yeni yorum bildirimleri burada görünecektir."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "Bekleyen davetiye yok."
@@ -1779,7 +1777,7 @@ msgstr "Bu sayfa mevcut olmayabilir veya erişim izniniz olmayabilir."
msgid "labels.not-found.main-message"
msgstr "Oops!"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "1 dosya"
@@ -1791,7 +1789,7 @@ msgid_plural "labels.num-of-frames"
msgstr[0] "1 çalışma yüzeyi"
msgstr[1] "%s çalışma yüzeyi"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "1 proje"
@@ -1822,7 +1820,7 @@ msgstr "Diğer (lütfen belirtiniz)"
msgid "labels.other-short"
msgstr "Diğer"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Sahip"
@@ -1830,7 +1828,7 @@ msgstr "Sahip"
msgid "labels.password"
msgstr "Parola"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "Bekliyor"
@@ -1850,11 +1848,11 @@ msgstr "Ürün veya Proje yöneticisi"
msgid "labels.profile"
msgstr "Profil"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Projeler"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Sürüm notları"
@@ -1868,11 +1866,11 @@ msgstr "Dosyayı yeniden yükle"
msgid "labels.remove"
msgstr "Kaldır"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Üyeyi kaldır"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Yeniden adlandır"
@@ -1880,7 +1878,7 @@ msgstr "Yeniden adlandır"
msgid "labels.rename-team"
msgstr "Takımı yeniden adlandır"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "Daveti yeniden gönder"
@@ -1888,15 +1886,15 @@ msgstr "Daveti yeniden gönder"
msgid "labels.retry"
msgstr "Yeniden dene"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Rol"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Kaydet"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:715
+#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:730
msgid "labels.search"
msgstr "Ara"
@@ -1924,7 +1922,7 @@ msgstr "Sistemlerimizin programlı bakımını yapıyoruz."
msgid "labels.service-unavailable.main-message"
msgstr "Hizmet Kullanılamıyor"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Ayarlar"
@@ -1936,11 +1934,11 @@ msgstr "Paylaş"
msgid "labels.share-prototype"
msgstr "Prototipi paylaş"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Paylaşılan Kütüphaneler"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Tüm yorumları göster"
@@ -1948,7 +1946,7 @@ msgstr "Tüm yorumları göster"
msgid "labels.show-comments-list"
msgstr "Yorum listesini göster"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Yalnızca kendi yorumlarımı göster"
@@ -1960,7 +1958,7 @@ msgstr "Sketch"
msgid "labels.start"
msgstr "Başla"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Durum"
@@ -1978,7 +1976,7 @@ msgstr "Takım Lideri"
msgid "labels.team-member"
msgstr "Takım üyesi"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Öğreticiler"
@@ -2006,15 +2004,15 @@ msgstr "Özel yazı tipi yükle"
msgid "labels.uploading"
msgstr "Yükleniyor…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "YALNIZCA GÖRÜNTÜLE"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Görüntüleyici"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Web kancaları"
@@ -2022,11 +2020,11 @@ msgstr "Web kancaları"
msgid "labels.write-new-comment"
msgstr "Yeni yorum yaz"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(siz)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "Hesabınız"
@@ -2035,23 +2033,23 @@ msgstr "Hesabınız"
msgid "labels.youtube"
msgstr "YouTube"
-#: src/app/main/ui/workspace/colorpicker.cljs:449, src/app/main/ui/workspace/colorpicker.cljs:450, src/app/main/ui/workspace/colorpicker.cljs:452
+#: src/app/main/ui/workspace/colorpicker.cljs:486, src/app/main/ui/workspace/colorpicker.cljs:487, src/app/main/ui/workspace/colorpicker.cljs:489
msgid "media.choose-image"
msgstr "Görsel seç"
-#: src/app/main/ui/workspace/colorpicker.cljs:244
+#: src/app/main/ui/workspace/colorpicker.cljs:256
msgid "media.gradient"
msgstr "Değişim"
-#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:44, src/app/main/ui/ds/utilities/swatch.cljs:57, src/app/main/ui/inspect/attributes/common.cljs:63, src/app/main/ui/workspace/colorpicker.cljs:246, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:251
+#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:45, src/app/main/ui/ds/utilities/swatch.cljs:58, src/app/main/ui/inspect/attributes/common.cljs:44, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:65, src/app/main/ui/workspace/colorpicker.cljs:258, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:395
msgid "media.image"
msgstr "Görsel"
-#: src/app/main/ui/inspect/attributes/common.cljs:74
+#: src/app/main/ui/inspect/attributes/common.cljs:55
msgid "media.image.short"
msgstr "görsel"
-#: src/app/main/ui/workspace/colorpicker.cljs:442
+#: src/app/main/ui/workspace/colorpicker.cljs:479
msgid "media.keep-aspect-ratio"
msgstr "En boy oranını koru"
@@ -2069,7 +2067,7 @@ msgstr "Görsel yükleniyor…"
msgid "media.radial"
msgstr "Işınsal"
-#: src/app/main/ui/workspace/colorpicker.cljs:242
+#: src/app/main/ui/workspace/colorpicker.cljs:254
msgid "media.solid"
msgstr "Katı"
@@ -2122,7 +2120,7 @@ msgstr "E-postanızı değiştirin"
#: src/app/main/ui/settings/access_tokens.cljs:152, src/app/main/ui/settings/access_tokens.cljs:158
msgid "modals.create-access-token.copy-token"
-msgstr "Belirteci kopyala"
+msgstr "Tokeni kopyala"
#: src/app/main/ui/settings/access_tokens.cljs:130
msgid "modals.create-access-token.expiration-date.label"
@@ -2134,43 +2132,43 @@ msgstr "İsim"
#: src/app/main/ui/settings/access_tokens.cljs:126
msgid "modals.create-access-token.name.placeholder"
-msgstr "Adı, belirtecin ne için olduğunu bilmenize yardımcı olabilir"
+msgstr "Adı, tokenin ne için olduğunu bilmenize yardımcı olabilir"
#: src/app/main/ui/settings/access_tokens.cljs:178
msgid "modals.create-access-token.submit-label"
-msgstr "Belirteç oluştur"
+msgstr "Token oluştur"
#: src/app/main/ui/settings/access_tokens.cljs:111
msgid "modals.create-access-token.title"
-msgstr "Erişim belirteci oluştur"
+msgstr "Erişim tokeni oluştur"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "Web kancası oluştur"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "Web kancası oluştur"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "Yük URL'si"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://example.com/postreceive"
#: src/app/main/ui/settings/access_tokens.cljs:257
msgid "modals.delete-acces-token.accept"
-msgstr "Belirteci sil"
+msgstr "Tokeni sil"
#: src/app/main/ui/settings/access_tokens.cljs:256
msgid "modals.delete-acces-token.message"
-msgstr "Bu belirteci silmek istediğinizden emin misiniz?"
+msgstr "Bu tokeni silmek istediğinizden emin misiniz?"
#: src/app/main/ui/settings/access_tokens.cljs:255
msgid "modals.delete-acces-token.title"
-msgstr "Belirteci sil"
+msgstr "Tokeni sil"
#: src/app/main/ui/settings/delete_account.cljs:56
msgid "modals.delete-account.cancel"
@@ -2202,11 +2200,11 @@ msgstr ""
msgid "modals.delete-comment-thread.title"
msgstr "Konuşmayı sil"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "Bu açıklamayı silmek istediğinize emin misiniz?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "Açıklamayı sil"
@@ -2254,11 +2252,11 @@ msgstr ""
msgid "modals.delete-font.title"
msgstr "Yazı tipini sil"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Bu sayfayı silmek istediğinden emin misin?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Sayfayı sil"
@@ -2304,29 +2302,29 @@ msgid_plural "modals.delete-shared-confirm.title"
msgstr[0] "Dosya siliniyor"
msgstr[1] "Dosyalar siliniyor"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Takımı sil"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Bu takımı silmek istediğinden emin misin? Takımla ilişkili dosyalar ve "
"projeler kalıcı olarak silinecektir."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Takım siliniyor"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Üyeyi sil"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Bu üyeyi takımdan silmek istediğinden emin misin?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Takım üyesini sil"
@@ -2340,51 +2338,51 @@ msgstr[1] ""
"Bu dosyalarda daha önce kullanılmış olan varlıklar orada kalmaya devam "
"edecek (hiçbir tasarım bozulmayacak)."
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "Web kancasını sil"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "Bu web kancasını silmek istediğinizden emin misiniz?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "Web kancası siliniyor"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "Web kancasını düzenle"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "Web kancasını düzenle"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Davet gönder"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "E-posta adresleri, virgülle ayrılmış"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr ""
"Bazı e-posta adresleri mevcut takım üyelerine aittir. Davetleri "
"gönderilmeyecektir."
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "Üyeleri takıma davet et"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"Tek üyesi siz olduğunuz için takım, projeleri ve dosyaları ile birlikte "
"silinecektir."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "%s takımından ayrılmak istediğinizden emin misiniz?"
@@ -2412,15 +2410,15 @@ msgstr "Terfi ettirmek için bir üye seçin"
msgid "modals.leave-and-reassign.title"
msgstr "Ayrılmadan önce"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Takımdan ayrıl"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Bu takımdan ayrılmak istediğinden emin misin?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Takımdan ayrıl"
@@ -2442,39 +2440,39 @@ msgid_plural "modals.move-shared-confirm.title"
msgstr[0] "Kütüphaneyi taşı"
msgstr[1] "Kütüphaneleri taşı"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "Dürtme miktarı"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Sahipliği aktar"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"Sahipliği aktarırsanız, rolünüzü Yönetici olarak değiştireceksiniz ve bu "
"takım üzerindeki bazı izinleri kaybedeceksiniz. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr ""
"Bu takımın şu anki sahibi sizsiniz. %s kişisini takımın yeni sahibi yapmak "
"istediğinizden emin misiniz?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Yeni takım sahibi"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "Yayınla"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "Kütüphaneniz boş. Yine de yayınlamak istediğinizden emin misiniz?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "Boş kütüphaneyi yayınla"
@@ -2529,21 +2527,21 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Paylaşılan bir kütüphanedeki bileşenleri güncelle"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Güncelle"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "İptal"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"Paylaşılmış bir kütüphanedeki bileşeni güncellemek üzeresin. Onu kullanan "
"diğer dosyalar etkilenebilir."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Paylaşılmış bir kütüphanede bir bileşen güncelle"
@@ -2558,7 +2556,7 @@ msgstr "404 hatası"
#: src/app/main/ui/static.cljs:133
msgid "not-found.login.free"
msgstr ""
-"Penpot, Tasarım ve Kod arasında işbirliği için özgür ve açık kaynaklı bir "
+"Penpot, Tasarım ve Kod arasında iş birliği için özgür ve açık kaynaklı bir "
"tasarım aracıdır"
#: src/app/main/ui/auth/recovery_request.cljs:114
@@ -2655,11 +2653,11 @@ msgstr "Bakım arası: 5 dakika içinde kısa bir bakım için kapalı olacağı
msgid "notifications.by-code.upgrade-version"
msgstr "Yeni bir sürüm mevcut, lütfen sayfayı yenileyin"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "Davet başarıyla iletildi"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "Davet bağlantısı kopyalandı"
@@ -2808,7 +2806,7 @@ msgstr ""
"Herkesi dahil etmeyi unutmayın. Geliştiriciler, tasarımcılar, "
"yöneticiler... çeşitlilik iyidir :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "Rol ile davet et:"
@@ -3026,653 +3024,637 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "Oturum açmaya git"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "Çıkar"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "Karışık"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:288
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:428
msgid "settings.select-this-color"
msgstr "Bu biçimi kullanan ögeleri seç"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Temel bilgiler"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "Denetim paneli"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Görüntüleyici"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Çalışma alanı"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Hizalama"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Düzenle"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "Genel"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "Genel"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Ana menü"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "Katmanları değiştir"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Gezinme"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Gezinme"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Gezinme"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Paneller"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Yollar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Şekiller"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "Metinler"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Araçlar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Yakınlaştır"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Yakınlaştır"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Yorumlar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "Düğüm ekle"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "Alta hizala"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "Ortala"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "Ortayı yatay olarak hizala"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "İki yana yasla"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "Sola hizala"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "Sağa hizala"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "Üste hizala"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "Ortayı dikey olarak hizala"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "Seçimden çalışma yüzeyi oluştur"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "Kalın yazı aç/kapat"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "Boole farkı"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "Boole hariç tut"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "Boole kesişim"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "Boole birleşim"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "En arkaya gönder"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Arkaya gönder"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "Öne getir"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "En öne getir"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "Geri almayı temizle"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Kopyala"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "Yeni oluştur"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Kes"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "Uzaklaştır"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Sil"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "Düğümü sil"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "Bileşeni ayır"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Eğri"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "Elips"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Çalışma yüzeyi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "Yol çiz"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Yol"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Dikdörtgen"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Metin"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Çoğalt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "İptal"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "Şekilleri dışa aktar"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "Tümüne uydurmak için yakınlaştır"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "Yatay olarak çevir"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "Dikey olarak çevir"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "Yazı boyutunu azalt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "Yazı boyutunu artır"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "Taslaklara git"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "Paylaşılan kütüphanelere git"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Ara"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Grup"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "Yatay olarak dağıt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "Kullanıcı arayüzünü göster/gizle"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "Yakınlaştır"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "Görsel ekle"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "İtalik yazı aç/kapat"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "Düğümlere katıl"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
-msgid "shortcuts.letter-spacing-dec"
-msgstr "Harf aralığını azalt"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "Harf aralığını artır"
-
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
-msgid "shortcuts.line-height-dec"
-msgstr "Satır yüksekliğini azalt"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
-msgid "shortcuts.line-height-inc"
-msgstr "Satır yüksekliğini artır"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.line-through"
msgstr "Üstü çizili yazı aç/kapat"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "Köşe yap"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "Eğri yap"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "Maskele"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "Düğümleri birleştir"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "Taşı"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "Hızlı aşağı taşı"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "Hızlı sola taşı"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "Hızlı sağa taşı"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "Hızlı yukarı taşı"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "Düğümü taşı"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "Aşağı taşı"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "Sola taşı"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "Sağa taşı"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "Yukarı taşı"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "Sonraki çalışma yüzeyi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "Kısayol bulunamadı"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "Opaklığı %100 olarak ayarla"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "Opaklığı %10 olarak ayarla"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "Opaklığı %20 olarak ayarla"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "Opaklığı %30 olarak ayarla"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "Opaklığı %40 olarak ayarla"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "Opaklığı %50 olarak ayarla"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "Opaklığı %60 olarak ayarla"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "Opaklığı %70 olarak ayarla"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "Opaklığı %80 olarak ayarla"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "Opaklığı %90 olarak ayarla"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "Renk seçici"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "Görüntüleyici yorum bölümüne git"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "Denetim paneline git"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "Görüntüleyici inceleme bölümüne git"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "Görüntüleyici etkileşimleri bölümüne git"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "Görüntüleyici etkileşimleri bölümüne git"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "Çalışma alanına git"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " veya "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Yapıştır"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "Önceki çalışma yüzeyi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "Yeniden yap"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "Yakınlaştırmayı sıfırla"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
msgid "shortcuts.scale"
msgstr "Ölçeklendir"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "Kısayolları ara"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "Tümünü seç"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
msgid "shortcuts.select-next"
msgstr "Sonraki katmanı seç"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
msgid "shortcuts.select-parent-layer"
msgstr "Ana katmanı seç"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
msgid "shortcuts.select-prev"
msgstr "Önceki katmanı seç"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "Düğümleri ayır"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "Piksel ızgarasını göster/gizle"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "Kısayolları göster/gizle"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "Düğümlere tuttur"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "Piksel ızgarasına tuttur"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "Düzenlemeye başla"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "Ölçüme başla"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "Ölçümü durdur"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "Küçük resimleri ayarla"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "Klavye kısayolları"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "Dinamik hizalamayı aç/kapat"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "Varlıkları değiştir"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "Renk paletini değiştir"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "Odak modunu değiştir"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "Tam ekranı değiştir"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
msgid "shortcuts.toggle-guides"
msgstr "Kılavuzları göster/gizle"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "Geçmişi değiştir"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "Katmanları değiştir"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "Düzen esnekliği ekle/kaldır"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
msgid "shortcuts.toggle-layout-grid"
msgstr "Izgara düzeni ekle/kaldır"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "Seçileni kilitle"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "Oranları kilitle"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
msgid "shortcuts.toggle-rulers"
msgstr "Cetvelleri göster/gizle"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
msgid "shortcuts.toggle-snap-guides"
msgstr "Kılavuzlara tuttur"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
msgid "shortcuts.toggle-snap-ruler-guide"
msgstr "Cetvel kılavuzlarına tuttur"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "Metin paletini değiştir"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
msgid "shortcuts.toggle-theme"
msgstr "Temayı değiştir"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "Göster / Gizle"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "Yakınlaştırma şeklini değiştir"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "Alt çizgiyi aç/kapat"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Geri al"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Grubu dağıt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Maskelemeyi kaldır"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "Dikey olarak dağıt"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "Görüntüyü küçült"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "Görüntüyü büyült"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "Seçilene yakınlaştır"
@@ -3706,7 +3688,7 @@ msgstr "Penpot - Takımlar için Özgür Tasarım"
#: src/app/main/ui/settings/access_tokens.cljs:278
msgid "title.settings.access-tokens"
-msgstr "Profil - Erişim belirteçleri"
+msgstr "Profil - Erişim tokenleri"
#: src/app/main/ui/settings/feedback.cljs:107
msgid "title.settings.feedback"
@@ -3724,19 +3706,19 @@ msgstr "Parola - Penpot"
msgid "title.settings.profile"
msgstr "Profil - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "Davetler - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "Üyeler - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Ayarlar - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "Web kancaları - %s - Penpot"
@@ -3808,39 +3790,39 @@ msgstr "Tıklamada etkileşimleri göster"
msgid "viewer.header.sitemap"
msgstr "Site haritası"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "Son iletim başarılı oldu."
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Yatay olarak ortaya hizala (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "Yatayda dağıt (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Sola hizala (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Sağa hizala (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Alta hizala (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Dikey olarak ortaya hizala (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "Dikeyde dağıt (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Üste hizala (%s)"
@@ -3849,31 +3831,31 @@ msgstr "Üste hizala (%s)"
msgid "workspace.assets.assets"
msgstr "Varlıklar"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "Tüm varlıklar"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Renkler"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Bileşenler"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "Grup oluştur"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr "Ögeleriniz otomatik olarak \"grup adı / öge adı\" olarak adlandırılacak"
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Sil"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "Çoğalt"
@@ -3881,11 +3863,11 @@ msgstr "Çoğalt"
msgid "workspace.assets.duplicate-main"
msgstr "Ana bileşeni çoğalt"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Düzenle"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:177
+#: src/app/main/ui/workspace/sidebar/assets.cljs:186
msgid "workspace.assets.filter"
msgstr "Filtrele"
@@ -3894,23 +3876,23 @@ msgstr "Filtrele"
msgid "workspace.assets.graphics"
msgstr "Grafikler"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:576
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:190, src/app/main/ui/workspace/sidebar/assets/components.cljs:576
msgid "workspace.assets.grid-view"
msgstr "Izgara görünümü"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Grup"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "Grup adı"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:572
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:191, src/app/main/ui/workspace/sidebar/assets/components.cljs:572
msgid "workspace.assets.list-view"
msgstr "Liste görünümü"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "yerel kütüphane"
@@ -3922,15 +3904,15 @@ msgstr "Varlık bulunmadı"
msgid "workspace.assets.open-library"
msgstr "Kütüphane dosyasını aç"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Yeniden adlandır"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "Grubu yeniden adlandır"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "Varlık ara"
@@ -3946,17 +3928,17 @@ msgstr[1] "%s öge seçildi"
msgid "workspace.assets.shared-library"
msgstr "Paylaşılan kütüphane"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:237
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:235
msgid "workspace.assets.sidebar.components"
msgid_plural "workspace.assets.sidebar.components"
msgstr[0] "1 bileşen"
msgstr[1] "%s bileşen"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:193
+#: src/app/main/ui/workspace/sidebar/assets.cljs:204
msgid "workspace.assets.sort"
msgstr "Sırala"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Tipografiler"
@@ -3981,7 +3963,7 @@ msgstr "Harf Boşluğu"
msgid "workspace.assets.typography.line-height"
msgstr "Satır Yüksekliği"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -3993,59 +3975,59 @@ msgstr "Metin biçimleri"
msgid "workspace.assets.typography.text-transform"
msgstr "Metin Dönüşümü"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "Grubu dağıt"
-#: src/app/main/ui/workspace/context_menu.cljs:791
+#: src/app/main/ui/workspace/context_menu.cljs:794
msgid "workspace.context-menu.grid-cells.area"
msgstr "Alan oluştur"
-#: src/app/main/ui/workspace/context_menu.cljs:794
+#: src/app/main/ui/workspace/context_menu.cljs:797
msgid "workspace.context-menu.grid-cells.create-board"
msgstr "Çalışma yüzeyi oluştur"
-#: src/app/main/ui/workspace/context_menu.cljs:786
+#: src/app/main/ui/workspace/context_menu.cljs:789
msgid "workspace.context-menu.grid-cells.merge"
msgstr "Hücreleri birleştir"
-#: src/app/main/ui/workspace/context_menu.cljs:749
+#: src/app/main/ui/workspace/context_menu.cljs:752
msgid "workspace.context-menu.grid-track.column.add-after"
msgstr "Sağa 1 sütun ekle"
-#: src/app/main/ui/workspace/context_menu.cljs:748
+#: src/app/main/ui/workspace/context_menu.cljs:751
msgid "workspace.context-menu.grid-track.column.add-before"
msgstr "Sola 1 sütun ekle"
-#: src/app/main/ui/workspace/context_menu.cljs:750
+#: src/app/main/ui/workspace/context_menu.cljs:753
msgid "workspace.context-menu.grid-track.column.delete"
msgstr "Sütunu sil"
-#: src/app/main/ui/workspace/context_menu.cljs:751
+#: src/app/main/ui/workspace/context_menu.cljs:754
msgid "workspace.context-menu.grid-track.column.delete-shapes"
msgstr "Sütun ve şekilleri sil"
-#: src/app/main/ui/workspace/context_menu.cljs:747
+#: src/app/main/ui/workspace/context_menu.cljs:750
msgid "workspace.context-menu.grid-track.column.duplicate"
msgstr "Yinelenen sütun"
-#: src/app/main/ui/workspace/context_menu.cljs:756
+#: src/app/main/ui/workspace/context_menu.cljs:759
msgid "workspace.context-menu.grid-track.row.add-after"
msgstr "Aşağıya 1 satır ekle"
-#: src/app/main/ui/workspace/context_menu.cljs:755
+#: src/app/main/ui/workspace/context_menu.cljs:758
msgid "workspace.context-menu.grid-track.row.add-before"
msgstr "Yukarıya 1 satır ekle"
-#: src/app/main/ui/workspace/context_menu.cljs:757
+#: src/app/main/ui/workspace/context_menu.cljs:760
msgid "workspace.context-menu.grid-track.row.delete"
msgstr "Satırı sil"
-#: src/app/main/ui/workspace/context_menu.cljs:758
+#: src/app/main/ui/workspace/context_menu.cljs:761
msgid "workspace.context-menu.grid-track.row.delete-shapes"
msgstr "Satır ve şekilleri sil"
-#: src/app/main/ui/workspace/context_menu.cljs:754
+#: src/app/main/ui/workspace/context_menu.cljs:757
msgid "workspace.context-menu.grid-track.row.duplicate"
msgstr "Yinelenen satır"
@@ -4053,7 +4035,7 @@ msgstr "Yinelenen satır"
msgid "workspace.focus.focus-mode"
msgstr "Odaklanma modu"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "Odaklanma kapalı"
@@ -4073,11 +4055,11 @@ msgstr "Doğrusal degrade"
msgid "workspace.gradients.radial"
msgstr "Dairesel degrade"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "Dinamik hizalamayı devre dışı bırak"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "Orantılı ölçeklendirmeyi devre dışı bırak"
@@ -4086,23 +4068,23 @@ msgstr "Orantılı ölçeklendirmeyi devre dışı bırak"
msgid "workspace.header.menu.disable-scale-text"
msgstr "Metin ölçeklendirmeyi devre dışı bırak"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "Kılavuzlara tutturmayı devre dışı bırak"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "Piksele tutturmayı devre dışı bırak"
-#: src/app/main/ui/workspace/main_menu.cljs:215
+#: src/app/main/ui/workspace/main_menu.cljs:243
msgid "workspace.header.menu.disable-snap-ruler-guides"
msgstr "Cetvel kılavuzlarına tutturmayı devre dışı bırak"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "Dinamik hizalamayı etkinleştir"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "Orantılı ölçeklendirmeyi etkinleştir"
@@ -4111,107 +4093,107 @@ msgstr "Orantılı ölçeklendirmeyi etkinleştir"
msgid "workspace.header.menu.enable-scale-text"
msgstr "Metin ölçeklendirmeyi etkinleştir"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "Kılavuzlara tuttur"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "Piksele tutturmayı etkinleştir"
-#: src/app/main/ui/workspace/main_menu.cljs:216
+#: src/app/main/ui/workspace/main_menu.cljs:244
msgid "workspace.header.menu.enable-snap-ruler-guides"
msgstr "Cetvel kılavuzlarına tuttur"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "Çalışma yüzeyi adlarını gizle"
-#: src/app/main/ui/workspace/main_menu.cljs:348
+#: src/app/main/ui/workspace/main_menu.cljs:376
msgid "workspace.header.menu.hide-guides"
msgstr "Kılavuzları gizle"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "Renk paletini gizle"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "Piksel ızgarasını gizle"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "Cetvelleri gizle"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "Yazı tipi paletini gizle"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Düzenle"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "Dosya"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "Yardım ve bilgi"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "Tercihler"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "Görünüm"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "Tekrarla"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "Tümünü seç"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "Çalışma yüzeylerinin adlarını göster"
-#: src/app/main/ui/workspace/main_menu.cljs:349
+#: src/app/main/ui/workspace/main_menu.cljs:377
msgid "workspace.header.menu.show-guides"
msgstr "Kılavuzları göster"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "Renk paletini göster"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "Piksel ızgarasını göster"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Cetvelleri göster"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "Yazı tipi paletini göster"
-#: src/app/main/ui/workspace/main_menu.cljs:288
+#: src/app/main/ui/workspace/main_menu.cljs:316
msgid "workspace.header.menu.toggle-dark-theme"
msgstr "Koyu temaya geç"
-#: src/app/main/ui/workspace/main_menu.cljs:286, src/app/main/ui/workspace/main_menu.cljs:289
+#: src/app/main/ui/workspace/main_menu.cljs:314, src/app/main/ui/workspace/main_menu.cljs:317
msgid "workspace.header.menu.toggle-light-theme"
msgstr "Açık temaya geç"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "Geri al"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Sıfırla"
@@ -4232,11 +4214,11 @@ msgstr "Kaydediliyor"
msgid "workspace.header.unsaved"
msgstr "Kaydedilmemiş değişiklikler"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "Görünüm modu (%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "Yakınlaştırma"
@@ -4248,7 +4230,7 @@ msgstr "Doldur - Doldurmak için ölçeklendir"
msgid "workspace.header.zoom-fit"
msgstr "Sığdır - Sığdırmak için küçült"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "Tümüne uydurmak için yakınlaştır"
@@ -4256,19 +4238,19 @@ msgstr "Tümüne uydurmak için yakınlaştır"
msgid "workspace.header.zoom-full-screen"
msgstr "Tam ekran"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "Seçilene yakınlaştır"
-#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:621
msgid "workspace.layout_grid.editor.options.edit-grid"
msgstr "Izgarayı düzenle"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1300
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1301
msgid "workspace.layout_grid.editor.options.exit"
msgstr "Çıkış"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:491
msgid "workspace.layout_grid.editor.padding.expand"
msgstr "4 taraflı dolgu seçeneklerini göster"
@@ -4284,7 +4266,7 @@ msgstr "Bitti"
msgid "workspace.layout_grid.editor.top-bar.locate"
msgstr "Bul"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1326
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1327
msgid "workspace.layout_grid.editor.top-bar.locate.tooltip"
msgstr "Izgara düzenini bul"
@@ -4293,10 +4275,6 @@ msgstr "Izgara düzenini bul"
msgid "workspace.libraries.add"
msgstr "Ekle"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s renk"
-
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
msgstr "Kütüphanenizde henüz renk stili yok"
@@ -4323,31 +4301,23 @@ msgstr "Son renkler"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "RGB Tamamlayıcı"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Renk biçimini kaydet"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s bileşen"
-
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Dosya kütüphanesi"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s grafik"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "BU DOSYADAKİ KÜTÜPHANELER"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "KÜTÜPHANELER"
@@ -4356,75 +4326,71 @@ msgstr "KÜTÜPHANELER"
msgid "workspace.libraries.library"
msgstr "KÜTÜPHANE"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "KÜTÜPHANE GÜNCELLEMELERİ"
-#: src/app/main/ui/workspace/libraries.cljs:360
+#: src/app/main/ui/workspace/libraries.cljs:393
msgid "workspace.libraries.loading"
msgstr "Yükleniyor…"
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "Güncelleme gerektiren Paylaşılmış Kütüphane bulunmuyor"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "“%s“ için eşleşme bulunmadı"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "Paylaşılmış kütüphane ara"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "PAYLAŞILMIŞ KÜTÜPHANELER"
-#: src/app/main/ui/workspace/libraries.cljs:352
+#: src/app/main/ui/workspace/libraries.cljs:385
msgid "workspace.libraries.shared-library-btn"
msgstr "Kütüphaneyi bağla"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Çoklu tipografiler"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Tüm tipografileri ayır"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s tipografi"
-
-#: src/app/main/ui/workspace/libraries.cljs:323
+#: src/app/main/ui/workspace/libraries.cljs:354
msgid "workspace.libraries.unlink-library-btn"
msgstr "Kütüphanenin bağlantısını kes"
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Güncelle"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "tüm değişiklikleri gör"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "GÜNCELLEMELER"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "Etkileşimler eklemek için + düğmesine tıklayın."
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Bulanıklık"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "Grup bulanıklığı"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "Seçim bulanıklığı"
@@ -4432,39 +4398,39 @@ msgstr "Seçim bulanıklığı"
msgid "workspace.options.canvas-background"
msgstr "Tuval arka planı"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "İçeriği kırp"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Bileşen"
-#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:193
+#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:196
msgid "workspace.options.component.annotation"
msgstr "Açıklama"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "Kopyala"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:185
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:188
msgid "workspace.options.component.create-annotation"
msgstr "Bir açıklama oluştur"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "Bir açıklamayı düzenle"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "Ana bileşen"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:706
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:721
msgid "workspace.options.component.swap"
msgstr "Bileşeni değiştir"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:765
msgid "workspace.options.component.swap.empty"
msgstr "Bu kütüphanede henüz varlık yok"
@@ -4508,7 +4474,7 @@ msgstr "Üst"
msgid "workspace.options.constraints.topbottom"
msgstr "Üst ve Alt"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Tasarım"
@@ -4521,13 +4487,13 @@ msgstr "Dışa aktar"
msgid "workspace.options.export-multiple"
msgstr "Seçimi dışa aktar"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "1 ögeyi dışa aktar"
msgstr[1] "%s ögeyi dışa aktar"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Son ek"
@@ -4535,7 +4501,7 @@ msgstr "Son ek"
msgid "workspace.options.exporting-complete"
msgstr "Dışa aktarma tamamlandı"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "Dışa aktarılıyor…"
@@ -4547,15 +4513,15 @@ msgstr "Dışa aktarılamadı"
msgid "workspace.options.exporting-object-slow"
msgstr "Dışa aktarma beklenmedik şekilde yavaş"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Doldur"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "Akış başlangıcı ekle"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:178
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:179
msgid "workspace.options.flows.flow"
msgstr "Akış"
@@ -4564,15 +4530,15 @@ msgstr "Akış"
msgid "workspace.options.flows.flow-start"
msgstr "Akış başlangıcı"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "Akış başlar"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Otomatik"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "Sütunlar"
@@ -4581,7 +4547,7 @@ msgstr "Sütunlar"
msgid "workspace.options.grid.grid-title"
msgstr "Izgara"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Renk"
@@ -4590,15 +4556,15 @@ msgstr "Renk"
msgid "workspace.options.grid.params.columns"
msgstr "Sütunlar"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "Aralık"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Yükseklik"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Kenar Boşluğu"
@@ -4607,9 +4573,9 @@ msgstr "Kenar Boşluğu"
msgid "workspace.options.grid.params.rows"
msgstr "Satırlar"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
-msgstr "Varsayılan olarak belirle"
+msgstr "Öntanımlı olarak ayarla"
#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs
#, unused
@@ -4621,147 +4587,147 @@ msgstr "Boyut"
msgid "workspace.options.grid.params.type"
msgstr "Tür"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Alt"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Orta"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Sol"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Sağ"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "Ger"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "Üst"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
-msgstr "Varsayılanı kullan"
+msgstr "Öntanımlıyı kullan"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Genişlik"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Satırlar"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "Kare"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Grubu doldur"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Grubu çiz"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:320
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
msgid "workspace.options.guides.title"
msgstr "Kılavuzlar"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "Yükseklik"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "İncele"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "Eylem"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "Gecikmeden sonra"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "Canlandırma"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "Çöz"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "Hiçbiri"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "İt"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "Kaydır"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "otomatik"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "Arka plan üst katmanı ekle"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "Dışarıya tıklandığında kapat"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "Üst katmanı kapat"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "Üst katmanı kapat: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "Gecikme"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "Hedef"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "Süre"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "Yumuşatma"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "Yumuşat"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "Yumuşak giriş"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "Yumuşak giriş çıkış"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "Yumuşak çıkış"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "Doğrusal"
@@ -4770,47 +4736,47 @@ msgstr "Doğrusal"
msgid "workspace.options.interaction-in"
msgstr "Giriş"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "Fare girişi"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "Fare çıkışı"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "ms"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "Git"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "Şuraya gidin: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(ayarlanmadı)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "Uzaklık efekti"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "Tıklandığında"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "Üst katmanı aç"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "Üst katmanı aç: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "URL'yi aç"
@@ -4819,147 +4785,147 @@ msgstr "URL'yi aç"
msgid "workspace.options.interaction-out"
msgstr "Çıkış"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "Alt orta"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "Sol alt"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "Sağ alt"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "Merkez"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "El ile"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "Üst orta"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "Sol üst"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "Sağ üst"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "Konum"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "Kaydırma konumunu koru"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "Önceki ekran"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "Göreceli"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "kendi"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "Üst katmanı değiştir"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "Üst katmanı değiştir: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "Tetikle"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "Üzerinde Gezinirken"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "Basarken"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "Etkileşimler"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "Renk"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "Renk yanması"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "Renk atlatması"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "Karart"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "Fark"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "Dışla"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Sert ışık"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Ton"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Aydınlat"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "Parlaklık"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "Çoğalt"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "Normal"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "Üst katman"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "Doygunluk"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Ekran"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "Yumuşak ışık"
@@ -4983,19 +4949,19 @@ msgstr "Seçili katmanlar"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "Gelişmiş seçenekler"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "Azami Yükseklik"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "Azami Genişlik"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "Asgari Yükseklik"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "Asgari Genişlik"
@@ -5109,15 +5075,15 @@ msgstr "arasında boşluk"
msgid "workspace.options.layout.top"
msgstr "Üst"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "Daha fazla renk"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "Daha fazla kütüphane rengi"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "Opaklık"
@@ -5126,27 +5092,27 @@ msgstr "Opaklık"
msgid "workspace.options.position"
msgstr "Konum"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "Prototip"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "Yarıçap"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "Sol alt"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "Sağ alt"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "Sol üst"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "Sağ üst"
@@ -5158,7 +5124,7 @@ msgstr "Son kullanılanlar"
msgid "workspace.options.retry"
msgstr "Yeniden dene"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "Döndür"
@@ -5166,29 +5132,29 @@ msgstr "Döndür"
msgid "workspace.options.search-font"
msgstr "Yazı tipi ara"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr ""
"Diğer çalışma yüzeyine bağlantı taşımak için bir şekil, çalışma yüzeyi ya "
"da grup seçin."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "Seçilen renkler"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "Seçimi doldur"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "Seçimi çiz"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "Bulanıklık"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "Gölge rengi"
@@ -5200,47 +5166,48 @@ msgstr "Kabartı gölgesi"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "İç gölge"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "Yayılma"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "Gölge"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "Gölge grubu"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "Gölge seçimi"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "Dışa aktarmalarda göster"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "Görünüm modunda göster"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "Boyut"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "Boyut ön ayarları"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "Çerçeve"
@@ -5249,7 +5216,7 @@ msgstr "Çerçeve"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "Daire işaretleyici"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "Daire"
@@ -5258,7 +5225,7 @@ msgstr "Daire"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "Elmas işaretleyici"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "Elmas"
@@ -5267,19 +5234,19 @@ msgstr "Elmas"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "Çizgi oku"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "Ok"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "Hiçbiri"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "Yuvarlak"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "Kare"
@@ -5288,7 +5255,7 @@ msgstr "Kare"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "Kare işaretleyici"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "Dikdörtgen"
@@ -5297,75 +5264,75 @@ msgstr "Dikdörtgen"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "Üçgen ok"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "Üçgen"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "Çerçeve rengi"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "Çerçeve genişliği"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "Merkez"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "Çizgili"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "Noktalı"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "İçinde"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "Karışık"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "Dışında"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "Katı"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "Alta hizala"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "Merkeze hizala"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "Üste hizala"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "Soldan sağa"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "Sağdan sola"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "Otomatik yükseklik"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "Otomatik genişlik"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "Sabit"
@@ -5387,35 +5354,35 @@ msgstr "Küçük harf"
msgid "workspace.options.text-options.none"
msgstr "Hiçbiri"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "Üstü çizili (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "Ortaya hizala"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "İki yana yasla"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "Sola hizala"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "Sağa hizala"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "Metin"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "Grup metni"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "Metin seçimi"
@@ -5424,7 +5391,7 @@ msgstr "Metin seçimi"
msgid "workspace.options.text-options.titlecase"
msgstr "İlk harfi büyük"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "Altı Çizili (%s)"
@@ -5433,19 +5400,19 @@ msgstr "Altı Çizili (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "Büyük Harf"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr "Prototip görünümünü çalıştırmak için başlıktaki oynatma düğmesini kullan."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "Genişlik"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "X ekseni"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Y ekseni"
@@ -5489,72 +5456,72 @@ msgstr "Düğümleri ayır (%s)"
msgid "workspace.path.actions.snap-nodes"
msgstr "Düğümleri tuttur (%s)"
-#: src/app/main/ui/workspace/plugins.cljs:83
+#: src/app/main/ui/workspace/plugins.cljs:84
msgid "workspace.plugins.button-open"
msgstr "Aç"
-#: src/app/main/ui/workspace/plugins.cljs:197
+#: src/app/main/ui/workspace/plugins.cljs:198
#, markdown
msgid "workspace.plugins.discover"
msgstr "Keşfet [daha fazla eklenti](%s)"
-#: src/app/main/ui/workspace/plugins.cljs:204
+#: src/app/main/ui/workspace/plugins.cljs:205
msgid "workspace.plugins.empty-plugins"
msgstr "Henüz eklenti kurulmadı"
-#: src/app/main/ui/workspace/plugins.cljs:187
+#: src/app/main/ui/workspace/plugins.cljs:188
msgid "workspace.plugins.error.url"
msgstr "Eklenti yok veya URL doğru değil."
-#: src/app/main/ui/workspace/plugins.cljs:183
+#: src/app/main/ui/workspace/plugins.cljs:184
msgid "workspace.plugins.install"
msgstr "Kur"
-#: src/app/main/ui/workspace/plugins.cljs:213
+#: src/app/main/ui/workspace/plugins.cljs:214
msgid "workspace.plugins.installed-plugins"
msgstr "Kurulu eklentiler"
-#: src/app/main/ui/workspace/main_menu.cljs:710
+#: src/app/main/ui/workspace/main_menu.cljs:738
msgid "workspace.plugins.menu.plugins-manager"
msgstr "Eklenti yöneticisi"
-#: src/app/main/ui/workspace/main_menu.cljs:906
+#: src/app/main/ui/workspace/main_menu.cljs:934
msgid "workspace.plugins.menu.title"
msgstr "Eklentiler"
-#: src/app/main/ui/workspace/plugins.cljs:238
+#: src/app/main/ui/workspace/plugins.cljs:239
msgid "workspace.plugins.permissions.content-read"
msgstr "Kullanıcıların erişebildiği dosyaların içeriğini oku."
-#: src/app/main/ui/workspace/plugins.cljs:232
+#: src/app/main/ui/workspace/plugins.cljs:233
msgid "workspace.plugins.permissions.content-write"
msgstr "Kullanıcıların erişebildiği dosyaların içeriğini oku ve değiştir."
-#: src/app/main/ui/workspace/plugins.cljs:325
+#: src/app/main/ui/workspace/plugins.cljs:326
msgid "workspace.plugins.permissions.disclaimer"
msgstr "Bu eklentinin harici bir tarafça oluşturulduğunu unutmayın."
-#: src/app/main/ui/workspace/plugins.cljs:258
+#: src/app/main/ui/workspace/plugins.cljs:259
msgid "workspace.plugins.permissions.library-read"
msgstr "Kütüphanelerinizi ve varlıklarınızı oku."
-#: src/app/main/ui/workspace/plugins.cljs:252
+#: src/app/main/ui/workspace/plugins.cljs:253
msgid "workspace.plugins.permissions.library-write"
msgstr "Kütüphanelerinizi ve varlıklarınızı oku ve değiştir."
-#: src/app/main/ui/workspace/plugins.cljs:318
+#: src/app/main/ui/workspace/plugins.cljs:319
msgid "workspace.plugins.permissions.title"
msgstr "BU EKLENTİ ŞUNLARA ERİŞİM İSTİYOR:"
-#: src/app/main/ui/workspace/plugins.cljs:245
+#: src/app/main/ui/workspace/plugins.cljs:246
msgid "workspace.plugins.permissions.user-read"
msgstr "Geçerli kullanıcının profil bilgilerini oku."
-#: src/app/main/ui/workspace/plugins.cljs:209
+#: src/app/main/ui/workspace/plugins.cljs:210
msgid "workspace.plugins.plugin-list-link"
msgstr "Eklenti Listesi"
-#: src/app/main/ui/workspace/plugins.cljs:178
+#: src/app/main/ui/workspace/plugins.cljs:179
msgid "workspace.plugins.search-placeholder"
msgstr "Bir eklenti URL'si yazın"
@@ -5562,7 +5529,7 @@ msgstr "Bir eklenti URL'si yazın"
msgid "workspace.plugins.success"
msgstr "Eklenti doğru şekilde yüklendi."
-#: src/app/main/ui/workspace/plugins.cljs:172
+#: src/app/main/ui/workspace/plugins.cljs:173
msgid "workspace.plugins.title"
msgstr "Eklentiler"
@@ -5586,7 +5553,7 @@ msgstr "Arkaya gönder"
msgid "workspace.shape.menu.copy"
msgstr "Kopyala"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "Açıklama oluştur"
@@ -5594,11 +5561,11 @@ msgstr "Açıklama oluştur"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "Çalışma yüzeyi için seçim"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "Bileşen oluştur"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "Çoklu bileşen oluştur"
@@ -5606,7 +5573,7 @@ msgstr "Çoklu bileşen oluştur"
msgid "workspace.shape.menu.cut"
msgstr "Kes"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "Sil"
@@ -5614,15 +5581,15 @@ msgstr "Sil"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "Akış başlangıcını sil"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "Örneği ayır"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "Örnekleri ayır"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "Fark"
@@ -5634,11 +5601,11 @@ msgstr "Çoğalt"
msgid "workspace.shape.menu.edit"
msgstr "Düzenle"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "Dışla"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "Düzleştir"
@@ -5671,19 +5638,19 @@ msgstr "Ana bileşen dosyasına git"
msgid "workspace.shape.menu.group"
msgstr "Grup"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "Gizle"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "Kullanıcı arayüzünü göster/gizle"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "Kesişme"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "Kilitle"
@@ -5691,7 +5658,7 @@ msgstr "Kilitle"
msgid "workspace.shape.menu.mask"
msgstr "Maskele"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "Yapıştır"
@@ -5707,11 +5674,11 @@ msgstr "Düzen esnekliğini kaldır"
msgid "workspace.shape.menu.remove-grid"
msgstr "Izgara düzenini kaldır"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "Geçersiz kılmaları sıfırla"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "Ana bileşeni geri yükle"
@@ -5719,15 +5686,15 @@ msgstr "Ana bileşeni geri yükle"
msgid "workspace.shape.menu.select-layer"
msgstr "Katman seç"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "Göster"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "Varlıklar panelinde göster"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "Ana bileşeni göster"
@@ -5740,6 +5707,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "Küçük resim olarak ayarla"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "Yola dönüştür"
@@ -5747,11 +5715,11 @@ msgstr "Yola dönüştür"
msgid "workspace.shape.menu.ungroup"
msgstr "Grubu dağıt"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "Birleşim"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "Kilidi aç"
@@ -5764,7 +5732,7 @@ msgstr "Maskelemeyi kaldır"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "Ana bileşenleri güncelle"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "Ana bileşeni güncelle"
@@ -5776,11 +5744,11 @@ msgstr "Kenar çubuğunu daralt"
msgid "workspace.sidebar.expand"
msgstr "Kenar çubuğunu genişlet"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "Geçmiş"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "Katmanlar"
@@ -5820,7 +5788,7 @@ msgstr "Metinler"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "İçe Aktarılan SVG Öznitelikleri"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "Sayfalar"
@@ -5828,7 +5796,7 @@ msgstr "Sayfalar"
msgid "workspace.sitemap"
msgstr "Site haritası"
-#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "Varlıklar"
@@ -5836,7 +5804,7 @@ msgstr "Varlıklar"
msgid "workspace.toolbar.color-palette"
msgstr "Renk Paketi (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "Yorumlar (%s)"
@@ -6043,19 +6011,19 @@ msgstr "%s üstündeki işlem"
msgid "workspace.undo.title"
msgstr "Geçmiş"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "Yoksay"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "Daha fazla bilgi"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "Paylaşılan kütüphaneler için güncellemeler var"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "Güncelle"
@@ -6120,3 +6088,1747 @@ msgstr "Yolu kapatmak için tıklayın"
#~ msgid "workspace.options.layout-item.title.min-w"
#~ msgstr "Asgari genişlik"
+
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:98, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:105
+msgid "color-row.token-color-row.deleted-token"
+msgstr "Bu token yok veya silindi."
+
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:35
+msgid "color-token.empty-state"
+msgstr ""
+"Kullanılabilir renk tokeni yok. Etkin kümeleri/temaları gözden geçirin veya "
+"yeni tokenler ekleyin."
+
+#: src/app/main/ui/comments.cljs:530
+msgid "comments.mentions.not-found"
+msgstr "@%s için kişi bulunamadı"
+
+#: src/app/main/ui/dashboard/placeholder.cljs:41
+msgid "dashboard.add-file"
+msgstr "Dosya ekle"
+
+#: src/app/main/ui/workspace/main_menu.cljs:659
+msgid "dashboard.create-version-menu"
+msgstr "Bu sürümü sabitle"
+
+#: src/app/main/ui/dashboard/files.cljs:200, src/app/main/ui/dashboard/projects.cljs:285
+msgid "dashboard.empty-placeholder-drafts-subtitle"
+msgstr ""
+"Bir proje üyesi taslak oluşturduğunda, bu taslak burada gösterilecektir."
+
+#: src/app/main/ui/dashboard/files.cljs:195, src/app/main/ui/dashboard/projects.cljs:280
+msgid "dashboard.empty-placeholder-drafts-title"
+msgstr "Henüz taslak yok."
+
+#: src/app/main/ui/dashboard/files.cljs:201, src/app/main/ui/dashboard/projects.cljs:286
+msgid "dashboard.empty-placeholder-files-subtitle"
+msgstr "Bir proje üyesi dosya oluşturduğunda, bu dosya burada gösterilecektir."
+
+#: src/app/main/ui/dashboard/files.cljs:196, src/app/main/ui/dashboard/projects.cljs:281
+msgid "dashboard.empty-placeholder-files-title"
+msgstr "Henüz dosya yok."
+
+#: src/app/main/ui/dashboard/placeholder.cljs:118
+#, markdown
+msgid "dashboard.empty-placeholder-libraries"
+msgstr ""
+"Projeye eklenen kütüphaneler burada görünecektir. Dosyalarınızı paylaşmayı "
+"deneyin veya [Kütüphaneler ve şablonlar]"
+"(https://penpot.app/libraries-templates) bölümünden ekleyin."
+
+#: src/app/main/ui/dashboard/placeholder.cljs
+#, markdown, unused
+msgid "dashboard.empty-placeholder-libraries-subtitle"
+msgstr ""
+"Projeye eklenen kütüphaneler burada görünecektir. Dosyalarınızı paylaşmayı "
+"deneyin veya [Kütüphaneler ve şablonlar]"
+"(https://penpot.app/libraries-templates) bölümünden ekleyin."
+
+#: src/app/main/ui/dashboard/placeholder.cljs:114
+msgid "dashboard.empty-placeholder-libraries-subtitle-viewer-role"
+msgstr "Projeye eklenen kütüphaneler burada görünecektir."
+
+#: src/app/main/ui/dashboard/placeholder.cljs:111
+msgid "dashboard.empty-placeholder-libraries-title"
+msgstr "Henüz kütüphane yok."
+
+#: src/app/main/ui/dashboard/placeholder.cljs:59
+msgid "dashboard.empty-project.add-library"
+msgstr "Kütüphane veya şablon ekle"
+
+#: src/app/main/ui/dashboard/placeholder.cljs:43, src/app/main/ui/dashboard/placeholder.cljs:134
+msgid "dashboard.empty-project.create"
+msgstr "Yeni dosya oluştur"
+
+#: src/app/main/ui/dashboard/placeholder.cljs:61
+msgid "dashboard.empty-project.explore"
+msgstr "Eklemek için keşfedin"
+
+#: src/app/main/ui/dashboard/placeholder.cljs:57
+msgid "dashboard.empty-project.go-to-libraries"
+msgstr "Kütüphaneler ve şablonlara git"
+
+#: src/app/main/ui/dashboard/placeholder.cljs:49, src/app/main/ui/dashboard/placeholder.cljs:51
+msgid "dashboard.empty-project.import"
+msgstr "Dosya içe aktar"
+
+#: src/app/main/ui/dashboard/placeholder.cljs:53
+msgid "dashboard.empty-project.import-penpot"
+msgstr ".penpot dosyasını içe aktar"
+
+#: src/app/main/ui/dashboard/placeholder.cljs:45
+msgid "dashboard.empty-project.start"
+msgstr "Harika şeyler oluşturmaya başlayın"
+
+#: src/app/main/ui/dashboard/fonts.cljs:456
+msgid "dashboard.fonts.empty-placeholder-viewer"
+msgstr "Henüz özel yazı tipi yok."
+
+#: src/app/main/ui/dashboard/fonts.cljs:457
+msgid "dashboard.fonts.empty-placeholder-viewer-sub"
+msgstr ""
+"Bir proje üyesi özel bir yazı tipi yüklediğinde, bu yazı tipi burada "
+"gösterilecektir."
+
+#: src/app/main/ui/dashboard.cljs:243
+msgid "dashboard.import.bad-url"
+msgstr "İçe aktarma başarısız oldu. Şablon URL'si yanlış"
+
+#: src/app/main/ui/dashboard.cljs:241
+#, unused
+msgid "dashboard.import.error"
+msgstr "İçe aktarma başarısız oldu. Lütfen tekrar deneyin"
+
+#: src/app/main/ui/dashboard/import.cljs:485
+msgid "dashboard.import.import-error.disclaimer"
+msgstr "Tüm dosyalar içe aktarılmadı"
+
+#: src/app/main/ui/dashboard/import.cljs:489
+msgid "dashboard.import.import-error.message1"
+msgstr "Şu dosyalarda hata var:"
+
+#: src/app/main/ui/dashboard/import.cljs:494
+msgid "dashboard.import.import-error.message2"
+msgstr "Hatalı dosyalar karşıya yüklenmeyecektir."
+
+#: src/app/main/ui/dashboard.cljs:244
+msgid "dashboard.import.no-perms"
+msgstr "Bu takıma içe aktarma izniniz yok"
+
+#: src/app/main/ui/dashboard/team.cljs:765
+msgid "dashboard.invitation-modal.delete"
+msgstr "Şu davetleri sileceksiniz:"
+
+#: src/app/main/ui/dashboard/team.cljs:766
+msgid "dashboard.invitation-modal.resend"
+msgstr "Şu davetleri yeniden göndereceksiniz:"
+
+#: src/app/main/ui/dashboard/team.cljs:756
+msgid "dashboard.invitation-modal.title.delete-invitations"
+msgstr "Davetleri sil"
+
+#: src/app/main/ui/dashboard/team.cljs:757
+msgid "dashboard.invitation-modal.title.resend-invitations"
+msgstr "Davetleri yeniden gönder"
+
+#: src/app/main/ui/dashboard/templates.cljs:267
+msgid "dashboard.libraries-and-templates.description"
+msgstr ""
+"Burada projenize ekleyebileceğiniz bazı kütüphaneler ve şablonlar "
+"bulunmaktadır"
+
+#: src/app/main/data/comments.cljs:473
+msgid "dashboard.mark-all-as-read.success"
+msgstr "Tüm bildirimleri okundu olarak işaretlendi"
+
+#: src/app/main/ui/dashboard/comments.cljs:91
+msgid "dashboard.notifications"
+msgstr "Bildirimler"
+
+#: src/app/main/data/profile.cljs:273
+msgid "dashboard.notifications.notifications-saved"
+msgstr "Bildirim ayarları güncellendi"
+
+#: src/app/main/ui/dashboard/comments.cljs:45
+msgid "dashboard.notifications.view"
+msgstr "Bildirimleri görüntüle"
+
+#: src/app/main/ui/dashboard/team.cljs:949
+msgid "dashboard.order-invitations-by-role"
+msgstr "Role göre sırala"
+
+#: src/app/main/ui/dashboard/team.cljs:958
+msgid "dashboard.order-invitations-by-status"
+msgstr "Duruma göre sırala"
+
+#: src/app/main/data/common.cljs:203
+msgid "dashboard.permissions-change.admin"
+msgstr "Artık bu takımda bir yöneticisiniz."
+
+#: src/app/main/data/common.cljs:202
+msgid "dashboard.permissions-change.editor"
+msgstr "Artık bu takımda bir düzenleyicisiniz."
+
+#: src/app/main/data/common.cljs:204
+msgid "dashboard.permissions-change.owner"
+msgstr "Artık bu takımın sahibisiniz."
+
+#: src/app/main/data/common.cljs:201
+msgid "dashboard.permissions-change.viewer"
+msgstr "Artık bu takımda bir görüntüleyicisiniz."
+
+#: src/app/main/ui/dashboard.cljs:207
+msgid "dashboard.plugins.bad-url"
+msgstr "Eklenti URL'si yanlış"
+
+#: src/app/main/ui/dashboard.cljs:205
+msgid "dashboard.plugins.parse-error"
+msgstr "Eklenti bildirim dosyası ayrıştırılamıyor"
+
+#: src/app/main/ui/dashboard.cljs:168
+msgid "dashboard.plugins.try-plugin"
+msgstr "Eklentiyi deneyin: "
+
+#: src/app/main/data/common.cljs:236
+msgid "dashboard.removed-from-team"
+msgstr "Artık “%s” takımının bir parçası değilsiniz."
+
+#: src/app/main/ui/settings/options.cljs:68
+msgid "dashboard.select-ui-theme.dark"
+msgstr "Penpot Koyu (öntanımlı)"
+
+#: src/app/main/ui/settings/options.cljs:69
+msgid "dashboard.select-ui-theme.light"
+msgstr "Penpot Açık"
+
+#: src/app/main/ui/settings/options.cljs:70
+msgid "dashboard.select-ui-theme.system"
+msgstr "Sistem teması"
+
+#: src/app/main/ui/settings/notifications.cljs:57
+msgid "dashboard.settings.notifications.dashboard-comments.all"
+msgstr "Tüm yorumlar, değinmeler ve yanıtlar"
+
+#: src/app/main/ui/settings/notifications.cljs:59
+msgid "dashboard.settings.notifications.dashboard-comments.none"
+msgstr "Hiçbiri"
+
+#: src/app/main/ui/settings/notifications.cljs:58
+msgid "dashboard.settings.notifications.dashboard-comments.partial"
+msgstr "Yalnızca değinmeler ve yanıtlar"
+
+#: src/app/main/ui/settings/notifications.cljs:54
+msgid "dashboard.settings.notifications.dashboard-comments.title"
+msgstr "Dosya yorumları"
+
+#: src/app/main/ui/settings/notifications.cljs:53
+msgid "dashboard.settings.notifications.dashboard.title"
+msgstr "Denetim Paneli Bildirimleri"
+
+#: src/app/main/ui/settings/notifications.cljs:67
+msgid "dashboard.settings.notifications.email-comments.all"
+msgstr "Tüm yorumlar, değinmeler ve yanıtlar"
+
+#: src/app/main/ui/settings/notifications.cljs:69
+msgid "dashboard.settings.notifications.email-comments.none"
+msgstr "Hiçbiri"
+
+#: src/app/main/ui/settings/notifications.cljs:68
+msgid "dashboard.settings.notifications.email-comments.partial"
+msgstr "Yalnızca değinmeler ve yanıtlar"
+
+#: src/app/main/ui/settings/notifications.cljs:64
+msgid "dashboard.settings.notifications.email-comments.title"
+msgstr "Dosya yorumları"
+
+#: src/app/main/ui/settings/notifications.cljs:76
+msgid "dashboard.settings.notifications.email-invites.all"
+msgstr "Her türlü davet ve istek"
+
+#: src/app/main/ui/settings/notifications.cljs:79
+msgid "dashboard.settings.notifications.email-invites.none"
+msgstr "Hiçbiri"
+
+#: src/app/main/ui/settings/notifications.cljs:73
+msgid "dashboard.settings.notifications.email-invites.title"
+msgstr "Davetler ve istekler"
+
+#: src/app/main/ui/settings/notifications.cljs:63
+msgid "dashboard.settings.notifications.email.title"
+msgstr "E-posta Bildirimleri"
+
+#: src/app/main/ui/settings/notifications.cljs:84
+msgid "dashboard.settings.notifications.submit"
+msgstr "Ayarları güncelle"
+
+#: src/app/main/ui/settings/notifications.cljs:52
+msgid "dashboard.settings.notifications.title"
+msgstr "Bildirimler"
+
+#: src/app/main/ui/workspace/main_menu.cljs:666
+msgid "dashboard.show-version-history"
+msgstr "Sürüm geçmişi"
+
+#: src/app/main/ui/dashboard/templates.cljs:134
+msgid "dashboard.template.add-to-project"
+msgstr "Projenize ekleyin"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:976
+msgid "dashboard.upgrade-plan.no-limits"
+msgstr "Yaratıcılıkta sınır yok"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:974
+msgid "dashboard.upgrade-plan.penpot-free"
+msgstr "Penpot Ücretsiz"
+
+#: src/app/main/ui/dashboard/team.cljs:1160
+msgid "dashboard.webhooks.cant-edit"
+msgstr ""
+"Yalnızca sizin oluşturduğunuz web kancalarını silebilir veya "
+"değiştirebilirsiniz."
+
+#: src/app/main/ui/ds/controls/numeric_input.cljs:98
+msgid "ds.inputs.numeric-input.no-applicable-tokens"
+msgstr "Etkin kümelerde veya temalarda geçerli token yok."
+
+#: src/app/main/ui/ds/controls/numeric_input.cljs:99
+msgid "ds.inputs.numeric-input.no-matches"
+msgstr "Eşleşme bulunamadı."
+
+#: src/app/main/ui/ds/controls/numeric_input.cljs:641, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:138
+msgid "ds.inputs.numeric-input.open-token-list-dropdown"
+msgstr "Token listesini aç"
+
+#: src/app/main/ui/ds/controls/utilities/token_field.cljs:85, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:133
+msgid "ds.inputs.token-field.detach-token"
+msgstr "Tokeni ayır"
+
+#: src/app/main/ui/ds/controls/utilities/token_field.cljs:40, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:96, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:103
+msgid "ds.inputs.token-field.no-active-token-option"
+msgstr ""
+"Bu token herhangi bir etkin kümede bulunmuyor veya geçersiz bir değere sahip."
+
+#: src/app/main/ui/comments.cljs:730, src/app/main/ui/comments.cljs:761, src/app/main/ui/comments.cljs:858
+msgid "errors.character-limit-exceeded"
+msgstr "Karakter sınırı aşıldı"
+
+#: src/app/main/errors.cljs:231
+msgid "errors.comment-error"
+msgstr "Yorumla ilgili bir hata oluştu"
+
+#: src/app/main/errors.cljs:300
+msgid "errors.deprecated"
+msgstr ""
+"Üzgünüz! Bu, artık kullanılmayan bir Penpot varlık türü kullanan eski bir "
+"dosyadır ve açamazsınız."
+
+#: src/app/main/errors.cljs:303
+msgid "errors.deprecated.contact.after"
+msgstr "böylece size yardımcı olabiliriz."
+
+#: src/app/main/errors.cljs:301
+msgid "errors.deprecated.contact.before"
+msgstr "Penpot artık bu tür varlıkları desteklemese de, bizimle"
+
+#: src/app/main/errors.cljs:302
+msgid "errors.deprecated.contact.text"
+msgstr "iletişime geçebilirsiniz"
+
+#: src/app/main/data/workspace/tokens/library_edit.cljs:274
+msgid "errors.drop-token-set-parent-to-child"
+msgstr "Bir üst kümeyi kendi alt kümesine bırakamazsınız."
+
+#: src/app/main/ui/auth/register.cljs:89
+msgid "errors.email-does-not-match-invitation"
+msgstr "E-posta adresi davetiyeyle eşleşmiyor."
+
+#: src/app/util/forms.cljs:61
+msgid "errors.field-missing"
+msgstr "Boş alan"
+
+#: src/app/main/errors.cljs:193
+msgid "errors.internal-assertion-error"
+msgstr "Dahili Doğrulama Hatası"
+
+#: src/app/main/errors.cljs:209
+msgid "errors.internal-worker-error"
+msgstr "Web çalıştırıcısında bir sorun oluştu."
+
+#: src/app/util/forms.cljs:35, src/app/util/forms.cljs:84
+msgid "errors.invalid-data"
+msgstr "Geçersiz veri"
+
+#: src/app/util/forms.cljs
+#, unused
+msgid "errors.invalid-text"
+msgstr "Geçersiz metin"
+
+#: src/app/main/ui/dashboard/team.cljs:187, src/app/main/ui/dashboard/team.cljs:849, src/app/main/ui/onboarding/team_choice.cljs:101
+msgid "errors.maximum-invitations-by-request-reached"
+msgstr ""
+"Tek bir istekte davet edilebilecek en fazla (%s) e-posta sayısına ulaşıldı"
+
+#: src/app/main/errors.cljs:263
+msgid "errors.migration-in-progress"
+msgstr "Geçiş devam ediyor"
+
+#: src/app/main/errors.cljs:160
+msgid "errors.only-creator-can-lock"
+msgstr "Yalnızca sürüm oluşturucu onu kilitleyebilir"
+
+#: src/app/main/errors.cljs:168
+msgid "errors.only-creator-can-unlock"
+msgstr "Yalnızca sürüm oluşturucu onun kilidini açabilir"
+
+#: src/app/main/errors.cljs:222
+msgid "errors.svg-parser.invalid-svg"
+msgstr "SVG geçersiz veya biçimi yanlış"
+
+#: src/app/main/data/workspace/tokens/library_edit.cljs:150, src/app/main/data/workspace/tokens/library_edit.cljs:180
+msgid "errors.token-set-already-exists"
+msgstr "Aynı ada sahip bir küme zaten var"
+
+#: src/app/main/data/tokens.cljs:
+#, unused
+msgid "errors.token-set-doesnt-exists"
+msgstr "Bilinmeyen bir küme çoğaltılamıyor"
+
+#: src/app/main/data/workspace/tokens/library_edit.cljs:273
+msgid "errors.token-set-exists-on-drop"
+msgstr ""
+"Bırakma işlemi tamamlanamıyor, aynı ada sahip bir küme zaten bu yolda var."
+
+#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:95
+msgid "errors.token-theme-already-exists"
+msgstr "Aynı ada sahip tema seçeneği var"
+
+#: src/app/main/errors.cljs:176
+msgid "errors.version-already-locked"
+msgstr "Bu sürüm zaten kilitli"
+
+#: src/app/main/errors.cljs:152
+msgid "errors.version-locked"
+msgstr "Bu sürüm kilitlidir ve başkaları tarafından silinemez"
+
+#: src/app/main/ui/components/color_input.cljs:31
+msgid "inspect.attributes.color"
+msgstr "Renk"
+
+#, unused
+msgid "inspect.attributes.typography.text-decoration.line-through"
+msgstr "Üstü çizili"
+
+#: src/app/main/ui/inspect/attributes/variant.cljs:44
+msgid "inspect.attributes.variant"
+msgstr "Çeşit özellikleri"
+
+#: src/app/main/ui/inspect/attributes/variant.cljs:44
+msgid "inspect.attributes.variants"
+msgstr "Çeşitlerin özellikleri"
+
+#: src/app/main/ui/inspect/right_sidebar.cljs:67
+msgid "inspect.subtitle.copy"
+msgstr "Kopyala"
+
+#: src/app/main/ui/inspect/right_sidebar.cljs:63
+msgid "inspect.subtitle.main"
+msgstr "Ana bileşen"
+
+#: src/app/main/ui/inspect/right_sidebar.cljs:109
+msgid "inspect.tabs.computed"
+msgstr "Hesaplanan"
+
+#: src/app/main/ui/inspect/styles/property_detail_copiable.cljs:52
+msgid "inspect.tabs.styles.panel.copy-to-clipboard"
+msgstr "Panoya kopyala"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:22
+msgid "inspect.tabs.styles.panel.geometry"
+msgstr "Boyut ve Konum"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:59, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:179
+msgid "inspect.tabs.styles.panel.toggle-style"
+msgstr "%s panelini aç/kapat"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:21
+msgid "inspect.tabs.styles.panel.token"
+msgstr "Token Kümeleri ve Temalar"
+
+#: src/app/main/ui/inspect/styles/panels/tokens_panel.cljs:26
+msgid "inspect.tabs.styles.panel.tokens.active-sets"
+msgstr "Etkin kümeler"
+
+#: src/app/main/ui/inspect/styles/panels/tokens_panel.cljs:21
+msgid "inspect.tabs.styles.panel.tokens.active-themes"
+msgstr "Etkin temalar"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:20
+msgid "inspect.tabs.styles.panel.variant"
+msgstr "Çeşit özellikleri"
+
+#: src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:102, src/app/main/ui/inspect/styles/rows/properties_row.cljs:53
+msgid "inspect.tabs.styles.token.resolved-value"
+msgstr "Çözülen değer:"
+
+#: src/app/main/ui/inspect/right_sidebar.cljs:165
+msgid "inspect.tabs.switcher.label"
+msgstr "Katman bilgisi"
+
+#: src/app/main/ui/dashboard/comments.cljs:96
+msgid "label.mark-all-as-read"
+msgstr "Tümünü okundu olarak işaretle"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:1043
+msgid "labels.about-penpot"
+msgstr "Penpot hakkında"
+
+#: src/app/main/ui/workspace/libraries.cljs:177
+msgid "labels.add"
+msgstr "Ekle"
+
+#: src/app/main/ui/workspace/libraries.cljs:177
+msgid "labels.adding"
+msgstr "Ekleniyor..."
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:26
+msgid "labels.blur"
+msgstr "Bulanıklık"
+
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:181
+msgid "labels.collapse"
+msgstr "Daralt"
+
+#: src/app/main/ui/workspace/colorpicker.cljs:427
+msgid "labels.color"
+msgstr "Renk"
+
+#: src/app/main/ui/comments.cljs:913
+msgid "labels.comment"
+msgstr "Yorum"
+
+#: src/app/main/ui/comments.cljs:917
+msgid "labels.comment.mark-as-solved"
+msgstr "Çözüldü olarak işaretle"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:1030
+msgid "labels.community-contributions"
+msgstr "Topluluk ve Katkılar"
+
+#: src/app/main/ui/components/copy_button.cljs:41
+msgid "labels.copy"
+msgstr "Kopyala"
+
+#: src/app/main/ui/inspect/attributes/common.cljs:99
+msgid "labels.copy-color"
+msgstr "Rengi kopyala"
+
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:65
+msgid "labels.duplicate"
+msgstr "Çoğalt"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:301
+msgid "labels.empty"
+msgstr "Boş"
+
+#: src/app/main/ui/dashboard/import.cljs:297
+msgid "labels.error"
+msgstr "Hata"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:23
+msgid "labels.fill"
+msgstr "Doldur"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:1019
+msgid "labels.help-learning"
+msgstr "Yardım ve Öğrenme"
+
+#: src/app/main/ui/dashboard/templates.cljs:91
+msgid "labels.hide"
+msgstr "Gizle"
+
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:130
+msgid "labels.import"
+msgstr "İçe aktar"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:28
+msgid "labels.layout"
+msgstr "Yerleşim düzeni"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:798
+msgid "labels.learning-center"
+msgstr "Öğrenme Merkezi"
+
+#: src/app/main/ui/workspace/sidebar/versions.cljs:209
+msgid "labels.lock"
+msgstr "Kilitle"
+
+#: src/app/main/ui/comments.cljs:581
+msgid "labels.mention"
+msgstr "Değinme"
+
+#: src/app/main/ui/ds/controls/numeric_input.cljs:619
+msgid "labels.mixed-values"
+msgstr "Karışık"
+
+#: src/app/main/ui/dashboard/team.cljs:739
+msgid "labels.no-invitations-gather-people"
+msgstr "Arkadaşlarınızı toplayın ve birlikte harika şeyler oluşturun."
+
+#: src/app/main/ui/settings/sidebar.cljs:103
+msgid "labels.notifications"
+msgstr "Bildirimler"
+
+#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:310, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:339
+msgid "labels.options"
+msgstr "Seçenekler"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:878
+msgid "labels.penpot-changelog"
+msgstr "Penpot Değişiklik Günlüğü"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:804
+msgid "labels.penpot-hub"
+msgstr "Penpot merkezi"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:751
+msgid "labels.pinned-projects"
+msgstr "Sabitlenen Projeler"
+
+#: src/app/main/ui/comments.cljs:679
+msgid "labels.post"
+msgstr "Gönder"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:644
+msgid "labels.reference"
+msgstr "Referans"
+
+#: src/app/main/data/common.cljs:83
+msgid "labels.refresh"
+msgstr "Yenile"
+
+#: src/app/main/ui/comments.cljs:642
+msgid "labels.replies"
+msgstr "yanıt"
+
+#: src/app/main/ui/comments.cljs:647
+msgid "labels.replies.new"
+msgstr "yeni yanıt"
+
+#: src/app/main/ui/comments.cljs:641
+msgid "labels.reply"
+msgstr "yanıt"
+
+#: src/app/main/ui/comments.cljs:646
+msgid "labels.reply.new"
+msgstr "yeni yanıt"
+
+#: src/app/main/ui/comments.cljs:722
+msgid "labels.reply.thread"
+msgstr "Yanıtla"
+
+#: src/app/main/ui/dashboard/team.cljs:788
+msgid "labels.resend"
+msgstr "Yeniden gönder"
+
+#: src/app/main/ui/workspace/sidebar/versions.cljs:86, src/app/main/ui/workspace/sidebar/versions.cljs:196
+msgid "labels.restore"
+msgstr "Geri yükle"
+
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:75
+msgid "labels.sets"
+msgstr "Kümeler"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:27
+msgid "labels.shadow"
+msgstr "Gölge"
+
+#: src/app/main/ui/dashboard/templates.cljs:87
+msgid "labels.show"
+msgstr "Göster"
+
+#: src/app/main/ui/workspace/comments.cljs:68, src/app/main/ui/workspace/comments.cljs:140
+msgid "labels.show-mentions"
+msgstr "Yalnızca değinmelerinizi göster"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:730
+msgid "labels.sources"
+msgstr "Kaynaklar"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:24, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:46
+msgid "labels.stroke"
+msgstr "Çerçeve"
+
+#: src/app/main/ui/inspect/right_sidebar.cljs:107, src/app/main/ui/inspect/styles.cljs:107
+msgid "labels.styles"
+msgstr "Biçimler"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:33
+msgid "labels.svg"
+msgstr "SVG"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:25
+msgid "labels.text"
+msgstr "Metin"
+
+#: src/app/main/ui/workspace/tokens/themes.cljs:36
+msgid "labels.themes"
+msgstr "Temalar"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:1148
+msgid "labels.typography"
+msgstr "Tipografi"
+
+#: src/app/main/data/workspace/tokens/errors.cljs:101
+msgid "labels.unknown-error"
+msgstr "Bilinmeyen hata"
+
+#: src/app/main/ui/workspace/sidebar/versions.cljs:203
+msgid "labels.unlock"
+msgstr "Kilidi aç"
+
+#: src/app/main/ui/inspect/right_sidebar.cljs:65, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:949, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:518
+msgid "labels.variant"
+msgstr "Çeşit"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:872
+msgid "labels.version-notes"
+msgstr "Sürüm %s notları"
+
+#: src/app/main/ui/inspect/styles/style_box.cljs:32
+msgid "labels.visibility"
+msgstr "Görünürlük"
+
+#: src/app/main/ui/ds/product/loader.cljs:21
+msgid "loader.tips.01.message"
+msgstr "Tasarımlarınızı tüm projelerde tutarlı ve güncellemesi kolay tutun."
+
+#: src/app/main/ui/ds/product/loader.cljs:20
+msgid "loader.tips.01.title"
+msgstr "Yeniden Kullanılabilir Bileşenler"
+
+#: src/app/main/ui/ds/product/loader.cljs:23
+msgid "loader.tips.02.message"
+msgstr "Takımınızla canlı olarak çalışın, geri bildirimleri anında paylaşın."
+
+#: src/app/main/ui/ds/product/loader.cljs:22
+msgid "loader.tips.02.title"
+msgstr "Gerçek Zamanlı İş Birliği"
+
+#: src/app/main/ui/ds/product/loader.cljs:25
+msgid "loader.tips.03.message"
+msgstr ""
+"Tanıdık CSS benzeri düzen denetimleriyle esnek bir şekilde tasarım yapın."
+
+#: src/app/main/ui/ds/product/loader.cljs:24
+msgid "loader.tips.03.title"
+msgstr "CSS Benzeri Düzenler"
+
+#: src/app/main/ui/ds/product/loader.cljs:27
+msgid "loader.tips.04.message"
+msgstr "Tasarımlarınızdan doğrudan CSS ve SVG kodları alın."
+
+#: src/app/main/ui/ds/product/loader.cljs:26
+msgid "loader.tips.04.title"
+msgstr "Kod Olarak Dışa Aktarın"
+
+#: src/app/main/ui/ds/product/loader.cljs:29
+msgid "loader.tips.05.message"
+msgstr "Tutarlılığı korumak için varlıkları ve biçimleri paylaşın."
+
+#: src/app/main/ui/ds/product/loader.cljs:28
+msgid "loader.tips.05.title"
+msgstr "Kütüphaneler Tasarlayın"
+
+#: src/app/main/ui/ds/product/loader.cljs:31
+msgid "loader.tips.06.message"
+msgstr "Animasyonlar ve geçişlerle fikirlerinizi hayata geçirin."
+
+#: src/app/main/ui/ds/product/loader.cljs:30
+msgid "loader.tips.06.title"
+msgstr "Etkileşimli Prototipler"
+
+#: src/app/main/ui/ds/product/loader.cljs:33
+msgid "loader.tips.07.message"
+msgstr "Penpot, sorunsuz geliştirme için SVG ve CSS kullanır."
+
+#: src/app/main/ui/ds/product/loader.cljs:32
+msgid "loader.tips.07.title"
+msgstr "Web Standartları Biçimleri"
+
+#: src/app/main/ui/ds/product/loader.cljs:35
+msgid "loader.tips.08.message"
+msgstr ""
+"Otomatik Düzenleme için Shift + A gibi kullanışlı kısayollarla iş akışınızı "
+"hızlandırın."
+
+#: src/app/main/ui/ds/product/loader.cljs:34
+msgid "loader.tips.08.title"
+msgstr "Klavye Kısayolları"
+
+#: src/app/main/ui/ds/product/loader.cljs:37
+msgid "loader.tips.09.message"
+msgstr "Tarzınıza uygun temayı seçin."
+
+#: src/app/main/ui/ds/product/loader.cljs:36
+msgid "loader.tips.09.title"
+msgstr "Koyu ve Açık Mod"
+
+#: src/app/main/ui/ds/product/loader.cljs:39
+msgid "loader.tips.10.message"
+msgstr ""
+"Ek işlevsellik için topluluk tarafından geliştirilen eklentilerle Penpot'u "
+"genişletin."
+
+#: src/app/main/ui/ds/product/loader.cljs:38
+msgid "loader.tips.10.title"
+msgstr "Eklenti Desteği"
+
+#: src/app/main/ui/dashboard/team.cljs:222
+msgid "modals.invite-team-member.text"
+msgstr ""
+"Üyeleri takıma davet ederek bu dosyaya ve tüm takım dosyalarına erişmelerini "
+"sağlayabilirsiniz."
+
+#: src/app/main/ui/dashboard/team.cljs:825
+msgid "notifications.invitation-deleted"
+msgstr "Davet başarıyla silindi"
+
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:423
+msgid "settings.remove-color"
+msgstr "Rengi kaldır"
+
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+msgid "shortcuts.copy-link"
+msgstr "Bağlantıyı kopyala"
+
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#, unused
+msgid "shortcuts.copy-props"
+msgstr "Özellikleri kopyala"
+
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+msgid "shortcuts.create-component-variant"
+msgstr "Bileşen / çeşit oluştur"
+
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#, unused
+msgid "shortcuts.paste-props"
+msgstr "Özellikleri yapıştır"
+
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:604
+#, unused
+msgid "shortcuts.plugins"
+msgstr "Eklenti yöneticisi"
+
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+msgid "shortcuts.rename"
+msgstr "Yeniden adlandır"
+
+#: src/app/main/ui/dashboard/subscription.cljs:89, src/app/main/ui/dashboard/subscription.cljs:131
+msgid "subscription.dashboard.power-up.enterprise-plan"
+msgstr "Kurumsal plan"
+
+#: src/app/main/ui/dashboard/subscription.cljs:85
+msgid "subscription.dashboard.power-up.enterprise-trial.top-title"
+msgstr "Kurumsal plan (deneme)"
+
+#: src/app/main/ui/dashboard/subscription.cljs:64
+#, markdown
+msgid "subscription.dashboard.power-up.professional.bottom-text"
+msgstr ""
+"Sınırsız plan ile takımlarınız için ek depolama alanı, dosya kurtarma ve "
+"daha fazlasını elde edin. [Güçlenin!|target:self](%s)"
+
+#: src/app/main/ui/dashboard/subscription.cljs:63
+msgid "subscription.dashboard.power-up.professional.top-title"
+msgstr "Profesyonel plan"
+
+#: src/app/main/ui/dashboard/subscription.cljs:64, src/app/main/ui/settings/subscription.cljs:107, src/app/main/ui/settings/subscription.cljs:131
+#, unused
+msgid "subscription.dashboard.power-up.subscribe"
+msgstr "Abone ol"
+
+#: src/app/main/ui/dashboard/subscription.cljs:72
+#, markdown
+msgid "subscription.dashboard.power-up.trial.bottom-description"
+msgstr ""
+"Deneme sürenizi beğendiniz mi? Tam erişimi sonsuza kadar açın. "
+"[Abone olun|target:self](%s)"
+
+#: src/app/main/ui/dashboard/subscription.cljs:71
+msgid "subscription.dashboard.power-up.trial.top-title"
+msgstr "Sınırsız plan (deneme)"
+
+#: src/app/main/ui/dashboard/subscription.cljs:77, src/app/main/ui/dashboard/subscription.cljs:130
+msgid "subscription.dashboard.power-up.unlimited-plan"
+msgstr "Sınırsız plan"
+
+#: src/app/main/ui/dashboard/subscription.cljs:78
+#, markdown
+msgid "subscription.dashboard.power-up.unlimited.bottom-text"
+msgstr ""
+"Sabit bir fiyatla tüm takımlarınız için sınırsız depolama alanı, kapsamlı "
+"dosya kurtarma ve sınırsız düzenleyici elde edin. "
+"[Kurumsal plana göz atın.|target:self](%s)"
+
+#: src/app/main/ui/dashboard/subscription.cljs:70
+#, unused
+msgid "subscription.dashboard.power-up.unlimited.cta"
+msgstr "Göz atın"
+
+#: src/app/main/ui/dashboard/subscription.cljs:68
+#, unused
+msgid "subscription.dashboard.power-up.unlimited.top-description"
+msgstr ""
+"Ek düzenleyiciler, depolama ve otomatik kaydedilen sürüm, dosya yedekleme ve "
+"daha fazlası."
+
+#: src/app/main/ui/dashboard/subscription.cljs:62, src/app/main/ui/dashboard/subscription.cljs:70, src/app/main/ui/dashboard/subscription.cljs:76, src/app/main/ui/dashboard/subscription.cljs:84, src/app/main/ui/dashboard/subscription.cljs:88
+msgid "subscription.dashboard.power-up.your-subscription"
+msgstr "Aboneliğiniz:"
+
+#: src/app/main/ui/dashboard/subscription.cljs:168
+msgid "subscription.dashboard.professional-dashboard-cta-title"
+msgstr ""
+"Sahip olduğunuz takımlarda %s düzenleyiciniz varken, profesyonel planınız "
+"8'e kadar düzenleyiciyi kapsamaktadır."
+
+#: src/app/main/ui/dashboard/subscription.cljs:176
+#, markdown
+msgid "subscription.dashboard.professional-dashboard-cta-upgrade-owner"
+msgstr ""
+"Daha fazla düzenleyici, depolama alanı ve dosya kurtarma özelliğinin "
+"kilidini açmak için şimdi Sınırsız veya Kurumsal sürümüne yükseltin. "
+"[Şimdi abone olun.|target:self](%s)"
+
+#: src/app/main/ui/dashboard/subscription.cljs:111
+msgid "subscription.dashboard.team-plan"
+msgstr "Takım planı"
+
+#: src/app/main/ui/dashboard/subscription.cljs:171
+msgid "subscription.dashboard.unlimited-dashboard-cta-title"
+msgstr ""
+"Takımınız büyümeye devam ediyor! Sınırsız planınız %s düzenleyiciye kadar "
+"kapsıyor, ancak şu anda %s düzenleyiciniz var."
+
+#: src/app/main/ui/dashboard/subscription.cljs:179
+#, markdown
+msgid "subscription.dashboard.unlimited-dashboard-cta-upgrade-owner"
+msgstr ""
+"Lütfen düzenleyici sayınızla eşleşecek şekilde şimdi yükseltin. "
+"[Şimdi abone olun.|target:self](%s)"
+
+#: src/app/main/ui/dashboard/subscription.cljs:156
+msgid "subscription.dashboard.unlimited-members-extra-editors-cta-text"
+msgstr ""
+"Yalnızca sahip olduğunuz takımlardaki yeni düzenleyiciler gelecekteki "
+"faturalandırmaya dahil edilir. 25'ten fazla düzenleyici için aylık 175$ "
+"sabit ücret uygulanmaya devam eder."
+
+#: src/app/main/ui/dashboard/subscription.cljs:152
+msgid "subscription.dashboard.unlimited-members-extra-editors-cta-title"
+msgstr "Sınırsız plandayken kişileri davet etme"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:978
+msgid "subscription.dashboard.upgrade-plan.power-up"
+msgstr "Güçlenin"
+
+#: src/app/main/ui/settings/sidebar.cljs:116, src/app/main/ui/settings/subscription.cljs:318, src/app/main/ui/settings/subscription.cljs:351
+msgid "subscription.labels"
+msgstr "Abonelik"
+
+#: src/app/main/ui/settings/subscription.cljs:373, src/app/main/ui/settings/subscription.cljs:397
+msgid "subscription.settings.add-payment-to-continue"
+msgstr ""
+"Deneme süreniz bittikten sonra devam etmek için bir ödeme yöntemi ekleyin"
+
+#: src/app/main/ui/settings/subscription.cljs:367, src/app/main/ui/settings/subscription.cljs:439
+msgid "subscription.settings.benefits.all-professional-benefits"
+msgstr "Tüm Profesyonel plan faydaları ve:"
+
+#: src/app/main/ui/settings/subscription.cljs:379, src/app/main/ui/settings/subscription.cljs:391, src/app/main/ui/settings/subscription.cljs:401, src/app/main/ui/settings/subscription.cljs:453
+msgid "subscription.settings.benefits.all-unlimited-benefits"
+msgstr "Tüm Sınırsız plan faydaları ve:"
+
+#: src/app/main/ui/settings/subscription.cljs:39
+msgid "subscription.settings.editors"
+msgstr "(x %s düzenleyici)"
+
+#: src/app/main/ui/dashboard/subscription.cljs:119, src/app/main/ui/settings/subscription.cljs:72, src/app/main/ui/settings/subscription.cljs:346, src/app/main/ui/settings/subscription.cljs:399, src/app/main/ui/settings/subscription.cljs:449
+msgid "subscription.settings.enterprise"
+msgstr "Kurumsal"
+
+#: src/app/main/ui/settings/subscription.cljs:68, src/app/main/ui/settings/subscription.cljs:345, src/app/main/ui/settings/subscription.cljs:389
+msgid "subscription.settings.enterprise-trial"
+msgstr "Kurumsal (deneme)"
+
+#: src/app/main/ui/settings/subscription.cljs:393, src/app/main/ui/settings/subscription.cljs:403, src/app/main/ui/settings/subscription.cljs:455
+msgid "subscription.settings.enterprise.autosave"
+msgstr "90 günlük sürümleri otomatik kaydetme ve dosya kurtarma"
+
+#: src/app/main/ui/settings/subscription.cljs:394, src/app/main/ui/settings/subscription.cljs:404, src/app/main/ui/settings/subscription.cljs:456
+msgid "subscription.settings.enterprise.capped-bill"
+msgstr "Sabit aylık fatura"
+
+#: src/app/main/ui/settings/subscription.cljs:392, src/app/main/ui/settings/subscription.cljs:402, src/app/main/ui/settings/subscription.cljs:454
+msgid "subscription.settings.enterprise.unlimited-storage-benefit"
+msgstr "Sınırsız depolama alanı"
+
+#: src/app/main/ui/dashboard/subscription.cljs:124, src/app/main/ui/settings/subscription.cljs:371, src/app/main/ui/settings/subscription.cljs:383, src/app/main/ui/settings/subscription.cljs:395, src/app/main/ui/settings/subscription.cljs:405
+msgid "subscription.settings.manage-your-subscription"
+msgstr "Aboneliğinizi yönetin"
+
+#: src/app/main/ui/settings/subscription.cljs:131
+msgid "subscription.settings.management.dialog.currently-editors-title"
+msgid_plural "subscription.settings.management.dialog.currently-editors-title"
+msgstr[0] "Şu anda, takımlarınızda düzenleme yapabilen %s kişi bulunuyor."
+msgstr[1] "Şu anda, takımlarınızda düzenleme yapabilen %s kişi bulunuyor."
+
+#: src/app/main/ui/settings/subscription.cljs:149
+msgid "subscription.settings.management.dialog.downgrade"
+msgstr ""
+"Dikkat: Daha düşük bir plana geçmek, daha az depolama alanı, daha kısa "
+"yedeklemeler ve daha kısa sürüm geçmişi anlamına gelir."
+
+#: src/app/main/ui/settings/subscription.cljs:133
+msgid "subscription.settings.management.dialog.editors"
+msgstr "Düzenleyiciler"
+
+#: src/app/main/ui/settings/subscription.cljs:138
+msgid "subscription.settings.management.dialog.editors-explanation"
+msgstr ""
+"(Sahipler, Yöneticiler ve Düzenleyiciler. Görüntüleyiciler, Düzenleyici "
+"olarak sayılmaz)"
+
+#: src/app/main/ui/settings/subscription.cljs:181
+msgid "subscription.settings.management.dialog.input-error"
+msgstr ""
+"Şu anda sahip olduğunuzdan daha az sayıda düzenleyici ayarlayamazsınız. "
+"Takım ayarlarında, dosyaları düzenlemeyen kişilerin rolünü "
+"(düzenleyici/yönetici yerine görüntüleyici) değiştirin."
+
+#: src/app/main/ui/settings/subscription.cljs:177
+msgid "subscription.settings.management.dialog.payment-explanation"
+msgstr "Deneme süresinden sonra ücretlendirilir. Şu anda kredi kartı gerekmez."
+
+#: src/app/main/ui/settings/subscription.cljs:170, src/app/main/ui/settings/subscription.cljs:174
+#, markdown
+msgid "subscription.settings.management.dialog.price-month"
+msgstr "**%s$**/ay"
+
+#: src/app/main/ui/settings/subscription.cljs:126
+msgid "subscription.settings.management.dialog.title"
+msgstr "Takımlarınıza %s uygulayın"
+
+#: src/app/main/ui/settings/subscription.cljs:184
+msgid "subscription.settings.management.dialog.unlimited-capped-warning"
+msgstr ""
+"İpucu: Davetlerin öncesinde hazırlıklı olmak için şimdi koltuk sayınızı "
+"artırabilirsiniz. Takımlar genelinde 25'ten fazla düzenleyiciye aylık 175$ "
+"sabit ücretten sahip olacaksınız."
+
+#: src/app/main/ui/settings/subscription.cljs:418
+msgid "subscription.settings.member-since"
+msgstr "Penpot üyelik tarihi: %s"
+
+#: src/app/main/ui/settings/subscription.cljs:431, src/app/main/ui/settings/subscription.cljs:445, src/app/main/ui/settings/subscription.cljs:459
+msgid "subscription.settings.more-information"
+msgstr "Daha fazla bilgi"
+
+#: src/app/main/ui/settings/subscription.cljs:421
+msgid "subscription.settings.other-plans"
+msgstr "Diğer penpot planları"
+
+#: src/app/main/ui/settings/subscription.cljs:425, src/app/main/ui/settings/subscription.cljs:438
+msgid "subscription.settings.price-editor-month"
+msgstr "aylık düzenleyici"
+
+#: src/app/main/ui/dashboard/subscription.cljs:114, src/app/main/ui/settings/subscription.cljs:70, src/app/main/ui/settings/subscription.cljs:358, src/app/main/ui/settings/subscription.cljs:423
+msgid "subscription.settings.professional"
+msgstr "Profesyonel"
+
+#: src/app/main/ui/settings/subscription.cljs:360, src/app/main/ui/settings/subscription.cljs:427
+msgid "subscription.settings.professional.autosave-benefit"
+msgstr "7 günlük sürümleri otomatik kaydetme ve dosya kurtarma"
+
+#: src/app/main/ui/settings/subscription.cljs:359, src/app/main/ui/settings/subscription.cljs:426
+msgid "subscription.settings.professional.storage-benefit"
+msgstr "10GB depolama alanı"
+
+#: src/app/main/ui/settings/subscription.cljs:361, src/app/main/ui/settings/subscription.cljs:428
+msgid "subscription.settings.professional.teams-editors-benefit"
+msgstr ""
+"Sınırsız sayıda takım. Sahip olduğunuz takımlarda en fazla 8 düzenleyici."
+
+#: src/app/main/ui/settings/subscription.cljs:355
+msgid "subscription.settings.section-plan"
+msgstr "Aboneliğiniz"
+
+#: src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+msgid "subscription.settings.start-trial"
+msgstr "Ücretsiz denemeyi başlat"
+
+#: src/app/main/ui/settings/subscription.cljs:429, src/app/main/ui/settings/subscription.cljs:443, src/app/main/ui/settings/subscription.cljs:457
+msgid "subscription.settings.subscribe"
+msgstr "Abone ol"
+
+#: src/app/main/ui/settings/subscription.cljs:239
+msgid "subscription.settings.success.dialog.description"
+msgstr ""
+"Aboneliğinizi, hesap ayrıntılarınızdaki 'Abonelik' sayfasından istediğiniz "
+"zaman düzenleyebilirsiniz."
+
+#: src/app/main/ui/settings/subscription.cljs:238
+msgid "subscription.settings.success.dialog.thanks"
+msgstr "Penpot %s planını seçtiğiniz için teşekkür ederiz!"
+
+#: src/app/main/ui/settings/subscription.cljs:240
+msgid "subscription.settings.sucess.dialog.footer"
+msgstr "Planınızın tadını çıkarın!"
+
+#: src/app/main/ui/settings/subscription.cljs:236
+msgid "subscription.settings.sucess.dialog.title"
+msgstr "%s oldunuz!"
+
+#: src/app/main/ui/settings/subscription.cljs:413
+msgid "subscription.settings.support-us-since"
+msgstr "Bu planla bizi şu zamandan beri destekliyorsunuz: %s"
+
+#: src/app/main/ui/settings/subscription.cljs:443, src/app/main/ui/settings/subscription.cljs:457
+msgid "subscription.settings.try-it-free"
+msgstr "14 gün boyunca ücretsiz deneyin"
+
+#: src/app/main/ui/dashboard/subscription.cljs:117, src/app/main/ui/settings/subscription.cljs:71, src/app/main/ui/settings/subscription.cljs:343, src/app/main/ui/settings/subscription.cljs:377, src/app/main/ui/settings/subscription.cljs:435
+msgid "subscription.settings.unlimited"
+msgstr "Sınırsız"
+
+#: src/app/main/ui/dashboard/subscription.cljs:116, src/app/main/ui/settings/subscription.cljs:67, src/app/main/ui/settings/subscription.cljs:342, src/app/main/ui/settings/subscription.cljs:365
+msgid "subscription.settings.unlimited-trial"
+msgstr "Sınırsız (deneme)"
+
+#: src/app/main/ui/settings/subscription.cljs:369, src/app/main/ui/settings/subscription.cljs:381, src/app/main/ui/settings/subscription.cljs:441
+msgid "subscription.settings.unlimited.autosave-benefit"
+msgstr "30 günlük sürümleri otomatik kaydetme ve dosya kurtarma"
+
+#: src/app/main/ui/settings/subscription.cljs:370, src/app/main/ui/settings/subscription.cljs:382, src/app/main/ui/settings/subscription.cljs:442
+msgid "subscription.settings.unlimited.bill"
+msgstr "Aylık fatura üst sınırı 175$"
+
+#: src/app/main/ui/settings/subscription.cljs:368, src/app/main/ui/settings/subscription.cljs:380, src/app/main/ui/settings/subscription.cljs:440
+msgid "subscription.settings.unlimited.storage-benefit"
+msgstr "25GB depolama alanı"
+
+#: src/app/main/ui/dashboard/subscription.cljs:147, src/app/main/ui/workspace/main_menu.cljs:961
+msgid "subscription.workspace.header.menu.option.power-up"
+msgstr "Planınızı güçlendirin"
+
+#: src/app/main/ui/workspace/sidebar/versions.cljs:56
+#, markdown
+msgid "subscription.workspace.versions.warning.enterprise.subtext-owner"
+msgstr ""
+"Bu sınırı artırmak isterseniz, bize [%s](mailto) adresinden yazabilirsiniz"
+
+#: src/app/main/ui/workspace/sidebar/versions.cljs:58
+#, markdown
+msgid "subscription.workspace.versions.warning.subtext-member"
+msgstr ""
+"Bu sınırı artırmak isterseniz, takım sahibi ile iletişime geçin: [%s](mailto)"
+
+#: src/app/main/ui/workspace/sidebar/versions.cljs:57
+#, markdown
+msgid "subscription.workspace.versions.warning.subtext-owner"
+msgstr "Bu sınırı artırmak isterseniz, [planınızı yükseltin|target:self](%s)"
+
+#: src/app/main/ui/settings/notifications.cljs:45
+msgid "title.settings.notifications"
+msgstr "Bildirimler - Penpot"
+
+#: src/app/main/ui/workspace/sidebar/assets.cljs:172
+msgid "workspace.assets.add-library"
+msgstr "Kütüphane ekle"
+
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:497
+msgid "workspace.assets.colors.add-color"
+msgstr "Renk ekle"
+
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:81
+msgid "workspace.assets.component-group-options"
+msgstr "Bileşen grubu seçenekleri"
+
+#: src/app/main/ui/workspace/sidebar/assets/components.cljs:581
+msgid "workspace.assets.components.add-component"
+msgstr "Bileşen ekle"
+
+#: src/app/main/ui/workspace/sidebar/assets/components.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:547
+msgid "workspace.assets.components.num-variants"
+msgstr "%s Çeşit"
+
+#: src/app/main/ui/workspace/sidebar/assets.cljs:177
+msgid "workspace.assets.manage-library"
+msgstr "Kütüphaneyi yönet"
+
+#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:405
+msgid "workspace.assets.typography.add-typography"
+msgstr "Tipografi ekle"
+
+#: src/app/main/ui/workspace/colorpicker.cljs:431, src/app/main/ui/workspace/colorpicker.cljs:443
+msgid "workspace.colorpicker.color-tokens"
+msgstr "Tokenleri renklendir"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:464
+msgid "workspace.component.swap.loop-error"
+msgstr "Bileşenler kendi içlerinde iç içe geçemez."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:463
+msgid "workspace.component.switch.loop-error-multi"
+msgstr ""
+"Bazı kopyalar değiştirilemedi. Bileşenler kendi içlerinde iç içe geçemez."
+
+#: src/app/main/ui/workspace/main_menu.cljs:916
+#, unused
+msgid "workspace.header.menu.option.power-up"
+msgstr "Planınızı güçlendirin"
+
+#: src/app/main/ui/workspace/main_menu.cljs:315
+msgid "workspace.header.menu.toggle-system-theme"
+msgstr "Sistem temasına geç"
+
+#: src/app/main/ui/workspace/right_header.cljs:240
+msgid "workspace.header.share"
+msgstr "Paylaş"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:430, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:436
+msgid "workspace.layout_grid.editor.padding.bottom"
+msgstr "Alt dolgu"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:355, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:362
+msgid "workspace.layout_grid.editor.padding.horizontal"
+msgstr "Yatay dolgu"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:451
+msgid "workspace.layout_grid.editor.padding.left"
+msgstr "Sol dolgu"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:421
+msgid "workspace.layout_grid.editor.padding.right"
+msgstr "Sağ dolgu"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:406
+msgid "workspace.layout_grid.editor.padding.top"
+msgstr "Üst dolgu"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:341, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:347
+msgid "workspace.layout_grid.editor.padding.vertical"
+msgstr "Dikey dolgu"
+
+#: src/app/main/ui/workspace/libraries.cljs:349
+msgid "workspace.libraries.connected-to"
+msgstr "Bağlandı"
+
+#: src/app/main/ui/workspace/libraries.cljs:404
+msgid "workspace.libraries.empty.add-some"
+msgstr "Veya denemek için bunlardan bazılarını ekleyin:"
+
+#: src/app/main/ui/workspace/libraries.cljs:398
+msgid "workspace.libraries.empty.no-libraries"
+msgstr "Takımınızda Paylaşılan Kütüphaneler bulunmuyor, burada bulunan"
+
+#: src/app/main/ui/workspace/libraries.cljs:402
+msgid "workspace.libraries.empty.some-templates"
+msgstr "şablonlara bakabilirsiniz"
+
+#: src/app/main/ui/workspace/libraries.cljs:387
+#, unused
+msgid "workspace.libraries.more-templates"
+msgstr "Bakabilirsiniz "
+
+#: src/app/main/ui/ds/notifications/shared/notification_pill.cljs:67, src/app/main/ui/ds/notifications/shared/notification_pill.cljs:72
+msgid "workspace.notification-pill.detail"
+msgstr "Ayrıntılar"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:97
+msgid "workspace.options.blur-options.add-blur"
+msgstr "Bulanıklık ekle"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:118
+msgid "workspace.options.blur-options.remove-blur"
+msgstr "Bulanıklığı kaldır"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:114
+msgid "workspace.options.blur-options.toggle-blur"
+msgstr "Bulanıklığı değiştir"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:993
+msgid "workspace.options.component.unlinked"
+msgstr "Ayrıldı"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:512
+msgid "workspace.options.component.variant.duplicated.copy.locate"
+msgstr "Çakışan çeşitleri bul"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:509
+msgid "workspace.options.component.variant.duplicated.copy.title"
+msgstr ""
+"Bu bileşenin çakışan çeşitleri var. Her çeşidin kendine özgü özellik "
+"değerleri olduğundan emin olun."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1281
+msgid "workspace.options.component.variant.duplicated.group.locate"
+msgstr "Yinelenen çeşitleri bul"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1278
+msgid "workspace.options.component.variant.duplicated.group.title"
+msgstr "Bazı çeşitler aynı özelliklere ve değerlere sahip"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:268
+msgid "workspace.options.component.variant.duplicated.single.all"
+msgstr ""
+"Bu çeşitler aynı özelliklere ve değerlere sahiptir. Değerleri, "
+"çağrılabilecekleri şekilde ayarlayın."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:265
+msgid "workspace.options.component.variant.duplicated.single.one"
+msgstr ""
+"Bu çeşit, başka bir çeşitle aynı özelliklere ve değerlere sahiptir. "
+"Değerleri, çağrılabilecekleri şekilde ayarlayın."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:271
+msgid "workspace.options.component.variant.duplicated.single.some"
+msgstr ""
+"Bu çeşitlerden bazıları aynı özelliklere ve değerlere sahiptir. Değerleri, "
+"geri çağrılabilecekleri şekilde ayarlayın."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:499
+msgid "workspace.options.component.variant.malformed.copy"
+msgstr ""
+"Bu bileşenin geçersiz ada sahip çeşitleri var. Her çeşidin doğru yapıyı "
+"takip ettiğinden emin olun."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1271
+msgid "workspace.options.component.variant.malformed.group.locate"
+msgstr "Geçersiz çeşitleri bul"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1268
+msgid "workspace.options.component.variant.malformed.group.title"
+msgstr "Bazı çeşitlerin adları geçersiz"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:502
+msgid "workspace.options.component.variant.malformed.locate"
+msgstr "Geçersiz çeşitleri bul"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:252
+msgid "workspace.options.component.variant.malformed.single.all"
+msgstr "Bu çeşitlerin adları geçersiz."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:249
+msgid "workspace.options.component.variant.malformed.single.one"
+msgstr "Bu çeşidin adı geçersiz."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:255
+msgid "workspace.options.component.variant.malformed.single.some"
+msgstr "Bu çeşitlerden bazılarının adları geçersiz."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:391
+msgid "workspace.options.component.variant.malformed.structure.example"
+msgstr "[özellik]=[değer], [özellik]=[değer]"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:389
+msgid "workspace.options.component.variant.malformed.structure.title"
+msgstr "Şu yapıyı kullanmayı deneyin:"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:54
+msgid "workspace.options.component.variants-help-modal.intro"
+msgstr ""
+"Çeşitler arasında geçiş yaparken değişiklikleri korumak için Penpot şu "
+"katmanları birbirine bağlar:"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:91
+msgid "workspace.options.component.variants-help-modal.outro"
+msgstr ""
+"Bunlardan herhangi birini değiştirmek "
+"(örneğin, bir katmanı yeniden adlandırmak veya gruplamak) bağlantıyı keser, "
+"ancak değişikliği geri almak bağlantıyı yeniden kurar."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:67
+msgid "workspace.options.component.variants-help-modal.rule1"
+msgstr "Aynı ada sahip."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:76
+msgid "workspace.options.component.variants-help-modal.rule2"
+msgstr "Aynı türden."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:77
+msgid "workspace.options.component.variants-help-modal.rule2.detail"
+msgstr ""
+"Dikdörtgen, elips, yollar ve boole işlemleri aynı tür olarak kabul edilir."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:87
+msgid "workspace.options.component.variants-help-modal.rule3"
+msgstr "Aynı hiyerarşi düzeyine sahip."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:88
+msgid "workspace.options.component.variants-help-modal.rule3.detail"
+msgstr "Gruplar, çalışma yüzeyleri ve yerleşim düzenleri eş değer kabul edilir."
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:955, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1191, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:47
+msgid "workspace.options.component.variants-help-modal.title"
+msgstr "Çeşitler nasıl bağlantılı kalır"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:214
+msgid "workspace.options.export.add-export"
+msgstr "Dışa aktarım ekle"
+
+#: 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 "Dışa aktarımı kaldır"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:234
+msgid "workspace.options.fill.add-fill"
+msgstr "Doldurma ekle"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:248
+msgid "workspace.options.fill.remove-fill"
+msgstr "Doldurmayı kaldır"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:474
+msgid "workspace.options.fit-content"
+msgstr "Çalışma yüzeyini içeriğe sığacak şekilde yeniden boyutlandır"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:155
+msgid "workspace.options.flows.remove-flow"
+msgstr "Akışı kaldır"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:326
+msgid "workspace.options.guides.add-guide"
+msgstr "Kılavuz ekle"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:188
+msgid "workspace.options.guides.remove-guide"
+msgstr "Kılavuzu kaldır"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:184
+msgid "workspace.options.guides.toggle-guide"
+msgstr "Kılavuzu değiştir"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:736
+msgid "workspace.options.interactions.add-interaction"
+msgstr "Etkileşim ekle"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs
+#, unused
+msgid "workspace.options.interactions.remove-interaction"
+msgstr "Etkileşimi kaldır"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:207, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:213
+msgid "workspace.options.layer-options.toggle-layer"
+msgstr "Katman görünürlüğünü değiştir"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:152
+msgid "workspace.options.radius.hide-all-corners"
+msgstr "Bağımsız yarıçapı daralt"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:153
+msgid "workspace.options.radius.show-single-corners"
+msgstr "Bağımsız yarıçapı göster"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:341
+msgid "workspace.options.shadow-options.add-shadow"
+msgstr "Gölge ekle"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:183, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:354
+msgid "workspace.options.shadow-options.remove-shadow"
+msgstr "Gölgeyi kaldır"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:179
+msgid "workspace.options.shadow-options.toggle-shadow"
+msgstr "Gölgeyi değiştir"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:534
+msgid "workspace.options.size.lock"
+msgstr "Oranı kilitle"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:534
+msgid "workspace.options.size.unlock"
+msgstr "Oranın kilidini kaldır"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:189
+msgid "workspace.options.stroke.add-stroke"
+msgstr "Çerçeve rengi ekle"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:202
+msgid "workspace.options.stroke.remove-stroke"
+msgstr "Çerçeveyi kaldır"
+
+#: src/app/main/ui/workspace/plugins.cljs:192
+msgid "workspace.plugins.error.manifest"
+msgstr "Eklenti bildirimi yanlış."
+
+#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:783, src/app/main/ui/workspace/plugins.cljs:83
+msgid "workspace.plugins.error.need-editor"
+msgstr "Bu eklentiyi kullanmak için düzenleyici olmanız gerekir"
+
+#: src/app/main/ui/workspace/plugins.cljs:375
+msgid "workspace.plugins.permissions-update.title"
+msgstr "BU EKLENTİYİ GÜNCELLE"
+
+#: src/app/main/ui/workspace/plugins.cljs:379
+msgid "workspace.plugins.permissions-update.warning"
+msgstr ""
+"Eklenti, son açtığınızdan beri değiştirildi. Artık şuraya da erişmek istiyor:"
+
+#: src/app/main/ui/workspace/plugins.cljs:279
+msgid "workspace.plugins.permissions.allow-download"
+msgstr "Dosya indirmesi başlat."
+
+#: src/app/main/ui/workspace/plugins.cljs:286
+msgid "workspace.plugins.permissions.allow-localstorage"
+msgstr "Tarayıcıda veri depola."
+
+#: src/app/main/ui/workspace/plugins.cljs:272
+msgid "workspace.plugins.permissions.comment-read"
+msgstr "Yorumlarınızı ve yanıtlarınızı oku."
+
+#: src/app/main/ui/workspace/plugins.cljs:266
+msgid "workspace.plugins.permissions.comment-write"
+msgstr "Yorumlarınızı oku, değiştir ve sizin adınıza yanıtla."
+
+#: src/app/main/ui/workspace/plugins.cljs:87
+msgid "workspace.plugins.remove-plugin"
+msgstr "Eklentiyi kaldır"
+
+#: src/app/main/ui/workspace/plugins.cljs:439
+msgid "workspace.plugins.try-out.cancel"
+msgstr "ŞİMDİ DEĞİL"
+
+#: src/app/main/ui/workspace/plugins.cljs:432
+msgid "workspace.plugins.try-out.message"
+msgstr ""
+"Bir göz atmak ister misiniz? Geçerli takımınız için yeni bir taslakta "
+"açılacaktır. (İstemiyorsanız, onu herhangi bir dosyanın kurulu "
+"eklentilerinde her zaman bulabilirsiniz.)"
+
+#: src/app/main/ui/workspace/plugins.cljs:428
+msgid "workspace.plugins.try-out.title"
+msgstr "'%s' EKLENTİSİ KULLANICINIZ İÇİN KURULDU!"
+
+#: src/app/main/ui/workspace/plugins.cljs:445
+msgid "workspace.plugins.try-out.try"
+msgstr "EKLENTİYİ DENE"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1016, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1040
+msgid "workspace.shape.menu.add-layout"
+msgstr "Yerleşim düzeni ekle"
+
+#: src/app/main/ui/workspace/context_menu.cljs:610, src/app/main/ui/workspace/sidebar/assets/common.cljs:514, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:961, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1113, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1195
+msgid "workspace.shape.menu.add-variant"
+msgstr "Çeşit oluştur"
+
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:518, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1010, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1115, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1233
+msgid "workspace.shape.menu.add-variant-property"
+msgstr "Yeni özellik ekle"
+
+#: src/app/main/ui/workspace/context_menu.cljs:617, src/app/main/ui/workspace/sidebar/assets/components.cljs:634, src/app/main/ui/workspace/sidebar/assets/groups.cljs:75, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1041
+msgid "workspace.shape.menu.combine-as-variants"
+msgstr "Çeşit olarak birleştir"
+
+#: src/app/main/ui/workspace/sidebar/assets/components.cljs:636
+msgid "workspace.shape.menu.combine-as-variants-error"
+msgstr "Bileşenler aynı sayfada olmalıdır"
+
+#: src/app/main/ui/workspace/context_menu.cljs:217
+msgid "workspace.shape.menu.copy-css"
+msgstr "CSS olarak kopyala"
+
+#: src/app/main/ui/workspace/context_menu.cljs:219
+msgid "workspace.shape.menu.copy-css-nested"
+msgstr "CSS olarak kopyala (iç içe katmanlar)"
+
+#: src/app/main/ui/workspace/context_menu.cljs:202
+msgid "workspace.shape.menu.copy-link"
+msgstr "Bağlantıyı kopyala"
+
+#: src/app/main/ui/workspace/context_menu.cljs:215
+msgid "workspace.shape.menu.copy-paste-as"
+msgstr "Farklı kopyala/yapıştır ..."
+
+#: src/app/main/ui/workspace/context_menu.cljs:229
+msgid "workspace.shape.menu.copy-props"
+msgstr "Özellikleri kopyala"
+
+#: src/app/main/ui/workspace/context_menu.cljs:221
+msgid "workspace.shape.menu.copy-svg"
+msgstr "SVG olarak kopyala"
+
+#: src/app/main/ui/workspace/context_menu.cljs:226
+msgid "workspace.shape.menu.copy-text"
+msgstr "Metin olarak kopyala"
+
+#: src/app/main/ui/workspace/context_menu.cljs:233
+msgid "workspace.shape.menu.paste-props"
+msgstr "Özellikleri yapıştır"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1034
+msgid "workspace.shape.menu.remove-layout"
+msgstr "Yerleşim düzenini kaldır"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1257
+msgid "workspace.shape.menu.remove-variant-property"
+msgstr "Özelliği kaldır"
+
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1256
+msgid "workspace.shape.menu.remove-variant-property.last-property"
+msgstr "Çeşidin en az bir özelliği olmalıdır"
+
+#: src/app/main/ui/workspace/context_menu.cljs:328
+msgid "workspace.shape.menu.rename"
+msgstr "Yeniden adlandır"
+
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:504
+msgid "workspace.shape.menu.restore-variant"
+msgstr "Çeşidi geri yükle"
+
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:249
+msgid "workspace.sidebar.sitemap.add-page"
+msgstr "Sayfa ekle"
+
+#: src/app/main/ui/workspace/tokens/themes/theme_selector.cljs:86
+msgid "workspace.tokens.active-themes"
+msgstr "%s etkin tema"
+
+#: src/app/main/ui/workspace/tokens/sidebar.cljs
+#, unused
+msgid "workspace.tokens.add set"
+msgstr "Küme ekle"
+
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
+msgid "workspace.tokens.add-new-theme"
+msgstr "Yeni tema ekle"
+
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:62
+msgid "workspace.tokens.add-set-to-group"
+msgstr "Bu gruba küme ekle"
+
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:197, src/app/main/ui/workspace/tokens/management/group.cljs:115
+msgid "workspace.tokens.add-token"
+msgstr "Token ekle: %s"
+
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:136
+msgid "workspace.tokens.applied-to"
+msgstr "Uygulanan"
+
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:316
+msgid "workspace.tokens.axis"
+msgstr "Eksen"
+
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:337
+msgid "workspace.tokens.back-to-themes"
+msgstr "Tema listesine geri dön"
+
+#: src/app/main/ui/workspace/tokens/settings/menu.cljs:89
+msgid "workspace.tokens.base-font-size"
+msgstr "Temel yazı tipi boyutu"
+
+#: src/app/main/ui/workspace/tokens/settings/menu.cljs:43
+msgid "workspace.tokens.base-font-size.error"
+msgstr ""
+"Temel yazı tipi boyutu piksel cinsinden veya birimsiz bir değer olmalıdır."
+
+#: src/app/main/ui/workspace/tokens/modals/import.cljs:127
+#, unused
+msgid "workspace.tokens.choose-file"
+msgstr "Dosya seç"
+
+#: src/app/main/ui/workspace/tokens/modals/import.cljs:132
+#, unused
+msgid "workspace.tokens.choose-folder"
+msgstr "Klasör seç"
+
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:286
+msgid "workspace.tokens.color"
+msgstr "Renk"
+
+#: src/app/main/data/workspace/tokens/errors.cljs:97
+msgid "workspace.tokens.composite-line-height-needs-font-size"
+msgstr ""
+"Satır yüksekliği yazı tipi boyutuna bağlıdır. Çözülen değeri elde etmek için "
+"bir yazı tipi boyutu ekleyin."
+
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:53
+msgid "workspace.tokens.create-new-theme"
+msgstr "Şimdi ilk temanızı oluşturun."
+
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:96, src/app/main/ui/workspace/tokens/themes.cljs:44
+msgid "workspace.tokens.create-one"
+msgstr "Bir tane oluşturun."
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:552
+msgid "workspace.tokens.create-token"
+msgstr "Yeni %s tokeni oluştur"
+
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:338
+msgid "workspace.tokens.delete"
+msgstr "Tokeni sil"
+
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:154
+msgid "workspace.tokens.delete-theme-title"
+msgstr "Temayı sil"
+
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:335
+msgid "workspace.tokens.duplicate"
+msgstr "Tokeni çoğalt"
+
+#: src/app/main/data/workspace/tokens/library_edit.cljs:197, src/app/main/data/workspace/tokens/library_edit.cljs:415
+msgid "workspace.tokens.duplicate-suffix"
+msgstr "kopyala"
+
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:322
+msgid "workspace.tokens.edit"
+msgstr "Tokeni düzenle"
+
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:327
+msgid "workspace.tokens.edit-theme-title"
+msgstr "Temayı düzenle"
+
+#: src/app/main/ui/workspace/tokens/themes/theme_selector.cljs:74
+msgid "workspace.tokens.edit-themes"
+msgstr "Temaları düzenle"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:551
+msgid "workspace.tokens.edit-token"
+msgstr "%s tokenini düzenle"
+
+#: src/app/main/data/workspace/tokens/errors.cljs:41
+msgid "workspace.tokens.empty-input"
+msgstr "Token değeri boş olamaz"
+
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:558
+msgid "workspace.tokens.enter-token-name"
+msgstr "%s token adını gir"
+
+#: src/app/main/data/workspace/tokens/errors.cljs:15
+msgid "workspace.tokens.error-parse"
+msgstr "İçe Aktarma Hatası: JSON ayrıştırılamadı."
+
+#: src/app/main/ui/workspace/tokens/export/modal.cljs:49
+msgid "workspace.tokens.export"
+msgstr "Dışa aktar"
+
+#: src/app/main/ui/workspace/tokens/export/modal.cljs:125
+msgid "workspace.tokens.export-tokens"
+msgstr "Tokenleri dışa aktar"
+
+#: src/app/main/ui/workspace/tokens/export/modal.cljs:118
+msgid "workspace.tokens.export.multiple-files"
+msgstr "Birden fazla dosya"
+
+#: src/app/main/ui/workspace/tokens/export/modal.cljs:38
+msgid "workspace.tokens.export.no-tokens-themes-sets"
+msgstr "Dışa aktarılacak token, tema veya küme yok."
+
+#: src/app/main/ui/workspace/tokens/export/modal.cljs:35
+msgid "workspace.tokens.export.preview"
+msgstr "Ön izleme:"
+
+#: src/app/main/ui/workspace/tokens/export/modal.cljs:116
+msgid "workspace.tokens.export.single-file"
+msgstr "Tek dosya"
diff --git a/frontend/translations/ukr_UA.po b/frontend/translations/ukr_UA.po
index ac08462143..dac86f70f2 100644
--- a/frontend/translations/ukr_UA.po
+++ b/frontend/translations/ukr_UA.po
@@ -1,16 +1,16 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-28 10:46+0000\n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
"Last-Translator: Denys Kisil \n"
-"Language-Team: Ukrainian "
-" \n"
+"Language-Team: Ukrainian \n"
"Language: ukr_UA\n"
"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==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 5.13\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -182,7 +182,7 @@ msgstr ""
"Я погоджуюсь із [умовами користування](%s) та [політикою "
"конфіденційності](%s)."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "Умови користування"
@@ -209,7 +209,7 @@ msgstr "...брендинг, ілюстрації, маркетингові ма
msgid "comments.mentions.not-found"
msgstr "Не знайдено людей за @%s"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "Опублікувати"
@@ -282,7 +282,7 @@ msgstr "Поділитись прототипами"
msgid "common.share-link.view-all"
msgstr "Вибрати все"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "Скасувати публікацію"
@@ -405,7 +405,7 @@ msgstr "Токен має необмежений термін дії"
msgid "dashboard.add-file"
msgstr "Додати файл"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "Додати як Спільну Бібліотеку"
@@ -413,31 +413,31 @@ msgstr "Додати як Спільну Бібліотеку"
msgid "dashboard.change-email"
msgstr "Змінити пошту"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(копія)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "Створити нову команду"
-#: src/app/main/ui/workspace/main_menu.cljs:631
+#: src/app/main/ui/workspace/main_menu.cljs:659
msgid "dashboard.create-version-menu"
msgstr "Пришпилити цю версію"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "Ваш Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "Видалити команду"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "Завантажити файл Penpot (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "Завантажити стандартний файл (.svg +.json)"
@@ -521,7 +521,7 @@ msgstr "Почніть робити чудові речі"
msgid "dashboard.export-binary-multi"
msgstr "Завантажити %s файлів Penpot (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "Експортувати дошки у PDF"
@@ -537,7 +537,7 @@ msgstr "Експорт (%s) файлів Penpot"
msgid "dashboard.export-multiple.selected"
msgstr "Було виділено %s з %s елементів"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "Експорт"
@@ -753,11 +753,11 @@ msgstr "Вивантаження даних на сервер (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "Вивантаження файлу: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "Запросити людей"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "Покинути команду"
@@ -765,7 +765,7 @@ msgstr "Покинути команду"
msgid "dashboard.libraries-and-templates"
msgstr "Бібліотеки та Шаблони"
-#: src/app/main/ui/dashboard/templates.cljs:259
+#: src/app/main/ui/dashboard/templates.cljs:267
msgid "dashboard.libraries-and-templates.description"
msgstr "Тут знаходяться Бібліотеки та Шаблони, які можна додати до проєкту"
@@ -773,7 +773,7 @@ msgstr "Тут знаходяться Бібліотеки та Шаблони,
msgid "dashboard.libraries-and-templates.explore"
msgstr "Дізнайтесь більше про них та як зробити внесок"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "Виникла проблема під час імпортування шаблону. Його не було імпортовано."
@@ -809,7 +809,7 @@ msgstr "Перенести в іншу команду"
msgid "dashboard.new-file"
msgstr "+ Новий файл"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "Новий файл"
@@ -817,7 +817,7 @@ msgstr "Новий файл"
msgid "dashboard.new-project"
msgstr "+ Новий проєкт"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "Новий проєкт"
@@ -825,11 +825,11 @@ msgstr "Новий проєкт"
msgid "dashboard.no-matches-for"
msgstr "Жодних відповідностей за \"%s\" не знайдено"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "Закріплені проєкти з'являться тут"
-#: src/app/main/ui/dashboard/comments.cljs:90
+#: src/app/main/ui/dashboard/comments.cljs:91
msgid "dashboard.notifications"
msgstr "Сповіщення"
@@ -841,7 +841,7 @@ msgstr "Адресу Вашої електронної пошти було ус
msgid "dashboard.notifications.email-verified-successfully"
msgstr "Адресу Вашої електронної пошти було успішно підтверджено"
-#: src/app/main/data/profile.cljs:272
+#: src/app/main/data/profile.cljs:273
msgid "dashboard.notifications.notifications-saved"
msgstr "Налаштування сповіщень оновлено"
@@ -849,11 +849,11 @@ msgstr "Налаштування сповіщень оновлено"
msgid "dashboard.notifications.password-saved"
msgstr "Пароль успішно збережено!"
-#: src/app/main/ui/dashboard/comments.cljs:44
+#: src/app/main/ui/dashboard/comments.cljs:45
msgid "dashboard.notifications.view"
msgstr "Показати сповіщення"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s учасників"
@@ -885,7 +885,7 @@ msgstr "Відтепер Ви власник цієї команди."
msgid "dashboard.permissions-change.viewer"
msgstr "Відтепер Ви переглядач цієї команди."
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "Пришпилити/відшпилити"
@@ -922,7 +922,7 @@ msgstr "Ви більше не є частиною команди \"%s\"."
msgid "dashboard.save-settings"
msgstr "Зберегти налаштування"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "Пошук…"
@@ -1014,7 +1014,7 @@ msgstr "Сповіщення"
msgid "dashboard.show-all-files"
msgstr "Показати усі файли"
-#: src/app/main/ui/workspace/main_menu.cljs:638
+#: src/app/main/ui/workspace/main_menu.cljs:666
msgid "dashboard.show-version-history"
msgstr "Історія версій"
@@ -1040,7 +1040,7 @@ msgstr[2] "Файли були успішно дубліковані"
msgid "dashboard.success-duplicate-project"
msgstr "Ваш проєкт успішно дубліковано"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "Файл було успішно переміщено"
@@ -1052,15 +1052,15 @@ msgstr "Файли було успішно переміщено"
msgid "dashboard.success-move-project"
msgstr "Ваш проєкт було успішно переміщено"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "Відомості про команду"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "Учасники команди"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "Проєкти команди"
@@ -1080,7 +1080,7 @@ msgstr "Результати пошуку"
msgid "dashboard.type-something"
msgstr "Вкажіть для пошуку"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "Вилучити бібліотеку з публікації"
@@ -1088,50 +1088,50 @@ msgstr "Вилучити бібліотеку з публікації"
msgid "dashboard.update-settings"
msgstr "Оновити налаштування"
-#: src/app/main/ui/dashboard/sidebar.cljs:856
+#: src/app/main/ui/dashboard/sidebar.cljs:976
msgid "dashboard.upgrade-plan.no-limits"
msgstr "Без обмежень на креативність"
-#: src/app/main/ui/dashboard/sidebar.cljs:854
+#: src/app/main/ui/dashboard/sidebar.cljs:974
msgid "dashboard.upgrade-plan.penpot-free"
msgstr "Penpot Безкоштовний"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "Активний"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "Після спрацювання хуку дані події будуть надіслані"
-#: src/app/main/ui/dashboard/team.cljs:982
+#: src/app/main/ui/dashboard/team.cljs:1160
msgid "dashboard.webhooks.cant-edit"
msgstr "Ви можете видаляти або редагувати лише створені Вами вебхуки."
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "Тип вмісту"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "Створити вебхук"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "Вебхук успішно створено."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"Веб-хуки - це простий спосіб дозволити іншим веб-сайтам і застосункам "
"отримувати сповіщення про певні події в Penpot. Ми надішлемо POST-запит на "
"кожну з вказаних вами URL-адрес."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "Натисніть кнопку \"Додати вебхук\" щоб створити його."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "У вас поки що немає вебхуків."
@@ -1151,7 +1151,7 @@ msgstr "Електронна пошта"
msgid "dashboard.your-name"
msgstr "Ваше ім'я"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "Ваш Penpot"
@@ -1167,15 +1167,15 @@ msgstr "Увага"
msgid "ds.component-subtitle"
msgstr "Компоненти для оновлення:"
-#: src/app/main/ui/workspace/plugins.cljs:338, src/app/main/ui/workspace/plugins.cljs:392
+#: src/app/main/ui/workspace/plugins.cljs:339, src/app/main/ui/workspace/plugins.cljs:393
msgid "ds.confirm-allow"
msgstr "Дозволити"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "Скасувати"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Добре"
@@ -1237,7 +1237,7 @@ msgstr "Оскільки Penpot не підтримує цей тип Ресур
msgid "errors.deprecated.contact.text"
msgstr "звʼязатись з нами"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:266
+#: src/app/main/data/workspace/tokens/library_edit.cljs:274
msgid "errors.drop-token-set-parent-to-child"
msgstr "Не можна кинути батьківський набір на приналежний дочірній."
@@ -1261,13 +1261,13 @@ msgstr "Поштова адреса не відповідає тому що в
msgid "errors.email-domain-not-allowed"
msgstr "Цей домен не дозволений"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr ""
"Електронна пошта \"%s\" має багато скарг про постійне повернення "
"повідомлень."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr ""
"Електронну адресу «%s» позначено як спам або вона постійно повертає "
@@ -1283,11 +1283,6 @@ msgstr ""
msgid "errors.feature-not-supported"
msgstr "Функція '%s' не підтримується."
-#: src/app/main/ui/auth/register.cljs, src/app/main/ui/dashboard/team_form.cljs, src/app/main/ui/onboarding/team_choice.cljs, src/app/main/ui/setti ngs/access_tokens.cljs, src/app/main/ui/settings/feedback.cljs, src/app/main/ui/settings/profile.cljs, src/app/main/ui/workspace/sidebar/assets.cljs
-#, unused
-msgid "errors.field-max-length"
-msgstr "Має містити не більше 1 символу."
-
#, unused
msgid "errors.field-min-length"
msgstr "Має містити принаймні 1 символ."
@@ -1308,7 +1303,7 @@ msgstr ""
"файлу, який Ви намагаєтеся відкрити. Перш ніж відкрити файл, потрібно "
"застосувати міграції для \"%s\"."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Виникла якась неполадка."
@@ -1358,11 +1353,11 @@ msgstr "Це запрошення могло бути відкликане аб
msgid "errors.ldap-disabled"
msgstr "Автентифікація через LDAP вимкнена."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "Ви досягли квоти \"%s\". Зв'яжіться із службою підтримки."
-#: src/app/main/ui/dashboard/team.cljs:185, src/app/main/ui/onboarding/team_choice.cljs:101
+#: src/app/main/ui/dashboard/team.cljs:187, src/app/main/ui/dashboard/team.cljs:849, src/app/main/ui/onboarding/team_choice.cljs:101
msgid "errors.maximum-invitations-by-request-reached"
msgstr ""
"Дрсягнуто максимальної кількості поштових скриньок, на які можна надіслати "
@@ -1380,7 +1375,7 @@ msgstr "Схоже, вміст зображення не відповідає р
msgid "errors.media-type-not-allowed"
msgstr "Схоже, це зображення не є дійсним."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"Електронна пошта профілю, який Ви намагаєтесь запросити, має приглушення "
@@ -1416,7 +1411,7 @@ msgstr "Помилкові дані в буфері обміну"
msgid "errors.profile-blocked"
msgstr "Профіль заблоковано"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr ""
"Для Вашого профілю приглушено листи (скарги на спам або постійне "
@@ -1434,23 +1429,23 @@ msgstr "SVG недійсний або сформований неправиль
msgid "errors.team-feature-mismatch"
msgstr "Виявлено несумісну функцію \"%s\""
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr ""
"Недостатньо учасників, щоб покинути команду, яку Ви, ймовірно, хочете "
"видалити."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "Учасник, якого Ви намагаєтеся призначити, не існує."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr ""
"Власник не може покинути команду, тому Ви повинні спершу призначити нового "
"власника."
-#: src/app/main/data/workspace/tokens/library_edit.cljs:153, src/app/main/data/workspace/tokens/library_edit.cljs:183
+#: src/app/main/data/workspace/tokens/library_edit.cljs:150, src/app/main/data/workspace/tokens/library_edit.cljs:180
msgid "errors.token-set-already-exists"
msgstr "Набір з таким імʼям уже існує"
@@ -1459,11 +1454,11 @@ msgstr "Набір з таким імʼям уже існує"
msgid "errors.token-set-doesnt-exists"
msgstr "Не можна дублювати невідомий набір"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:265
+#: src/app/main/data/workspace/tokens/library_edit.cljs:273
msgid "errors.token-set-exists-on-drop"
msgstr "Не вдалось перекинути, набір з таким імʼям вже існує."
-#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:99
+#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:95
msgid "errors.token-theme-already-exists"
msgstr "Параметри Теми з таким імʼям вже існують"
@@ -1491,31 +1486,31 @@ msgstr "Ця версія заблокована і не може бути ви
msgid "errors.version-not-supported"
msgstr "Файл має несумісний номер версії"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "Помилка під'єднання, адреса недосяжна"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "Посилання не пройшло перевірку."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "Остання спроба доставки була невдалою."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "Помилка під час перевірки SSL."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "Час вичерпано"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "Неочікувана помилка під час перевірки"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "Неочікуваний статус %s"
@@ -1579,7 +1574,7 @@ msgstr "Виникла помилка"
msgid "inspect.attributes.blur"
msgstr "Розмиття"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "К-сть"
@@ -1587,15 +1582,15 @@ msgstr "К-сть"
msgid "inspect.attributes.color"
msgstr "Колір"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1603,7 +1598,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Заливка"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Завантажити вихідне зображення"
@@ -1697,35 +1692,37 @@ msgstr "Суцільний"
msgid "inspect.attributes.stroke.width"
msgstr "Товщина"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Типографія"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Сімейство шрифта"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Розмір шрифта"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Стиль шрифта"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "Товщина шрифта"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Відступ між літерами"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Висота лінії"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Оформлення тексту"
@@ -1733,35 +1730,36 @@ msgstr "Оформлення тексту"
msgid "inspect.attributes.typography.text-decoration.line-through"
msgstr "Закреслення"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Немає"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Підкреслений"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "Видозміна тексту"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "Заголовковий регістр"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "Нижній регістр"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Який є"
-#: src/app/main/ui/inspect/attributes/text.cljs:159
+#: src/app/main/ui/inspect/attributes/text.cljs:152
msgid "inspect.attributes.typography.text-transform.unset"
msgstr "Не встановлено"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "Верхній регістр"
@@ -1773,17 +1771,17 @@ msgstr "Параметри варіантів"
msgid "inspect.attributes.variants"
msgstr "Властивості варіантів"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr ""
"Якщо ви хочете дізнатися більше про інспекцію дизайну, відвідайте "
"довідковий центр Penpot"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "Більше інформації про інспекцію"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr "Оберіть фігуру, дошку або групу, щоб переглянути їх властивості та код"
@@ -1851,11 +1849,11 @@ msgstr "Текст"
msgid "inspect.tabs.info"
msgstr "Інформація"
-#: src/app/main/ui/dashboard/comments.cljs:95
+#: src/app/main/ui/dashboard/comments.cljs:96
msgid "label.mark-all-as-read"
msgstr "Позначити все як прочитане"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Скорочення"
@@ -1867,11 +1865,11 @@ msgstr "Прийняти"
msgid "labels.access-tokens"
msgstr "Токени доступу"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "Активне"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.add"
msgstr "Додати"
@@ -1879,11 +1877,11 @@ msgstr "Додати"
msgid "labels.add-custom-font"
msgstr "Додати користувацькі шрифти"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.adding"
msgstr "Додавання..."
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Адміністратор"
@@ -1891,7 +1889,7 @@ msgstr "Адміністратор"
msgid "labels.adobe-xd"
msgstr "Adobe ExpDesign"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Всі"
@@ -1914,7 +1912,7 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "Поганий шлюз"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Скасувати"
@@ -1922,11 +1920,11 @@ msgstr "Скасувати"
msgid "labels.canva"
msgstr "Канва"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Закрити"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:186
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:181
msgid "labels.collapse"
msgstr "Згорнути"
@@ -1938,11 +1936,11 @@ msgstr "Коментар"
msgid "labels.comment.mark-as-solved"
msgstr "Позначити як виконане"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "Коментарі"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Спільнота"
@@ -1950,7 +1948,7 @@ msgstr "Спільнота"
msgid "labels.confirm-password"
msgstr "Підтвердити пароль"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Продовжити"
@@ -1966,11 +1964,11 @@ msgstr "Ви можете продовжувати з обліковим зап
msgid "labels.copy"
msgstr "Копіювати"
-#: src/app/main/ui/inspect/attributes/common.cljs:118
+#: src/app/main/ui/inspect/attributes/common.cljs:99
msgid "labels.copy-color"
msgstr "Копіювати колір"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "Копіювати посилання"
@@ -1978,7 +1976,7 @@ msgstr "Копіювати посилання"
msgid "labels.copyright"
msgstr "Калейдос @2024"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Створити"
@@ -1998,7 +1996,7 @@ msgstr "Користувацькі шрифти"
msgid "labels.dashboard"
msgstr "Панель керування"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Видалити"
@@ -2010,7 +2008,7 @@ msgstr "Видалити коментар"
msgid "labels.delete-comment-thread"
msgstr "Видалити гілку"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Видалити запрошення"
@@ -2027,19 +2025,19 @@ msgstr "Розробка"
msgid "labels.director"
msgstr "Директор"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "Відхилити"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Чернетки"
-#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:65
msgid "labels.duplicate"
msgstr "Дублювати"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "Редагувати"
@@ -2047,11 +2045,11 @@ msgstr "Редагувати"
msgid "labels.edit-file"
msgstr "Редагувати файл"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Редактор"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:302
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:301
msgid "labels.empty"
msgstr "Порожньо"
@@ -2064,11 +2062,11 @@ msgstr "Помилка"
msgid "labels.event"
msgstr "Подія"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Сплинув термін дії"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Експорт"
@@ -2096,7 +2094,7 @@ msgstr "Постачальники шрифтів"
msgid "labels.font-variants"
msgstr "Стилі"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Шрифти"
@@ -2110,11 +2108,11 @@ msgstr "Генеральний директор або Засновник"
msgid "labels.freelancer"
msgstr "Фрилансер"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "Репозиторій Github"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Надішліть відгук"
@@ -2126,7 +2124,7 @@ msgstr "Повернутись назад"
msgid "labels.graphic-design"
msgstr "Графічний дизайн"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Центр Допомоги"
@@ -2134,15 +2132,15 @@ msgstr "Центр Допомоги"
msgid "labels.hide"
msgstr "Приховати"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Приховати вирішені коментарі"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:134
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:130
msgid "labels.import"
msgstr "Імпортувати"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "Не активний"
@@ -2164,7 +2162,7 @@ msgstr "Внутрішня помилка"
msgid "labels.invision"
msgstr "ІнВіжн"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Запрошення"
@@ -2172,7 +2170,7 @@ msgstr "Запрошення"
msgid "labels.language"
msgstr "Мова"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Бібліотеки та Шаблони"
@@ -2192,7 +2190,7 @@ msgstr "Увійти або зареєструватись"
msgid "labels.login"
msgstr "Увійти"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Вийти"
@@ -2200,11 +2198,11 @@ msgstr "Вийти"
msgid "labels.marketing"
msgstr "Маркетинг"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Учасник"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Учасники"
@@ -2216,19 +2214,19 @@ msgstr "Згадка"
msgid "labels.new-password"
msgstr "Новий пароль"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "Далі"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "Ви все наздогнали! Нові повідомлення про коментарі з’являться тут."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "У вас, поки що, немає запрошень."
-#: src/app/main/ui/dashboard/team.cljs:761
+#: src/app/main/ui/dashboard/team.cljs:739
msgid "labels.no-invitations-gather-people"
msgstr "Збирайте людей та створюйте чудові речі разом."
@@ -2247,7 +2245,7 @@ msgstr "Отакої!"
msgid "labels.notifications"
msgstr "Сповіщення"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "%s файл"
@@ -2261,7 +2259,7 @@ msgstr[0] "%s дошка"
msgstr[1] "%s дошок"
msgstr[2] "%s дошок"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "%s проєкт"
@@ -2281,7 +2279,7 @@ msgstr "Старий пароль"
msgid "labels.only-yours"
msgstr "Лише ваші"
-#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:309, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:338
+#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:310, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:339
msgid "labels.options"
msgstr "Параметри"
@@ -2297,7 +2295,7 @@ msgstr "Інше (вкажіть)"
msgid "labels.other-short"
msgstr "Інше"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Власник"
@@ -2305,7 +2303,7 @@ msgstr "Власник"
msgid "labels.password"
msgstr "Пароль"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "Очікування"
@@ -2329,7 +2327,7 @@ msgstr "Керування продуктами"
msgid "labels.profile"
msgstr "Профіль"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Проєкти"
@@ -2337,7 +2335,7 @@ msgstr "Проєкти"
msgid "labels.refresh"
msgstr "Перезавантажити"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Примітки до випуску"
@@ -2351,11 +2349,11 @@ msgstr "Перезавантажити файл"
msgid "labels.remove"
msgstr "Видалити"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Вилучити учасника"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Перейменувати"
@@ -2383,7 +2381,7 @@ msgstr "нова відповідь"
msgid "labels.reply.thread"
msgstr "Відповідь"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "Повторно надіслати запрошення"
@@ -2395,15 +2393,15 @@ msgstr "Відновити"
msgid "labels.retry"
msgstr "Повторити"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Роль"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Зберегти"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:715
+#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:730
msgid "labels.search"
msgstr "Пошук"
@@ -2431,11 +2429,11 @@ msgstr "Ми проводимо програмне обслуговування
msgid "labels.service-unavailable.main-message"
msgstr "Сервіс недосяжний"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:79
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:75
msgid "labels.sets"
msgstr "Набори"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Налаштування"
@@ -2447,7 +2445,7 @@ msgstr "Поділитись"
msgid "labels.share-prototype"
msgstr "Поділитись прототипом"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Бібліотеки"
@@ -2455,7 +2453,7 @@ msgstr "Бібліотеки"
msgid "labels.show"
msgstr "Показати"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Показати усі коментарі"
@@ -2463,11 +2461,11 @@ msgstr "Показати усі коментарі"
msgid "labels.show-comments-list"
msgstr "Показати список коментарів"
-#: src/app/main/ui/workspace/comments.cljs:67, src/app/main/ui/workspace/comments.cljs:139
+#: src/app/main/ui/workspace/comments.cljs:68, src/app/main/ui/workspace/comments.cljs:140
msgid "labels.show-mentions"
msgstr "Показувати лише ваші згадки"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Показати лише ваші коментарі"
@@ -2479,7 +2477,7 @@ msgstr "Ескіз"
msgid "labels.start"
msgstr "Початок"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Статус"
@@ -2501,11 +2499,11 @@ msgstr "Учасник команди"
msgid "labels.themes"
msgstr "Теми"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Посібники"
-#: src/app/main/data/workspace/tokens/errors.cljs:93
+#: src/app/main/data/workspace/tokens/errors.cljs:101
msgid "labels.unknown-error"
msgstr "Невідома помилка"
@@ -2537,15 +2535,15 @@ msgstr "Вивантажити користувацькі шрифти"
msgid "labels.uploading"
msgstr "Вивантажую…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "Лише для перегляду"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Глядач"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Вебхуки"
@@ -2553,11 +2551,11 @@ msgstr "Вебхуки"
msgid "labels.write-new-comment"
msgstr "Написати новий коментар"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(Ви)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "Ваш обліковий запис"
@@ -2654,23 +2652,23 @@ msgstr ""
msgid "loader.tips.10.title"
msgstr "Підтримка плагінів"
-#: src/app/main/ui/workspace/colorpicker.cljs:449, src/app/main/ui/workspace/colorpicker.cljs:450, src/app/main/ui/workspace/colorpicker.cljs:452
+#: src/app/main/ui/workspace/colorpicker.cljs:486, src/app/main/ui/workspace/colorpicker.cljs:487, src/app/main/ui/workspace/colorpicker.cljs:489
msgid "media.choose-image"
msgstr "Обрати зображення"
-#: src/app/main/ui/workspace/colorpicker.cljs:244
+#: src/app/main/ui/workspace/colorpicker.cljs:256
msgid "media.gradient"
msgstr "Градієнт"
-#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:44, src/app/main/ui/ds/utilities/swatch.cljs:57, src/app/main/ui/inspect/attributes/common.cljs:63, src/app/main/ui/workspace/colorpicker.cljs:246, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:251
+#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:45, src/app/main/ui/ds/utilities/swatch.cljs:58, src/app/main/ui/inspect/attributes/common.cljs:44, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:65, src/app/main/ui/workspace/colorpicker.cljs:258, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:395
msgid "media.image"
msgstr "Зображення"
-#: src/app/main/ui/inspect/attributes/common.cljs:74
+#: src/app/main/ui/inspect/attributes/common.cljs:55
msgid "media.image.short"
msgstr ".img"
-#: src/app/main/ui/workspace/colorpicker.cljs:442
+#: src/app/main/ui/workspace/colorpicker.cljs:479
msgid "media.keep-aspect-ratio"
msgstr "Зберігати співвідношення сторін"
@@ -2688,7 +2686,7 @@ msgstr "Завантаження зображення…"
msgid "media.radial"
msgstr "Круговий"
-#: src/app/main/ui/workspace/colorpicker.cljs:242
+#: src/app/main/ui/workspace/colorpicker.cljs:254
msgid "media.solid"
msgstr "Суцільний"
@@ -2763,19 +2761,19 @@ msgstr "Створити токен"
msgid "modals.create-access-token.title"
msgstr "Згенерувати токен доступу"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "Створити вебхук"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "Створити вебхук"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "Посилання на Payload"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://savelife.in.ua/en"
@@ -2821,11 +2819,11 @@ msgstr ""
msgid "modals.delete-comment-thread.title"
msgstr "Видалити бесіду"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "Ви впевнені, що хочете видалити цю анотацію?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "Видалити анотацію"
@@ -2873,11 +2871,11 @@ msgstr ""
msgid "modals.delete-font.title"
msgstr "Видалення шрифта"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Ви впевнені, що хочете видалити цю сторінку?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Видалити сторінку"
@@ -2928,29 +2926,29 @@ msgstr[0] "Видалення файлу"
msgstr[1] "Видалення файлів"
msgstr[2] "Видалення файлів"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Видалити команду"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Ви впевнені, що хочете видалити цю команду? Всі проєкти та файли, які "
"прив'язані до команди, будуть назавжди видалені."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Видалення команди"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Видалити учасника"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Ви впевнені, що хочете видалити цього учасника з команди?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Видалити учасника команди"
@@ -2967,55 +2965,55 @@ msgstr[2] ""
"Ресурси, які вже були використані в цих файлах, залишаться там (дизайн не "
"буде порушено)."
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "Видалити вебхук"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "Ви впевнені, що хочете видалити цей вебхук?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "Видалення вебхуку"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "Змінити вебхук"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "Змінити вебхук"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Надіслати запрошення"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "Електроні адреси, розділені комами"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr "Деякі учасники вже запрошені, ми запросимо решту."
-#: src/app/main/ui/dashboard/team.cljs:220
+#: src/app/main/ui/dashboard/team.cljs:222
msgid "modals.invite-team-member.text"
msgstr ""
"Ви можете запросити учасників до команди для того щоб вони мали доступ до "
"цього та інших файлів команди."
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "Запросити учасників до команди"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"Так як Ви єдиний учасником цієї команди, її буде видалено разом з проєктами "
"та файлами команди."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "Ви впевнені, що хочете покинути команду \"%s\"?"
@@ -3043,15 +3041,15 @@ msgstr "Виберіть учасника для підвищення"
msgid "modals.leave-and-reassign.title"
msgstr "Перед тим як ви покинете"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Покинути команду"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Ви впевнені, що хочете покинути цю команду?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Покидання команди"
@@ -3076,39 +3074,39 @@ msgstr[0] "Перемістити бібліотеку"
msgstr[1] "Перемістити бібліотеки"
msgstr[2] "Перемістити бібліотеки"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "Розмір зсуву"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Передати права власності"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"Якщо Ви передасте права власності, Ви зміните свою роль на Admin, втративши "
"деякі повноваження над цією командою. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr ""
"Ви поточний власник цієї команди. Ви впевнені, що хочете призначити %s "
"новим власником цієї команди?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Новий власник команди"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "Опублікувати"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "Ваша бібліотека порожня. Ви впевнені, що хочете опублікувати її?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "Опублікувати пусту бібліотеку"
@@ -3166,21 +3164,21 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Оновити компоненти в спільній бібліотеці"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Оновити"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Скасувати"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"Ви збираєтесь оновити компонент у спільній бібліотеці. Це вплине також на "
"файли, які її використовують."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Оновити компонент спільної бібліотеки"
@@ -3294,11 +3292,11 @@ msgstr ""
msgid "notifications.by-code.upgrade-version"
msgstr "Нова версія доступна, будь ласка, оновіть сторінку"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "Запрощення успішно надіслано"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "Посилання на запрошення скопійовано"
@@ -3450,7 +3448,7 @@ msgstr ""
"Не забувайте долучати всіх-всіх. Розробників, дизайнерів, менеджерів... та "
"будь-кого іншого :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "Запросити у якості:"
@@ -3670,193 +3668,193 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "Повернутись на сторінку входу"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "Від'єднати"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "Змішаний"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:283
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:423
msgid "settings.remove-color"
msgstr "Видалити колір"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:288
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:428
msgid "settings.select-this-color"
msgstr "Оберіть елементи, використовуючи цей стиль"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Основи"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "Панель управління"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Глядач"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Робоче поле"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Вирівнювання"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Редагувати"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "Загальні"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "Загальні"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Головне меню"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "Модифікувати шар"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Навігація"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Навігація"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Навігація"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Панелі"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Контури"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Форми"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "Тексти"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Інструменти"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Масштабування"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Масштабування"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Коментарі"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "Додати вузол"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "Вирівняти по низу"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "Вирівняти по центру"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "Вирівняти по центру горизонтально"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "Вирівняти по ширині"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "Вирівняти по лівому краю"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "Вирівняти по правому краю"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "Вирівняти по верху"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "Вирівняти по центру вертикально"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "Створити дошку з вибраного"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "Виділити жирним шрифтом"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "Булева різниця"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "Логічне виключення"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "Булева інтерсекція"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "Булеве об'єднання"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "Відсунути на задній план"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Посунути нижче"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "Посунути вище"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "Відсунути на передній план"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "Скасувати відміну"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Скопіювати"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
msgid "shortcuts.copy-link"
msgstr "Скопіювати посилання у буфер"
@@ -3865,287 +3863,271 @@ msgstr "Скопіювати посилання у буфер"
msgid "shortcuts.copy-props"
msgstr "Копіювати параметри"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "Створити новий"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Вирізати"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "Зменшити"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Видалити"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "Видалити вузол"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "Від'єднати компонент"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Крива"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "Еліпс"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "Рамка"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "Намалювати шлях"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Контур"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Прямокутник"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Текст"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Дублікат"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "Відмінити"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "Експортувати фігури"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "Збільшити, щоб вмістити все"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "Перевернути горизонтально"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "Перевернути вертикально"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "Зменшити розмір шрифту на 1"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "Збільшити розмір шрифту на 1"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "Відвідати чернетки"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "Відвідати спільні бібліотеки"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Пошук"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Група"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "Розподілити горизонтально"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "Показати/приховати інтерфейс"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "Збільшити"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "Вставити зображення"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "Виділити курсивом"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "Приєднати вузли"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
-msgid "shortcuts.letter-spacing-dec"
-msgstr "Зменшити відступ між літерами на 1"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "Збільшити відступ між літерами на 1"
-
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
-msgid "shortcuts.line-height-dec"
-msgstr "Зменшити висоту лінії на 1"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
-msgid "shortcuts.line-height-inc"
-msgstr "Збільшити висоту лінії на 1"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.line-through"
msgstr "Перемкнути рядок через"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "Створити кут"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "Створити криву"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "Маска"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "Об'єднання вузлів"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "Перемістити"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "Швидко перемістити униз"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "Швидко перемістити ліворуч"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "Швидко перемістити праворуч"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "Швидко перемістити вгору"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "Перемістити вузол"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "Перемістити вниз"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "Перемістити ліворуч"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "Перемістити праворуч"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "Перемістити вгору"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "Наступна дошка"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "Скорочень не знайдено"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "Непрозорість на 100%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "Непрозорість на 10%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "Непрозорість на 20%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "Непрозорість на 30%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "Непрозорість на 40%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "Непрозорість на 50%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "Непрозорість на 60%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "Непрозорість на 70%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "Непрозорість на 80%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "Непрозорість на 90%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "Підбір кольору"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "Перейти до коментарів глядача"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "Перейти до панелі керування"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "Перейти до інспекції глядача"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "Перейти до взаємодій глядача"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "Перейти до взаємодій глядача"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "Перейти до робочого простору"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " або "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Вставити"
@@ -4159,191 +4141,191 @@ msgstr "Вставити параметри"
msgid "shortcuts.plugins"
msgstr "Менеджер плагінів"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "Попередня дошка"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "Повернути внесені зміни"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
msgid "shortcuts.rename"
msgstr "Перейменувати"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "Скинути збільшення"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
msgid "shortcuts.scale"
msgstr "Масштабувати"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "Пошук скорочень"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "Обрати все"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
msgid "shortcuts.select-next"
msgstr "Обрати наступний шар"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
msgid "shortcuts.select-parent-layer"
msgstr "Обрати батьківський шар"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
msgid "shortcuts.select-prev"
msgstr "Обрати попередній шар"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "Відокремити вузли"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "Показати / приховати піксельну сітку"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "Показати / приховати скорочення"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "Прив'язати до вузлів"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "Прив'язати до піскельної сітки"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "Почати редагування"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "Почати вимірювання"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "Припинити вимірювання"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "Вставити мініатюри"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "Клавіатурні скорочення"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "Перемкнути динамічне вирівнювання"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "Обрати ресурси"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "Обрати палітру кольорів"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "Обрати режим фокусування"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "Перейти в повноекраний режим"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
msgid "shortcuts.toggle-guides"
msgstr "Показати/приховати орієнтири"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "Обрати історію"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "Обрати шари"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "Додати / вилучити гнучкий макет"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
msgid "shortcuts.toggle-layout-grid"
msgstr "Додати / вилучити макет сітки"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "Блокувати / розблокувати"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "Заблокувати пропорції"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
msgid "shortcuts.toggle-rulers"
msgstr "Показати / приховати лінійки"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
msgid "shortcuts.toggle-snap-guides"
msgstr "Прив'язувати до орієнтирів"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
msgid "shortcuts.toggle-snap-ruler-guide"
msgstr "Прив'язувати до орієнтирів лінійок"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "Обрати палітру тексту"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
msgid "shortcuts.toggle-theme"
msgstr "Змінити тему"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "Показати / приховати"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "Обрати стиль збільшення"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "Обрати нижнє підкреслення"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Скасувати попередню дію"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Розбити групу"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Зняти маску"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "Розподілити вертикально"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "Зменшити об'єктив лінзи"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "Збільшити об'єктив лінзи"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "Збільшити до обраного"
@@ -4404,7 +4386,7 @@ msgstr "Ваша підписка:"
msgid "subscription.dashboard.team-plan"
msgstr "План команди"
-#: src/app/main/ui/dashboard/sidebar.cljs:858
+#: src/app/main/ui/dashboard/sidebar.cljs:978
msgid "subscription.dashboard.upgrade-plan.power-up"
msgstr "Підсилити"
@@ -4538,7 +4520,7 @@ msgstr "Безлімітний (пробний)"
msgid "subscription.settings.unlimited.bill"
msgstr "Місячний рахунок з граничною сумою"
-#: src/app/main/ui/dashboard/subscription.cljs:147, src/app/main/ui/workspace/main_menu.cljs:933
+#: src/app/main/ui/dashboard/subscription.cljs:147, src/app/main/ui/workspace/main_menu.cljs:961
msgid "subscription.workspace.header.menu.option.power-up"
msgstr "Підсильте Ваш план"
@@ -4594,19 +4576,19 @@ msgstr "Пароль - Penpot"
msgid "title.settings.profile"
msgstr "Профіль - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "Запрошення - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "Учасники - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Налаштування - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "Вебхуки - %s - Penpot"
@@ -4678,43 +4660,43 @@ msgstr "Показати взаємодії при натискані"
msgid "viewer.header.sitemap"
msgstr "Мапа сайту"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "Остання доставка була успішною."
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Вирівняти по центру горизонтально (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "Розподілити горизонтальні проміжки (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Вирівняти по лівому краю (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Вирівняти по правому краю (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Вирівняти по низу (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Вирівняти по центру вертикально (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "Розподілити вертикальні проміжки (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Вирівняти по верху (%s)"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:163
+#: src/app/main/ui/workspace/sidebar/assets.cljs:172
msgid "workspace.assets.add-library"
msgstr "Додати бібліотеку"
@@ -4723,19 +4705,19 @@ msgstr "Додати бібліотеку"
msgid "workspace.assets.assets"
msgstr "Ресурси"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "Усі ресурси"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Кольори"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:493
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:497
msgid "workspace.assets.colors.add-color"
msgstr "Додати колір"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Компоненти"
@@ -4743,23 +4725,23 @@ msgstr "Компоненти"
msgid "workspace.assets.components.add-component"
msgstr "Додати компонент"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:176, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:535
+#: src/app/main/ui/workspace/sidebar/assets/components.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:547
msgid "workspace.assets.components.num-variants"
msgstr "%s Варіантів"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "Створити групу"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr "Ваші елементи будуть автоматично названі як \"назва групи / назва елемента\""
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "Видалити"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "Створити дуплікат"
@@ -4767,11 +4749,11 @@ msgstr "Створити дуплікат"
msgid "workspace.assets.duplicate-main"
msgstr "Дублювати головний"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Редагувати"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:177
+#: src/app/main/ui/workspace/sidebar/assets.cljs:186
msgid "workspace.assets.filter"
msgstr "Фільтрувати"
@@ -4780,27 +4762,27 @@ msgstr "Фільтрувати"
msgid "workspace.assets.graphics"
msgstr "Графіка"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:576
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:190, src/app/main/ui/workspace/sidebar/assets/components.cljs:576
msgid "workspace.assets.grid-view"
msgstr "Перегляд сіткою"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Група"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "Ім'я групи"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:572
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:191, src/app/main/ui/workspace/sidebar/assets/components.cljs:572
msgid "workspace.assets.list-view"
msgstr "Перегляд списком"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "локальна бібліотека"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:168
+#: src/app/main/ui/workspace/sidebar/assets.cljs:177
msgid "workspace.assets.manage-library"
msgstr "Керувати бібліотекою"
@@ -4812,15 +4794,15 @@ msgstr "Не було знайдено ресурсів"
msgid "workspace.assets.open-library"
msgstr "Відкрити файл бібліотеки"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Перейменувати"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "Перейменувати групу"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "Пошук ресурсів"
@@ -4837,22 +4819,22 @@ msgstr[2] "%s елементів обрано"
msgid "workspace.assets.shared-library"
msgstr "Спільна бібліотека"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:237
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:235
msgid "workspace.assets.sidebar.components"
msgid_plural "workspace.assets.sidebar.components"
msgstr[0] "%s компонент"
msgstr[1] "%s компоненти"
msgstr[2] "%s компонентів"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:193
+#: src/app/main/ui/workspace/sidebar/assets.cljs:204
msgid "workspace.assets.sort"
msgstr "Сортувати"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Типографіка"
-#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:404
+#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:405
msgid "workspace.assets.typography.add-typography"
msgstr "Додати типографіку"
@@ -4877,7 +4859,7 @@ msgstr "Міжлітеральний відступ"
msgid "workspace.assets.typography.line-height"
msgstr "Висота лінії"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Аа"
@@ -4889,59 +4871,59 @@ msgstr "Стилі тексту"
msgid "workspace.assets.typography.text-transform"
msgstr "Перетворення тексту"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "Розгрупувати"
-#: src/app/main/ui/workspace/context_menu.cljs:791
+#: src/app/main/ui/workspace/context_menu.cljs:794
msgid "workspace.context-menu.grid-cells.area"
msgstr "Створити ділянку"
-#: src/app/main/ui/workspace/context_menu.cljs:794
+#: src/app/main/ui/workspace/context_menu.cljs:797
msgid "workspace.context-menu.grid-cells.create-board"
msgstr "Створити дошку"
-#: src/app/main/ui/workspace/context_menu.cljs:786
+#: src/app/main/ui/workspace/context_menu.cljs:789
msgid "workspace.context-menu.grid-cells.merge"
msgstr "Об'єднати клітинки"
-#: src/app/main/ui/workspace/context_menu.cljs:749
+#: src/app/main/ui/workspace/context_menu.cljs:752
msgid "workspace.context-menu.grid-track.column.add-after"
msgstr "Додати 1 стовпець праворуч"
-#: src/app/main/ui/workspace/context_menu.cljs:748
+#: src/app/main/ui/workspace/context_menu.cljs:751
msgid "workspace.context-menu.grid-track.column.add-before"
msgstr "Додати 1 стовпець ліворуч"
-#: src/app/main/ui/workspace/context_menu.cljs:750
+#: src/app/main/ui/workspace/context_menu.cljs:753
msgid "workspace.context-menu.grid-track.column.delete"
msgstr "Видалити стовпець"
-#: src/app/main/ui/workspace/context_menu.cljs:751
+#: src/app/main/ui/workspace/context_menu.cljs:754
msgid "workspace.context-menu.grid-track.column.delete-shapes"
msgstr "Видалити стовпець та фігури"
-#: src/app/main/ui/workspace/context_menu.cljs:747
+#: src/app/main/ui/workspace/context_menu.cljs:750
msgid "workspace.context-menu.grid-track.column.duplicate"
msgstr "Дублювати стовпець"
-#: src/app/main/ui/workspace/context_menu.cljs:756
+#: src/app/main/ui/workspace/context_menu.cljs:759
msgid "workspace.context-menu.grid-track.row.add-after"
msgstr "Додати 1 рядок знизу"
-#: src/app/main/ui/workspace/context_menu.cljs:755
+#: src/app/main/ui/workspace/context_menu.cljs:758
msgid "workspace.context-menu.grid-track.row.add-before"
msgstr "Додати 1 рядок вгорі"
-#: src/app/main/ui/workspace/context_menu.cljs:757
+#: src/app/main/ui/workspace/context_menu.cljs:760
msgid "workspace.context-menu.grid-track.row.delete"
msgstr "Видалити рядок"
-#: src/app/main/ui/workspace/context_menu.cljs:758
+#: src/app/main/ui/workspace/context_menu.cljs:761
msgid "workspace.context-menu.grid-track.row.delete-shapes"
msgstr "Видалити рядок та фігури"
-#: src/app/main/ui/workspace/context_menu.cljs:754
+#: src/app/main/ui/workspace/context_menu.cljs:757
msgid "workspace.context-menu.grid-track.row.duplicate"
msgstr "Дублювати рядок"
@@ -4949,7 +4931,7 @@ msgstr "Дублювати рядок"
msgid "workspace.focus.focus-mode"
msgstr "Режим фокусування"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "Розфокосувати"
@@ -4969,11 +4951,11 @@ msgstr "Лінійний градієнт"
msgid "workspace.gradients.radial"
msgstr "Радіальний градієнт"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "Вимкнути динамічне вирівнювання"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "Вимкнути пропорційне масштабування"
@@ -4982,23 +4964,23 @@ msgstr "Вимкнути пропорційне масштабування"
msgid "workspace.header.menu.disable-scale-text"
msgstr "Вимкнути масштабування тексту"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "Деактивувати прив'язку до орієнтирів"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "Вимкнути прив'язку до пікселів"
-#: src/app/main/ui/workspace/main_menu.cljs:215
+#: src/app/main/ui/workspace/main_menu.cljs:243
msgid "workspace.header.menu.disable-snap-ruler-guides"
msgstr "Деактивувати прив'язку до орієнтирів лінійок"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "Увімкнути динамічне вирівнювання"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "Увімкнути пропорційне масштабування"
@@ -5007,51 +4989,51 @@ msgstr "Увімкнути пропорційне масштабування"
msgid "workspace.header.menu.enable-scale-text"
msgstr "Увімкнути масштабування тексту"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "Прив'язати до орієнтирів"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "Увімкнути прив'язку до пікселів"
-#: src/app/main/ui/workspace/main_menu.cljs:216
+#: src/app/main/ui/workspace/main_menu.cljs:244
msgid "workspace.header.menu.enable-snap-ruler-guides"
msgstr "Прив'язати до орієнтирів лінійок"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "Приховати імена дошок"
-#: src/app/main/ui/workspace/main_menu.cljs:348
+#: src/app/main/ui/workspace/main_menu.cljs:376
msgid "workspace.header.menu.hide-guides"
msgstr "Приховати орієнтири"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "Приховати палітру кольорів"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "Приховати піксельну сітку"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "Приховати лінійки"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "Приховати палітру шрифтів"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Редагувати"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "Файл"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "Допомога та інформація"
@@ -5060,63 +5042,63 @@ msgstr "Допомога та інформація"
msgid "workspace.header.menu.option.power-up"
msgstr "Підсилити свій план"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "Налаштування"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "Вигляд"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "Повернутись до внесених змін"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "Обрати все"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "Показати імена дошок"
-#: src/app/main/ui/workspace/main_menu.cljs:349
+#: src/app/main/ui/workspace/main_menu.cljs:377
msgid "workspace.header.menu.show-guides"
msgstr "Показати орієнтири"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "Показати палітру кольорів"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "Показати піксельну сітку"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Показати лінійки"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "Показати палітру шрифтів"
-#: src/app/main/ui/workspace/main_menu.cljs:288
+#: src/app/main/ui/workspace/main_menu.cljs:316
msgid "workspace.header.menu.toggle-dark-theme"
msgstr "Перемкнутись на темну тему"
-#: src/app/main/ui/workspace/main_menu.cljs:286, src/app/main/ui/workspace/main_menu.cljs:289
+#: src/app/main/ui/workspace/main_menu.cljs:314, src/app/main/ui/workspace/main_menu.cljs:317
msgid "workspace.header.menu.toggle-light-theme"
msgstr "Перемкнутись на світлу тему"
-#: src/app/main/ui/workspace/main_menu.cljs:287
+#: src/app/main/ui/workspace/main_menu.cljs:315
msgid "workspace.header.menu.toggle-system-theme"
msgstr "Перемкнутись на тему системи"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "Відхилити зміни"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Скинути"
@@ -5132,7 +5114,7 @@ msgstr "Збережено"
msgid "workspace.header.saving"
msgstr "Збереження"
-#: src/app/main/ui/workspace/right_header.cljs:239
+#: src/app/main/ui/workspace/right_header.cljs:240
msgid "workspace.header.share"
msgstr "Поділитись"
@@ -5141,11 +5123,11 @@ msgstr "Поділитись"
msgid "workspace.header.unsaved"
msgstr "Незбережені зміни"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "Режим перегляду (%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "Збільшення"
@@ -5157,7 +5139,7 @@ msgstr "Заповнення - розширити щоб заповнити"
msgid "workspace.header.zoom-fit"
msgstr "Fit - зменшити масштаб до потрібного розміру"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "Збільшити щоб вмістити все"
@@ -5165,43 +5147,43 @@ msgstr "Збільшити щоб вмістити все"
msgid "workspace.header.zoom-full-screen"
msgstr "Повноекранний"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "Наблизити до виділеного"
-#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:621
msgid "workspace.layout_grid.editor.options.edit-grid"
msgstr "Редагувати сітку"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1300
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1301
msgid "workspace.layout_grid.editor.options.exit"
msgstr "Вихід"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:429, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:435
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:430, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:436
msgid "workspace.layout_grid.editor.padding.bottom"
msgstr "Нижній внутрішній відступ"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:491
msgid "workspace.layout_grid.editor.padding.expand"
msgstr "Показати параметри 4-стороннього внутрішнього відступу"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:354, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:355, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:362
msgid "workspace.layout_grid.editor.padding.horizontal"
msgstr "Горизонтальний внутрішній відступ"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:444, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:450
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:451
msgid "workspace.layout_grid.editor.padding.left"
msgstr "Лівий внутрішній відступ"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:414, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:420
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:421
msgid "workspace.layout_grid.editor.padding.right"
msgstr "Правий внутрішній відступ"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:406
msgid "workspace.layout_grid.editor.padding.top"
msgstr "Верхній внутрішній відступ"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:340, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:341, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:347
msgid "workspace.layout_grid.editor.padding.vertical"
msgstr "Вертикальний внутрішній відступ"
@@ -5217,7 +5199,7 @@ msgstr "Все"
msgid "workspace.layout_grid.editor.top-bar.locate"
msgstr "Розмістити"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1326
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1327
msgid "workspace.layout_grid.editor.top-bar.locate.tooltip"
msgstr "Розмістити макет сітки"
@@ -5226,10 +5208,6 @@ msgstr "Розмістити макет сітки"
msgid "workspace.libraries.add"
msgstr "Додати"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s кольорів"
-
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
msgstr "У вашій бібліотеці, поки що, немає стилів кольорів"
@@ -5256,43 +5234,35 @@ msgstr "Попередні кольори"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "Додатковий RGB"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Зберегти стиль кольору"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s компонентів"
-
-#: src/app/main/ui/workspace/libraries.cljs:371
+#: src/app/main/ui/workspace/libraries.cljs:404
msgid "workspace.libraries.empty.add-some"
msgstr "Або додайте кілька з них, щоб спробувати:"
-#: src/app/main/ui/workspace/libraries.cljs:365
+#: src/app/main/ui/workspace/libraries.cljs:398
msgid "workspace.libraries.empty.no-libraries"
msgstr "У команді немає Спільних Бібліотек"
-#: src/app/main/ui/workspace/libraries.cljs:369
+#: src/app/main/ui/workspace/libraries.cljs:402
msgid "workspace.libraries.empty.some-templates"
msgstr "деякі шаблони тут"
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Бібліотека файлів"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s графіків"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "БІБЛІОТЕКИ В ЦЬОМУ ФАЙЛІ"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "БІБЛІОТЕКИ"
@@ -5301,11 +5271,11 @@ msgstr "БІБЛІОТЕКИ"
msgid "workspace.libraries.library"
msgstr "БІБЛІОТЕКА"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "ОНОВЛЕННЯ БІБЛІОТЕКИ"
-#: src/app/main/ui/workspace/libraries.cljs:360
+#: src/app/main/ui/workspace/libraries.cljs:393
msgid "workspace.libraries.loading"
msgstr "Завантаження…"
@@ -5314,51 +5284,47 @@ msgstr "Завантаження…"
msgid "workspace.libraries.more-templates"
msgstr "Ви можете шукати "
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "Тут ще немає спільних бібліотек, які потребують оновлення"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "Не знайдено збігів для \"%s\""
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "Пошук спільних бібліотек"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "СПІЛЬНІ БІБЛІОТЕКИ"
-#: src/app/main/ui/workspace/libraries.cljs:352
+#: src/app/main/ui/workspace/libraries.cljs:385
msgid "workspace.libraries.shared-library-btn"
msgstr "Під'єднати бібліотеку"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Кілька типографік"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Від'язати усі типографіки"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s типографік"
-
-#: src/app/main/ui/workspace/libraries.cljs:323
+#: src/app/main/ui/workspace/libraries.cljs:354
msgid "workspace.libraries.unlink-library-btn"
msgstr "Від'єднати бібліотеку"
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "Оновити"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "побачити усі зміни"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "ОНОВЛЕННЯ"
@@ -5366,31 +5332,31 @@ msgstr "ОНОВЛЕННЯ"
msgid "workspace.notification-pill.detail"
msgstr "Деталі"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "Натисни на + щоб додати взаємодії."
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:96
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:97
msgid "workspace.options.blur-options.add-blur"
msgstr "Додати розмиття"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:117
+#: 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/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Розмиття"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "Групове розмиття"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "Вибіркове розмиття"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:114
msgid "workspace.options.blur-options.toggle-blur"
msgstr "Перемикання розмивання"
@@ -5398,105 +5364,105 @@ msgstr "Перемикання розмивання"
msgid "workspace.options.canvas-background"
msgstr "Фон полотна"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "Зміст кліпу"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Компонент"
-#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:193
+#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:196
msgid "workspace.options.component.annotation"
msgstr "Анотація"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "Копія"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:185
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:188
msgid "workspace.options.component.create-annotation"
msgstr "Створіть анотацію"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "Редагуйте анотацію"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "Головний"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:706
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:721
msgid "workspace.options.component.swap"
msgstr "Замінити компонент"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:765
msgid "workspace.options.component.swap.empty"
msgstr "У цій бібліотеці немає ресурсів"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:973
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:993
msgid "workspace.options.component.unlinked"
msgstr "Розʼєднано"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:512
msgid "workspace.options.component.variant.duplicated.copy.locate"
msgstr "До головного компонента"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:496
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:509
msgid "workspace.options.component.variant.duplicated.copy.title"
msgstr ""
"Цей компонент має версії, що конфліктують. Впевніться, що кожна варіація "
"має унікальний набір значень властивостей."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1246
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1281
msgid "workspace.options.component.variant.duplicated.group.locate"
msgstr "Розташувати дубльовані варіанти"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1243
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1278
msgid "workspace.options.component.variant.duplicated.group.title"
msgstr "Деякі варіанти мають однакові властивості та значення"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:267
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:268
msgid "workspace.options.component.variant.duplicated.single.all"
msgstr "Ці варіанти мають однакові властивості та значення."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:264
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:265
msgid "workspace.options.component.variant.duplicated.single.one"
msgstr "Цей варіант має значення та властивості, які належать і до іншого."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:270
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:271
msgid "workspace.options.component.variant.duplicated.single.some"
msgstr "Деякі з цих варіантів мають однакові значення і властивості."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1236
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1271
msgid "workspace.options.component.variant.malformed.group.locate"
msgstr "Визначити помилкові варіанти"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1233
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1268
msgid "workspace.options.component.variant.malformed.group.title"
msgstr "Деякі варіанти мають помилкові імена"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:252
msgid "workspace.options.component.variant.malformed.single.all"
msgstr "Ці варіанти мають помилкові імена."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:247
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:249
msgid "workspace.options.component.variant.malformed.single.one"
msgstr "Цей варіант має помилкове імʼя."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:253
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:255
msgid "workspace.options.component.variant.malformed.single.some"
msgstr "Деякі з цих варіантів мають помилкові імена."
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:390
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:391
msgid "workspace.options.component.variant.malformed.structure.example"
msgstr "[property] = [value], [property] = [value]"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:389
msgid "workspace.options.component.variant.malformed.structure.title"
msgstr "Спробуйте використати таку структуру:"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:935, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1157, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:47
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:955, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1191, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:47
msgid "workspace.options.component.variants-help-modal.title"
msgstr "Як варіанти лишаються зʼєднаними"
@@ -5540,7 +5506,7 @@ msgstr "По верху"
msgid "workspace.options.constraints.topbottom"
msgstr "По верху та низу"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Дизайн"
@@ -5553,22 +5519,22 @@ msgstr "Експортувати"
msgid "workspace.options.export-multiple"
msgstr "Експортувати обране"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "Експортувати %s елемент"
msgstr[1] "Експортувати %s елементи"
msgstr[2] "Експортувати %s елементів"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:188
+#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:214
msgid "workspace.options.export.add-export"
msgstr "Додати експортування"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:235
+#: 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/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "Суфікс"
@@ -5576,7 +5542,7 @@ msgstr "Суфікс"
msgid "workspace.options.exporting-complete"
msgstr "Експортування завершено"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "Експортую…"
@@ -5588,27 +5554,27 @@ msgstr "Не вдалось експортувати"
msgid "workspace.options.exporting-object-slow"
msgstr "Експортування відбувається неочікувано повільно"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Заповнити"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:194
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:234
msgid "workspace.options.fill.add-fill"
msgstr "Додати заливку"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:208
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:248
msgid "workspace.options.fill.remove-fill"
msgstr "Видалити заливку"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:392
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:474
msgid "workspace.options.fit-content"
msgstr "Змінити розмір щоб заповнити"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "Додати початок потоку"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:178
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:179
msgid "workspace.options.flows.flow"
msgstr "Потік"
@@ -5617,19 +5583,19 @@ msgstr "Потік"
msgid "workspace.options.flows.flow-start"
msgstr "Початок потоку"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "Початки потоку"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:155
msgid "workspace.options.flows.remove-flow"
msgstr "Видалити потік"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Автоматично"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "Стовпці"
@@ -5638,7 +5604,7 @@ msgstr "Стовпці"
msgid "workspace.options.grid.grid-title"
msgstr "Сітка"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Колір"
@@ -5647,15 +5613,15 @@ msgstr "Колір"
msgid "workspace.options.grid.params.columns"
msgstr "Стопвці"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "Проміжок"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Висота"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Зовнішній відступ"
@@ -5664,7 +5630,7 @@ msgstr "Зовнішній відступ"
msgid "workspace.options.grid.params.rows"
msgstr "Рядки"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "Встановити за вмовчанням"
@@ -5678,159 +5644,159 @@ msgstr "Розмір"
msgid "workspace.options.grid.params.type"
msgstr "Тип"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "Низ"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "По центру"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Ліво"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Право"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "Розтягування"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "По верху"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "Використовувати вмовчання"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Ширина"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Рядки"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "Квадратна"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Заповнити групу"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Рамка групи"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:326
msgid "workspace.options.guides.add-guide"
msgstr "Додати орієнтир"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:187
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:188
msgid "workspace.options.guides.remove-guide"
msgstr "Видалити орієнтир"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:320
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
msgid "workspace.options.guides.title"
msgstr "Орієнтири"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:183
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:184
msgid "workspace.options.guides.toggle-guide"
msgstr "Перемкнути орієнтир"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "Висота"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "Дослідити"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "Дія"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "Після затримки"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "Анімація"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "Розчинення"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "Жоден"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "Штовхати"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "Ковзати"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "автоматично"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "Додати накладання фону"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "Закрити при натискані за межами"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "Закрити накладення"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "Закрити накладення: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "Затримка"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "Розташування"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "Тривалість"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "Плавний перехід"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "Плавно переходити"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "Плавно переходити всередину"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "Плавна поява та зникнення"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "Плавне зникнення"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "Лінійний"
@@ -5839,47 +5805,47 @@ msgstr "Лінійний"
msgid "workspace.options.interaction-in"
msgstr "В"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "Вхід миші"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "Вихід миші"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "мс"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "Перейти до"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "Перейти до: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(не вказано)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "Ефект зсуву"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "При натисканні"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "Відкрити накладення"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "Вікрити накладення: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "Відкрити посилання"
@@ -5888,87 +5854,87 @@ msgstr "Відкрити посилання"
msgid "workspace.options.interaction-out"
msgstr "З"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "Внизу по центру"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "Внизу ліворуч"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "Внизу праворуч"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "Центр"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "Ручний"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "Зверху по центру"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "Зверху ліворуч"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "Зверху праворуч"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "Позиція"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "Зберегти позицію прокрутки"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "Попередній екран"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "Відносно"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "себе"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "Перемкнути накладення"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "Перемкнути накладення: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "Подразник"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "Посилання"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "Під час наведення"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "Під час натискання"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "Взаємодії"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:735
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:736
msgid "workspace.options.interactions.add-interaction"
msgstr "Додати взаємодію"
@@ -5977,67 +5943,67 @@ msgstr "Додати взаємодію"
msgid "workspace.options.interactions.remove-interaction"
msgstr "Видалити взаємодію"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "Колір"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "Вигорання кольору"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "Освітлення кольором"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "Потемніння"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "Різниця"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "Виключення"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Жорстке світло"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Відтінок"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Світліше"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "Сяяння"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "Множення"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "Нормальний"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "Накладення"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "Насиченість"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Екран"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "М'яке світло"
@@ -6056,7 +6022,7 @@ msgstr "Згрупувати шари"
msgid "workspace.options.layer-options.title.multiple"
msgstr "Обрані шари"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:202
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:207, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:213
msgid "workspace.options.layer-options.toggle-layer"
msgstr "Перемкнути видимість шару"
@@ -6065,19 +6031,19 @@ msgstr "Перемкнути видимість шару"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "Додаткові параметри"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "Макс. Висота"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "Макс. Ширина"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "Мін.Висота"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "Мін.Ширина"
@@ -6191,15 +6157,15 @@ msgstr "простір між"
msgid "workspace.options.layout.top"
msgstr "Згори"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "Більше кольорів"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "Більше кольорів бібліотеки"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "Непрозорість"
@@ -6208,35 +6174,35 @@ msgstr "Непрозорість"
msgid "workspace.options.position"
msgstr "Розташування"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "Прототип"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "Радіус"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "Нижнього лівого кута"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "Нижнього правого кута"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "Верхнього лівого"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "Верхнього правого"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:152
msgid "workspace.options.radius.hide-all-corners"
msgstr "Згорнути незалежні радіуси"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:136
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:153
msgid "workspace.options.radius.show-single-corners"
msgstr "Показати незалежні радіуси кутів"
@@ -6248,7 +6214,7 @@ msgstr "Нещодавній"
msgid "workspace.options.retry"
msgstr "Спробувати ще раз"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "Обернення"
@@ -6256,31 +6222,31 @@ msgstr "Обернення"
msgid "workspace.options.search-font"
msgstr "Пошук шрифту"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr "Оберіть фігуру, дошку чи групу щоб перетягнути з'єднання до іншої дошки."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "Обрані кольори"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "Заливка обраного"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "Обведення виділення"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:341
msgid "workspace.options.shadow-options.add-shadow"
msgstr "Додати тінь"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "Розм."
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "Колір тіні"
@@ -6292,63 +6258,64 @@ msgstr "Падаюча тінь"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "Внутрішня тінь"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "Вісь X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Вісь Y"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:348
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:183, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:354
msgid "workspace.options.shadow-options.remove-shadow"
msgstr "Видалити тінь"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "розмір"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "Тінь"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "Групова тінь"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "Тінь виділеного"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:174
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:179
msgid "workspace.options.shadow-options.toggle-shadow"
msgstr "Перемкнути тінь"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "Показати в експортованому"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "Показати у режимі перегляду"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "Розмір"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "Шаблони розміру"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:534
msgid "workspace.options.size.lock"
msgstr "Зафіксувати співвідношення"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:534
msgid "workspace.options.size.unlock"
msgstr "Зняти фіксацію співвідношення"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "Обведення"
@@ -6357,7 +6324,7 @@ msgstr "Обведення"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "Маркер кола"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "Коло"
@@ -6366,7 +6333,7 @@ msgstr "Коло"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "Ромбоподібний маркер"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "Ромб"
@@ -6375,19 +6342,19 @@ msgstr "Ромб"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "Лінійна стрілка"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "Стрілка"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "Жодний"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "Округле"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "Квадратне"
@@ -6396,7 +6363,7 @@ msgstr "Квадратне"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "Квадратний маркер"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "Прямокутне"
@@ -6405,83 +6372,83 @@ msgstr "Прямокутне"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "Трикутна стрілка"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "Трикутне"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "Колір обведення"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "Довжина обведення"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:180
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:189
msgid "workspace.options.stroke.add-stroke"
msgstr "Додати колір обведення"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "По центру"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "Пунктирний"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "Точковий"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "Всередину"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "Комбіноване"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "Назовні"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:193
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:202
msgid "workspace.options.stroke.remove-stroke"
msgstr "Видалити обведення"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "Жирне"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "Вирівняти по низу"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "Вирівняти по середині"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "Вирівняти по верху"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "LTR"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "RTL"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "Автоматична висота"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "Автоматична ширина"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "Фіксована"
@@ -6503,35 +6470,35 @@ msgstr "нижній реєстр"
msgid "workspace.options.text-options.none"
msgstr "Жоден"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "Закреслення (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "Вирівняти по центру"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "За шириною"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "Вирівняти ліворуч"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "Вирівняти праворуч"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "Текст"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "Груповий текст"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "Вибраний текст"
@@ -6540,7 +6507,7 @@ msgstr "Вибраний текст"
msgid "workspace.options.text-options.titlecase"
msgstr "Регістр заголовку"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "Підкреслення (%s)"
@@ -6549,21 +6516,21 @@ msgstr "Підкреслення (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "ВЕРХНІЙ РЕГІСТР"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr ""
"Використовуйте кнопку відтворення в заголовку, щоб запустити перегляд "
"прототипів."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "Ширина"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "Вісь абсцис (X)"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Вісь ординат (Y)"
@@ -6607,78 +6574,78 @@ msgstr "Розділити вузли (%s)"
msgid "workspace.path.actions.snap-nodes"
msgstr "Прив'язати вузли (%s)"
-#: src/app/main/ui/workspace/plugins.cljs:83
+#: src/app/main/ui/workspace/plugins.cljs:84
msgid "workspace.plugins.button-open"
msgstr "Відкрити"
-#: src/app/main/ui/workspace/plugins.cljs:197
+#: src/app/main/ui/workspace/plugins.cljs:198
#, markdown
msgid "workspace.plugins.discover"
msgstr "Дослідіть [більше плагінів](%s)"
-#: src/app/main/ui/workspace/plugins.cljs:204
+#: src/app/main/ui/workspace/plugins.cljs:205
msgid "workspace.plugins.empty-plugins"
msgstr "Ви поки не встановлювали жодного плагіна"
-#: src/app/main/ui/workspace/plugins.cljs:191
+#: src/app/main/ui/workspace/plugins.cljs:192
msgid "workspace.plugins.error.manifest"
msgstr "Маніфест плагіна неправильний."
-#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:755, src/app/main/ui/workspace/plugins.cljs:82
+#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:783, src/app/main/ui/workspace/plugins.cljs:83
msgid "workspace.plugins.error.need-editor"
msgstr "Щоб використовувати цей плагін, Ви маєте бути редактором"
-#: src/app/main/ui/workspace/plugins.cljs:187
+#: src/app/main/ui/workspace/plugins.cljs:188
msgid "workspace.plugins.error.url"
msgstr "Плагін не існує або посилання на нього неправильне."
-#: src/app/main/ui/workspace/plugins.cljs:183
+#: src/app/main/ui/workspace/plugins.cljs:184
msgid "workspace.plugins.install"
msgstr "Встановити"
-#: src/app/main/ui/workspace/plugins.cljs:213
+#: src/app/main/ui/workspace/plugins.cljs:214
msgid "workspace.plugins.installed-plugins"
msgstr "Встановлені плагіни"
-#: src/app/main/ui/workspace/main_menu.cljs:710
+#: src/app/main/ui/workspace/main_menu.cljs:738
msgid "workspace.plugins.menu.plugins-manager"
msgstr "Керування плагінами"
-#: src/app/main/ui/workspace/main_menu.cljs:906
+#: src/app/main/ui/workspace/main_menu.cljs:934
msgid "workspace.plugins.menu.title"
msgstr "Плагіни"
-#: src/app/main/ui/workspace/plugins.cljs:374
+#: src/app/main/ui/workspace/plugins.cljs:375
msgid "workspace.plugins.permissions-update.title"
msgstr "ОНОВИТИ ЦЕЙ ПЛАГІН"
-#: src/app/main/ui/workspace/plugins.cljs:378
+#: src/app/main/ui/workspace/plugins.cljs:379
msgid "workspace.plugins.permissions-update.warning"
msgstr ""
"Плагін було модифіковано після останнього використання. Тепер він також "
"хоче отримати доступ до:"
-#: src/app/main/ui/workspace/plugins.cljs:278
+#: src/app/main/ui/workspace/plugins.cljs:279
msgid "workspace.plugins.permissions.allow-download"
msgstr "Завантаження файлів розпочато."
-#: src/app/main/ui/workspace/plugins.cljs:271
+#: src/app/main/ui/workspace/plugins.cljs:272
msgid "workspace.plugins.permissions.comment-read"
msgstr "Читати ваші коментарі та відповіді."
-#: src/app/main/ui/workspace/plugins.cljs:265
+#: src/app/main/ui/workspace/plugins.cljs:266
msgid "workspace.plugins.permissions.comment-write"
msgstr "Читати та змінювати ваші коментарі та відповіді від вашого імені."
-#: src/app/main/ui/workspace/plugins.cljs:238
+#: src/app/main/ui/workspace/plugins.cljs:239
msgid "workspace.plugins.permissions.content-read"
msgstr "Читати вміст файлів до яких користувачі мають доступ."
-#: src/app/main/ui/workspace/plugins.cljs:232
+#: src/app/main/ui/workspace/plugins.cljs:233
msgid "workspace.plugins.permissions.content-write"
msgstr "Читати та модифікувати вміст файлів, до яких користувачі мають доступ."
-#: src/app/main/ui/workspace/plugins.cljs:325
+#: src/app/main/ui/workspace/plugins.cljs:326
msgid "workspace.plugins.permissions.disclaimer"
msgstr ""
"Зауважте, що плагін створено зовнішньою стороною, тож впевніться що Ви "
@@ -6686,31 +6653,31 @@ msgstr ""
"безпека Ваших даних. Якщо маєте якісь сумніви, звʼяжіться із службою "
"підтримки."
-#: src/app/main/ui/workspace/plugins.cljs:258
+#: src/app/main/ui/workspace/plugins.cljs:259
msgid "workspace.plugins.permissions.library-read"
msgstr "Читати ваші бібліотеки та матеріали."
-#: src/app/main/ui/workspace/plugins.cljs:252
+#: src/app/main/ui/workspace/plugins.cljs:253
msgid "workspace.plugins.permissions.library-write"
msgstr "Читати та модифікувати ваші бібліотеки та матеріали."
-#: src/app/main/ui/workspace/plugins.cljs:318
+#: src/app/main/ui/workspace/plugins.cljs:319
msgid "workspace.plugins.permissions.title"
msgstr "'%s' ПЛАГІН ЗАПИТУЄ ДОСТУП НА:"
-#: src/app/main/ui/workspace/plugins.cljs:245
+#: src/app/main/ui/workspace/plugins.cljs:246
msgid "workspace.plugins.permissions.user-read"
msgstr "Читати інформацію профілю поточного користувача."
-#: src/app/main/ui/workspace/plugins.cljs:209
+#: src/app/main/ui/workspace/plugins.cljs:210
msgid "workspace.plugins.plugin-list-link"
msgstr "Список плагінів"
-#: src/app/main/ui/workspace/plugins.cljs:86
+#: src/app/main/ui/workspace/plugins.cljs:87
msgid "workspace.plugins.remove-plugin"
msgstr "Видалити плагін"
-#: src/app/main/ui/workspace/plugins.cljs:178
+#: src/app/main/ui/workspace/plugins.cljs:179
msgid "workspace.plugins.search-placeholder"
msgstr "Вкажіть посилання на плагін"
@@ -6718,25 +6685,25 @@ msgstr "Вкажіть посилання на плагін"
msgid "workspace.plugins.success"
msgstr "Плагін успішно завантажено."
-#: src/app/main/ui/workspace/plugins.cljs:172
+#: src/app/main/ui/workspace/plugins.cljs:173
msgid "workspace.plugins.title"
msgstr "Плагіни"
-#: src/app/main/ui/workspace/plugins.cljs:438
+#: src/app/main/ui/workspace/plugins.cljs:439
msgid "workspace.plugins.try-out.cancel"
msgstr "НЕ ЗАРАЗ"
-#: src/app/main/ui/workspace/plugins.cljs:431
+#: src/app/main/ui/workspace/plugins.cljs:432
msgid "workspace.plugins.try-out.message"
msgstr ""
"Хочете переглянути? Буде створено нову чернетку для цієї команди. (Якщо ні, "
"ви можете завжди знайти це у встановлених плагінах будь-якого файлу.)"
-#: src/app/main/ui/workspace/plugins.cljs:427
+#: src/app/main/ui/workspace/plugins.cljs:428
msgid "workspace.plugins.try-out.title"
msgstr "'%s' ПЛАГІН ВСТАНОВЛЕНО ДЛЯ ВАШОГО КОРИСТУВАЧА!"
-#: src/app/main/ui/workspace/plugins.cljs:444
+#: src/app/main/ui/workspace/plugins.cljs:445
msgid "workspace.plugins.try-out.try"
msgstr "СПРОБУВАТИ ПЛАГІН"
@@ -6748,15 +6715,15 @@ msgstr "Додати гнучкий макет"
msgid "workspace.shape.menu.add-grid"
msgstr "Додати макет сітки"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1015, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1039
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1016, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1040
msgid "workspace.shape.menu.add-layout"
msgstr "Додати макет"
-#: src/app/main/ui/workspace/context_menu.cljs:608, src/app/main/ui/workspace/sidebar/assets/common.cljs:505, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:941, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1161
+#: src/app/main/ui/workspace/context_menu.cljs:610, src/app/main/ui/workspace/sidebar/assets/common.cljs:514, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:961, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1113, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1195
msgid "workspace.shape.menu.add-variant"
msgstr "Створити варіант"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:509, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:990, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1082, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1198
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:518, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1010, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1115, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1233
msgid "workspace.shape.menu.add-variant-property"
msgstr "Додати нову властивість"
@@ -6800,7 +6767,7 @@ msgstr "Копіювати як SVG"
msgid "workspace.shape.menu.copy-text"
msgstr "Копіювати як текст"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "Створити анотацію"
@@ -6808,11 +6775,11 @@ msgstr "Створити анотацію"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "Виділене на дошку"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "Створити компонент"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "Створити кілька компонентів"
@@ -6820,7 +6787,7 @@ msgstr "Створити кілька компонентів"
msgid "workspace.shape.menu.cut"
msgstr "Вирізати"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "Вилучити"
@@ -6828,15 +6795,15 @@ msgstr "Вилучити"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "Видалити початок потоку"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "Відокремити екземпляр"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "Відокремити екземпляри"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "Різниця"
@@ -6848,11 +6815,11 @@ msgstr "Дублювати"
msgid "workspace.shape.menu.edit"
msgstr "Редагувати"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "Виключити"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "Вирівняти"
@@ -6885,19 +6852,19 @@ msgstr "Перейти до файлу головного компоненту"
msgid "workspace.shape.menu.group"
msgstr "Група"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "Приховати"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "Показати / приховати інтерфейс"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "Перехрестя"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "Заблокувати"
@@ -6905,7 +6872,7 @@ msgstr "Заблокувати"
msgid "workspace.shape.menu.mask"
msgstr "Додати маску"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "Вставити"
@@ -6925,11 +6892,11 @@ msgstr "Видалити гнучкий макет"
msgid "workspace.shape.menu.remove-grid"
msgstr "Видалити макет сітки"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1033
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1034
msgid "workspace.shape.menu.remove-layout"
msgstr "Видалити макет"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1222
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1257
msgid "workspace.shape.menu.remove-variant-property"
msgstr "Видалити властивість"
@@ -6937,15 +6904,15 @@ msgstr "Видалити властивість"
msgid "workspace.shape.menu.rename"
msgstr "Перейменувати"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "Відкликати зміни"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "Відновити головний компонент"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:504
msgid "workspace.shape.menu.restore-variant"
msgstr "Відновити варіант"
@@ -6953,15 +6920,15 @@ msgstr "Відновити варіант"
msgid "workspace.shape.menu.select-layer"
msgstr "Обрати шар"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "Показати"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "Показати в панелі ресурсів"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "Показати головний компонент"
@@ -6974,6 +6941,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "Встановити як мініатюру"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "Перетворити на шлях"
@@ -6981,11 +6949,11 @@ msgstr "Перетворити на шлях"
msgid "workspace.shape.menu.ungroup"
msgstr "Дегрупувати"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "Об'єднання"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "Розблокувати"
@@ -6998,7 +6966,7 @@ msgstr "Зняти маску"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "Оновити головні компоненти"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "Оновити головний компонент"
@@ -7010,11 +6978,11 @@ msgstr "Приховати панель інструментів"
msgid "workspace.sidebar.expand"
msgstr "Розкрити панель інструментів"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "Історія"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "Шари"
@@ -7054,11 +7022,11 @@ msgstr "Тексти"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "Імпортовані атрибути SVG"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "Сторінки"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:248
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:249
msgid "workspace.sidebar.sitemap.add-page"
msgstr "Додати сторінку"
@@ -7075,27 +7043,27 @@ msgstr "%s активних тем"
msgid "workspace.tokens.add set"
msgstr "Додати набір"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:329
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
msgid "workspace.tokens.add-new-theme"
msgstr "Додати нову тему"
-#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:60
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:62
msgid "workspace.tokens.add-set-to-group"
msgstr "Додати набір до цієї групи"
-#: src/app/main/ui/workspace/tokens/management/group.cljs:113
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:197, src/app/main/ui/workspace/tokens/management/group.cljs:115
msgid "workspace.tokens.add-token"
msgstr "Додати токен: %s"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:161
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:136
msgid "workspace.tokens.applied-to"
msgstr "Застосовано до"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:315
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:316
msgid "workspace.tokens.axis"
msgstr "Вісь"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:338
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:337
msgid "workspace.tokens.back-to-themes"
msgstr "Повернутись до списку тем"
@@ -7127,15 +7095,15 @@ msgstr "Колір"
msgid "workspace.tokens.create-new-theme"
msgstr "Створити свою першу тему зараз."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:100, src/app/main/ui/workspace/tokens/themes.cljs:44
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:96, src/app/main/ui/workspace/tokens/themes.cljs:44
msgid "workspace.tokens.create-one"
msgstr "Створити."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:534
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:552
msgid "workspace.tokens.create-token"
msgstr "Створити новий %s токен"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:337
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:338
msgid "workspace.tokens.delete"
msgstr "Видалити токен"
@@ -7143,19 +7111,19 @@ msgstr "Видалити токен"
msgid "workspace.tokens.delete-theme-title"
msgstr "Видалити тему"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:334
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:335
msgid "workspace.tokens.duplicate"
msgstr "Дублювати токен"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:201, src/app/main/data/workspace/tokens/library_edit.cljs:405
+#: src/app/main/data/workspace/tokens/library_edit.cljs:197, src/app/main/data/workspace/tokens/library_edit.cljs:415
msgid "workspace.tokens.duplicate-suffix"
msgstr "копіювати"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:321
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:322
msgid "workspace.tokens.edit"
msgstr "Змінити токен"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:327
msgid "workspace.tokens.edit-theme-title"
msgstr "Редагувати тему"
@@ -7163,15 +7131,11 @@ msgstr "Редагувати тему"
msgid "workspace.tokens.edit-themes"
msgstr "Редагувати теми"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:533
-msgid "workspace.tokens.edit-token"
-msgstr "Редагувати токен"
-
#: src/app/main/data/workspace/tokens/errors.cljs:41
msgid "workspace.tokens.empty-input"
msgstr "Значення токену не може бути порожнім"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:540
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:558
msgid "workspace.tokens.enter-token-name"
msgstr "Вкажіть %s ім'я токену"
@@ -7203,7 +7167,7 @@ msgstr "Попередній перегляд:"
msgid "workspace.tokens.export.single-file"
msgstr "Один файл"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:229
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:228
msgid "workspace.tokens.gaps"
msgstr "Проміжки"
@@ -7225,17 +7189,17 @@ msgstr "Групування наборів токенів поки не під
msgid "workspace.tokens.import-error"
msgstr "Помилка імпорту:"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:240
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:241
msgid "workspace.tokens.import-multiple-files"
msgstr "У декількох файлах імʼя / шлях файлу - імена набору."
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:239
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:240
msgid "workspace.tokens.import-single-file"
msgstr ""
"У одному файлі JSON, ключі першого рівня повинні бути іменами набору "
"токенів."
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:236
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:237
msgid "workspace.tokens.import-tokens"
msgstr "Імпортувати токени"
@@ -7244,7 +7208,7 @@ msgstr "Імпортувати токени"
msgid "workspace.tokens.import-tooltip"
msgstr "Імпортування файлу JSON перепише всі наявні токени, набори та теми"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:246
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:247
msgid "workspace.tokens.import-warning"
msgstr "Імпорт токенів перепише усі наявні токени, набори та теми."
@@ -7297,15 +7261,15 @@ msgstr "Тема"
msgid "workspace.tokens.label.theme-placeholder"
msgstr "Додати тему (приміром Світла)"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:221
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:220
msgid "workspace.tokens.margins"
msgstr "Зовнішні відступи"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:257
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:256
msgid "workspace.tokens.max-size"
msgstr "Макс. розмір"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:251
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:250
msgid "workspace.tokens.min-size"
msgstr "Мін. розмір"
@@ -7321,7 +7285,7 @@ msgstr "Немає активних наборів"
msgid "workspace.tokens.no-active-theme"
msgstr "Немає активної теми"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:76
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:72
msgid "workspace.tokens.no-permisions-set"
msgstr "Щоб активувати / деактивувати набір, Ви маєте бути редактором"
@@ -7329,11 +7293,11 @@ msgstr "Щоб активувати / деактивувати набір, Ви
msgid "workspace.tokens.no-permission-themes"
msgstr "Щоб використовувати ці теми Ви маєте бути редактором"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:480
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:483
msgid "workspace.tokens.no-sets-create"
msgstr "Ще не оголошено жодного набору. Створіть перший."
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:97, src/app/main/ui/workspace/tokens/sets/lists.cljs:103
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:93, src/app/main/ui/workspace/tokens/sets/lists.cljs:99
msgid "workspace.tokens.no-sets-yet"
msgstr "Тут ще немає наборів."
@@ -7357,12 +7321,12 @@ msgstr "Помилкове значення токену. Отримане зн
msgid "workspace.tokens.opacity-range"
msgstr "Непрозорість має бути між 0 та 100% або ж між 0 та 1 (де 0.5 - 50%)."
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:145
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:120
#, fuzzy
msgid "workspace.tokens.original-value"
msgstr "Початкове значення: %s"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:205
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:204
msgid "workspace.tokens.paddings"
msgstr "Внутрішні відступи"
@@ -7370,7 +7334,7 @@ msgstr "Внутрішні відступи"
msgid "workspace.tokens.radius"
msgstr "Радіус"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:153
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:128
msgid "workspace.tokens.ref-not-valid"
msgstr "Посилання помилкове або ні на одному із активних наборів"
@@ -7379,7 +7343,7 @@ msgstr "Посилання помилкове або ні на одному із
msgid "workspace.tokens.reference-error"
msgstr "Помилка посилання: "
-#: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:39, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:44, src/app/main/ui/workspace/tokens/management/token_pill.cljs:146
+#: 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:100, 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 "Отримане значення: %s"
@@ -7388,7 +7352,7 @@ msgstr "Отримане значення: %s"
msgid "workspace.tokens.save-theme"
msgstr "Зберегти тему"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:209, src/app/main/ui/workspace/tokens/sets/lists.cljs:315
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:204, src/app/main/ui/workspace/tokens/sets/lists.cljs:309
msgid "workspace.tokens.select-set"
msgstr "Обрати набір."
@@ -7396,11 +7360,11 @@ msgstr "Обрати набір."
msgid "workspace.tokens.self-reference"
msgstr "Токен має самопосилання"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:64
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:60
msgid "workspace.tokens.set-edit-placeholder"
msgstr "Введіть імʼя (використовуйте '/' для груп)"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:343
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:342
msgid "workspace.tokens.set-selection-theme"
msgstr ""
"Визначити які набори токенів повинні бути використані як частину цього "
@@ -7423,7 +7387,7 @@ msgstr "Тут можна налаштувати базовий розмір ш
msgid "workspace.tokens.settings"
msgstr "Налаштування токену"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:245
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:244
msgid "workspace.tokens.size"
msgstr "Розмір"
@@ -7445,16 +7409,16 @@ msgstr ""
msgid "workspace.tokens.themes-list"
msgstr "Список тем"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:589, src/app/main/ui/workspace/tokens/management/create/form.cljs:590
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:608, src/app/main/ui/workspace/tokens/management/create/form.cljs:609
#, fuzzy
msgid "workspace.tokens.token-description"
msgstr "Опис"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:539
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:83, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:109, src/app/main/ui/workspace/tokens/management/create/form.cljs:557
msgid "workspace.tokens.token-name"
msgstr "Ім'я"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:66
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:69
msgid "workspace.tokens.token-name-validation-error"
msgstr ""
" помилкове імʼя токену.\n"
@@ -7466,11 +7430,11 @@ msgstr ""
msgid "workspace.tokens.token-not-resolved"
msgstr "Неможливо отримати токен посилання з імʼям: %s"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:567
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:585
msgid "workspace.tokens.token-value"
msgstr "Значення"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:566, src/app/main/ui/workspace/tokens/management/create/form.cljs:883, src/app/main/ui/workspace/tokens/management/create/form.cljs:892
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:584, src/app/main/ui/workspace/tokens/management/create/form.cljs:1035
msgid "workspace.tokens.token-value-enter"
msgstr "Ведіть значення або псевдо з {псевдо}"
@@ -7478,7 +7442,7 @@ msgstr "Ведіть значення або псевдо з {псевдо}"
msgid "workspace.tokens.tokens-section-title"
msgstr "ТОКЕНИ - %s"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:125
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:121
msgid "workspace.tokens.tools"
msgstr "Інструменти"
@@ -7486,7 +7450,7 @@ msgstr "Інструменти"
msgid "workspace.tokens.unknown-token-type-section"
msgstr "Тип \"%s\" непідтримуваний (%s)\n"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:156
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:131
msgid "workspace.tokens.value-not-valid"
msgstr "Значення не є дійсним"
@@ -7494,11 +7458,11 @@ msgstr "Значення не є дійсним"
msgid "workspace.tokens.value-with-units"
msgstr "Помилкове значення: Одиниці не дозволені."
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:563
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:581
msgid "workspace.tokens.warning-name-change"
msgstr "Якщо перейменувати токен, посилання на старе імʼя буде розірвано."
-#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "Ресурси"
@@ -7506,7 +7470,7 @@ msgstr "Ресурси"
msgid "workspace.toolbar.color-palette"
msgstr "Палітра кольорів (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "Коментарі (%s)"
@@ -7717,19 +7681,19 @@ msgstr "Операція над %s"
msgid "workspace.undo.title"
msgstr "Історія"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "Відкинути"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "Більше про"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "Є деякі оновлення в спільній бібліотеці"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "Оновити"
@@ -7789,11 +7753,11 @@ msgstr "Ви бажаєте відновити ці версії?"
msgid "workspace.versions.snapshot-menu"
msgstr "Відкрити меню знятків"
-#: src/app/main/ui/workspace/sidebar.cljs:236
+#: src/app/main/ui/workspace/sidebar.cljs:237
msgid "workspace.versions.tab.actions"
msgstr "Дії"
-#: src/app/main/ui/workspace/sidebar.cljs:234
+#: src/app/main/ui/workspace/sidebar.cljs:235
msgid "workspace.versions.tab.history"
msgstr "Історія"
diff --git a/frontend/translations/yo.po b/frontend/translations/yo.po
index e79e1dbe2c..01debcab15 100644
--- a/frontend/translations/yo.po
+++ b/frontend/translations/yo.po
@@ -1,15 +1,15 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-11 07:21+0000\n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
"Last-Translator: Alejandro Alonso \n"
-"Language-Team: Yoruba "
-" \n"
+"Language-Team: Yoruba \n"
"Language: yo\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 5.13-dev\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:277
#, unused
@@ -140,7 +140,7 @@ msgstr "ṣẹ̀dá àkáùntì"
msgid "auth.sidebar-tagline"
msgstr "ṣíṣí orísun yíyà àti àwòrán ni yóò fi lojútùú ."
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "òfin ibiṣẹ́"
@@ -159,7 +159,7 @@ msgstr "a ti fi ìjẹ́rìísí ránsẹ́ sínú ímeèlì rẹ"
msgid "branding-illustrations-marketing-pieces"
msgstr ".. ìyàsọ́tọ, àpèjúwe,títajà nǹkan, abbl."
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "ìgbéjáde"
@@ -219,7 +219,7 @@ msgstr "pín àwọn àpẹrẹ"
msgid "common.share-link.view-all"
msgstr "yan gbogbo rẹ̀"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "ohun tí a kò tí ì kọ jáde"
@@ -330,7 +330,7 @@ msgstr "àmì tòkìn yóò parí ní %s"
msgid "dashboard.access-tokens.token-will-not-expire"
msgstr "kò sí ọjọ́ ìparí fún àmì tókìn"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "ṣe àpàpọ̀ bí i yàrá ìkàwe tí a pín"
@@ -338,27 +338,27 @@ msgstr "ṣe àpàpọ̀ bí i yàrá ìkàwe tí a pín"
msgid "dashboard.change-email"
msgstr "pàrọ̀ ímeèlí"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(dàákọ)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "ṣẹ̀dá ẹgbẹ́ tuntun"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "pẹ́ńpọtì rẹ"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "pa ẹgbẹ́ rẹ́"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "sọ fáìlí pẹ́ńpọtì kalẹ̀ (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "sọ fáìlì ìpéwọ̀n kalẹ̀ (.svg + .json)"
@@ -374,7 +374,7 @@ msgstr "ṣe ẹ̀dà %s fáìlì"
msgid "dashboard.export-binary-multi"
msgstr "sọ àwọn fáìlì pẹ́ẹ́pọtì kalẹ́ %s (.pẹ́ńpọtì)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "fi bọọdù ráńṣẹ bí i PDF"
@@ -390,7 +390,7 @@ msgstr "fi pẹ́ńpọtì ráńṣẹ́%s files"
msgid "dashboard.export-multiple.selected"
msgstr "% ti %s ẹ́límẹ́ǹti tí a yàn"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "fi ráńṣẹ"
@@ -546,11 +546,11 @@ msgstr "ọpulóòdù dátà sínú sáfà (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "ọpulóòdù fáìlì: %s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "pe àwọn ènìyàn"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "fẹgbẹ́ sílẹ̀"
@@ -562,7 +562,7 @@ msgstr "yàrá ìkàwé àti àwọn àwòṣe"
msgid "dashboard.libraries-and-templates.explore"
msgstr "ṣe ìwákiri ọ̀pọ̀ wọn kí o sì mọ bí ó ṣe sojúṣe tiẹ"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "wàhálà wà fún gbígbé tẹ́ńpílétì wọlé. tẹ́ńpílétì kò wọlé."
@@ -594,7 +594,7 @@ msgstr "gbé lọ sí ẹgbẹ́ mìíràn"
msgid "dashboard.new-file"
msgstr "+ fáìlì tuntun"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "fáìlì tuntun"
@@ -602,7 +602,7 @@ msgstr "fáìlì tuntun"
msgid "dashboard.new-project"
msgstr "+ iṣẹ́ àgbéṣe tuntun"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "iṣẹ́ àgbéṣe tuntun"
@@ -610,7 +610,7 @@ msgstr "iṣẹ́ àgbéṣe tuntun"
msgid "dashboard.no-matches-for"
msgstr "kò sí èyí tó báramu fún un“%s“"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "àwon iṣẹ́ àgbéṣe tí a kànpọ á hàn níbí"
@@ -626,7 +626,7 @@ msgstr "a ti ṣe ìwádìí ímeèlì rẹ dáadáa"
msgid "dashboard.notifications.password-saved"
msgstr "a ti fi ọ̀rọ̀ ìgbaniwọlé rẹ pamọ́ dáadáa!"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s àwọn ọmọ ẹgbẹ́"
@@ -642,7 +642,7 @@ msgstr "àwọn àṣàyàn"
msgid "dashboard.password-change"
msgstr "yí ọ̀rọ̀ ìgbaniwọlé padà"
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "pínì/yọ pínì kúrò"
@@ -663,7 +663,7 @@ msgstr "yọ ọ́ kúrò gẹ́gẹ́ bí yàrá kàwé pípín"
msgid "dashboard.save-settings"
msgstr "fi àwọn eto pamọ́"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "ṣàwárí…"
@@ -691,7 +691,7 @@ msgstr "iṣẹ́ àgbéṣe rẹ ti parẹ́ dáadáa"
msgid "dashboard.success-duplicate-project"
msgstr "a ti ṣe ẹ̀dà iṣẹ́ àgbéṣe rẹ dáadáa"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "a ti gbé fáìlì rẹ kúro dáadáa"
@@ -703,15 +703,15 @@ msgstr "a ti gbé àwọn fáìlì rẹ kúrò dáadáa"
msgid "dashboard.success-move-project"
msgstr "a ti gbé iṣẹ́ àgbéṣe rẹ kúrò dáadáa"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "àlàyé ẹgbẹ́"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "àwọn ọmọ ẹgbẹ́"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "iṣẹ́ àgbéṣe ọmọ ẹgbẹ́"
@@ -727,7 +727,7 @@ msgstr "ṣàwárí àwọn èsì"
msgid "dashboard.type-something"
msgstr "tẹ̀ láti rí àwọn èsì"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "yàrá ìkàwé tí a kòtí ì gbé jáde"
@@ -735,38 +735,38 @@ msgstr "yàrá ìkàwé tí a kòtí ì gbé jáde"
msgid "dashboard.update-settings"
msgstr "mú àwọn ètò dójú ìwọ̀n"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "ti ń siṣẹ́"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "When this hook is triggered event details will be delivered"
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "ẹ̀yà kọ́ńtẹ́ǹtì"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "ṣẹ̀dá ìkọ́-wẹ́bù"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "a ti ṣẹ̀dá ìkọ́-wẹ́bù dáadáa ."
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr ""
"àwọn ìkọ́-wẹ́bù jẹ́ ọ̀nà tó rọrùn láti fi ààyè sílẹ̀ fún àwọn ààyè "
"ayélujára mìíràn àti awọn ápù ṣe filọ́ tí àwọn ìṣẹ̀lẹ̀ kan bá ní "
"pẹ́ńpọtì’’ a ó fi ìbéèrè ráńṣẹ́ sí ọ̀kọ̀kan wọn tí urls tó o pèsè."
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "tẹ bọ́tínnì \"fikún ìkọ́- wẹ́bù\" láti fì kan sí i."
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "kò sí ìkọ́-wẹ́bù tí a ṣẹ̀da´dì sisìnyí."
@@ -782,7 +782,7 @@ msgstr "ímeèlì"
msgid "dashboard.your-name"
msgstr "ímeèlì rẹ"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "pẹ́ńpọtì rẹ"
@@ -798,11 +798,11 @@ msgstr "àkíyèsí"
msgid "ds.component-subtitle"
msgstr "ní láti ṣe ìmúdójú ìwọ̀n àwọn irin iṣẹ́:"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "fagilé e"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "ó dára"
@@ -842,11 +842,11 @@ msgstr "a ti fọwọ́ sí ímeèlì rẹ tẹ́lẹ̀."
msgid "errors.email-as-password"
msgstr "o kò le lo ímeèlì rẹ gẹ́gẹ́ bí ọ̀rọ̀ ìgbaniwọlé"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "Ímeèlì «%s» ti ní ìjábọ̀ ọ̀pọ̀ọlọpọ̀ ìta-bọn-ọ̀n ti pẹ́."
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "Ímeèlì ti «%s» ń jábọ̀ gẹ́gẹ́ bí i awúrúju tàbí ìta-bọ̀n-ọnọǹ tipẹ́."
@@ -854,7 +854,7 @@ msgstr "Ímeèlì ti «%s» ń jábọ̀ gẹ́gẹ́ bí i awúrúju tàbí
msgid "errors.feature-not-supported"
msgstr "Àwọn ẹ̀yà ara ẹ̀rọ '%s' kò ní àtìlẹ́yìn."
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "Àsìṣe kan ti ṣẹlẹ̀."
@@ -883,7 +883,7 @@ msgstr "Èyí tí a pè le parẹ́ tàbí ki àkókò lekọjá ."
msgid "errors.ldap-disabled"
msgstr "Ìfàṣẹsí LDAP kò ṣe é ṣe ."
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "O ti débi '%s' ìfàmìsí. Késí i pẹ̀lú àtìlẹ́yìn ."
@@ -895,7 +895,7 @@ msgstr "Àwòrán tóbi púpọ ju ohun tí a le fisí lọ."
msgid "errors.media-type-not-allowed"
msgstr "Ó dàbí pé èyí kì í ṣe àwòrán tó fẹsẹ́ múlẹ̀."
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr ""
"Pírófáìlì ímeèlì tí ò ǹ pè ti dákẹ (ti jábọ̀ àwúrúju tàbí ìtabọ̀n-ọ̀n tó "
@@ -915,7 +915,7 @@ msgstr "Ọ̀rọ̀ ìgbaniwọlé kò gbọdọ̀ dín ní lẹ́tà mẹ́jọ
msgid "errors.profile-blocked"
msgstr "Ti dínà mọ́ pírófáìlì"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr "Ímeèlì pírófáìlì rẹ ti ní ìdákẹ́ (ìjábọ̀ àwúrúju tàbí ìtabọ̀n-ọ̀n tó ga)."
@@ -923,15 +923,15 @@ msgstr "Ímeèlì pírófáìlì rẹ ti ní ìdákẹ́ (ìjábọ̀ àwúrúju
msgid "errors.registration-disabled"
msgstr "Ìforúkọ-sílẹ̀ kò ṣe é ṣe lọ́wọ́lọ́wọ́."
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr "kí àwọn ọmọ ẹgbẹ́ tí kò péye fi ẹgbẹ́ sílẹ̀, àbí bóyá o fẹ́ paárẹ́ ni ."
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "Kòsí ọmọ ẹgbẹ́ tí o fẹ́ yàn ."
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr "Oní nǹkan kò le fi ẹgbẹ́ sílẹ̀ , o gbọ́dọ̀ tún ṣe àtúnyàn iṣẹ́ oní nǹkan."
@@ -943,31 +943,31 @@ msgstr "Àsìṣe tí a kòrò tẹ́lẹ̀ ti ṣẹlẹ."
msgid "errors.unexpected-token"
msgstr "Tókìnnì àìmọ̀"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "Àsìṣe nínú ètò ìsopọ̀, kò lè dé ibi URL"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "URL kò páásì ìfọwọ́sí."
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "Èyí tí a fijíṣẹ́ kẹ́yìn kò dára."
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "Àsìṣe nínú ìfẹwọ́sí SSL ."
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "Àkókò ti lọ"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "Unexpected error on validating àsìṣe àìròtẹ́lẹ̀ lórí ìfọwọ́sí"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "Ipò àìròtẹ́lẹ̀ %s"
@@ -1032,19 +1032,19 @@ msgstr "Àsìṣe kan ti ṣẹlẹ̀"
msgid "inspect.attributes.blur"
msgstr "ìkùku ti wà"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "bó se péye"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "dínà mọ́"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "Ti dínà mọ"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1052,7 +1052,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "Fílì"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "Danlóòdù orísun àwòrán"
@@ -1146,77 +1146,80 @@ msgstr "Lágbára"
msgid "inspect.attributes.stroke.width"
msgstr "Fífẹ̀"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "Taipogíráfì"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "Ẹbí Fọ́ǹtì"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "Ìwọ̀n Fọ́ǹtì"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "Àrà Fọ́ǹtì"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "Ìwúwo Fọ́ǹtì"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "Ìfàyè sí ààrin Lẹ́tà"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "Gíga Ìlà"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "Síṣe ọ̀rọ̀ lọ́ṣọ̀ọ́"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "Kò sí"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "Fàlà sí"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "ọ̀rọ̀ ti yí padà"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "Àkọlé Lẹ́tà"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "Lẹ́tà Kékeré"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "Kò sí"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "Lẹ́tà ńlá"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr ""
"Tí o bá fẹ́ mọ̀ nípa àpẹẹrẹ alárà bẹ ààrin gbùngbùn àwọn pẹ́ńpọtì wò fún "
"ìràlọ́wọ́"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "Àfikún àlàyé fún ìbẹ̀wò"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr "Yan ìrísí, bọ́ọ̀dù tàbí ẹgbẹ́ láti lọ ṣe ìbẹ̀wò ohun ìní wọn àti kóòdù"
@@ -1276,7 +1279,7 @@ msgstr "Ọ̀rọ̀"
msgid "inspect.tabs.info"
msgstr "Àlàyé"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "Ọ̀nà àbùjá"
@@ -1284,7 +1287,7 @@ msgstr "Ọ̀nà àbùjá"
msgid "labels.access-tokens"
msgstr "Ṣàyẹ̀wò tókín-nì"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "Ń siṣẹ́"
@@ -1292,7 +1295,7 @@ msgstr "Ń siṣẹ́"
msgid "labels.add-custom-font"
msgstr "Ṣàfikún àṣà Fọ́ǹtì"
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "Alábòjútó"
@@ -1300,7 +1303,7 @@ msgstr "Alábòjútó"
msgid "labels.adobe-xd"
msgstr "Àdòbí XD"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "Gbogbo ẹ̀"
@@ -1323,7 +1326,7 @@ msgstr ""
msgid "labels.bad-gateway.main-message"
msgstr "Ọ̀nà-àbáwọle búburú"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "Párẹ́"
@@ -1331,15 +1334,15 @@ msgstr "Párẹ́"
msgid "labels.canva"
msgstr "Káńfà"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "Tì í"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "dásí i"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "Agbègbè"
@@ -1347,7 +1350,7 @@ msgstr "Agbègbè"
msgid "labels.confirm-password"
msgstr "Jẹ́rìísí"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "Tẹ̀ síwájú"
@@ -1359,11 +1362,11 @@ msgstr "Tẹ̀ síwájú pẹ̀lú"
msgid "labels.continue-with-penpot"
msgstr "O lè tẹ̀ síwájú pẹ̀lú àkáúnti pẹ́ńpọtì"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "ṣà dàkọ ọ̀nà àsopọ̀"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "Ṣẹ̀dá"
@@ -1383,7 +1386,7 @@ msgstr "Kọ́sítọ́mù àwọn fọ́ǹtì"
msgid "labels.dashboard"
msgstr "Dáṣìbọọ̀dù"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "Paárẹ́"
@@ -1395,7 +1398,7 @@ msgstr "Pa kọ́mẹ́ǹtì rẹ́"
msgid "labels.delete-comment-thread"
msgstr "Pa gbogbo kọ́mẹ́ǹtì rẹ́"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "Pa ìfìwépè rẹ́"
@@ -1407,15 +1410,15 @@ msgstr "Pa gbogbo %s fáìlì rẹ́"
msgid "labels.developer"
msgstr "Olùdásílẹ̀"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "Yọ́ kúrò"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "Kọ ọ́ sílẹ̀"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "sàtúnkà"
@@ -1423,15 +1426,15 @@ msgstr "sàtúnkà"
msgid "labels.edit-file"
msgstr "sàtúnkà fáìlì"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "Olóòtú"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "Kọjá àkókò"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "Fi ránṣẹ́"
@@ -1459,7 +1462,7 @@ msgstr "Àwọn Olùpèṣè fọ́ǹtì"
msgid "labels.font-variants"
msgstr "Àrà"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "Fọ̀ǹtì"
@@ -1473,11 +1476,11 @@ msgstr "Olùdásílẹ̀/VP"
msgid "labels.freelancer"
msgstr "Oníṣẹ́ ni mí"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "Báǹkì gítì-ọbù"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "Fèsì padà"
@@ -1485,15 +1488,15 @@ msgstr "Fèsì padà"
msgid "labels.go-back"
msgstr "Padà sẹ́yìn"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "Ibi ìranilọ́wọ́"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "Fi àwọn ọ̀rọ̀ tí a ti yanjú pamọ́"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "kò ja fáfá"
@@ -1515,7 +1518,7 @@ msgstr "Àsìṣe ti abẹ́nú"
msgid "labels.invision"
msgstr "Ìkógun wọ̀lú"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "Ìfiwépè"
@@ -1523,7 +1526,7 @@ msgstr "Ìfiwépè"
msgid "labels.language"
msgstr "Èdè"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "Àwọn yàrá ìkàwé & Tẹ́ńpílétì"
@@ -1531,7 +1534,7 @@ msgstr "Àwọn yàrá ìkàwé & Tẹ́ńpílétì"
msgid "labels.log-or-sign"
msgstr "ṣí kí o wọle tàbí kí o ṣàmì wọlé"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "Padé kí ojáde"
@@ -1539,11 +1542,11 @@ msgstr "Padé kí ojáde"
msgid "labels.marketing"
msgstr "Títajà"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "Ẹgbẹ"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "Àwọn ọmọ Ẹgbẹ́"
@@ -1551,15 +1554,15 @@ msgstr "Àwọn ọmọ Ẹgbẹ́"
msgid "labels.new-password"
msgstr "Ọ̀rọ̀ Ìgbaniwọlé tuntun"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "Èyí tó kàn"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "A ti gbé gbogbo yín dè! Àwọn ọ̀rọ̀ ìfitónilétí tuntun yí ó hàn níbí."
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "kò si àwọn ìfìwépè kankan nílẹ̀."
@@ -1589,7 +1592,7 @@ msgstr "tàbí"
msgid "labels.other"
msgstr "Òmíìràn(ní pàtó)"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "Oníǹkan"
@@ -1597,7 +1600,7 @@ msgstr "Oníǹkan"
msgid "labels.password"
msgstr "Ọ̀rọ̀ ìgbaniwọlé"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "Ńńdúró"
@@ -1613,11 +1616,11 @@ msgstr "Ohun títà tàbí iṣẹ́ àgbéṣe Olùṣàkóso"
msgid "labels.profile"
msgstr "Pírófáìlì"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "Àwọn iṣẹ́ àgbéṣe"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "Fi àkọsílẹ̀ rẹ sílẹ̀"
@@ -1631,11 +1634,11 @@ msgstr "Tún gbé fáìlì sí i"
msgid "labels.remove"
msgstr "Yọ ọ́ kúrò"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "Yọ ọmọ ẹgbẹ́ kúrò"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "Fún un lórúkọ mìíràn"
@@ -1643,7 +1646,7 @@ msgstr "Fún un lórúkọ mìíràn"
msgid "labels.rename-team"
msgstr "Fún ẹgbẹ́ lórúkọ mìíràn"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "Tún fì ìwé ìpè ránńṣẹ́"
@@ -1651,11 +1654,11 @@ msgstr "Tún fì ìwé ìpè ránńṣẹ́"
msgid "labels.retry"
msgstr "Tún gbìyànjú"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "Ojúṣe"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "Fi pamọ́"
@@ -1683,7 +1686,7 @@ msgstr "A wà níbi ètò ìpèsè ìtọ́jú àwọn sísítẹ́mù wa."
msgid "labels.service-unavailable.main-message"
msgstr "Sáfísì kòsí"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "Àwọn ètò"
@@ -1691,11 +1694,11 @@ msgstr "Àwọn ètò"
msgid "labels.share-prototype"
msgstr "Pín àwọn ohun tí a ti kọ tẹ́lẹ̀"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "Yàrá ìkáwe"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "Fi gbogbo kọ́mẹ́ǹtì hàn"
@@ -1703,7 +1706,7 @@ msgstr "Fi gbogbo kọ́mẹ́ǹtì hàn"
msgid "labels.show-comments-list"
msgstr "Fi àkójọ àwọn kọ́mẹ́ǹtì hàn"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "Fi àwọn kọ́mẹ́ǹtì tìrẹ nìkan hàn"
@@ -1715,7 +1718,7 @@ msgstr "Yàwòrán"
msgid "labels.start"
msgstr "Bẹ̀rẹ̀"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "Ipò"
@@ -1723,7 +1726,7 @@ msgstr "Ipò"
msgid "labels.student-teacher"
msgstr "Akẹ́kọ̀ọ́ tàbí olùkọ̀ọ́"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "Ìbáṣepọ̀"
@@ -1751,15 +1754,15 @@ msgstr "Ọpulóòdù kọ́sítẹ́mù fọ́ǹtì"
msgid "labels.uploading"
msgstr "Ń ọpulóòdù…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "Wò ó nìkan"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "Olùwo"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "àwọn ìwé ìkọ́ wẹ́bù"
@@ -1767,11 +1770,11 @@ msgstr "àwọn ìwé ìkọ́ wẹ́bù"
msgid "labels.write-new-comment"
msgstr "Write new comment Kọ kọ́mẹ́ǹtì tuntun"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(ìwọ)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "Àkáùntì rẹ"
@@ -1850,19 +1853,19 @@ msgstr "Ṣẹ̀dà tókìn"
msgid "modals.create-access-token.title"
msgstr "Pilẹ̀ṣẹ̀ wí wọlé tókìń"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "Ṣẹ̀dá ìkọ́- wẹ́bù"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "Ṣẹ̀dá ìkọ́-wẹ́bù"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "Péloòdù URL"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://àpẹrẹ.com/postreceive ìgbà àtẹ̀yinwá"
@@ -1910,11 +1913,11 @@ msgstr ""
msgid "modals.delete-comment-thread.title"
msgstr "Pa ìtàkurọ̀sọ rẹ"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "Ṣe ó dá ọ lójú pé o fẹ́ pa àkọsílẹ̀ yìí rẹ́?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "Pa àkọsílẹ̀ rẹ́"
@@ -1954,11 +1957,11 @@ msgstr ""
"Ṣé ó dá ọ lójú pé o fẹ́ pa fẹ́ǹtì yí rẹ́? Kò ní le gbé e tí a bá lò ó nínú "
"Fáìlì."
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "Ṣé ó dá ọ lójú pé o fẹ́ pa ojú ìwé yìí rẹ́?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "Pa ojú ìwé rẹ́"
@@ -1974,77 +1977,77 @@ msgstr "Ṣé ó dá ọ lójú pé o fẹ́ pa iṣẹ́ àgbéṣe yìí rẹ
msgid "modals.delete-project-confirm.title"
msgstr "Pa iṣẹ́ àgbéṣe rẹ́"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "Pa ẹgbẹ́ rẹ́"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr ""
"Ṣé ó dá ọ lójú pé o fẹ́ pa ẹgbẹ́ yìí rẹ́? Ggogbo iṣẹ́ àgbéṣe àti fáìlì tí ó "
"bá ní nǹkan ṣe pẹ̀lú ẹgbẹ́ ni a ó parẹ́ pátápátá."
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "Yọ ẹgbẹ́ kúrò"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "Yọ ọmọ ẹgbẹ́ kúrò"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "Ṣé ó dá ọ lójú pé o fẹ́ yọ ọmọ ẹgbẹ́ yìí kúrò nínú ẹgbẹ́?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "Yọ ọmọ ẹgbẹ́ kúrò"
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "Pa ìkọ́-wẹ́bù rẹ́"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "Ṣe ó dá ọ lójú pé o fẹ́ pa ìkọ́-wẹ́bù yìí rẹ́?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "Pa ìkọ́- wẹ́bù rẹ́"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "Ṣe àtúnṣe ìkọ́- wẹ́bù"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "Ṣe àtúnṣe ìkọ́-wẹ́bù"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "Fi ìfìwépè ránńṣẹ́"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "Ímeèlì, kí kọmá yà á sọ́tọ̀"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr ""
"Díẹ̀ nínú àwọn ímeèlì wá láti ọ̀dọ̀ àwọn tó jẹ́ ọmọ ẹgbẹ́ ní ìsinsìnyí. Ìwé "
"ìfipé wọn a kò nífi ránńṣẹ́."
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "Pe àwọn ọmọ ẹgbẹ́ sínú ẹgbẹ́"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr ""
"Gẹ́gẹ́ bí o ṣe jẹ́ ìwọ nìkan ni ọmọ ẹgbẹ́ nínú ẹgbẹ́ yìí, a ó yọ ẹgbẹ́ "
"kúrò pẹ̀lú iṣẹ́ àgbéṣe rẹ̀ àti àwọn fáìlì."
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "Ṣé ó dá ọ lójú pé o fẹ́ kúrò nínú %s ẹgbẹ́?"
@@ -2073,51 +2076,51 @@ msgstr "Yan ọmọ ẹgbẹ́ kan tí o ó gbéga"
msgid "modals.leave-and-reassign.title"
msgstr "Kí o tó kúrò"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "Fi ẹgbẹ́ sílẹ̀"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "Ṣé ó dá ọ lójú pé o fẹ́ fi ẹgbẹ́ yìí sílẹ̀?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "Ń fi ẹgbẹ́ sílẹ̀"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "Fi kún iye tó jẹ́"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "Gbé ẹni tó ni nǹkan"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr ""
"Tí o bá gbé ẹni tí ó ni nǹkan, o ó yìí ojúṣe rẹ pada sí Alábòjútó, losing "
" àwọn ìgbà láàyè díẹ̀ á wà fún ẹgbẹ́ yìí. "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr ""
"Ìwọ ni ẹni tí ó ni ẹgbẹ́ yìí lọ́wọ́lọ́wọ́. Are you sure you want to make Ṣé "
"ó dá ọ lójú pé o fẹ́ jẹ́ %s oní nǹkan tuntun fún ẹgbẹ́?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "Ẹni tó ni ẹgbẹ́ tuntun"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "Kọ ọ́ jáde"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "Yàrá ìkàwé rẹ ṣófìfo. Ṣé ó dá ọ lójú pé o fẹ́ kọ ọ́ jáde?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "Gbé yàrá ìkàwé tó ṣófìfo jáde"
@@ -2154,21 +2157,21 @@ msgstr ""
msgid "modals.update-remote-component-in-bulk.message"
msgstr "Mú àwọn ẹ̀yà irin iṣẹ́ dójú ìwọ̀n nínú iyàram ìkàwé pípín"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "Mú dójú ìwọ̀n"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "Fagilé e"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr ""
"O ṣetán látí mú àwọn ẹ̀yà irin iṣẹ́ yàrá ìkàwé dójú ìwọ̀n . This may affect "
"Èyí lè fa wàhálà fún àwọn fáìlì míràn tí ó ń lò ó."
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "Mú ẹ̀yà iyàrá ìkàwé pípín kan dójú ìwọ̀n"
@@ -2176,11 +2179,11 @@ msgstr "Mú ẹ̀yà iyàrá ìkàwé pípín kan dójú ìwọ̀n"
msgid "notifications.by-code.upgrade-version"
msgstr "Ẹ̀yà tuntun ti wà, jọ̀wọ́ tún sọ ọ́ jí"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "Ìfipè tí a fi ránńṣẹ́ ti lọ dáadáa"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "ti ṣe àdàkọ ìfipè ọ̀nà ìtọ́ka sí"
@@ -2301,7 +2304,7 @@ msgstr ""
"Rántí láti fi gbogbo wọn sí i. Àwọn Olùdásílẹ̀, àwọn aṣàpẹẹrẹ, alákóso... "
"onírúúrú dà wọ́n pọ̀ :)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "Pè wọ́n pẹ̀lú ojúṣe wọn:"
@@ -2398,565 +2401,549 @@ msgstr "Pẹ́ńpọtì"
msgid "profile.recovery.go-to-login"
msgstr "Lọ láti wọlé"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "Yọ kúrò"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "Dàárú"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "Ipìlẹ̀"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "Ólùwò"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "Àaye ìṣẹ́"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "Titete"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "Sàtunkọ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "àbùdá"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "Akojọ ólórì aṣyn"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "Yípàdá fẹ́lẹ́fẹ́lẹ́"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "Lìlọ́ kìrì"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "Lìlọ́ kìrì"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "Lìlọ́ kìrì"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "Àwọ̀n pánẹ̀lí"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "Àwọ́n ọna"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "Àwọ́n apẹ́rẹ́"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "Àwọ́n ọ́rọ̀"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "Àwọ́n irínṣẹ̀"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "Sun-un"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "Sun-un"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "Ọ́rọ̀íwòye"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "Fí ípàdé kùn"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "Sópọ sí ísàle"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "Parapọ àárin"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "Páràpọ àárin naa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "Ṣe dèédé si ìdálárè"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "Sosi ósì"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "Sosi ọtún"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "Sopo si òké"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "Tẹle àárin ni inàró"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "Ṣẹ̀dá ọ̀kọ̀ lati yìyán"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "Yipàdà to han"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "Iyàtò Boolean"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "Boolean tà yọ̀kúro"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "ikòritá Boolean"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "Asépọ̀ Boolean"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "Fírànṣẹ́ si ẹ́hin"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "Ran pàdà sí ehin"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "Mù siwájù"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "Mù si wájù"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "Pa yipàdá rẹ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "Dàákọ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "Ṣẹ̀dá títún"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "Ge"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "Sun-un jàdé"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "Pàrẹ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "Pa ipàdé"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "Yà paati"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "Yìyí"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "Ẹ́lipsì"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "Fà ọnà"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "Ọnà"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "Ònìgún mèrìn"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "Ọ́rọ̀"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "Ṣe pidánpidán"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "Fàgílèè"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "Ókèéré apẹ̀rẹ̀"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "Sun-un látì ba gbògbò rẹ̀ mú"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "Yipadà ní pẹ̀tẹ̀lẹ̀"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "Yipadà ní ínàró"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "Dìn íwọ̀n fonti kù"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "Alekun iwọn fonti"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "Lọ sí iyáwòran"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "Lọ si awọn ílé-Ikàwé tí a pín"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "Wàá"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "Ẹgbẹ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "Pinpín kàákírì pètèlè"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "Ífìhan / Tọju UI"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "Sùn-un sínú"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "Fí àwóran sii"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "Yipàdà ítalikì"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "Dàràpọ̀ awọn ipàdé"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
-msgid "shortcuts.letter-spacing-dec"
-msgstr "Din aayé lẹ́tà kù"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "Alekun aayé lẹ́tà"
-
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
-msgid "shortcuts.line-height-dec"
-msgstr "Dinkù gígà ílà"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
-msgid "shortcuts.line-height-inc"
-msgstr "Ílà ton gá sókè"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.line-through"
msgstr "Íyìpàdà ílà to yọ̀rí"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "Ṣè ígùn"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "Ṣe ìsépọ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "Ibòjú"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "Dàpọ̀ awọ́n apa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "Gbé"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "Sàré lọ́ sí isàlẹ̀"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "Gbé sí osi kiákiá"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "Gbé si ọ̀tún kiákiá"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "Gbé si òké kiákiá"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "Gbé ipàdé"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "Gbé sílè"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "Gbé osi"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "Gbé sọtùn"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "Gbé sóke"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "Ọ̀kọ̀ tókan"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "Kò sí awọ́n ọ̀nà abùjá ti à rii"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "Fí akomo sí ipò 100%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "Fi akomo si ipo 10%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "Fi akomo si ipo 20%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "Fi akomo si ipo 30%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "Fi akomo si ipo 40%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "Fi akomo si ipo 50%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "Fi akomo si ipo 60%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "Fi akomo si ipo 70%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "Fi akomo si ipo 80%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "Fi akomo si ipo 90%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "Ólùṣà àwọ̀"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "Lọ si dasibodu"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "Lọ si apaa ayewo olùwò"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "Lọ si apaa ibaraẹnisọrọ olùwò"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " tabi "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "Lẹẹmọ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "Ọkọ ti tẹlẹ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "Tunṣe"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "tun sun"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "Wa awọn ọna abuja"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "Ṣa gbogbo re"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
msgid "shortcuts.select-parent-layer"
msgstr "Yan Obii pẹlẹbẹ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "Ifihan / Itọju ọna abùjá"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "Yaa si awon apa"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "Yaa si pikseli ilana"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "Bẹ̀rẹ̀ wíwọ̀n"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "da wíwọ̀n duro"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "Se étò awòn áwòran fun fidio"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "Iyipada titete ìmúdàgba"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "Yi dukia pada"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "Yi paleti awọ pada"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "Yi ipo idojukọ pada"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "Yi kuro ni fulscrin"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "Yi awon pelebe yii pada"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "Tiipa / Siilẹ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "títìipa lápàkàn"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "Yíípàda ọrọ paleti"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "Fihan / Toju re"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "Yiipada asa sun-un"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "Yii abẹlẹ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "Yi pada"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "Tu ẹgbẹ"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "Aiboju"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "Pin ni inaro"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "Dín lẹnsì sisun kù"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "Lílọ̀soké lẹnsi sisun"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "Yiyan pelu sun-un"
@@ -3004,19 +2991,19 @@ msgstr "Ọrọigbaníwólé - Penpot"
msgid "title.settings.profile"
msgstr "Profaili - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "Ifíwẹ́pe - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "Ọ́́mọ̀ ẹgbẹ - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "Awọn eto - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "Webhooks - %s - Penpot"
@@ -3072,35 +3059,35 @@ msgstr "Ifihan Ibaraenisépọ̀"
msgid "viewer.header.sitemap"
msgstr "Áwòran átọ̀kà ílẹ̀"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "Paŕàpọ̀ sí petelè aarin (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "Pin aayè ni pètélè (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "Páràpọ̀ sí òsì (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "Páràpọ̀ sí ọtun (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "Páràpọ̀ sí isàlẹ̀ (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "Páràpọ̀ sí inàro aarin (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "Pin aayè inàró (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "Párápọ̀ sóké (%s)"
@@ -3109,31 +3096,31 @@ msgstr "Párápọ̀ sóké (%s)"
msgid "workspace.assets.assets"
msgstr "Awọ̀n dukia"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "Gbọ̀gbọ̀ awọ̀n dukia"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "Áwò"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "Awọ̀n eroja"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "Ṣẹ̀dá ẹ̀gbẹ̀ kan"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr "páarẹ̀"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "ẹẹdà"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "Ṣatunkọ"
@@ -3142,15 +3129,15 @@ msgstr "Ṣatunkọ"
msgid "workspace.assets.graphics"
msgstr "Awọn Awòran"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "Ẹgbẹ"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "Orúkọ̀ ẹgbẹ"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "Ílè-iwè agbegbe"
@@ -3162,15 +3149,15 @@ msgstr "Ko si ohun-ini ti a rii"
msgid "workspace.assets.open-library"
msgstr "Ṣii faili ìlé-ikáwè"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "Lo oruko imiran"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "Lo oruko imiran fun ẹgbẹ"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "Wa dukia"
@@ -3179,7 +3166,7 @@ msgstr "Wa dukia"
msgid "workspace.assets.shared-library"
msgstr "Iĺẹ̀ iwekika ti a pln"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "Iwe itẹwe"
@@ -3200,7 +3187,7 @@ msgstr "Aaye leta"
msgid "workspace.assets.typography.line-height"
msgstr "Giga ila"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -3212,7 +3199,7 @@ msgstr "Oniru ọrọ"
msgid "workspace.assets.typography.text-transform"
msgstr "Iyipádà ọrọ"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "Títù ẹ̀gbẹ́"
@@ -3220,7 +3207,7 @@ msgstr "Títù ẹ̀gbẹ́"
msgid "workspace.focus.focus-mode"
msgstr "Ipo Idojukọ"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "Pa Ídòjúkọ"
@@ -3240,7 +3227,7 @@ msgstr "Itesiwaju gerege"
msgid "workspace.gradients.radial"
msgstr "Itesiwaju Radial"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "Pa asèkalẹ̀ iwọnbà"
@@ -3249,15 +3236,15 @@ msgstr "Pa asèkalẹ̀ iwọnbà"
msgid "workspace.header.menu.disable-scale-text"
msgstr "Pa ọrọ iwọnba"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "Pa yipada si piseli"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "Tan imudagba to Sedede"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "Tan asèkalẹ̀ iwọnbà"
@@ -3266,79 +3253,79 @@ msgstr "Tan asèkalẹ̀ iwọnbà"
msgid "workspace.header.menu.enable-scale-text"
msgstr "Tan iwọnbà ọrọ"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "Yipada si itọ̀nìsọna"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "Tan Yipada si piseli"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "Tọ̀jú awọ palẹti"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "Tọ̀jú pisẹli ilana"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "Tọ̀jú awọn ólòrí"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "Tọ̀jú awọn fọnti paleti"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "Satunkọ"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "Faili"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "Iranlọwọ ati alaye"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "Awọn àyánfẹ̀"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "Wiwo"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "Tun ṣe"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "Sa gbogbo rẹ"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "Fi awo paleti han"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "Fi piseli ilana han"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "Ifihan awọ̀n ólórí"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "Ifihan fonti paleti"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "Yi pada"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "Tunto"
@@ -3359,11 +3346,11 @@ msgstr "Fifipámọ"
msgid "workspace.header.unsaved"
msgstr "Awọn ayípàdà ti kó ni fipamọ"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "Ipo wiwo(%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "sun-un"
@@ -3375,7 +3362,7 @@ msgstr "Kun - óṣùwọn to kun"
msgid "workspace.header.zoom-fit"
msgstr "Báràmù - óṣùwọn to Báràmù"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "Suun kí o bá gbógbó rẹ̀ dọ́gbà"
@@ -3383,7 +3370,7 @@ msgstr "Suun kí o bá gbógbó rẹ̀ dọ́gbà"
msgid "workspace.header.zoom-full-screen"
msgstr "Áseàfihan to kún"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "Ṣuum lati yan"
@@ -3396,10 +3383,6 @@ msgstr "Ilànà àyípàdà"
msgid "workspace.libraries.add"
msgstr "Afikùn"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s awọn awọ"
-
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
msgstr "Kòyi si oniruiru awọ ni ilé-ikàwé re"
@@ -3422,27 +3405,19 @@ msgstr "Awọn àwò tálò láipẹ̀"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "RGB Ibáramù"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "Fi awọn oniru awọ pamọ"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s Ẹya ara ẹrọ"
-
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "Faili ilé ikàwé"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s ayaworan"
-
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "Awọn Ílè íkawè"
@@ -3451,55 +3426,51 @@ msgstr "Awọn Ílè íkawè"
msgid "workspace.libraries.library"
msgstr "Ílè íkawè"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "Ílè íkawè ímùdojúiwọn"
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "Kò si Ilé kàwé ti a pin si ímùdojúiwọn"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "Awọn ilé kàwé tí a pìn"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "Óríṣí awọn íwè itẹ̀wé"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "Tú gbógbó lińkí awọn íwè itẹ̀wé"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s awọn íwè itẹ̀wé"
-
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "ímùdojúiwọn"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "wò gbògbò awọn ayípàdà"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "Awọn ímùdojúiwọn"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "Tẹ amí + làtí fi íbàràénisépọ̀ kun"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "Baìbaì"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "Ẹ̀gdẹ́ Baìbaì"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "Asayan Baìbaì"
@@ -3507,23 +3478,23 @@ msgstr "Asayan Baìbaì"
msgid "workspace.options.canvas-background"
msgstr "Kánfásì abẹ́le"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "Ábẹrẹ́ ákoonù"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "Apakan"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "Ádàakọ"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "Ṣatunkọ àkọ̀silẹ̀"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "Ólòrí"
@@ -3563,7 +3534,7 @@ msgstr "Ókè"
msgid "workspace.options.constraints.topbottom"
msgstr "Ókè ati Ídí"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "Ónirú"
@@ -3571,7 +3542,7 @@ msgstr "Ónirú"
msgid "workspace.options.export"
msgstr "Sí ilẹ́ òkèeré"
-#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "afikun ọrọ niipárí"
@@ -3579,7 +3550,7 @@ msgstr "afikun ọrọ niipárí"
msgid "workspace.options.exporting-complete"
msgstr "Gbígbè okeere ti pari"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "Gbígbè okeere …"
@@ -3587,11 +3558,11 @@ msgstr "Gbígbè okeere …"
msgid "workspace.options.exporting-object-error"
msgstr "Gbígbè okeere kuna"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "Kún"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "Safikun ibẹrè ṣiṣan"
@@ -3600,11 +3571,11 @@ msgstr "Safikun ibẹrè ṣiṣan"
msgid "workspace.options.flows.flow-start"
msgstr "ibẹrè ṣiṣan"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "íbẹrè awọn ṣiṣan"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "Aifọ́wọyi"
@@ -3613,7 +3584,7 @@ msgstr "Aifọ́wọyi"
msgid "workspace.options.grid.grid-title"
msgstr "Ilánà"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "Awọ"
@@ -3622,15 +3593,15 @@ msgstr "Awọ"
msgid "workspace.options.grid.params.columns"
msgstr "Awọn ọwọn"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "Gota"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "Òkè"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "Àlà"
@@ -3639,7 +3610,7 @@ msgstr "Àlà"
msgid "workspace.options.grid.params.rows"
msgstr "Àwọn orí ìlà ìbú"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "Fi sípò abínibí"
@@ -3653,143 +3624,143 @@ msgstr "Ìwọ̀n"
msgid "workspace.options.grid.params.type"
msgstr "Irú"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "ìsàlẹ̀"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "Àárín"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "Òsì"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "Ọ̀tún"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "Nà"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "Òkè"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "Lo ipò abínibí"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "Ìgbòrò"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "Àwọn orị ìlà ìbú"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "Alápoméjì"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "Ẹ̀kún ẹgbẹ́"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "Ẹgba ẹgbẹ́"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "Gíga"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "Ṣàyẹ̀wò"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "Ìgbésẹ̀"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "Lẹ́yìn ìdádúro"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "Àwòrán abẹ̀mí"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "Túká"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "Kòsí"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "Tì"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "Aṣàfihàn"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "Ọkọ̀"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "Fi àyíká ìtẹ̀lẹ̀ ìlànà síi"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "Páadé tí o bá n tẹ ìta"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "Pa ìlànà ìtẹ̀lẹ̀ dé"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "Pa ìlànà ìtẹ̀lẹ̀ dé: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "Ìdádúró"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "Èbúté"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "Ịgbà"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "Rírokùn"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "Ìrọ̀rùn"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "Rọra wọlé"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "Rọra wọlé jáde"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "Rọra jáde"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "Ilà"
@@ -3798,47 +3769,47 @@ msgstr "Ilà"
msgid "workspace.options.interaction-in"
msgstr "Inú"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "Atọ́ka ìwọnú"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "Atọ́ka kíkúrò"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "ms"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "Lílọ kiri sí"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "Lílo kiri sí: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(Akò ṣètò)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "Ipa àìṣedédé"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "Tẹ orí"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "Ṣíìtẹ̀lé ìlànà"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "Ṣí ìtẹ̀lé ìlànà: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "Ṣí URL"
@@ -3847,147 +3818,147 @@ msgstr "Ṣí URL"
msgid "workspace.options.interaction-out"
msgstr "Jáde"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "Àáriń ìsàlẹ̀"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "Ìsàlẹ̀ òsì"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "Ìsàḷ̀ẹ̀ ọ̀tún"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "Àárín"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "Aláfọwóṣe"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "Àárín òkè"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "Òkè òsì"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "Òkè ọ̀tún"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "Ipò"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "Ṣe ìtọ́jú ipò àyílọ"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "Aṣàfihàn àtẹ̀yìnwá"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "Ìbátan sí"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "Tìkara"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "Àyípadà ìtẹ̀lé ìlànà"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "Àyípadà ìtẹ̀lé ìlànà: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "Okùnfà"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "Nígbàtí óhún rábàbà"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "Nígbàtị óhún tẹ̀"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "Àwọn ìbáraẹniṣepọ̀"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "Àwọ̀"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "Ṣẹ̀dà àwọ̀"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "Òpó àwọ̀"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "Ṣókuǹkùn"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "Ìyàtọ̀"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "Ìyàsọ́tọ̀"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "Iná líle"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "Ọdà"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "Fẹ́ẹ́rẹ́fẹ́"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "Ìmọ́lẹ̀"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "Ìsọdipúpọ̀"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "Déédé"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "Ìtẹ̀lẹ́ ìlànà"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "Ẹ̀kúnrẹ́rẹ́"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "Aṣàfihàn"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "Ìmọ́lẹ̀ rokoṣo"
@@ -4011,19 +3982,19 @@ msgstr "Egbẹ́ ààyò"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "Ànàálè ìtẹ̀síwájú"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "Ibi tó ga jùlọ"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "Ìgbòrò tó ga jù"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "Gíga to kéré jù lọ"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "Ìgbòrò tó kéré jù lọ"
@@ -4137,15 +4108,15 @@ msgstr "Àyè àárín"
msgid "workspace.options.layout.top"
msgstr "Òkè"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "Àwọn àwọ̀ púpọ̀ sí i"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "Àwọn yàrá àwọ̀ púpọ̀ sí I"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "Àìríran"
@@ -4154,27 +4125,27 @@ msgstr "Àìríran"
msgid "workspace.options.position"
msgstr "Ipò"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "Ìtẹ̀lé ìlànà"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "Ìdáméjì òbìrìkìtiì"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "Apá òsì ìsàlẹ̀"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "Apá ọ̀tún ìsàle"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "Òkè òsì"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "Òkè ọ̀tún"
@@ -4186,7 +4157,7 @@ msgstr "Àìpẹ́"
msgid "workspace.options.retry"
msgstr "Tún gbìyànjú"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "Yíyípo"
@@ -4194,29 +4165,29 @@ msgstr "Yíyípo"
msgid "workspace.options.search-font"
msgstr "Àdàkọ ìwádìí"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr ""
"Yan ìrísi ,pátákó tàbí ẹgbẹ́ láti fa ìsopọ̀ mọ́ pátákó "
"òmíràn."
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "Àwọn àwọ̀ tí a ti yàn"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "Ìmúṣẹ tí a yàn"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "Ipò ìlù tí a yàn"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "Rẹ́súrẹ́sú"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "Àwọ̀ òjíjí"
@@ -4228,47 +4199,48 @@ msgstr "Da òjìjí"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "Òjìjí inú"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "Tànkálẹ̀"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "Òjìjí"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "Àwùjọ òjìjí"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "Òjìjí tí a yàn"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "Fihàn nínụ àgbéjáde"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "Fihàn nínú ipò wíwò"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "Ìwọ̀n"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "Àwọn àtòjọ"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "Ipò ìlà"
@@ -4277,7 +4249,7 @@ msgstr "Ipò ìlà"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "Àmì yíyíká"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "Yíyíká"
@@ -4286,7 +4258,7 @@ msgstr "Yíyíká"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "Àmì dáyámọ́ǹdì"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "Dáyámọ́ǹdì"
@@ -4295,19 +4267,19 @@ msgstr "Dáyámọ́ǹdì"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "Ọfà ìlà"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "Ofà"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "Kòsí"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "Yíká"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "Alápoméjì"
@@ -4316,7 +4288,7 @@ msgstr "Alápoméjì"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "Àmì alápoméjì"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "Onígun mẹ́rin"
@@ -4325,75 +4297,75 @@ msgstr "Onígun mẹ́rin"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "Ofà onígun mẹ́ta"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "Onígun mẹ́ta"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "Àwọ ìlà"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "Ìgbòrò ìlà"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "Àárín"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "Tó ní ìlà-ìlà"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "àmì tó tó tó"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "Nínú"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "Tí a ti dàpọ̀"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "Ìta"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "Ṣinsin"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "Mú dọ́gba abẹ́"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "Mú dọgba àárín"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "Mú dọ́gba òkè"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "LTR"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "RTL"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "Gíga aládàáṣiṣẹ́"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "Gbígbòòrò aládáàṣiṣé"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "Tí kò yíyadà"
@@ -4415,35 +4387,35 @@ msgstr "Lẹ́tà kékeré"
msgid "workspace.options.text-options.none"
msgstr "Kòsí"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "Ìfọwọ́bàyíká (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "Mú dọ́gba àárín"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "Ìdálàre"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "Mú dọ́gba òsì"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "Mú dọ́gba ọ̀tún"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "Àyọkà"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "Àwùjọ àyọkà"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "Àṣàyàn ọ̀rọ̀"
@@ -4452,7 +4424,7 @@ msgstr "Àṣàyàn ọ̀rọ̀"
msgid "workspace.options.text-options.titlecase"
msgstr "ipò ọ̀rọ̀ àkórí"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "Fífàlà (%s)"
@@ -4461,21 +4433,21 @@ msgstr "Fífàlà (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "Lẹ́tà ńlá"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr ""
"Lo bọ́tìnì ìṣe tó wà lóori àkọsórí náà láti ṣakóso ìwò "
"àkàwé."
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "Ìgbòrò"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "Ipò X"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Ipò Y"
@@ -4539,7 +4511,7 @@ msgstr "dá padà sọ́wọ èyiǹ"
msgid "workspace.shape.menu.copy"
msgstr "Ṣẹ̀dà"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "Ṣèda àlàyé"
@@ -4547,11 +4519,11 @@ msgstr "Ṣèda àlàyé"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "Yíyàn sí pátákó"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "Ṣẹ́dá àkóónú"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "Ṣẹ̀dá ọ̀pọ̀lọpọ̀ àkóónú"
@@ -4559,7 +4531,7 @@ msgstr "Ṣẹ̀dá ọ̀pọ̀lọpọ̀ àkóónú"
msgid "workspace.shape.menu.cut"
msgstr "Gé"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "Parẹ́"
@@ -4567,15 +4539,15 @@ msgstr "Parẹ́"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "Pa ìbẹ̀ẹ̀rè ìsàn rẹ́"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "ṣẹ́ àpẹ̣ẹre yọ nípò"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "Ṣẹ́ àwọn àpẹẹrẹ yọ nípò"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "Ìyàtọ̀"
@@ -4587,11 +4559,11 @@ msgstr "Sẹ ẹ̀dà"
msgid "workspace.shape.menu.edit"
msgstr "Sàtúnṣe"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "Ṣà yọ sílè"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "Tẹ́ pẹrẹsẹ"
@@ -4624,19 +4596,19 @@ msgstr "Lọ sí olórí fáìlì àkóónú"
msgid "workspace.shape.menu.group"
msgstr "Àwùjọ"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "Tọ́jú"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "Fihàn/ Tọ́jú UI"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "Ìkòríta"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "Tì"
@@ -4644,7 +4616,7 @@ msgstr "Tì"
msgid "workspace.shape.menu.mask"
msgstr "Ìbòjú"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "lẹ̀mọ́"
@@ -4656,11 +4628,11 @@ msgstr "Ipa ọ̀nà"
msgid "workspace.shape.menu.remove-flex"
msgstr "Yọ àrọ ètò ìrísí kúrò"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "Ṣe àtúnṣe ìdojúkọ"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "Dạ àkóónú pàtàkì sí pò"
@@ -4668,15 +4640,15 @@ msgstr "Dạ àkóónú pàtàkì sí pò"
msgid "workspace.shape.menu.select-layer"
msgstr "Yan ìpele"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "Ṣà fihàn"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "Ṣafihàn nínú atọ́ka àwọn ìgbìmọ̀ ìní"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "Ṣà fihàn àkóónú pàtàkì"
@@ -4689,6 +4661,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "Fi sípò àwòrań aláṣojú"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "Yípadà sí pópó ọ̀nà"
@@ -4696,11 +4669,11 @@ msgstr "Yípadà sí pópó ọ̀nà"
msgid "workspace.shape.menu.ungroup"
msgstr "Ṣe àìkójọ"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "Ìbáṣepò"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "Ṣíí"
@@ -4721,11 +4694,11 @@ msgstr "Wó òpó ègbẹ́"
msgid "workspace.sidebar.expand"
msgstr "Fẹ òpó ẹ̀gbẹ́"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "Ìtàn"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "Àwọn ìpele"
@@ -4765,7 +4738,7 @@ msgstr "Àwọn àyọkà"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "Gbígbé àwọn ànímọ́ SVG wọlé wá"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "Àwọn abala"
@@ -4773,7 +4746,7 @@ msgstr "Àwọn abala"
msgid "workspace.sitemap"
msgstr "Máàpù ojú ìlà"
-#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "Àwọn ohun ìní"
@@ -4781,7 +4754,7 @@ msgstr "Àwọn ohun ìní"
msgid "workspace.toolbar.color-palette"
msgstr "Pálètì àwọ̀ (%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "Àwọn ìdáásí (%s)"
@@ -4971,19 +4944,19 @@ msgstr "Iṣẹ́ parí %s"
msgid "workspace.undo.title"
msgstr "Ìtàn"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "Ta nù"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "Àlàyé síi"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "Àwọn imúdójúìwọ̀n wà nínú àwọn yàrá ìkàwẹ tí a pín"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "Ìmúdójúìwọ̀n"
diff --git a/frontend/translations/zh_CN.po b/frontend/translations/zh_CN.po
index 7f50e477ae..42982d55b3 100644
--- a/frontend/translations/zh_CN.po
+++ b/frontend/translations/zh_CN.po
@@ -1,15 +1,15 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-28 10:46+0000\n"
-"Last-Translator: Jun Fang \n"
-"Language-Team: Chinese (Simplified Han script) "
-" \n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
+"Last-Translator: Anonymous \n"
+"Language-Team: Chinese (Simplified Han script) \n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Weblate 5.13\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -168,7 +168,7 @@ msgstr "设计与原型的开源解决方案。"
msgid "auth.terms-and-privacy-agreement"
msgstr "我同意 [服务条款](%s) 与 [隐私政策](%s)。"
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "服务协议"
@@ -193,7 +193,7 @@ msgstr "品牌设计、插图、营销物料等。"
msgid "comments.mentions.not-found"
msgstr "未找到 @%s 相关人员"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "发布"
@@ -263,7 +263,7 @@ msgstr "分享原型"
msgid "common.share-link.view-all"
msgstr "选择所有"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "未发布"
@@ -381,7 +381,7 @@ msgstr "令牌无到期时限"
msgid "dashboard.add-file"
msgstr "新增文件"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "新增为共享库"
@@ -389,31 +389,31 @@ msgstr "新增为共享库"
msgid "dashboard.change-email"
msgstr "修改电子邮件"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(复制)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "创建新团队"
-#: src/app/main/ui/workspace/main_menu.cljs:631
+#: src/app/main/ui/workspace/main_menu.cljs:659
msgid "dashboard.create-version-menu"
msgstr "固定此版本"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "你的Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "删除团队"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "下载Penpot文件 (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "下载标准文件(.svg + .json)"
@@ -441,6 +441,20 @@ msgstr "项目成员创建文件后,它将显示在这里。"
msgid "dashboard.empty-placeholder-files-title"
msgstr "还没有文件。"
+#: src/app/main/ui/dashboard/placeholder.cljs:118
+#, markdown
+msgid "dashboard.empty-placeholder-libraries"
+msgstr ""
+"添加至项目的库将显示在这里。您可以尝试共享您的文件,或从我们的[库和模板](https://penpot.app/libraries-"
+"templates)添加。"
+
+#: src/app/main/ui/dashboard/placeholder.cljs
+#, markdown, unused
+msgid "dashboard.empty-placeholder-libraries-subtitle"
+msgstr ""
+"添加至项目的库将显示在这里。您可以尝试共享您的文件,或从我们的[库和模板](https://penpot.app/libraries-"
+"templates)添加。"
+
#: src/app/main/ui/dashboard/placeholder.cljs:114
msgid "dashboard.empty-placeholder-libraries-subtitle-viewer-role"
msgstr "添加至项目中的库将显示在这里。"
@@ -481,7 +495,7 @@ msgstr "开始构建令人惊奇的材料"
msgid "dashboard.export-binary-multi"
msgstr "下载 %s Penpot文件 (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "将画板导出为 PDF 格式"
@@ -497,7 +511,7 @@ msgstr "导出 %s 个文件"
msgid "dashboard.export-multiple.selected"
msgstr "已选择 %s / %s 元素"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "导出"
@@ -647,6 +661,12 @@ msgstr "下面的文件有错误:"
msgid "dashboard.import.import-error.message2"
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/import.cljs:474
msgid "dashboard.import.import-warning"
msgstr "一些包含无效对象的文档已被移除。"
@@ -683,11 +703,11 @@ msgstr "数据上传中"
msgid "dashboard.import.progress.upload-media"
msgstr "文件上传中"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "邀请people"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "退出团队"
@@ -695,7 +715,7 @@ msgstr "退出团队"
msgid "dashboard.libraries-and-templates"
msgstr "库和模板"
-#: src/app/main/ui/dashboard/templates.cljs:259
+#: src/app/main/ui/dashboard/templates.cljs:267
msgid "dashboard.libraries-and-templates.description"
msgstr "这里你有一些可以添加至你项目的库和模版"
@@ -703,7 +723,7 @@ msgstr "这里你有一些可以添加至你项目的库和模版"
msgid "dashboard.libraries-and-templates.explore"
msgstr "探索更多内容,了解如何做出贡献"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "导入模板时发生错误。模板未导入成功。"
@@ -739,7 +759,7 @@ msgstr "移动到其他团队"
msgid "dashboard.new-file"
msgstr "+ 新文档"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "新建文件"
@@ -747,7 +767,7 @@ msgstr "新建文件"
msgid "dashboard.new-project"
msgstr "+ 新项目"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "新建项目"
@@ -755,11 +775,11 @@ msgstr "新建项目"
msgid "dashboard.no-matches-for"
msgstr "没有找到“%s”的匹配项"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "被钉住的项目会显示在这儿"
-#: src/app/main/ui/dashboard/comments.cljs:90
+#: src/app/main/ui/dashboard/comments.cljs:91
msgid "dashboard.notifications"
msgstr "通知"
@@ -771,7 +791,7 @@ msgstr "已经成功更新你的电子邮件"
msgid "dashboard.notifications.email-verified-successfully"
msgstr "已经成功验证你的电子邮件"
-#: src/app/main/data/profile.cljs:272
+#: src/app/main/data/profile.cljs:273
msgid "dashboard.notifications.notifications-saved"
msgstr "通知设置已更新"
@@ -779,11 +799,11 @@ msgstr "通知设置已更新"
msgid "dashboard.notifications.password-saved"
msgstr "已经成功保存密码!"
-#: src/app/main/ui/dashboard/comments.cljs:44
+#: src/app/main/ui/dashboard/comments.cljs:45
msgid "dashboard.notifications.view"
msgstr "查看通知"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "成员%s人"
@@ -815,7 +835,7 @@ msgstr "你现在是此团队的拥有者。"
msgid "dashboard.permissions-change.viewer"
msgstr "你现在是此团队的查看人员。"
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "钉到侧边栏/取消钉住"
@@ -852,7 +872,7 @@ msgstr "你现在不再是此团队“%s”的成员。"
msgid "dashboard.save-settings"
msgstr "保存设置"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "搜索…"
@@ -944,7 +964,7 @@ msgstr "通知"
msgid "dashboard.show-all-files"
msgstr "显示全部文档"
-#: src/app/main/ui/workspace/main_menu.cljs:638
+#: src/app/main/ui/workspace/main_menu.cljs:666
msgid "dashboard.show-version-history"
msgstr "版本历史"
@@ -968,7 +988,7 @@ msgstr[1] "您的多个文件已被成功复制"
msgid "dashboard.success-duplicate-project"
msgstr "成功创建了项目副本"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "成功移动了文件"
@@ -980,15 +1000,15 @@ msgstr "成功移动了文件"
msgid "dashboard.success-move-project"
msgstr "成功移动了项目"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "团队信息"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "团队成员"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "团队项目"
@@ -1008,7 +1028,7 @@ msgstr "搜索结果"
msgid "dashboard.type-something"
msgstr "输入关键词进行搜索"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "取消发布库"
@@ -1016,47 +1036,47 @@ msgstr "取消发布库"
msgid "dashboard.update-settings"
msgstr "保存设置"
-#: src/app/main/ui/dashboard/sidebar.cljs:856
+#: src/app/main/ui/dashboard/sidebar.cljs:976
msgid "dashboard.upgrade-plan.no-limits"
msgstr "无创作能力限制"
-#: src/app/main/ui/dashboard/sidebar.cljs:854
+#: src/app/main/ui/dashboard/sidebar.cljs:974
msgid "dashboard.upgrade-plan.penpot-free"
msgstr "Penpot 免费"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "处于活跃状态"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "当这个webhook被触发时,事件细节将被传递"
-#: src/app/main/ui/dashboard/team.cljs:982
+#: src/app/main/ui/dashboard/team.cljs:1160
msgid "dashboard.webhooks.cant-edit"
msgstr "您只能删除或修改由您创建的 webhooks。"
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "内容类型"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "创建webhook"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "Webhook创建成功。"
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr "Webhooks是一种简单的方式,允许其他网站和应用程序在Penpot的某些事件发生时得到通知。我们将发送一个POST请求到你提供的每个URL。"
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "按“添加webhook”按钮添加一个。"
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "到目前为止还没有创建webhook。"
@@ -1076,7 +1096,7 @@ msgstr "电子邮件"
msgid "dashboard.your-name"
msgstr "你的姓名"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "你的Penpot"
@@ -1092,15 +1112,15 @@ msgstr "注意"
msgid "ds.component-subtitle"
msgstr "待更新的组件:"
-#: src/app/main/ui/workspace/plugins.cljs:338, src/app/main/ui/workspace/plugins.cljs:392
+#: src/app/main/ui/workspace/plugins.cljs:339, src/app/main/ui/workspace/plugins.cljs:393
msgid "ds.confirm-allow"
msgstr "允许"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "取消"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "OK"
@@ -1108,6 +1128,26 @@ msgstr "OK"
msgid "ds.confirm-title"
msgstr "你确定?"
+#: src/app/main/ui/ds/controls/numeric_input.cljs:98
+msgid "ds.inputs.numeric-input.no-applicable-tokens"
+msgstr "活动集合或主题中无可用token。"
+
+#: src/app/main/ui/ds/controls/numeric_input.cljs:99
+msgid "ds.inputs.numeric-input.no-matches"
+msgstr "无匹配项。"
+
+#: src/app/main/ui/ds/controls/numeric_input.cljs:641, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:138
+msgid "ds.inputs.numeric-input.open-token-list-dropdown"
+msgstr "打开token列表"
+
+#: src/app/main/ui/ds/controls/utilities/token_field.cljs:85, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:133
+msgid "ds.inputs.token-field.detach-token"
+msgstr "分离token"
+
+#: src/app/main/ui/ds/controls/utilities/token_field.cljs:40, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:96, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:103
+msgid "ds.inputs.token-field.no-active-token-option"
+msgstr "该token于任意活动集合或主题皆不可用。"
+
#: src/app/main/data/auth.cljs:314
msgid "errors.auth-provider-not-allowed"
msgstr "认证提供者不允许访问此个人设定"
@@ -1144,6 +1184,10 @@ msgstr "你的浏览器不支持该操作"
msgid "errors.comment-error"
msgstr "评论有错误"
+#: src/app/main/errors.cljs:300
+msgid "errors.deprecated"
+msgstr "抱歉!这是一个使用了已弃用的 Penpot 资源类型的旧文件,您无法打开它。"
+
#: src/app/main/errors.cljs:303
msgid "errors.deprecated.contact.after"
msgstr "所以我们可以帮助你。"
@@ -1156,7 +1200,7 @@ msgstr "虽然Penpot不再支持此类型的资源,但您可以"
msgid "errors.deprecated.contact.text"
msgstr "联系我们"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:266
+#: src/app/main/data/workspace/tokens/library_edit.cljs:274
msgid "errors.drop-token-set-parent-to-child"
msgstr "无法将父集放置到自己的子路径中。"
@@ -1180,11 +1224,11 @@ msgstr "邮件和此邀请不匹配。"
msgid "errors.email-domain-not-allowed"
msgstr "不允许使用此域名"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "电子邮件“%s”收到了非常多的永久退信报告。"
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "此邮箱[%s]已被标记为垃圾邮件或已被永久拉黑。"
@@ -1196,11 +1240,6 @@ msgstr "看起来你正在打开一个启用了'%s'功能的文件,但当前pe
msgid "errors.feature-not-supported"
msgstr "不支持功能“%s”。"
-#: src/app/main/ui/auth/register.cljs, src/app/main/ui/dashboard/team_form.cljs, src/app/main/ui/onboarding/team_choice.cljs, src/app/main/ui/setti ngs/access_tokens.cljs, src/app/main/ui/settings/feedback.cljs, src/app/main/ui/settings/profile.cljs, src/app/main/ui/workspace/sidebar/assets.cljs
-#, unused
-msgid "errors.field-max-length"
-msgstr "最多可包含1个字符。"
-
#, unused
msgid "errors.field-min-length"
msgstr "至少需要包含1个字符。"
@@ -1218,7 +1257,7 @@ msgstr "名称必须包含除空格外的其他字符。"
msgid "errors.file-feature-mismatch"
msgstr "看起来当前启用的功能,与正在打开的文件所依赖的功能不匹配。在打开文件前,需要应用对“%s”修改。"
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "发生了某种错误。"
@@ -1268,10 +1307,14 @@ msgstr "此邀请可能已取消或已过期。"
msgid "errors.ldap-disabled"
msgstr "LDAP身份验证已禁用。"
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "您已达到“%s”报价。与支持人员联系。"
+#: src/app/main/ui/dashboard/team.cljs:187, src/app/main/ui/dashboard/team.cljs:849, src/app/main/ui/onboarding/team_choice.cljs:101
+msgid "errors.maximum-invitations-by-request-reached"
+msgstr "已达到单次请求中可邀请的电子邮件数量上限(%s)"
+
#: src/app/main/data/workspace/media.cljs:190
msgid "errors.media-too-large"
msgstr "图片尺寸过大,故无法插入。"
@@ -1284,7 +1327,7 @@ msgstr "图片内容好像与文档扩展名不匹配。"
msgid "errors.media-type-not-allowed"
msgstr "该图片好像不可用。"
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr "你邀请的人设置了邮件免打扰(报告垃圾邮件或者多次退信)。"
@@ -1318,7 +1361,7 @@ msgstr "剪切板中为无效数据"
msgid "errors.profile-blocked"
msgstr "个人资料已被屏蔽"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr "你设置了邮件免打扰(报告垃圾邮件或者多次退信)。"
@@ -1334,19 +1377,19 @@ msgstr "SVG无效或格式错误"
msgid "errors.team-feature-mismatch"
msgstr "检测到不兼容功能“%s”"
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr "离开团队后成员不足,您可能要将其删除。"
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "您尝试分配的成员不存在。"
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr "所有者不能离开团队,您必须转让所有者角色。"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:153, src/app/main/data/workspace/tokens/library_edit.cljs:183
+#: src/app/main/data/workspace/tokens/library_edit.cljs:150, src/app/main/data/workspace/tokens/library_edit.cljs:180
msgid "errors.token-set-already-exists"
msgstr "同名的集已经存在"
@@ -1355,11 +1398,11 @@ msgstr "同名的集已经存在"
msgid "errors.token-set-doesnt-exists"
msgstr "不能复制一个未知的集"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:265
+#: src/app/main/data/workspace/tokens/library_edit.cljs:273
msgid "errors.token-set-exists-on-drop"
msgstr "无法完成删除,同名集合已存在于路径中。"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:99
+#: src/app/main/data/workspace/tokens/library_edit.cljs:77, src/app/main/data/workspace/tokens/library_edit.cljs:95
msgid "errors.token-theme-already-exists"
msgstr "同名的主题选项已经存在"
@@ -1387,31 +1430,31 @@ msgstr "此版本被锁定,不能被其他人删除"
msgid "errors.version-not-supported"
msgstr "文件具有不兼容的版本号"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "连接错误,无法访问 URL"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "网址未通过验证。"
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "上次交付不成功。"
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "SSL 验证时出错。"
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "超时"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "验证时出现意外错误"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "意外状态%s"
@@ -1471,7 +1514,7 @@ msgstr "发生了一个错误"
msgid "inspect.attributes.blur"
msgstr "模糊"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "值"
@@ -1479,15 +1522,15 @@ msgstr "值"
msgid "inspect.attributes.color"
msgstr "颜色"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1495,7 +1538,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "填充"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "下载原图"
@@ -1589,35 +1632,37 @@ msgstr "实线"
msgid "inspect.attributes.stroke.width"
msgstr "宽"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "排版"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "字体"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "字号"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "文字风格"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "字体粗细"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "字距"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "行高"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "文字装饰"
@@ -1625,35 +1670,36 @@ msgstr "文字装饰"
msgid "inspect.attributes.typography.text-decoration.line-through"
msgstr "删除线"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "无"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "下划线"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "文本变换"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "首字母大写"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "小写"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "无"
-#: src/app/main/ui/inspect/attributes/text.cljs:159
+#: src/app/main/ui/inspect/attributes/text.cljs:152
msgid "inspect.attributes.typography.text-transform.unset"
msgstr "取消设置"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "大写"
@@ -1665,15 +1711,15 @@ msgstr "变体属性"
msgid "inspect.attributes.variants"
msgstr "变体属性"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr "如果您想了解有关设计检查的更多信息,请访问Penpot的帮助中心"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "有关检查的详细信息"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr "选择形状、板或组以检查其属性和代码"
@@ -1737,15 +1783,23 @@ msgstr "SVG"
msgid "inspect.tabs.code.selected.text"
msgstr "文本"
+#: src/app/main/ui/inspect/right_sidebar.cljs:109
+msgid "inspect.tabs.computed"
+msgstr "计算"
+
#: src/app/main/ui/inspect/right_sidebar.cljs:114
msgid "inspect.tabs.info"
msgstr "信息"
-#: src/app/main/ui/dashboard/comments.cljs:95
+#: src/app/main/ui/inspect/right_sidebar.cljs:165
+msgid "inspect.tabs.switcher.label"
+msgstr "图层信息"
+
+#: src/app/main/ui/dashboard/comments.cljs:96
msgid "label.mark-all-as-read"
msgstr "标记全部为已读"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "快捷方式"
@@ -1757,11 +1811,11 @@ msgstr "接受"
msgid "labels.access-tokens"
msgstr "访问令牌"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "激活"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.add"
msgstr "新增"
@@ -1769,11 +1823,11 @@ msgstr "新增"
msgid "labels.add-custom-font"
msgstr "添加自定义字体"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.adding"
msgstr "新增..."
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "管理员"
@@ -1781,7 +1835,7 @@ msgstr "管理员"
msgid "labels.adobe-xd"
msgstr "Adobe XD"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "全部"
@@ -1802,7 +1856,7 @@ msgstr "请过会儿再来试试,我们正在对服务器进行一些简单维
msgid "labels.bad-gateway.main-message"
msgstr "网关错误"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "取消"
@@ -1810,11 +1864,11 @@ msgstr "取消"
msgid "labels.canva"
msgstr "Canva"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "关闭"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:186
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:181
msgid "labels.collapse"
msgstr "折叠"
@@ -1826,11 +1880,11 @@ msgstr "评论"
msgid "labels.comment.mark-as-solved"
msgstr "标记为已解决"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "评论"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "社区"
@@ -1838,7 +1892,7 @@ msgstr "社区"
msgid "labels.confirm-password"
msgstr "确认密码"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "继续"
@@ -1854,11 +1908,11 @@ msgstr "你可以使用Penpot帐号继续"
msgid "labels.copy"
msgstr "复制"
-#: src/app/main/ui/inspect/attributes/common.cljs:118
+#: src/app/main/ui/inspect/attributes/common.cljs:99
msgid "labels.copy-color"
msgstr "复制颜色"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "复制链接"
@@ -1866,7 +1920,7 @@ msgstr "复制链接"
msgid "labels.copyright"
msgstr "Kaleidos @2024"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "创建"
@@ -1886,7 +1940,7 @@ msgstr "自定义字体"
msgid "labels.dashboard"
msgstr "面板"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "删除"
@@ -1898,7 +1952,7 @@ msgstr "删除该评论"
msgid "labels.delete-comment-thread"
msgstr "删除该讨论串"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "删除邀请"
@@ -1915,19 +1969,19 @@ msgstr "开发者"
msgid "labels.director"
msgstr "主管"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "丢弃"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "草稿"
-#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:65
msgid "labels.duplicate"
msgstr "复制"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "编辑"
@@ -1935,11 +1989,11 @@ msgstr "编辑"
msgid "labels.edit-file"
msgstr "编辑文档"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "编辑者"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:302
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:301
msgid "labels.empty"
msgstr "空"
@@ -1952,11 +2006,11 @@ msgstr "错误"
msgid "labels.event"
msgstr "事件"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "已到期"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "导出"
@@ -1984,7 +2038,7 @@ msgstr "字体提供者"
msgid "labels.font-variants"
msgstr "样式"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "字体"
@@ -1998,11 +2052,11 @@ msgstr "创始人/副总裁"
msgid "labels.freelancer"
msgstr "我是一名自由职业者"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "Github仓库"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "提交反馈"
@@ -2014,7 +2068,7 @@ msgstr "返回"
msgid "labels.graphic-design"
msgstr "平面设计"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "帮助中心"
@@ -2022,15 +2076,15 @@ msgstr "帮助中心"
msgid "labels.hide"
msgstr "隐藏"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "隐藏已决定的评论"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:134
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:130
msgid "labels.import"
msgstr "导入"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "未激活"
@@ -2050,7 +2104,7 @@ msgstr "内部错误"
msgid "labels.invision"
msgstr "InVision"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "邀请"
@@ -2058,7 +2112,7 @@ msgstr "邀请"
msgid "labels.language"
msgstr "语言"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "库&模板"
@@ -2078,7 +2132,7 @@ msgstr "登录或注册"
msgid "labels.login"
msgstr "登录"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "登出"
@@ -2086,11 +2140,11 @@ msgstr "登出"
msgid "labels.marketing"
msgstr "市场营销"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "成员"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "成员"
@@ -2098,23 +2152,27 @@ msgstr "成员"
msgid "labels.mention"
msgstr "提及"
+#: src/app/main/ui/ds/controls/numeric_input.cljs:619
+msgid "labels.mixed-values"
+msgstr "混合"
+
#: src/app/main/ui/settings/password.cljs:84
msgid "labels.new-password"
msgstr "新密码"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "下一项"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "你们都赶上了! 新的评论通知将出现在这里。"
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "没有待处理的邀请。"
-#: src/app/main/ui/dashboard/team.cljs:761
+#: src/app/main/ui/dashboard/team.cljs:739
msgid "labels.no-invitations-gather-people"
msgstr "召集你的人,一起建设伟大的事业。"
@@ -2131,7 +2189,7 @@ msgstr "哎呀!"
msgid "labels.notifications"
msgstr "通知"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "共1个文档"
@@ -2143,7 +2201,7 @@ msgid_plural "labels.num-of-frames"
msgstr[0] "1个画板"
msgstr[1] "%s个画板"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "1 个项目"
@@ -2162,7 +2220,7 @@ msgstr "旧密码"
msgid "labels.only-yours"
msgstr "仅你的"
-#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:309, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:338
+#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:310, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:339
msgid "labels.options"
msgstr "选项"
@@ -2178,7 +2236,7 @@ msgstr "其他(请注明)"
msgid "labels.other-short"
msgstr "其他"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "所有者"
@@ -2186,11 +2244,11 @@ msgstr "所有者"
msgid "labels.password"
msgstr "密码"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "待办"
-#: src/app/main/ui/dashboard/sidebar.cljs:750
+#: src/app/main/ui/dashboard/sidebar.cljs:751
msgid "labels.pinned-projects"
msgstr "固定项目"
@@ -2214,7 +2272,7 @@ msgstr "产品经理/项目经理"
msgid "labels.profile"
msgstr "个人资料"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "项目"
@@ -2222,7 +2280,7 @@ msgstr "项目"
msgid "labels.refresh"
msgstr "刷新"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "发布说明"
@@ -2236,11 +2294,11 @@ msgstr "重新加载文件"
msgid "labels.remove"
msgstr "移除"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "删除成员"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "重命名"
@@ -2268,7 +2326,7 @@ msgstr "新回复"
msgid "labels.reply.thread"
msgstr "回复"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "重新发送邀请"
@@ -2280,15 +2338,15 @@ msgstr "还原"
msgid "labels.retry"
msgstr "重试"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "角色"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "保存"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:715
+#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:730
msgid "labels.search"
msgstr "搜索"
@@ -2316,11 +2374,11 @@ msgstr "我们正在进行系统的程序维护。"
msgid "labels.service-unavailable.main-message"
msgstr "服务不可用"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:79
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:75
msgid "labels.sets"
msgstr "集"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "设置"
@@ -2332,7 +2390,7 @@ msgstr "分享"
msgid "labels.share-prototype"
msgstr "分享原型"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "共享库"
@@ -2340,7 +2398,7 @@ msgstr "共享库"
msgid "labels.show"
msgstr "显示"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "显示所有评论"
@@ -2348,11 +2406,11 @@ msgstr "显示所有评论"
msgid "labels.show-comments-list"
msgstr "显示评论列表"
-#: src/app/main/ui/workspace/comments.cljs:67, src/app/main/ui/workspace/comments.cljs:139
+#: src/app/main/ui/workspace/comments.cljs:68, src/app/main/ui/workspace/comments.cljs:140
msgid "labels.show-mentions"
msgstr "只显示您的提及"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "只显示你的评论"
@@ -2360,7 +2418,7 @@ msgstr "只显示你的评论"
msgid "labels.sketch"
msgstr "Sketch"
-#: src/app/main/ui/dashboard/sidebar.cljs:729
+#: src/app/main/ui/dashboard/sidebar.cljs:730
msgid "labels.sources"
msgstr "源"
@@ -2368,7 +2426,7 @@ msgstr "源"
msgid "labels.start"
msgstr "开始"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "状态"
@@ -2390,11 +2448,11 @@ msgstr "团队成员"
msgid "labels.themes"
msgstr "主题"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "教程"
-#: src/app/main/data/workspace/tokens/errors.cljs:93
+#: src/app/main/data/workspace/tokens/errors.cljs:101
msgid "labels.unknown-error"
msgstr "未知错误"
@@ -2426,15 +2484,15 @@ msgstr "上传自定义字体"
msgid "labels.uploading"
msgstr "正在上传…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "仅查看"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "查看者"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Webhooks"
@@ -2442,11 +2500,11 @@ msgstr "Webhooks"
msgid "labels.write-new-comment"
msgstr "写一条新评论"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(你)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "你的账户"
@@ -2487,18 +2545,34 @@ msgstr "从您的设计中直接获取 CSS 和 SVG。"
msgid "loader.tips.04.title"
msgstr "导出为代码"
+#: src/app/main/ui/ds/product/loader.cljs:29
+msgid "loader.tips.05.message"
+msgstr "共享资产和风格以保持一致性。"
+
#: src/app/main/ui/ds/product/loader.cljs:28
msgid "loader.tips.05.title"
msgstr "设计库"
+#: src/app/main/ui/ds/product/loader.cljs:31
+msgid "loader.tips.06.message"
+msgstr "通过动画和过渡让您的想法变为现实。"
+
#: src/app/main/ui/ds/product/loader.cljs:30
msgid "loader.tips.06.title"
msgstr "交互式原型"
+#: src/app/main/ui/ds/product/loader.cljs:33
+msgid "loader.tips.07.message"
+msgstr "Penpot 使用 SVG 和 CSS 进行无缝开发。"
+
#: src/app/main/ui/ds/product/loader.cljs:32
msgid "loader.tips.07.title"
msgstr "Web 标准格式"
+#: src/app/main/ui/ds/product/loader.cljs:35
+msgid "loader.tips.08.message"
+msgstr "使用便捷的快捷键(例如 Shift + A 用于自动布局)来加快您的工作流程。"
+
#: src/app/main/ui/ds/product/loader.cljs:34
msgid "loader.tips.08.title"
msgstr "键盘快捷键"
@@ -2511,27 +2585,31 @@ msgstr "选择适合您风格的主题。"
msgid "loader.tips.09.title"
msgstr "暗黑和浅色模式"
+#: src/app/main/ui/ds/product/loader.cljs:39
+msgid "loader.tips.10.message"
+msgstr "使用社区构建的插件扩展 Penpot 以获得额外的功能。"
+
#: src/app/main/ui/ds/product/loader.cljs:38
msgid "loader.tips.10.title"
msgstr "插件支持"
-#: src/app/main/ui/workspace/colorpicker.cljs:449, src/app/main/ui/workspace/colorpicker.cljs:450, src/app/main/ui/workspace/colorpicker.cljs:452
+#: src/app/main/ui/workspace/colorpicker.cljs:486, src/app/main/ui/workspace/colorpicker.cljs:487, src/app/main/ui/workspace/colorpicker.cljs:489
msgid "media.choose-image"
msgstr "选择图片"
-#: src/app/main/ui/workspace/colorpicker.cljs:244
+#: src/app/main/ui/workspace/colorpicker.cljs:256
msgid "media.gradient"
msgstr "渐变"
-#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:44, src/app/main/ui/ds/utilities/swatch.cljs:57, src/app/main/ui/inspect/attributes/common.cljs:63, src/app/main/ui/workspace/colorpicker.cljs:246, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:251
+#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:45, src/app/main/ui/ds/utilities/swatch.cljs:58, src/app/main/ui/inspect/attributes/common.cljs:44, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:65, src/app/main/ui/workspace/colorpicker.cljs:258, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:395
msgid "media.image"
msgstr "图片"
-#: src/app/main/ui/inspect/attributes/common.cljs:74
+#: src/app/main/ui/inspect/attributes/common.cljs:55
msgid "media.image.short"
msgstr "img"
-#: src/app/main/ui/workspace/colorpicker.cljs:442
+#: src/app/main/ui/workspace/colorpicker.cljs:479
msgid "media.keep-aspect-ratio"
msgstr "保持宽高比"
@@ -2549,7 +2627,7 @@ msgstr "正在加载图片…"
msgid "media.radial"
msgstr "径向"
-#: src/app/main/ui/workspace/colorpicker.cljs:242
+#: src/app/main/ui/workspace/colorpicker.cljs:254
msgid "media.solid"
msgstr "纯色"
@@ -2617,19 +2695,19 @@ msgstr "创建令牌"
msgid "modals.create-access-token.title"
msgstr "生成访问令牌"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "创建webhook"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "创建webhook"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "有效负载网址"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://example.com/postreceive"
@@ -2673,11 +2751,11 @@ msgstr "你确定想要删除这个对话?该讨论串里的所有评论都会
msgid "modals.delete-comment-thread.title"
msgstr "删除对话"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "你确定想要删除这个注释?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "删除注释"
@@ -2721,11 +2799,11 @@ msgstr "你确定要删除这个字体吗?如果它被用在某个文件里的
msgid "modals.delete-font.title"
msgstr "正在删除字体"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "你确定想要删除这个页面?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "删除页面"
@@ -2771,27 +2849,27 @@ msgid_plural "modals.delete-shared-confirm.title"
msgstr[0] "删除文件"
msgstr[1] "批量删除文件"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "删除团队"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr "你确定想要删除这个团队?与该团队关联的所有项目和文档都会被永久删除。"
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "正在删除团队"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "删除成员"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "你确定想要从团队中删除这个成员?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "删除团队成员"
@@ -2801,47 +2879,51 @@ msgid_plural "modals.delete-unpublish-shared-confirm.activated.hint"
msgstr[0] "这个文件中被其他文件引用的素材依然在那(其他文件的现有设计不会被破坏)。"
msgstr[1] "这些文件中被其他文件引用的素材依然在那(其他文件的现有设计不会被破坏)。"
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "删除webhook"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "你确定要删除这个webhook吗?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "删除webhook"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "编辑webhook"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "编辑webhook"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "发送邀请"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "电子邮件,以逗号分隔"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr "有些成员已经在团队中,我们将邀请其余成员。"
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:222
+msgid "modals.invite-team-member.text"
+msgstr "您可以邀请成员加入团队,以便他们可以访问此文件和所有团队文件。"
+
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "邀请成员加入团队"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr "由于你是这个团队的唯一成员,这个团队将连同其项目和文件一起被删除。"
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "您确定要离开 %s 团队吗?"
@@ -2865,15 +2947,15 @@ msgstr "选择一位成员晋升"
msgid "modals.leave-and-reassign.title"
msgstr "在你离开之前"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "退出团队"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "你确定要离开本团队吗?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "正在退出团队"
@@ -2895,35 +2977,35 @@ msgid_plural "modals.move-shared-confirm.title"
msgstr[0] "移动共享库"
msgstr[1] "移动多个共享库"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "微调量"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "转让所有权"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr "如果你转移所有权,你的角色将变为管理员,失去对这个团队的一些权限。 "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr "您是此团队的所有者,你确定想要将所有者转让给该成员?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "新增团队所有者"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "发布"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "你的库是空的。你确定想要发布它?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "发布空白库"
@@ -2974,19 +3056,19 @@ msgstr "你即将更新共享库中的组件,这可能会影响使用这些组
msgid "modals.update-remote-component-in-bulk.message"
msgstr "更新共享库组件"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "更新组件"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "取消"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr "你即将更新共享库中的一个组件。这可能会对使用该组件的其他文档产生影响。"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "更新共享库中的一个组件"
@@ -3018,6 +3100,10 @@ msgstr "免费注册"
msgid "not-found.login.start-using"
msgstr "并在数秒内开始使用 Penpot!"
+#: src/app/main/ui/static.cljs:65
+msgid "not-found.made-with-love"
+msgstr "用爱和开源制作"
+
#: src/app/main/ui/static.cljs:243
msgid "not-found.no-permission.already-requested.file"
msgstr "您已经申请了对此文件的访问权限。"
@@ -3078,15 +3164,19 @@ msgstr "要访问此文件,您可以询问团队拥有者。"
msgid "not-found.no-permission.you-can-ask.project"
msgstr "要访问此项目,您可以询问团队拥有者。"
+#: src/app/main/data/common.cljs:89
+msgid "notifications.by-code.maintenance"
+msgstr "维护中断:我们将在5分钟内进行短暂维护。"
+
#: src/app/main/data/common.cljs:82
msgid "notifications.by-code.upgrade-version"
msgstr "有新版本可用,请刷新页面"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "成功发送邀请"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "邀请链接已复制"
@@ -3215,7 +3305,7 @@ msgstr "邀请成员"
msgid "onboarding.choice.team-up.invite-members-info"
msgstr "记得将开发人员、设计师、经理……等各类人员都加进来:)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "邀请角色:"
@@ -3251,6 +3341,10 @@ msgstr "让我们开始吧!"
msgid "onboarding.questions.reasons.alternative"
msgstr "寻找 Figma、XD等的替代者"
+#: src/app/main/ui/onboarding/questions.cljs:243
+msgid "onboarding.questions.reasons.exploring"
+msgstr "仅浏览"
+
#: src/app/main/ui/onboarding/questions.cljs:246
msgid "onboarding.questions.reasons.fit"
msgstr "评估Penpot是否适合我的团队"
@@ -3302,6 +3396,10 @@ msgstr "您将使用 Penpot 做什么?"
msgid "onboarding.questions.step1.question2"
msgstr "是什么让你今天来到 Penpot?"
+#: src/app/main/ui/onboarding/questions.cljs:112
+msgid "onboarding.questions.step1.subtitle"
+msgstr "请告诉我们一些关于您的信息,帮助我们完善 Penpot。您的回答将帮助我们确定新功能的优先级,并指导您如何开始使用。"
+
#: src/app/main/ui/onboarding/questions.cljs:110
msgid "onboarding.questions.step1.title"
msgstr "帮助我们了解你"
@@ -3420,193 +3518,193 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "去登录"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "分离"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "混合"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:283
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:423
msgid "settings.remove-color"
msgstr "移除颜色"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:288
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:428
msgid "settings.select-this-color"
msgstr "选择使用此样式的项目"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "基础"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "仪表盘"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "观察者"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "工作区"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "对准"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "编辑"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "通用"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "通用"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "主菜单"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "修改图层"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "导航"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "导航"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "导航"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "面板"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "路径"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "形状"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "文本"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "工具"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "缩放"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "缩放"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "评论"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "添加节点"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "底部对齐"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "居中对齐"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "水平居中对齐"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "两端对齐"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "靠左对齐"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "靠右对齐"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "顶部对齐"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "垂直居中对齐"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "以所选内容创建画板"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "切换粗体"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "布尔差"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "布尔排除"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "布尔交集"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "布尔合并"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "移至最下层"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "移至下一层"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "移至上一层"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "移至最上层"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "清除回退内容"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "拷贝"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
msgid "shortcuts.copy-link"
msgstr "复制链接"
@@ -3615,287 +3713,271 @@ msgstr "复制链接"
msgid "shortcuts.copy-props"
msgstr "复制属性"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "创建新的"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "剪切"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "缩小"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "删除"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "删除节点"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "拆分组件"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "曲线"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "椭圆"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "画板"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "绘制路径"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "路径"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "长方形"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "文本"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "复制"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "取消"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "导出形状"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "缩放至适应所有"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "水平翻转"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "垂直翻转"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "缩小字体大小"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "增加字体大小"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "前往草稿"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "前往共享库"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "搜索"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "组"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "水平分布"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "显示/隐藏UI"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "放大"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "插入图片"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "切换斜体"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "链接节点"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
-msgid "shortcuts.letter-spacing-dec"
-msgstr "减少字母间距"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "减少字母间距"
-
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
-msgid "shortcuts.line-height-dec"
-msgstr "减少行高"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
-msgid "shortcuts.line-height-inc"
-msgstr "增加行高"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.line-through"
msgstr "切换删除线"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "制作圆角"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "制作曲线"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "遮罩"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "合并节点"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "移动"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "快速下移"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "快速向左移动"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "快速向右移动"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "快速上移"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "移动节点"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "向下移动"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "左移"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "右移"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "上移"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "下个画板"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "没找到快捷方式"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "设置不透明度为100%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "设置不透明度为10%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "设置不透明度为20%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "设置不透明度为30%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "设置不透明度为40%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "设置不透明度为50%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "设置不透明度为60%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "设置不透明度为70%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "设置不透明度为80%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "设置不透明度为90%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "色彩拾取器"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "前往查阅者评论区"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "前往看板"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "转到查看器检查部分"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "转往阅读器交互部分"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "转往阅读器交互部分"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "前往工作区"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " 或 "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "粘贴"
@@ -3909,191 +3991,191 @@ msgstr "粘贴属性"
msgid "shortcuts.plugins"
msgstr "插件管理器"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "前一画板"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "重做"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
msgid "shortcuts.rename"
msgstr "重命名"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "重置缩放"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
msgid "shortcuts.scale"
msgstr "缩放"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "搜索快捷方式"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "选择所有"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
msgid "shortcuts.select-next"
msgstr "选择下一个图层"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
msgid "shortcuts.select-parent-layer"
msgstr "选择上级图层"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
msgid "shortcuts.select-prev"
msgstr "选择上一个图层"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "分离节点"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "显示/隐藏像素网格"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "显示/隐藏快捷方式"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "对齐到节点"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "对齐像素网格"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "启用编辑"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "启用测量"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "停止测量"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "设置缩略图"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "快捷键"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "切换动态对齐"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "切换资产"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "切换调色板"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "切换焦点模式"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "切换全屏"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
msgid "shortcuts.toggle-guides"
msgstr "显示/隐藏参考线"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "切换历史"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "切换层"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "添加/删除弹性布局"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
msgid "shortcuts.toggle-layout-grid"
msgstr "添加/移除网格布局"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "锁定所选"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "锁定比例"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
msgid "shortcuts.toggle-rulers"
msgstr "显示/隐藏标尺"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
msgid "shortcuts.toggle-snap-guides"
msgstr "吸附到参考线"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
msgid "shortcuts.toggle-snap-ruler-guide"
msgstr "吸附到标尺参考线"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "切换文本调色板"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
msgid "shortcuts.toggle-theme"
msgstr "更改主题"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "切换可见度"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "切换缩放样式"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "切换下划线"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "回退"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "取消组合"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "取消遮罩"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "垂直分布"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "变焦镜头缩小"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "变焦镜头放大"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "缩放到选定对象"
@@ -4105,6 +4187,11 @@ msgstr "企业计划"
msgid "subscription.dashboard.power-up.enterprise-trial.top-title"
msgstr "企业计划(实验)"
+#: src/app/main/ui/dashboard/subscription.cljs:64
+#, markdown
+msgid "subscription.dashboard.power-up.professional.bottom-text"
+msgstr "获取无限套餐,为您的团队提供额外存储空间、文件恢复等更多功能。[Power up!|target:self](%s)"
+
#: src/app/main/ui/dashboard/subscription.cljs:63
msgid "subscription.dashboard.power-up.professional.top-title"
msgstr "专业计划"
@@ -4114,6 +4201,11 @@ msgstr "专业计划"
msgid "subscription.dashboard.power-up.subscribe"
msgstr "订阅"
+#: src/app/main/ui/dashboard/subscription.cljs:72
+#, markdown
+msgid "subscription.dashboard.power-up.trial.bottom-description"
+msgstr "试用体验良好?永久解锁完整访问权限。[订阅|target:self](%s)"
+
#: src/app/main/ui/dashboard/subscription.cljs:71
msgid "subscription.dashboard.power-up.trial.top-title"
msgstr "无限计划(试验)"
@@ -4122,20 +4214,56 @@ msgstr "无限计划(试验)"
msgid "subscription.dashboard.power-up.unlimited-plan"
msgstr "无限计划"
+#: src/app/main/ui/dashboard/subscription.cljs:78
+#, markdown
+msgid "subscription.dashboard.power-up.unlimited.bottom-text"
+msgstr "以固定价格为您的所有团队提供无限存储空间、扩展文件恢复能力和无限编辑器。[查看企业版。|target:self](%s)"
+
#: src/app/main/ui/dashboard/subscription.cljs:70
#, unused
msgid "subscription.dashboard.power-up.unlimited.cta"
msgstr "看一看"
+#: src/app/main/ui/dashboard/subscription.cljs:68
+#, unused
+msgid "subscription.dashboard.power-up.unlimited.top-description"
+msgstr "额外的编辑器、存储和自动保存的版本、文件备份等等。"
+
#: src/app/main/ui/dashboard/subscription.cljs:62, src/app/main/ui/dashboard/subscription.cljs:70, src/app/main/ui/dashboard/subscription.cljs:76, src/app/main/ui/dashboard/subscription.cljs:84, src/app/main/ui/dashboard/subscription.cljs:88
msgid "subscription.dashboard.power-up.your-subscription"
msgstr "您的订阅:"
+#: src/app/main/ui/dashboard/subscription.cljs:168
+msgid "subscription.dashboard.professional-dashboard-cta-title"
+msgstr "您所拥有的团队共有 %s 名编辑,而您的专业计划最多可拥有 8 名编辑。"
+
+#: src/app/main/ui/dashboard/subscription.cljs:176
+#, markdown
+msgid "subscription.dashboard.professional-dashboard-cta-upgrade-owner"
+msgstr "请升级到无限版或企业版,以解锁更多编辑席位、存储空间和文件恢复功能。[立即订阅。|target:self](%s)"
+
#: src/app/main/ui/dashboard/subscription.cljs:111
msgid "subscription.dashboard.team-plan"
msgstr "团队计划"
-#: src/app/main/ui/dashboard/sidebar.cljs:858
+#: src/app/main/ui/dashboard/subscription.cljs:171
+msgid "subscription.dashboard.unlimited-dashboard-cta-title"
+msgstr "您的团队不断壮大!您的无限套餐最多可容纳 %s 位编辑,但现在您有 %s 位。"
+
+#: src/app/main/ui/dashboard/subscription.cljs:179
+#, markdown
+msgid "subscription.dashboard.unlimited-dashboard-cta-upgrade-owner"
+msgstr "请升级以匹配您当前的编辑数量。[立即订阅。|target:self](%s)"
+
+#: src/app/main/ui/dashboard/subscription.cljs:156
+msgid "subscription.dashboard.unlimited-members-extra-editors-cta-text"
+msgstr "只有您自有团队中的新编辑人员才会被计入未来账单。25 名及以上编辑人员仍需支付每月 175 美元的固定费用。"
+
+#: src/app/main/ui/dashboard/subscription.cljs:152
+msgid "subscription.dashboard.unlimited-members-extra-editors-cta-title"
+msgstr "在无限套餐期间邀请他人"
+
+#: src/app/main/ui/dashboard/sidebar.cljs:978
msgid "subscription.dashboard.upgrade-plan.power-up"
msgstr "升级"
@@ -4143,6 +4271,22 @@ msgstr "升级"
msgid "subscription.labels"
msgstr "订阅"
+#: src/app/main/ui/settings/subscription.cljs:373, src/app/main/ui/settings/subscription.cljs:397
+msgid "subscription.settings.add-payment-to-continue"
+msgstr "添加付款方式以便在试用后继续"
+
+#: src/app/main/ui/settings/subscription.cljs:367, src/app/main/ui/settings/subscription.cljs:439
+msgid "subscription.settings.benefits.all-professional-benefits"
+msgstr "所有专业计划权益以及:"
+
+#: src/app/main/ui/settings/subscription.cljs:379, src/app/main/ui/settings/subscription.cljs:391, src/app/main/ui/settings/subscription.cljs:401, src/app/main/ui/settings/subscription.cljs:453
+msgid "subscription.settings.benefits.all-unlimited-benefits"
+msgstr "所有无限计划权益以及:"
+
+#: src/app/main/ui/settings/subscription.cljs:39
+msgid "subscription.settings.editors"
+msgstr "(x %s 位编辑)"
+
#: src/app/main/ui/dashboard/subscription.cljs:119, src/app/main/ui/settings/subscription.cljs:72, src/app/main/ui/settings/subscription.cljs:346, src/app/main/ui/settings/subscription.cljs:399, src/app/main/ui/settings/subscription.cljs:449
msgid "subscription.settings.enterprise"
msgstr "企业"
@@ -4151,10 +4295,32 @@ msgstr "企业"
msgid "subscription.settings.enterprise-trial"
msgstr "企业(实验)"
+#: src/app/main/ui/settings/subscription.cljs:393, src/app/main/ui/settings/subscription.cljs:403, src/app/main/ui/settings/subscription.cljs:455
+msgid "subscription.settings.enterprise.autosave"
+msgstr "90 天自动保存版本和文件恢复"
+
+#: src/app/main/ui/settings/subscription.cljs:394, src/app/main/ui/settings/subscription.cljs:404, src/app/main/ui/settings/subscription.cljs:456
+msgid "subscription.settings.enterprise.capped-bill"
+msgstr "每月固定费用"
+
+#: src/app/main/ui/settings/subscription.cljs:392, src/app/main/ui/settings/subscription.cljs:402, src/app/main/ui/settings/subscription.cljs:454
+msgid "subscription.settings.enterprise.unlimited-storage-benefit"
+msgstr "无限存储空间"
+
#: src/app/main/ui/dashboard/subscription.cljs:124, src/app/main/ui/settings/subscription.cljs:371, src/app/main/ui/settings/subscription.cljs:383, src/app/main/ui/settings/subscription.cljs:395, src/app/main/ui/settings/subscription.cljs:405
msgid "subscription.settings.manage-your-subscription"
msgstr "管理您的订阅"
+#: src/app/main/ui/settings/subscription.cljs:131
+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/settings/subscription.cljs:149
+msgid "subscription.settings.management.dialog.downgrade"
+msgstr "注意:切换到较低的计划意味着更少的存储空间和更短的备份和版本历史记录。"
+
#: src/app/main/ui/settings/subscription.cljs:170, src/app/main/ui/settings/subscription.cljs:174
#, markdown
msgid "subscription.settings.management.dialog.price-month"
@@ -4199,7 +4365,7 @@ msgstr "你是 %s!"
#: src/app/main/ui/settings/subscription.cljs:413
#, fuzzy
msgid "subscription.settings.support-us-since"
-msgstr "您一直支持我们的这个计划自从:%s"
+msgstr "您自从 %s 一直支持我们的这个计划"
#: src/app/main/ui/settings/subscription.cljs:443, src/app/main/ui/settings/subscription.cljs:457
msgid "subscription.settings.try-it-free"
@@ -4217,7 +4383,7 @@ msgstr "无限(实验)"
msgid "subscription.settings.unlimited.bill"
msgstr "月度账单上限"
-#: src/app/main/ui/dashboard/subscription.cljs:147, src/app/main/ui/workspace/main_menu.cljs:933
+#: src/app/main/ui/dashboard/subscription.cljs:147, src/app/main/ui/workspace/main_menu.cljs:961
msgid "subscription.workspace.header.menu.option.power-up"
msgstr "升级您的计划"
@@ -4273,19 +4439,19 @@ msgstr "密码 - Penpot"
msgid "title.settings.profile"
msgstr "个人资料 - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "邀请函 - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "成员 - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "设置 - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "Webhooks - %s - Penpot"
@@ -4355,43 +4521,43 @@ msgstr "点击时显示交互"
msgid "viewer.header.sitemap"
msgstr "站点地图"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "上次交付成功。"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "水平居中对齐 (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "水平均匀分布 (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "靠左对齐 (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "靠右对齐 (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "底部对齐 (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "垂直居中对齐 (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "垂直均匀分布 (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "顶部对齐 (%s)"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:163
+#: src/app/main/ui/workspace/sidebar/assets.cljs:172
msgid "workspace.assets.add-library"
msgstr "新增库"
@@ -4400,19 +4566,19 @@ msgstr "新增库"
msgid "workspace.assets.assets"
msgstr "素材"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "所有素材"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "颜色"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:493
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:497
msgid "workspace.assets.colors.add-color"
msgstr "新增颜色"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "组件"
@@ -4420,23 +4586,23 @@ msgstr "组件"
msgid "workspace.assets.components.add-component"
msgstr "新增组件"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:176, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:535
+#: src/app/main/ui/workspace/sidebar/assets/components.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:547
msgid "workspace.assets.components.num-variants"
msgstr "%s 变体"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "创建组"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr "这些物件将按照“组名/物件名”的格式自动命名"
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "删除"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "创建副本"
@@ -4444,11 +4610,11 @@ msgstr "创建副本"
msgid "workspace.assets.duplicate-main"
msgstr "重复主体"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "编辑"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:177
+#: src/app/main/ui/workspace/sidebar/assets.cljs:186
msgid "workspace.assets.filter"
msgstr "过滤器"
@@ -4457,27 +4623,27 @@ msgstr "过滤器"
msgid "workspace.assets.graphics"
msgstr "图形"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:576
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:190, src/app/main/ui/workspace/sidebar/assets/components.cljs:576
msgid "workspace.assets.grid-view"
msgstr "网格视图"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "组"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "组名"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:572
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:191, src/app/main/ui/workspace/sidebar/assets/components.cljs:572
msgid "workspace.assets.list-view"
msgstr "列表视图"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "本地库"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:168
+#: src/app/main/ui/workspace/sidebar/assets.cljs:177
msgid "workspace.assets.manage-library"
msgstr "管理库"
@@ -4489,15 +4655,15 @@ msgstr "未找到素材"
msgid "workspace.assets.open-library"
msgstr "打开库文档"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "重命名"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "重命名组"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "搜索素材"
@@ -4513,21 +4679,21 @@ msgstr[1] "已选中%s个物件"
msgid "workspace.assets.shared-library"
msgstr "共享库"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:237
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:235
msgid "workspace.assets.sidebar.components"
msgid_plural "workspace.assets.sidebar.components"
msgstr[0] "1个组件"
msgstr[1] "%s个组件"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:193
+#: src/app/main/ui/workspace/sidebar/assets.cljs:204
msgid "workspace.assets.sort"
msgstr "排序"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "排版"
-#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:404
+#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:405
msgid "workspace.assets.typography.add-typography"
msgstr "新增排版"
@@ -4552,7 +4718,7 @@ msgstr "字距"
msgid "workspace.assets.typography.line-height"
msgstr "行高"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -4564,59 +4730,59 @@ msgstr "文本样式"
msgid "workspace.assets.typography.text-transform"
msgstr "文本变换"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "解组"
-#: src/app/main/ui/workspace/context_menu.cljs:791
+#: src/app/main/ui/workspace/context_menu.cljs:794
msgid "workspace.context-menu.grid-cells.area"
msgstr "新建区域"
-#: src/app/main/ui/workspace/context_menu.cljs:794
+#: src/app/main/ui/workspace/context_menu.cljs:797
msgid "workspace.context-menu.grid-cells.create-board"
msgstr "新建画板"
-#: src/app/main/ui/workspace/context_menu.cljs:786
+#: src/app/main/ui/workspace/context_menu.cljs:789
msgid "workspace.context-menu.grid-cells.merge"
msgstr "合并网格"
-#: src/app/main/ui/workspace/context_menu.cljs:749
+#: src/app/main/ui/workspace/context_menu.cljs:752
msgid "workspace.context-menu.grid-track.column.add-after"
msgstr "在右侧添加一列"
-#: src/app/main/ui/workspace/context_menu.cljs:748
+#: src/app/main/ui/workspace/context_menu.cljs:751
msgid "workspace.context-menu.grid-track.column.add-before"
msgstr "在左侧添加一列"
-#: src/app/main/ui/workspace/context_menu.cljs:750
+#: src/app/main/ui/workspace/context_menu.cljs:753
msgid "workspace.context-menu.grid-track.column.delete"
msgstr "删除此列"
-#: src/app/main/ui/workspace/context_menu.cljs:751
+#: src/app/main/ui/workspace/context_menu.cljs:754
msgid "workspace.context-menu.grid-track.column.delete-shapes"
msgstr "删除此列及其内容"
-#: src/app/main/ui/workspace/context_menu.cljs:747
+#: src/app/main/ui/workspace/context_menu.cljs:750
msgid "workspace.context-menu.grid-track.column.duplicate"
msgstr "复制此列"
-#: src/app/main/ui/workspace/context_menu.cljs:756
+#: src/app/main/ui/workspace/context_menu.cljs:759
msgid "workspace.context-menu.grid-track.row.add-after"
msgstr "在下方添加一行"
-#: src/app/main/ui/workspace/context_menu.cljs:755
+#: src/app/main/ui/workspace/context_menu.cljs:758
msgid "workspace.context-menu.grid-track.row.add-before"
msgstr "在上方添加一行"
-#: src/app/main/ui/workspace/context_menu.cljs:757
+#: src/app/main/ui/workspace/context_menu.cljs:760
msgid "workspace.context-menu.grid-track.row.delete"
msgstr "删除此行"
-#: src/app/main/ui/workspace/context_menu.cljs:758
+#: src/app/main/ui/workspace/context_menu.cljs:761
msgid "workspace.context-menu.grid-track.row.delete-shapes"
msgstr "删除此行及其内容"
-#: src/app/main/ui/workspace/context_menu.cljs:754
+#: src/app/main/ui/workspace/context_menu.cljs:757
msgid "workspace.context-menu.grid-track.row.duplicate"
msgstr "复制此行"
@@ -4624,7 +4790,7 @@ msgstr "复制此行"
msgid "workspace.focus.focus-mode"
msgstr "禅模式"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "退出禅模式"
@@ -4644,11 +4810,11 @@ msgstr "线性渐变"
msgid "workspace.gradients.radial"
msgstr "放射渐变"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "禁用动态对齐"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "禁用比例尺"
@@ -4657,23 +4823,23 @@ msgstr "禁用比例尺"
msgid "workspace.header.menu.disable-scale-text"
msgstr "禁用缩放文本"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "禁用与参考线对齐"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "禁用像素对齐"
-#: src/app/main/ui/workspace/main_menu.cljs:215
+#: src/app/main/ui/workspace/main_menu.cljs:243
msgid "workspace.header.menu.disable-snap-ruler-guides"
msgstr "禁用“吸附到标尺参考线”"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "启用动态对齐"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "启用比例尺"
@@ -4682,51 +4848,51 @@ msgstr "启用比例尺"
msgid "workspace.header.menu.enable-scale-text"
msgstr "启用缩放文本"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "与参考线对齐"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "启用像素对齐"
-#: src/app/main/ui/workspace/main_menu.cljs:216
+#: src/app/main/ui/workspace/main_menu.cljs:244
msgid "workspace.header.menu.enable-snap-ruler-guides"
msgstr "启用“吸附到标尺参考线”"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "隐藏画板名称"
-#: src/app/main/ui/workspace/main_menu.cljs:348
+#: src/app/main/ui/workspace/main_menu.cljs:376
msgid "workspace.header.menu.hide-guides"
msgstr "隐藏参考线"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "隐藏调色盘"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "隐藏像素网格"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "隐藏标尺"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "隐藏字体调色板"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "编辑"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "文件"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "帮助和信息"
@@ -4735,63 +4901,63 @@ msgstr "帮助和信息"
msgid "workspace.header.menu.option.power-up"
msgstr "升级您的计划"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "首选项"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "视图"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "重做"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "全选"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "显示画板名称"
-#: src/app/main/ui/workspace/main_menu.cljs:349
+#: src/app/main/ui/workspace/main_menu.cljs:377
msgid "workspace.header.menu.show-guides"
msgstr "显示参考线"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "显示调色盘"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "显示像素网格"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "显示标尺"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "显示字体调色板"
-#: src/app/main/ui/workspace/main_menu.cljs:288
+#: src/app/main/ui/workspace/main_menu.cljs:316
msgid "workspace.header.menu.toggle-dark-theme"
msgstr "切换到深色主题"
-#: src/app/main/ui/workspace/main_menu.cljs:286, src/app/main/ui/workspace/main_menu.cljs:289
+#: src/app/main/ui/workspace/main_menu.cljs:314, src/app/main/ui/workspace/main_menu.cljs:317
msgid "workspace.header.menu.toggle-light-theme"
msgstr "切换到浅色主题"
-#: src/app/main/ui/workspace/main_menu.cljs:287
+#: src/app/main/ui/workspace/main_menu.cljs:315
msgid "workspace.header.menu.toggle-system-theme"
msgstr "切换至系统主题"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "撤销"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "重置"
@@ -4807,7 +4973,7 @@ msgstr "已保存"
msgid "workspace.header.saving"
msgstr "正在保存"
-#: src/app/main/ui/workspace/right_header.cljs:239
+#: src/app/main/ui/workspace/right_header.cljs:240
msgid "workspace.header.share"
msgstr "共享"
@@ -4816,11 +4982,11 @@ msgstr "共享"
msgid "workspace.header.unsaved"
msgstr "未保存的修改"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "预览模式(%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "缩放"
@@ -4832,7 +4998,7 @@ msgstr "填充 - 填充比例"
msgid "workspace.header.zoom-fit"
msgstr "适合 - 缩小以适合"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "缩放以适应所有"
@@ -4840,43 +5006,43 @@ msgstr "缩放以适应所有"
msgid "workspace.header.zoom-full-screen"
msgstr "全屏"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "缩放到选定的位置"
-#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:621
msgid "workspace.layout_grid.editor.options.edit-grid"
msgstr "编辑网格"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1300
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1301
msgid "workspace.layout_grid.editor.options.exit"
msgstr "退出"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:429, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:435
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:430, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:436
msgid "workspace.layout_grid.editor.padding.bottom"
msgstr "下内边距"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:491
msgid "workspace.layout_grid.editor.padding.expand"
msgstr "显示4边内距选项"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:354, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:355, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:362
msgid "workspace.layout_grid.editor.padding.horizontal"
msgstr "水平内边距"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:444, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:450
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:451
msgid "workspace.layout_grid.editor.padding.left"
msgstr "左内边距"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:414, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:420
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:421
msgid "workspace.layout_grid.editor.padding.right"
msgstr "右内边距"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:406
msgid "workspace.layout_grid.editor.padding.top"
msgstr "上内边距"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:340, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:341, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:347
msgid "workspace.layout_grid.editor.padding.vertical"
msgstr "垂直内边距"
@@ -4892,7 +5058,7 @@ msgstr "完成"
msgid "workspace.layout_grid.editor.top-bar.locate"
msgstr "定位"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1326
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1327
msgid "workspace.layout_grid.editor.top-bar.locate.tooltip"
msgstr "定位网格布局"
@@ -4901,10 +5067,6 @@ msgstr "定位网格布局"
msgid "workspace.libraries.add"
msgstr "添加"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s种颜色"
-
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
msgstr "你的库中还没有颜色风格"
@@ -4931,43 +5093,35 @@ msgstr "最近使用的颜色"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "RGB互补"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "保存颜色风格"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s个组件"
-
-#: src/app/main/ui/workspace/libraries.cljs:371
+#: src/app/main/ui/workspace/libraries.cljs:404
msgid "workspace.libraries.empty.add-some"
msgstr "或者添加一些这样的来试试:"
-#: src/app/main/ui/workspace/libraries.cljs:365
+#: src/app/main/ui/workspace/libraries.cljs:398
msgid "workspace.libraries.empty.no-libraries"
msgstr "您的团队中没有共享库,您可以查找"
-#: src/app/main/ui/workspace/libraries.cljs:369
+#: src/app/main/ui/workspace/libraries.cljs:402
msgid "workspace.libraries.empty.some-templates"
msgstr "这里有些模版"
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "文档库"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s个图形"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "本文档中的库"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "库"
@@ -4976,11 +5130,11 @@ msgstr "库"
msgid "workspace.libraries.library"
msgstr "库"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "共享库更新"
-#: src/app/main/ui/workspace/libraries.cljs:360
+#: src/app/main/ui/workspace/libraries.cljs:393
msgid "workspace.libraries.loading"
msgstr "加载中…"
@@ -4989,51 +5143,47 @@ msgstr "加载中…"
msgid "workspace.libraries.more-templates"
msgstr "您可以搜索 "
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "没有需要更新的共享库"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "没有找到“%s”的匹配项"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "搜索共享库"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "共享库"
-#: src/app/main/ui/workspace/libraries.cljs:352
+#: src/app/main/ui/workspace/libraries.cljs:385
msgid "workspace.libraries.shared-library-btn"
msgstr "连接共享库"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "复合排版"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "断开所有排版的链接"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s个排版"
-
-#: src/app/main/ui/workspace/libraries.cljs:323
+#: src/app/main/ui/workspace/libraries.cljs:354
msgid "workspace.libraries.unlink-library-btn"
msgstr "断开共享库"
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "更新"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "查看所有修改"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "更新"
@@ -5041,31 +5191,31 @@ msgstr "更新"
msgid "workspace.notification-pill.detail"
msgstr "细节"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "单击 + 按钮以添加交互。"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:96
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:97
msgid "workspace.options.blur-options.add-blur"
msgstr "新增模糊"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:117
+#: 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/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "模糊"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "编组模糊"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "选项模糊"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:114
msgid "workspace.options.blur-options.toggle-blur"
msgstr "切换模糊"
@@ -5073,79 +5223,79 @@ msgstr "切换模糊"
msgid "workspace.options.canvas-background"
msgstr "画布背景"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "剪辑内容"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "组件"
-#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:193
+#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:196
msgid "workspace.options.component.annotation"
msgstr "注释"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "复制"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:185
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:188
msgid "workspace.options.component.create-annotation"
msgstr "创建注释"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "编辑注释"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "主要"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:706
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:721
msgid "workspace.options.component.swap"
msgstr "交换组件"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:765
msgid "workspace.options.component.swap.empty"
msgstr "你的库中还没有素材"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:973
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:993
msgid "workspace.options.component.unlinked"
msgstr "未链接"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:512
msgid "workspace.options.component.variant.duplicated.copy.locate"
msgstr "转到主组件"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1246
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1281
msgid "workspace.options.component.variant.duplicated.group.locate"
msgstr "定位到复制的变体"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1236
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1271
msgid "workspace.options.component.variant.malformed.group.locate"
msgstr "定位无效的变体"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1233
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1268
msgid "workspace.options.component.variant.malformed.group.title"
msgstr "一些变体的名字无效"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:252
msgid "workspace.options.component.variant.malformed.single.all"
msgstr "这些变体的名字无效。"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:247
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:249
msgid "workspace.options.component.variant.malformed.single.one"
msgstr "这个变体的名字无效。"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:253
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:255
msgid "workspace.options.component.variant.malformed.single.some"
msgstr "其中一些变体的名字无效。"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:390
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:391
msgid "workspace.options.component.variant.malformed.structure.example"
msgstr "[property]=[value], [property]=[value]"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:389
msgid "workspace.options.component.variant.malformed.structure.title"
msgstr "尝试使用下面的结构:"
@@ -5155,13 +5305,13 @@ msgstr "共享相同的名字。"
#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:76
msgid "workspace.options.component.variants-help-modal.rule2"
-msgstr "是相同的类型"
+msgstr "是相同的类型。"
#: src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:87
msgid "workspace.options.component.variants-help-modal.rule3"
-msgstr "存在相同的层级"
+msgstr "存在相同的层级。"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:935, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1157, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:47
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:955, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1191, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:47
msgid "workspace.options.component.variants-help-modal.title"
msgstr "变体如何保持连接"
@@ -5205,7 +5355,7 @@ msgstr "顶部固定"
msgid "workspace.options.constraints.topbottom"
msgstr "上下固定"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "设计"
@@ -5218,21 +5368,21 @@ msgstr "导出"
msgid "workspace.options.export-multiple"
msgstr "导出已选择"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "输出1个元素"
msgstr[1] "输出%s元素"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:188
+#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:214
msgid "workspace.options.export.add-export"
msgstr "新增导出"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:235
+#: 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/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "后缀"
@@ -5240,7 +5390,7 @@ msgstr "后缀"
msgid "workspace.options.exporting-complete"
msgstr "导出完成"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "正在导出…"
@@ -5252,27 +5402,27 @@ msgstr "导出失败"
msgid "workspace.options.exporting-object-slow"
msgstr "导出速度意外缓慢"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "填充"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:194
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:234
msgid "workspace.options.fill.add-fill"
msgstr "新增填充"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:208
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:248
msgid "workspace.options.fill.remove-fill"
msgstr "移除填充"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:392
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:474
msgid "workspace.options.fit-content"
msgstr "调整画板适应内容大小"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "增加流程起点"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:178
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:179
msgid "workspace.options.flows.flow"
msgstr "流程"
@@ -5281,19 +5431,19 @@ msgstr "流程"
msgid "workspace.options.flows.flow-start"
msgstr "流程起点"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "所有流程起点"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:155
msgid "workspace.options.flows.remove-flow"
msgstr "移除流"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "自动"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "列"
@@ -5302,7 +5452,7 @@ msgstr "列"
msgid "workspace.options.grid.grid-title"
msgstr "网格"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "颜色"
@@ -5311,15 +5461,15 @@ msgstr "颜色"
msgid "workspace.options.grid.params.columns"
msgstr "列"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "栅格间隔"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "高"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "外边距"
@@ -5328,7 +5478,7 @@ msgstr "外边距"
msgid "workspace.options.grid.params.rows"
msgstr "行"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "设为默认"
@@ -5342,159 +5492,159 @@ msgstr "尺寸"
msgid "workspace.options.grid.params.type"
msgstr "类型"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "底"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "居中"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "左"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "右"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "拉伸"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "顶"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "使用默认"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "宽"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "行"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "正方形"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "编组填充"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "编组边框"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:326
msgid "workspace.options.guides.add-guide"
msgstr "新增辅助线"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:187
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:188
msgid "workspace.options.guides.remove-guide"
msgstr "移除辅助线"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:320
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
msgid "workspace.options.guides.title"
msgstr "参考线"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:183
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:184
msgid "workspace.options.guides.toggle-guide"
msgstr "切换辅助线"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "高度"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "检查"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "执行"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "延迟后"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "动画"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "解散"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "无"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "推送"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "滑动"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "自动"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "添加背景覆盖"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "点击外部时关闭"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "关闭覆盖"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "关闭遮罩层: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "延迟"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "目的地"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "持续时间"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "平滑"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "缓解"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "缓入"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "缓进缓出"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "缓出"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "线性"
@@ -5503,47 +5653,47 @@ msgstr "线性"
msgid "workspace.options.interaction-in"
msgstr "在"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "鼠标进入"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "鼠标离开"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "ms"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "导航至"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "导航到: %s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(未设定)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "偏移效果"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "点击时"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "打开叠加层"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "打开覆盖:%s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "打开网址"
@@ -5552,87 +5702,87 @@ msgstr "打开网址"
msgid "workspace.options.interaction-out"
msgstr "外"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "底部居中"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "左下角"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "右下角"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "居中"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "手册"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "顶部居中"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "左上角"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "右上角"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "位置"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "保留滚动位置"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "上一个屏幕"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "相对于"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "自己"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "切换覆盖层"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "切换覆盖:%s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "触发器"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "URL"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "悬停时"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "按下时"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "交互"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:735
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:736
msgid "workspace.options.interactions.add-interaction"
msgstr "新增交互"
@@ -5641,67 +5791,67 @@ msgstr "新增交互"
msgid "workspace.options.interactions.remove-interaction"
msgstr "移除交互"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "颜色"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "颜色加深"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "颜色减淡"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "变暗"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "差值"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "排除"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "强光"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "色相"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "变亮"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "亮度"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "正片叠底"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "正常"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "叠加"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "饱和度"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "滤色"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "柔光"
@@ -5720,7 +5870,7 @@ msgstr "图层组"
msgid "workspace.options.layer-options.title.multiple"
msgstr "已选中的图层"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:202
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:207, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:213
msgid "workspace.options.layer-options.toggle-layer"
msgstr "显示/隐藏图层"
@@ -5729,19 +5879,19 @@ msgstr "显示/隐藏图层"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "高级选项"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "最大高度"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "最大宽度"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "最小高度"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "最小宽度"
@@ -5855,15 +6005,15 @@ msgstr "间隔留空"
msgid "workspace.options.layout.top"
msgstr "顶部"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "更多颜色"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "更多共享库颜色"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "不透明度"
@@ -5872,31 +6022,31 @@ msgstr "不透明度"
msgid "workspace.options.position"
msgstr "位置"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "原型"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "圆角"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "左下角"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "右下角"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "左上角"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "右上角"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:136
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:153
msgid "workspace.options.radius.show-single-corners"
msgstr "显示独立的圆角"
@@ -5908,7 +6058,7 @@ msgstr "最近的"
msgid "workspace.options.retry"
msgstr "重试"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "旋转"
@@ -5916,31 +6066,31 @@ msgstr "旋转"
msgid "workspace.options.search-font"
msgstr "搜索字体"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr "选择一个形状、画板或编组,拖至另一个画板,以创建关联。"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "已选颜色"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "选项填充"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "选项边框"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:341
msgid "workspace.options.shadow-options.add-shadow"
msgstr "新增阴影"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "模糊"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "阴影颜色"
@@ -5952,63 +6102,64 @@ msgstr "外阴影"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "内阴影"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:348
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:183, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:354
msgid "workspace.options.shadow-options.remove-shadow"
msgstr "移除阴影"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "展开"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "阴影"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "编组阴影"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "选项阴影"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:174
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:179
msgid "workspace.options.shadow-options.toggle-shadow"
msgstr "切换阴影"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "在导出中显示"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "在预览模式显示"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "尺寸"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "尺寸预设"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:534
msgid "workspace.options.size.lock"
msgstr "锁定比率"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:534
msgid "workspace.options.size.unlock"
msgstr "解锁比率"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "边框"
@@ -6017,7 +6168,7 @@ msgstr "边框"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "圆形标记"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "圆形"
@@ -6026,7 +6177,7 @@ msgstr "圆形"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "钻石标记"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "钻石"
@@ -6035,19 +6186,19 @@ msgstr "钻石"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "箭头"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "箭头"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "无边框"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "圆头"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "方头"
@@ -6056,7 +6207,7 @@ msgstr "方头"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "方形标记"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "矩形"
@@ -6065,83 +6216,83 @@ msgstr "矩形"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "三角箭头"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "三角形"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "线条颜色"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "线宽"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:180
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:189
msgid "workspace.options.stroke.add-stroke"
msgstr "新增描边颜色"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "居中"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "长虚线"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "虚线"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "内部"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "混合"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "外部"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:193
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:202
msgid "workspace.options.stroke.remove-stroke"
msgstr "移除描边"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "实线"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "底部对齐"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "垂直居中"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "顶部对齐"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "从左到右"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "从右到左"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "自动高度"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "自动宽度"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "固定"
@@ -6163,35 +6314,35 @@ msgstr "小写"
msgid "workspace.options.text-options.none"
msgstr "无"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "删除线 (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "水平居中"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "两端对齐"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "靠左对齐"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "靠右对齐"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "文本"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "编组文本"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "选项文本"
@@ -6200,7 +6351,7 @@ msgstr "选项文本"
msgid "workspace.options.text-options.titlecase"
msgstr "首字母大写"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "下划线 (%s)"
@@ -6209,19 +6360,19 @@ msgstr "下划线 (%s)"
msgid "workspace.options.text-options.uppercase"
msgstr "大写"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr "点击页面顶端的播放按钮预览原型。"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "宽度"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "X轴"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Y轴"
@@ -6265,76 +6416,76 @@ msgstr "拆分节点(%s)"
msgid "workspace.path.actions.snap-nodes"
msgstr "对接节点 (%s)"
-#: src/app/main/ui/workspace/plugins.cljs:83
+#: src/app/main/ui/workspace/plugins.cljs:84
msgid "workspace.plugins.button-open"
msgstr "打开"
-#: src/app/main/ui/workspace/plugins.cljs:197
+#: src/app/main/ui/workspace/plugins.cljs:198
#, markdown
msgid "workspace.plugins.discover"
msgstr "发现 [more plugins](%s)"
-#: src/app/main/ui/workspace/plugins.cljs:204
+#: src/app/main/ui/workspace/plugins.cljs:205
msgid "workspace.plugins.empty-plugins"
msgstr "未安装插件"
-#: src/app/main/ui/workspace/plugins.cljs:191
+#: src/app/main/ui/workspace/plugins.cljs:192
msgid "workspace.plugins.error.manifest"
msgstr "插件清单不正确。"
-#: src/app/main/ui/workspace/plugins.cljs:183
+#: src/app/main/ui/workspace/plugins.cljs:184
msgid "workspace.plugins.install"
msgstr "安装"
-#: src/app/main/ui/workspace/plugins.cljs:213
+#: src/app/main/ui/workspace/plugins.cljs:214
msgid "workspace.plugins.installed-plugins"
msgstr "已安装的插件"
-#: src/app/main/ui/workspace/main_menu.cljs:710
+#: src/app/main/ui/workspace/main_menu.cljs:738
msgid "workspace.plugins.menu.plugins-manager"
msgstr "插件管理器"
-#: src/app/main/ui/workspace/main_menu.cljs:906
+#: src/app/main/ui/workspace/main_menu.cljs:934
msgid "workspace.plugins.menu.title"
msgstr "插件"
-#: src/app/main/ui/workspace/plugins.cljs:374
+#: src/app/main/ui/workspace/plugins.cljs:375
msgid "workspace.plugins.permissions-update.title"
msgstr "更新此插件"
-#: src/app/main/ui/workspace/plugins.cljs:278
+#: src/app/main/ui/workspace/plugins.cljs:279
msgid "workspace.plugins.permissions.allow-download"
msgstr "开始文件下载。"
-#: src/app/main/ui/workspace/plugins.cljs:285
+#: src/app/main/ui/workspace/plugins.cljs:286
msgid "workspace.plugins.permissions.allow-localstorage"
msgstr "保存数据至浏览器。"
-#: src/app/main/ui/workspace/plugins.cljs:271
+#: src/app/main/ui/workspace/plugins.cljs:272
msgid "workspace.plugins.permissions.comment-read"
msgstr "阅读您的评论和回复。"
-#: src/app/main/ui/workspace/plugins.cljs:258
+#: src/app/main/ui/workspace/plugins.cljs:259
msgid "workspace.plugins.permissions.library-read"
msgstr "阅读您的库和资源。"
-#: src/app/main/ui/workspace/plugins.cljs:252
+#: src/app/main/ui/workspace/plugins.cljs:253
msgid "workspace.plugins.permissions.library-write"
msgstr "阅读和修改您的库和资源。"
-#: src/app/main/ui/workspace/plugins.cljs:318
+#: src/app/main/ui/workspace/plugins.cljs:319
msgid "workspace.plugins.permissions.title"
msgstr "'%s' 插件需要访问:"
-#: src/app/main/ui/workspace/plugins.cljs:209
+#: src/app/main/ui/workspace/plugins.cljs:210
msgid "workspace.plugins.plugin-list-link"
msgstr "插件列表"
-#: src/app/main/ui/workspace/plugins.cljs:86
+#: src/app/main/ui/workspace/plugins.cljs:87
msgid "workspace.plugins.remove-plugin"
msgstr "移除插件"
-#: src/app/main/ui/workspace/plugins.cljs:178
+#: src/app/main/ui/workspace/plugins.cljs:179
msgid "workspace.plugins.search-placeholder"
msgstr "写入插件 URL"
@@ -6342,19 +6493,19 @@ msgstr "写入插件 URL"
msgid "workspace.plugins.success"
msgstr "插件已正确载入。"
-#: src/app/main/ui/workspace/plugins.cljs:172
+#: src/app/main/ui/workspace/plugins.cljs:173
msgid "workspace.plugins.title"
msgstr "插件"
-#: src/app/main/ui/workspace/plugins.cljs:438
+#: src/app/main/ui/workspace/plugins.cljs:439
msgid "workspace.plugins.try-out.cancel"
msgstr "不是现在"
-#: src/app/main/ui/workspace/plugins.cljs:427
+#: src/app/main/ui/workspace/plugins.cljs:428
msgid "workspace.plugins.try-out.title"
msgstr "'%s' 插件已为您的使用者安装!"
-#: src/app/main/ui/workspace/plugins.cljs:444
+#: src/app/main/ui/workspace/plugins.cljs:445
msgid "workspace.plugins.try-out.try"
msgstr "尝试插件"
@@ -6366,15 +6517,15 @@ msgstr "添加弹性布局"
msgid "workspace.shape.menu.add-grid"
msgstr "添加网格布局"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1015, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1039
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1016, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1040
msgid "workspace.shape.menu.add-layout"
msgstr "新增布局"
-#: src/app/main/ui/workspace/context_menu.cljs:608, src/app/main/ui/workspace/sidebar/assets/common.cljs:505, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:941, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1161
+#: src/app/main/ui/workspace/context_menu.cljs:610, src/app/main/ui/workspace/sidebar/assets/common.cljs:514, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:961, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1113, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1195
msgid "workspace.shape.menu.add-variant"
msgstr "创建变体"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:509, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:990, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1082, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1198
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:518, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1010, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1115, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1233
msgid "workspace.shape.menu.add-variant-property"
msgstr "新增新属性"
@@ -6386,11 +6537,11 @@ msgstr "移至底层"
msgid "workspace.shape.menu.backward"
msgstr "向下移动一层"
-#: src/app/main/ui/workspace/context_menu.cljs:615, src/app/main/ui/workspace/sidebar/assets/components.cljs:638, src/app/main/ui/workspace/sidebar/assets/groups.cljs:74, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1021
+#: src/app/main/ui/workspace/context_menu.cljs:617, src/app/main/ui/workspace/sidebar/assets/components.cljs:634, src/app/main/ui/workspace/sidebar/assets/groups.cljs:75, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1041
msgid "workspace.shape.menu.combine-as-variants"
msgstr "合并为变体"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:640
+#: src/app/main/ui/workspace/sidebar/assets/components.cljs:636
msgid "workspace.shape.menu.combine-as-variants-error"
msgstr "组件需要在同一个页面中"
@@ -6426,7 +6577,7 @@ msgstr "复制为 SVG"
msgid "workspace.shape.menu.copy-text"
msgstr "复制为文本"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "创建注释"
@@ -6434,11 +6585,11 @@ msgstr "创建注释"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "转为画板"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "创建组件"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "创建多个组件"
@@ -6446,7 +6597,7 @@ msgstr "创建多个组件"
msgid "workspace.shape.menu.cut"
msgstr "剪切"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "删除"
@@ -6454,15 +6605,15 @@ msgstr "删除"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "删除流程起点"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "解绑实例"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "解绑实例"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "差集"
@@ -6474,11 +6625,11 @@ msgstr "创建副本"
msgid "workspace.shape.menu.edit"
msgstr "编辑"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "相减"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "展平"
@@ -6511,19 +6662,19 @@ msgstr "前往主组件文档"
msgid "workspace.shape.menu.group"
msgstr "编组"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "隐藏"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "显示/隐藏界面"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "差集"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "锁定"
@@ -6531,7 +6682,7 @@ msgstr "锁定"
msgid "workspace.shape.menu.mask"
msgstr "蒙板"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "粘贴"
@@ -6551,15 +6702,15 @@ msgstr "删除弹性布局"
msgid "workspace.shape.menu.remove-grid"
msgstr "移除网格布局"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1033
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1034
msgid "workspace.shape.menu.remove-layout"
msgstr "移除布局"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1222
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1257
msgid "workspace.shape.menu.remove-variant-property"
msgstr "移除属性"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1221
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1256
msgid "workspace.shape.menu.remove-variant-property.last-property"
msgstr "变体至少需要有一个属性"
@@ -6567,15 +6718,15 @@ msgstr "变体至少需要有一个属性"
msgid "workspace.shape.menu.rename"
msgstr "重命名"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "还原自定义选项"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "恢复主要组件"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:504
msgid "workspace.shape.menu.restore-variant"
msgstr "恢复变体"
@@ -6583,15 +6734,15 @@ msgstr "恢复变体"
msgid "workspace.shape.menu.select-layer"
msgstr "选择图层"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "显示"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "在素材面板中显示"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "显示主组件"
@@ -6604,6 +6755,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "设为缩略图"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "转换为路径"
@@ -6611,11 +6763,11 @@ msgstr "转换为路径"
msgid "workspace.shape.menu.ungroup"
msgstr "取消编组"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "相加"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "取消锁定"
@@ -6628,7 +6780,7 @@ msgstr "取消蒙版"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "更新主要组件"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "更新主组件"
@@ -6640,11 +6792,11 @@ msgstr "收起侧边栏"
msgid "workspace.sidebar.expand"
msgstr "展开侧边栏"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "历史"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "图层"
@@ -6684,11 +6836,11 @@ msgstr "文本"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "已导入SVG属性"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "页面"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:248
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:249
msgid "workspace.sidebar.sitemap.add-page"
msgstr "新增页"
@@ -6705,27 +6857,27 @@ msgstr "%s 个活动的主题"
msgid "workspace.tokens.add set"
msgstr "新增集"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:329
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:62, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:165, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
msgid "workspace.tokens.add-new-theme"
msgstr "新增新主题"
-#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:60
+#: src/app/main/ui/workspace/tokens/sets/context_menu.cljs:62
msgid "workspace.tokens.add-set-to-group"
msgstr "新增集至此编组"
-#: src/app/main/ui/workspace/tokens/management/group.cljs:113
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:197, src/app/main/ui/workspace/tokens/management/group.cljs:115
msgid "workspace.tokens.add-token"
msgstr "新增令牌:%s"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:161
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:136
msgid "workspace.tokens.applied-to"
msgstr "应用于"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:315
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:316
msgid "workspace.tokens.axis"
msgstr "轴"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:338
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:337
msgid "workspace.tokens.back-to-themes"
msgstr "返回到主题列表"
@@ -6751,11 +6903,11 @@ msgstr "颜色"
msgid "workspace.tokens.create-new-theme"
msgstr "现在创建您的第一个主题。"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:100, src/app/main/ui/workspace/tokens/themes.cljs:44
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:96, src/app/main/ui/workspace/tokens/themes.cljs:44
msgid "workspace.tokens.create-one"
msgstr "创建一个。"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:337
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:338
msgid "workspace.tokens.delete"
msgstr "删除 token"
@@ -6763,19 +6915,19 @@ msgstr "删除 token"
msgid "workspace.tokens.delete-theme-title"
msgstr "删除主题"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:334
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:335
msgid "workspace.tokens.duplicate"
msgstr "复制 token"
-#: src/app/main/data/workspace/tokens/library_edit.cljs:201, src/app/main/data/workspace/tokens/library_edit.cljs:405
+#: src/app/main/data/workspace/tokens/library_edit.cljs:197, src/app/main/data/workspace/tokens/library_edit.cljs:415
msgid "workspace.tokens.duplicate-suffix"
msgstr "复制"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:321
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:322
msgid "workspace.tokens.edit"
msgstr "编辑 token"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:327
msgid "workspace.tokens.edit-theme-title"
msgstr "编辑主题"
@@ -6783,10 +6935,6 @@ msgstr "编辑主题"
msgid "workspace.tokens.edit-themes"
msgstr "编辑主题"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:533
-msgid "workspace.tokens.edit-token"
-msgstr "编辑 token"
-
#: src/app/main/data/workspace/tokens/errors.cljs:15
msgid "workspace.tokens.error-parse"
msgstr "导入错误:不能解析 JSON。"
@@ -6807,7 +6955,7 @@ msgstr "预览:"
msgid "workspace.tokens.export.single-file"
msgstr "单文件"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:229
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:228
msgid "workspace.tokens.gaps"
msgstr "间隔"
@@ -6820,7 +6968,7 @@ msgstr "错误: "
msgid "workspace.tokens.group-name"
msgstr "编组名称"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:232
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:233
msgid "workspace.tokens.import-button-prefix"
msgstr "导入 %s"
@@ -6828,22 +6976,43 @@ msgstr "导入 %s"
msgid "workspace.tokens.import-error"
msgstr "导入错误:"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:272
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:273
msgid "workspace.tokens.import-menu-folder-option"
msgstr "文件夹"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:271
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:272
msgid "workspace.tokens.import-menu-json-option"
msgstr "单 JSON 文件"
-#: src/app/main/ui/workspace/tokens/import/modal.cljs:270
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:271
msgid "workspace.tokens.import-menu-zip-option"
msgstr "ZIP 文件"
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:414, src/app/main/ui/workspace/tokens/sidebar.cljs:415
+#, unused
+msgid "workspace.tokens.import-tooltip"
+msgstr "导入 JSON 文件将覆盖所有当前令牌、集合和主题"
+
+#: src/app/main/ui/workspace/tokens/import/modal.cljs:247
+msgid "workspace.tokens.import-warning"
+msgstr "导入 token 将覆盖您当前的所有令牌、集合和主题。"
+
+#: src/app/main/ui/workspace/tokens/management.cljs:141
+msgid "workspace.tokens.inactive-set"
+msgstr "不激活"
+
+#: src/app/main/ui/workspace/tokens/management.cljs:132
+msgid "workspace.tokens.inactive-set-description"
+msgstr "此设置未启用。请更改主题或启用此设置以在视口中查看更改"
+
#: src/app/main/data/workspace/tokens/errors.cljs:49
msgid "workspace.tokens.invalid-color"
msgstr "无效的颜色值:%s"
+#: src/app/main/data/workspace/tokens/errors.cljs:89
+msgid "workspace.tokens.invalid-font-weight-token-value"
+msgstr "字体粗细值无效:使用数值(100-950)或标准名称(细、亮、常规、粗体等),后跟可选的“斜体”"
+
#: src/app/main/data/workspace/tokens/errors.cljs:23
msgid "workspace.tokens.invalid-json"
msgstr "导入错误:JSON 中存在无效的令牌数据。"
@@ -6852,6 +7021,20 @@ msgstr "导入错误:JSON 中存在无效的令牌数据。"
msgid "workspace.tokens.invalid-json-token-name"
msgstr "导入错误;JSON中存在无效的令牌名。"
+#: src/app/main/data/workspace/tokens/errors.cljs:28
+msgid "workspace.tokens.invalid-json-token-name-detail"
+msgstr ""
+"“%s” 不是有效的 token 名称。\n"
+"token 名称只能包含字母和数字,并以 . 字符分隔,并且不能以 $ 符号开头。"
+
+#: src/app/main/data/workspace/tokens/errors.cljs:81
+msgid "workspace.tokens.invalid-text-case-token-value"
+msgstr "无效的token值:仅接受无、大写、小写或大写"
+
+#: src/app/main/data/workspace/tokens/errors.cljs:85
+msgid "workspace.tokens.invalid-text-decoration-token-value"
+msgstr "无效的token值:仅接受无、下划线和删除线"
+
#: src/app/main/data/workspace/tokens/errors.cljs:61, src/app/main/data/workspace/tokens/errors.cljs:73, src/app/main/data/workspace/tokens/errors.cljs:77
msgid "workspace.tokens.invalid-value"
msgstr "无效的令牌值:%s"
@@ -6872,24 +7055,89 @@ msgstr "主题"
msgid "workspace.tokens.label.theme-placeholder"
msgstr "新增一个主题(如浅色)"
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:220
+msgid "workspace.tokens.margins"
+msgstr "边距"
+
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:256
+msgid "workspace.tokens.max-size"
+msgstr "最大尺寸"
+
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:250
+msgid "workspace.tokens.min-size"
+msgstr "最小尺寸"
+
+#: src/app/main/data/workspace/tokens/errors.cljs:57
+msgid "workspace.tokens.missing-references"
+msgstr "缺少token引用: "
+
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:123
+msgid "workspace.tokens.more-options"
+msgstr "右键单击查看选项"
+
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:149
+msgid "workspace.tokens.no-active-sets"
+msgstr "没有活动集"
+
#: src/app/main/ui/workspace/tokens/themes/theme_selector.cljs:91
msgid "workspace.tokens.no-active-theme"
msgstr "主题未启用"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:97, src/app/main/ui/workspace/tokens/sets/lists.cljs:103
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:72
+msgid "workspace.tokens.no-permisions-set"
+msgstr "您需要成为编辑才能激活/停用集合"
+
+#: src/app/main/ui/workspace/tokens/themes.cljs:53
+msgid "workspace.tokens.no-permission-themes"
+msgstr "您需要成为一名编辑才能使用主题"
+
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:483
+msgid "workspace.tokens.no-sets-create"
+msgstr "尚未定义任何集合。请先创建一个。"
+
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:93, src/app/main/ui/workspace/tokens/sets/lists.cljs:99
msgid "workspace.tokens.no-sets-yet"
msgstr "尚不存在任何集。"
+#: src/app/main/ui/workspace/tokens/themes.cljs:40
+msgid "workspace.tokens.no-themes"
+msgstr "目前没有主题。"
+
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:49
+msgid "workspace.tokens.no-themes-currently"
+msgstr "您目前没有主题。"
+
+#: src/app/main/data/workspace/tokens/errors.cljs:19
+msgid "workspace.tokens.no-token-files-found"
+msgstr "在此文件中未找到任何标记、集合或主题。"
+
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:148
+msgid "workspace.tokens.num-active-sets"
+msgstr "%s 个活跃集"
+
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:120
+#, fuzzy
+msgid "workspace.tokens.original-value"
+msgstr "原始值:%s"
+
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:204
+msgid "workspace.tokens.paddings"
+msgstr "内边距"
+
#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:280
msgid "workspace.tokens.radius"
msgstr "圆角半径"
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:128
+msgid "workspace.tokens.ref-not-valid"
+msgstr "引用无效或不在任何活动集中"
+
#: src/app/main/ui/workspace/tokens/style_dictionary.cljs
#, unused
msgid "workspace.tokens.reference-error"
msgstr "参考错误: "
-#: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:39, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:44, src/app/main/ui/workspace/tokens/management/token_pill.cljs:146
+#: 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:100, 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 "解析的值:%s"
@@ -6898,11 +7146,28 @@ msgstr "解析的值:%s"
msgid "workspace.tokens.save-theme"
msgstr "保存主题"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:209, src/app/main/ui/workspace/tokens/sets/lists.cljs:315
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:204, src/app/main/ui/workspace/tokens/sets/lists.cljs:309
msgid "workspace.tokens.select-set"
msgstr "选择集。"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:245
+#: src/app/main/data/workspace/tokens/errors.cljs:45
+msgid "workspace.tokens.self-reference"
+msgstr "Token存在自我引用"
+
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:60
+msgid "workspace.tokens.set-edit-placeholder"
+msgstr "输入名称(组名使用“/”)"
+
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:342
+msgid "workspace.tokens.set-selection-theme"
+msgstr "定义应使用哪些 token 集作为此主题选项的一部分:"
+
+#: src/app/main/ui/workspace/tokens/token_pill.cljs:47
+#, unused
+msgid "workspace.tokens.set.not-active"
+msgstr "Token 集未激活"
+
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:244
msgid "workspace.tokens.size"
msgstr "大小"
@@ -6914,20 +7179,20 @@ msgstr "主题 %s"
msgid "workspace.tokens.themes-list"
msgstr "主题列表"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:589, src/app/main/ui/workspace/tokens/management/create/form.cljs:590
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:608, src/app/main/ui/workspace/tokens/management/create/form.cljs:609
#, fuzzy
msgid "workspace.tokens.token-description"
msgstr "描述"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:539
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:83, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:109, src/app/main/ui/workspace/tokens/management/create/form.cljs:557
msgid "workspace.tokens.token-name"
msgstr "名称"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:125
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:121
msgid "workspace.tokens.tools"
msgstr "工具"
-#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "素材"
@@ -6935,7 +7200,7 @@ msgstr "素材"
msgid "workspace.toolbar.color-palette"
msgstr "调色盘(%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "评论(%s)"
@@ -7142,19 +7407,19 @@ msgstr "操作覆盖%s"
msgid "workspace.undo.title"
msgstr "历史"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "忽略"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "更多信息"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "共享库有更新"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "更新"
@@ -7218,7 +7483,7 @@ msgstr "你想要恢复此版本吗?"
msgid "workspace.versions.snapshot-menu"
msgstr "打开快照菜单"
-#: src/app/main/ui/workspace/sidebar.cljs:234
+#: src/app/main/ui/workspace/sidebar.cljs:235
msgid "workspace.versions.tab.history"
msgstr "历史"
diff --git a/frontend/translations/zh_Hant.po b/frontend/translations/zh_Hant.po
index a8ab707d87..7e591c9b1b 100644
--- a/frontend/translations/zh_Hant.po
+++ b/frontend/translations/zh_Hant.po
@@ -1,15 +1,15 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2025-08-11 07:21+0000\n"
+"PO-Revision-Date: 2025-10-13 09:26+0000\n"
"Last-Translator: william chen \n"
-"Language-Team: Chinese (Traditional Han script) "
-" \n"
+"Language-Team: Chinese (Traditional Han script) \n"
"Language: zh_Hant\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 5.13-dev\n"
+"X-Generator: Weblate 5.14-dev\n"
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:153, src/app/main/ui/viewer/login.cljs:98
msgid "auth.already-have-account"
@@ -168,7 +168,7 @@ msgstr "設計與原型製作的開源解決方案。"
msgid "auth.terms-and-privacy-agreement"
msgstr "我同意[服務條款](%s)和[隱私權政策](%s)。"
-#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:927, src/app/main/ui/workspace/main_menu.cljs:156
+#: src/app/main/ui/auth/register.cljs:253, src/app/main/ui/dashboard/sidebar.cljs:884, src/app/main/ui/workspace/main_menu.cljs:184
msgid "auth.terms-of-service"
msgstr "服務條款"
@@ -193,7 +193,7 @@ msgstr "...品牌設計、插畫、行銷素材等。"
msgid "comments.mentions.not-found"
msgstr "未找到 @%s 的聯絡人"
-#: src/app/main/ui/workspace/libraries.cljs:308
+#: src/app/main/ui/workspace/libraries.cljs:333
msgid "common.publish"
msgstr "發怖"
@@ -262,7 +262,7 @@ msgstr "分享原型"
msgid "common.share-link.view-all"
msgstr "全選"
-#: src/app/main/ui/workspace/libraries.cljs:304
+#: src/app/main/ui/workspace/libraries.cljs:329
msgid "common.unpublish"
msgstr "未發怖"
@@ -380,7 +380,7 @@ msgstr "權杖沒有到期時間"
msgid "dashboard.add-file"
msgstr "加入檔案"
-#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:620
+#: src/app/main/ui/dashboard/file_menu.cljs:304, src/app/main/ui/workspace/main_menu.cljs:648
msgid "dashboard.add-shared"
msgstr "加入為共享檔案庫"
@@ -388,31 +388,31 @@ msgstr "加入為共享檔案庫"
msgid "dashboard.change-email"
msgstr "更改電子郵件"
-#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:524, src/app/main/data/workspace/pages.cljs:178
+#: src/app/main/data/dashboard.cljs:296, src/app/main/data/dashboard.cljs:530, src/app/main/data/workspace/pages.cljs:192
msgid "dashboard.copy-suffix"
msgstr "(複製)"
-#: src/app/main/ui/dashboard/sidebar.cljs:328
+#: src/app/main/ui/dashboard/sidebar.cljs:329
msgid "dashboard.create-new-team"
msgstr "建立新團隊"
-#: src/app/main/ui/workspace/main_menu.cljs:631
+#: src/app/main/ui/workspace/main_menu.cljs:659
msgid "dashboard.create-version-menu"
msgstr "固定此版本"
-#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:548
+#: src/app/main/ui/components/context_menu_a11y.cljs:288, src/app/main/ui/dashboard/sidebar.cljs:549
msgid "dashboard.default-team-name"
msgstr "你的 Penpot"
-#: src/app/main/ui/dashboard/sidebar.cljs:476
+#: src/app/main/ui/dashboard/sidebar.cljs:477
msgid "dashboard.delete-team"
msgstr "刪除團隊"
-#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:661, src/app/main/ui/workspace/main_menu.cljs:670
+#: src/app/main/ui/dashboard/file_menu.cljs:311, src/app/main/ui/dashboard/file_menu.cljs:316, src/app/main/ui/workspace/main_menu.cljs:689, src/app/main/ui/workspace/main_menu.cljs:698
msgid "dashboard.download-binary-file"
msgstr "下載 Penpot 檔案 (.penpot)"
-#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:679
+#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:707
msgid "dashboard.download-standard-file"
msgstr "下載標準檔案 (.svg + .json)"
@@ -466,7 +466,7 @@ msgstr "還沒有圖庫。"
msgid "dashboard.export-binary-multi"
msgstr "下載 %s 個Penpot 檔案 (.penpot)"
-#: src/app/main/ui/workspace/main_menu.cljs:687
+#: src/app/main/ui/workspace/main_menu.cljs:715
msgid "dashboard.export-frames"
msgstr "將 boards 匯出為 PDF"
@@ -482,7 +482,7 @@ msgstr "匯出 %s 個檔案"
msgid "dashboard.export-multiple.selected"
msgstr "已選取%s / %s elements"
-#: src/app/main/ui/workspace/main_menu.cljs:649
+#: src/app/main/ui/workspace/main_menu.cljs:677
msgid "dashboard.export-shapes"
msgstr "匯出"
@@ -661,11 +661,11 @@ msgstr "上傳資料至伺服器 (%s/%s)"
msgid "dashboard.import.progress.upload-media"
msgstr "正在上傳檔案:%s"
-#: src/app/main/ui/dashboard/team.cljs:120, src/app/main/ui/dashboard/team.cljs:766
+#: src/app/main/ui/dashboard/team.cljs:122, src/app/main/ui/dashboard/team.cljs:744
msgid "dashboard.invite-profile"
msgstr "邀請人員"
-#: src/app/main/ui/dashboard/sidebar.cljs:458, src/app/main/ui/dashboard/sidebar.cljs:465, src/app/main/ui/dashboard/sidebar.cljs:470, src/app/main/ui/dashboard/team.cljs:349
+#: src/app/main/ui/dashboard/sidebar.cljs:459, src/app/main/ui/dashboard/sidebar.cljs:466, src/app/main/ui/dashboard/sidebar.cljs:471, src/app/main/ui/dashboard/team.cljs:351
msgid "dashboard.leave-team"
msgstr "離開團隊"
@@ -677,7 +677,7 @@ msgstr "資料庫和範本"
msgid "dashboard.libraries-and-templates.explore"
msgstr "探索更多內容並了解如何貢獻"
-#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:151
+#: src/app/main/ui/dashboard/import.cljs:365, src/app/main/ui/workspace/libraries.cljs:152
msgid "dashboard.libraries-and-templates.import-error"
msgstr "匯入範本時出現問題。範本並未匯入。"
@@ -709,7 +709,7 @@ msgstr "移至其他團隊"
msgid "dashboard.new-file"
msgstr "+ 新檔案"
-#: src/app/main/data/dashboard.cljs:495, src/app/main/data/dashboard.cljs:607
+#: src/app/main/data/dashboard.cljs:501, src/app/main/data/dashboard.cljs:613
msgid "dashboard.new-file-prefix"
msgstr "新檔案"
@@ -717,7 +717,7 @@ msgstr "新檔案"
msgid "dashboard.new-project"
msgstr "+ 新的專案"
-#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:610
+#: src/app/main/data/dashboard.cljs:255, src/app/main/data/dashboard.cljs:616
msgid "dashboard.new-project-prefix"
msgstr "新專案"
@@ -725,11 +725,11 @@ msgstr "新專案"
msgid "dashboard.no-matches-for"
msgstr "找不到符合 「%s」的項目"
-#: src/app/main/ui/dashboard/sidebar.cljs:762
+#: src/app/main/ui/dashboard/sidebar.cljs:763
msgid "dashboard.no-projects-placeholder"
msgstr "釘選的專案會在此顯示"
-#: src/app/main/ui/dashboard/comments.cljs:90
+#: src/app/main/ui/dashboard/comments.cljs:91
msgid "dashboard.notifications"
msgstr "通知"
@@ -741,7 +741,7 @@ msgstr "已成功更改您的電子郵件地址"
msgid "dashboard.notifications.email-verified-successfully"
msgstr "已成功驗證您的電子郵件地址"
-#: src/app/main/data/profile.cljs:272
+#: src/app/main/data/profile.cljs:273
msgid "dashboard.notifications.notifications-saved"
msgstr "通知設定已更新"
@@ -749,11 +749,11 @@ msgstr "通知設定已更新"
msgid "dashboard.notifications.password-saved"
msgstr "密碼已儲存成功!"
-#: src/app/main/ui/dashboard/comments.cljs:44
+#: src/app/main/ui/dashboard/comments.cljs:45
msgid "dashboard.notifications.view"
msgstr "查看通知"
-#: src/app/main/ui/dashboard/team.cljs:1162
+#: src/app/main/ui/dashboard/team.cljs:1340
msgid "dashboard.num-of-members"
msgstr "%s 位成員"
@@ -785,7 +785,7 @@ msgstr "您現在是這個團隊的老大。"
msgid "dashboard.permissions-change.viewer"
msgstr "您現在是該團隊的查看者。"
-#: src/app/main/ui/dashboard/pin_button.cljs:24, src/app/main/ui/dashboard/project_menu.cljs:96
+#: src/app/main/ui/dashboard/pin_button.cljs:23, src/app/main/ui/dashboard/project_menu.cljs:96
msgid "dashboard.pin-unpin"
msgstr "釘選/取消釘選"
@@ -822,7 +822,7 @@ msgstr "您不再是團隊“%s”的成員。"
msgid "dashboard.save-settings"
msgstr "儲存設定"
-#: src/app/main/ui/dashboard/sidebar.cljs:257, src/app/main/ui/dashboard/sidebar.cljs:258
+#: src/app/main/ui/dashboard/sidebar.cljs:258, src/app/main/ui/dashboard/sidebar.cljs:259
msgid "dashboard.search-placeholder"
msgstr "搜尋…"
@@ -902,7 +902,7 @@ msgstr "通知"
msgid "dashboard.show-all-files"
msgstr "顯示所有檔案"
-#: src/app/main/ui/workspace/main_menu.cljs:638
+#: src/app/main/ui/workspace/main_menu.cljs:666
msgid "dashboard.show-version-history"
msgstr "版本歷史記錄"
@@ -924,7 +924,7 @@ msgstr[0] "已成功為您的檔案建立副本"
msgid "dashboard.success-duplicate-project"
msgstr "你的專案已成功複製"
-#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:164
+#: src/app/main/ui/dashboard/file_menu.cljs:132, src/app/main/ui/dashboard/grid.cljs:614, src/app/main/ui/dashboard/sidebar.cljs:165
msgid "dashboard.success-move-file"
msgstr "已成功移動您的檔案"
@@ -936,15 +936,15 @@ msgstr "已成功移動您的檔案"
msgid "dashboard.success-move-project"
msgstr "已成功移動您的專案"
-#: src/app/main/ui/dashboard/team.cljs:1145
+#: src/app/main/ui/dashboard/team.cljs:1323
msgid "dashboard.team-info"
msgstr "團隊資訊"
-#: src/app/main/ui/dashboard/team.cljs:1151
+#: src/app/main/ui/dashboard/team.cljs:1329
msgid "dashboard.team-members"
msgstr "團隊成員"
-#: src/app/main/ui/dashboard/team.cljs:1166
+#: src/app/main/ui/dashboard/team.cljs:1344
msgid "dashboard.team-projects"
msgstr "團隊專案"
@@ -960,7 +960,7 @@ msgstr "搜尋結果"
msgid "dashboard.type-something"
msgstr "輸入以搜尋"
-#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:612
+#: src/app/main/ui/dashboard/file_menu.cljs:301, src/app/main/ui/workspace/main_menu.cljs:640
msgid "dashboard.unpublish-shared"
msgstr "取消發佈資料庫"
@@ -968,47 +968,47 @@ msgstr "取消發佈資料庫"
msgid "dashboard.update-settings"
msgstr "更新設定"
-#: src/app/main/ui/dashboard/sidebar.cljs:856
+#: src/app/main/ui/dashboard/sidebar.cljs:976
msgid "dashboard.upgrade-plan.no-limits"
msgstr "無建立限制"
-#: src/app/main/ui/dashboard/sidebar.cljs:854
+#: src/app/main/ui/dashboard/sidebar.cljs:974
msgid "dashboard.upgrade-plan.penpot-free"
msgstr "Penpot 免費"
-#: src/app/main/ui/dashboard/team.cljs:937
+#: src/app/main/ui/dashboard/team.cljs:1115
msgid "dashboard.webhooks.active"
msgstr "正在生效"
-#: src/app/main/ui/dashboard/team.cljs:938
+#: src/app/main/ui/dashboard/team.cljs:1116
msgid "dashboard.webhooks.active.explain"
msgstr "當觸發此Webhook時,將會傳遞事件詳細信息"
-#: src/app/main/ui/dashboard/team.cljs:982
+#: src/app/main/ui/dashboard/team.cljs:1160
msgid "dashboard.webhooks.cant-edit"
msgstr "您只能刪除或修改您建立的 webhook。"
-#: src/app/main/ui/dashboard/team.cljs:928
+#: src/app/main/ui/dashboard/team.cljs:1106
msgid "dashboard.webhooks.content-type"
msgstr "內容類型"
-#: src/app/main/ui/dashboard/team.cljs:961
+#: src/app/main/ui/dashboard/team.cljs:1139
msgid "dashboard.webhooks.create"
msgstr "設置Webhook"
-#: src/app/main/ui/dashboard/team.cljs:853
+#: src/app/main/ui/dashboard/team.cljs:1031
msgid "dashboard.webhooks.create.success"
msgstr "成功添加Webhook。"
-#: src/app/main/ui/dashboard/team.cljs:958
+#: src/app/main/ui/dashboard/team.cljs:1136
msgid "dashboard.webhooks.description"
msgstr "當Penpot 發生特定事件時,Webhook 是一種使其他網站和應用程式收到通知的簡單方法。我們會向你指定的每個網址發送 POST 請求。"
-#: src/app/main/ui/dashboard/team.cljs:1087
+#: src/app/main/ui/dashboard/team.cljs:1265
msgid "dashboard.webhooks.empty.add-one"
msgstr "按「設置Webhook」添加。"
-#: src/app/main/ui/dashboard/team.cljs:1086
+#: src/app/main/ui/dashboard/team.cljs:1264
msgid "dashboard.webhooks.empty.no-webhooks"
msgstr "未有設置任何Webhook。"
@@ -1028,7 +1028,7 @@ msgstr "電子郵件"
msgid "dashboard.your-name"
msgstr "你的名字"
-#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:301, src/app/main/ui/dashboard/team.cljs:535, src/app/main/ui/dashboard/team.cljs:805, src/app/main/ui/dashboard/team.cljs:1073, src/app/main/ui/dashboard/team.cljs:1120
+#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:42, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:347, src/app/main/ui/dashboard/search.cljs:48, src/app/main/ui/dashboard/sidebar.cljs:302, src/app/main/ui/dashboard/team.cljs:537, src/app/main/ui/dashboard/team.cljs:983, src/app/main/ui/dashboard/team.cljs:1251, src/app/main/ui/dashboard/team.cljs:1298
msgid "dashboard.your-penpot"
msgstr "你的 Penpot"
@@ -1044,15 +1044,15 @@ msgstr "注意"
msgid "ds.component-subtitle"
msgstr "待更新的元件:"
-#: src/app/main/ui/workspace/plugins.cljs:338, src/app/main/ui/workspace/plugins.cljs:392
+#: src/app/main/ui/workspace/plugins.cljs:339, src/app/main/ui/workspace/plugins.cljs:393
msgid "ds.confirm-allow"
msgstr "允許"
-#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:332, src/app/main/ui/workspace/plugins.cljs:386
+#: src/app/main/ui/comments.cljs:673, src/app/main/ui/confirm.cljs:37, src/app/main/ui/settings/subscription.cljs:191, src/app/main/ui/settings/subscription.cljs:203, src/app/main/ui/workspace/plugins.cljs:333, src/app/main/ui/workspace/plugins.cljs:387
msgid "ds.confirm-cancel"
msgstr "取消"
-#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:153, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
+#: src/app/main/ui/confirm.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:101
msgid "ds.confirm-ok"
msgstr "Ok"
@@ -1104,11 +1104,11 @@ msgstr "你的電郵地址不能用作密碼"
msgid "errors.email-domain-not-allowed"
msgstr "不允許此域名"
-#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:629, src/app/main/ui/settings/change_email.cljs:37
+#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:98, src/app/main/ui/auth/register.cljs:101, src/app/main/ui/dashboard/team.cljs:627, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces"
msgstr "電子郵件«%s»有許多永久退件報告。"
-#: src/app/main/ui/dashboard/team.cljs:194, src/app/main/ui/onboarding/team_choice.cljs:110
+#: src/app/main/ui/dashboard/team.cljs:196, src/app/main/ui/dashboard/team.cljs:858, src/app/main/ui/onboarding/team_choice.cljs:110
msgid "errors.email-spam-or-permanent-bounces"
msgstr "電子郵件 «%s» 已被報告為垃圾郵件或永久退件。"
@@ -1120,11 +1120,6 @@ msgstr "你正開啟的檔案包含Penpot尚未支援或停用'%s' 功能。"
msgid "errors.feature-not-supported"
msgstr "不支援 「%s」功能。"
-#: src/app/main/ui/auth/register.cljs, src/app/main/ui/dashboard/team_form.cljs, src/app/main/ui/onboarding/team_choice.cljs, src/app/main/ui/setti ngs/access_tokens.cljs, src/app/main/ui/settings/feedback.cljs, src/app/main/ui/settings/profile.cljs, src/app/main/ui/workspace/sidebar/assets.cljs
-#, unused
-msgid "errors.field-max-length"
-msgstr "最多可包含 1 個字元。"
-
#, unused
msgid "errors.field-min-length"
msgstr "至少須含 1 個字元。"
@@ -1138,7 +1133,7 @@ msgstr "名稱必須包含除空格之外的字元。"
msgid "errors.file-feature-mismatch"
msgstr "似乎啟用的功能和您嘗試打開的文件的功能不相容。需要先整合套用「%s」才能開啟該檔案。"
-#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:197, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
+#: src/app/main/data/auth.cljs:322, src/app/main/ui/auth/login.cljs:81, src/app/main/ui/auth/login.cljs:122, src/app/main/ui/auth/register.cljs:110, src/app/main/ui/auth/register.cljs:304, src/app/main/ui/auth/verify_token.cljs:94, src/app/main/ui/dashboard/team.cljs:199, src/app/main/ui/dashboard/team.cljs:861, src/app/main/ui/onboarding/team_choice.cljs:113, src/app/main/ui/settings/access_tokens.cljs:79, src/app/main/ui/settings/feedback.cljs:49
msgid "errors.generic"
msgstr "發生了一些錯誤。"
@@ -1171,11 +1166,11 @@ msgstr "本邀請或已被取消或過期。"
msgid "errors.ldap-disabled"
msgstr "LDAP 驗證已停用。"
-#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:189, src/app/main/ui/onboarding/team_choice.cljs:105
+#: src/app/main/errors.cljs:289, src/app/main/ui/dashboard/team.cljs:191, src/app/main/ui/onboarding/team_choice.cljs:105
msgid "errors.max-quota-reached"
msgstr "你已達「%s」上限。請聯絡支援。"
-#: src/app/main/ui/dashboard/team.cljs:185, src/app/main/ui/onboarding/team_choice.cljs:101
+#: src/app/main/ui/dashboard/team.cljs:187, src/app/main/ui/dashboard/team.cljs:849, src/app/main/ui/onboarding/team_choice.cljs:101
msgid "errors.maximum-invitations-by-request-reached"
msgstr "已達到單次請求中可邀請的電子郵件數量上限(%s)"
@@ -1191,7 +1186,7 @@ msgstr "似乎圖形檔案的格式內容與檔案擴展名不匹配。"
msgid "errors.media-type-not-allowed"
msgstr "這好像不是個能用的影像。"
-#: src/app/main/ui/dashboard/team.cljs:624
+#: src/app/main/ui/dashboard/team.cljs:622
msgid "errors.member-is-muted"
msgstr "您邀請的人員設置了電子郵件靜音(垃圾郵件報告或高退件率)。"
@@ -1217,7 +1212,7 @@ msgstr "剪貼簿中的資料無效"
msgid "errors.profile-blocked"
msgstr "已封鎖用戶"
-#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:180, src/app/main/ui/dashboard/team.cljs:620, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
+#: src/app/main/ui/auth/recovery_request.cljs:53, src/app/main/ui/dashboard/team.cljs:182, src/app/main/ui/dashboard/team.cljs:618, src/app/main/ui/dashboard/team.cljs:844, src/app/main/ui/onboarding/team_choice.cljs:97, src/app/main/ui/settings/change_email.cljs:33
msgid "errors.profile-is-muted"
msgstr "您的個人資料電子郵件關閉通知(垃圾郵件報告或高退回率)。"
@@ -1229,15 +1224,15 @@ msgstr "目前並不開放註冊。"
msgid "errors.team-feature-mismatch"
msgstr "檢測到不相容的功能“%s”"
-#: src/app/main/ui/dashboard/sidebar.cljs:354, src/app/main/ui/dashboard/team.cljs:391
+#: src/app/main/ui/dashboard/sidebar.cljs:355, src/app/main/ui/dashboard/team.cljs:393
msgid "errors.team-leave.insufficient-members"
msgstr "成員不足,無法離開團隊,您可能希望將其刪除。"
-#: src/app/main/ui/dashboard/sidebar.cljs:357, src/app/main/ui/dashboard/team.cljs:394
+#: src/app/main/ui/dashboard/sidebar.cljs:358, src/app/main/ui/dashboard/team.cljs:396
msgid "errors.team-leave.member-does-not-exists"
msgstr "查無此人。"
-#: src/app/main/ui/dashboard/sidebar.cljs:360, src/app/main/ui/dashboard/team.cljs:397
+#: src/app/main/ui/dashboard/sidebar.cljs:361, src/app/main/ui/dashboard/team.cljs:399
msgid "errors.team-leave.owner-cant-leave"
msgstr "團隊擁有者不能離開其團隊,你須重新委任團隊擁有者角色。"
@@ -1257,31 +1252,31 @@ msgstr "驗證錯誤"
msgid "errors.version-not-supported"
msgstr "檔案的版本號碼不相容"
-#: src/app/main/ui/dashboard/team.cljs:873
+#: src/app/main/ui/dashboard/team.cljs:1051
msgid "errors.webhooks.connection"
msgstr "連線錯誤,無法接上網址"
-#: src/app/main/ui/dashboard/team.cljs:867
+#: src/app/main/ui/dashboard/team.cljs:1045
msgid "errors.webhooks.invalid-uri"
msgstr "網址未能通過驗証。"
-#: src/app/main/ui/dashboard/team.cljs:1026
+#: src/app/main/ui/dashboard/team.cljs:1204
msgid "errors.webhooks.last-delivery"
msgstr "上一次傳送未能成功。"
-#: src/app/main/ui/dashboard/team.cljs:869, src/app/main/ui/dashboard/team.cljs:1029
+#: src/app/main/ui/dashboard/team.cljs:1047, src/app/main/ui/dashboard/team.cljs:1207
msgid "errors.webhooks.ssl-validation"
msgstr "SSL證書驗證錯誤。"
-#: src/app/main/ui/dashboard/team.cljs:871
+#: src/app/main/ui/dashboard/team.cljs:1049
msgid "errors.webhooks.timeout"
msgstr "連線逾時"
-#: src/app/main/ui/dashboard/team.cljs:865
+#: src/app/main/ui/dashboard/team.cljs:1043
msgid "errors.webhooks.unexpected"
msgstr "驗證時出現未有預料的錯誤"
-#: src/app/main/ui/dashboard/team.cljs:875, src/app/main/ui/dashboard/team.cljs:1032
+#: src/app/main/ui/dashboard/team.cljs:1053, src/app/main/ui/dashboard/team.cljs:1210
msgid "errors.webhooks.unexpected-status"
msgstr "未預料狀態 %s"
@@ -1341,19 +1336,19 @@ msgstr "出現錯誤"
msgid "inspect.attributes.blur"
msgstr "模糊"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:124
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:125
msgid "inspect.attributes.blur.value"
msgstr "數值"
-#: src/app/main/ui/inspect/attributes/common.cljs:110, src/app/main/ui/inspect/right_sidebar.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:91, src/app/main/ui/inspect/right_sidebar.cljs:97
msgid "inspect.attributes.color.hex"
msgstr "HEX"
-#: src/app/main/ui/inspect/attributes/common.cljs:112, src/app/main/ui/inspect/right_sidebar.cljs:101
+#: src/app/main/ui/inspect/attributes/common.cljs:93, src/app/main/ui/inspect/right_sidebar.cljs:101
msgid "inspect.attributes.color.hsla"
msgstr "HSLA"
-#: src/app/main/ui/inspect/attributes/common.cljs:111, src/app/main/ui/inspect/right_sidebar.cljs:99
+#: src/app/main/ui/inspect/attributes/common.cljs:92, src/app/main/ui/inspect/right_sidebar.cljs:99
msgid "inspect.attributes.color.rgba"
msgstr "RGBA"
@@ -1361,7 +1356,7 @@ msgstr "RGBA"
msgid "inspect.attributes.fill"
msgstr "填充"
-#: src/app/main/ui/inspect/attributes/common.cljs:97
+#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:127
msgid "inspect.attributes.image.download"
msgstr "下載原始圖片"
@@ -1455,79 +1450,82 @@ msgstr "實線"
msgid "inspect.attributes.stroke.width"
msgstr "寬度"
-#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:191
+#: src/app/main/ui/inspect/attributes/text.cljs:78, src/app/main/ui/inspect/attributes/text.cljs:184
msgid "inspect.attributes.typography"
msgstr "字體"
-#: src/app/main/ui/inspect/attributes/text.cljs:86, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:303
msgid "inspect.attributes.typography.font-family"
msgstr "字型家族"
-#: src/app/main/ui/inspect/attributes/text.cljs:104, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:321, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:327
msgid "inspect.attributes.typography.font-size"
msgstr "字體大小"
-#: src/app/main/ui/inspect/attributes/text.cljs:95, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:338
msgid "inspect.attributes.typography.font-style"
msgstr "字體樣式"
#: src/app/main/ui/inspect/attributes/text.cljs:113
+#, unused
msgid "inspect.attributes.typography.font-weight"
msgstr "字體粗細"
-#: src/app/main/ui/inspect/attributes/text.cljs:131, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:388
msgid "inspect.attributes.typography.letter-spacing"
msgstr "字母間距"
-#: src/app/main/ui/inspect/attributes/text.cljs:122, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:371
msgid "inspect.attributes.typography.line-height"
msgstr "行高"
#: src/app/main/ui/inspect/attributes/text.cljs:140
+#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "文字修飾"
-#: src/app/main/ui/inspect/attributes/text.cljs:142
+#: src/app/main/ui/inspect/attributes/text.cljs:136
msgid "inspect.attributes.typography.text-decoration.none"
msgstr "無"
-#: src/app/main/ui/inspect/attributes/text.cljs:144
+#: src/app/main/ui/inspect/attributes/text.cljs:138
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "底線"
#: src/app/main/ui/inspect/attributes/text.cljs:153
+#, unused
msgid "inspect.attributes.typography.text-transform"
msgstr "文字轉換"
-#: src/app/main/ui/inspect/attributes/text.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
+#: src/app/main/ui/inspect/attributes/text.cljs:150, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:429
msgid "inspect.attributes.typography.text-transform.capitalize"
msgstr "詞首字母大寫"
-#: src/app/main/ui/inspect/attributes/text.cljs:155, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
+#: src/app/main/ui/inspect/attributes/text.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:433
msgid "inspect.attributes.typography.text-transform.lowercase"
msgstr "全小寫"
-#: src/app/main/ui/inspect/attributes/text.cljs:156
+#: src/app/main/ui/inspect/attributes/text.cljs:149
msgid "inspect.attributes.typography.text-transform.none"
msgstr "無"
-#: src/app/main/ui/inspect/attributes/text.cljs:159
+#: src/app/main/ui/inspect/attributes/text.cljs:152
msgid "inspect.attributes.typography.text-transform.unset"
msgstr "取消設定"
-#: src/app/main/ui/inspect/attributes/text.cljs:158, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
+#: src/app/main/ui/inspect/attributes/text.cljs:151, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:423
msgid "inspect.attributes.typography.text-transform.uppercase"
msgstr "全大寫"
-#: src/app/main/ui/inspect/right_sidebar.cljs:230
+#: src/app/main/ui/inspect/right_sidebar.cljs:232
msgid "inspect.empty.help"
msgstr "如果您想瞭解更多關於設計檢查的資訊,請訪問Penpot的幫助中心"
-#: src/app/main/ui/inspect/right_sidebar.cljs:233
+#: src/app/main/ui/inspect/right_sidebar.cljs:235
msgid "inspect.empty.more-info"
msgstr "有關檢查的詳細資訊"
-#: src/app/main/ui/inspect/right_sidebar.cljs:225
+#: src/app/main/ui/inspect/right_sidebar.cljs:227
msgid "inspect.empty.select"
msgstr "選擇一個形狀、版面或群組來檢查它們的屬性和程式碼"
@@ -1587,7 +1585,7 @@ msgstr "文字"
msgid "inspect.tabs.info"
msgstr "資訊"
-#: src/app/main/ui/workspace/main_menu.cljs:164
+#: src/app/main/ui/workspace/main_menu.cljs:192
msgid "label.shortcuts"
msgstr "捷徑"
@@ -1599,11 +1597,11 @@ msgstr "接受"
msgid "labels.access-tokens"
msgstr "存取權杖(tokens)"
-#: src/app/main/ui/dashboard/team.cljs:1045
+#: src/app/main/ui/dashboard/team.cljs:1223
msgid "labels.active"
msgstr "啟用"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.add"
msgstr "新增"
@@ -1611,11 +1609,11 @@ msgstr "新增"
msgid "labels.add-custom-font"
msgstr "新增自訂字體"
-#: src/app/main/ui/workspace/libraries.cljs:176
+#: src/app/main/ui/workspace/libraries.cljs:177
msgid "labels.adding"
msgstr "新增..."
-#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:318, src/app/main/ui/dashboard/team.cljs:563, src/app/main/ui/dashboard/team.cljs:593, src/app/main/ui/onboarding/team_choice.cljs:58
+#: src/app/main/ui/dashboard/team.cljs:134, src/app/main/ui/dashboard/team.cljs:320, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:595, src/app/main/ui/onboarding/team_choice.cljs:58
msgid "labels.admin"
msgstr "管理員"
@@ -1623,7 +1621,7 @@ msgstr "管理員"
msgid "labels.adobe-xd"
msgstr "Adobe XD 軟體"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:90, src/app/main/ui/workspace/tokens/management/context_menu.cljs:124, src/app/main/ui/workspace/tokens/management/token_pill.cljs:141
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:89, src/app/main/ui/workspace/tokens/management/context_menu.cljs:123, src/app/main/ui/workspace/tokens/management/token_pill.cljs:116
msgid "labels.all"
msgstr "全部"
@@ -1644,7 +1642,7 @@ msgstr "伺服器正在進行小型維修,請稍後重試。"
msgid "labels.bad-gateway.main-message"
msgstr "無效的閘道"
-#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:944, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:158, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/management/create/form.cljs:613, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
+#: src/app/main/data/common.cljs:129, src/app/main/ui/dashboard/change_owner.cljs:64, src/app/main/ui/dashboard/import.cljs:515, src/app/main/ui/dashboard/team.cljs:780, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:162, src/app/main/ui/exports/files.cljs:191, src/app/main/ui/settings/access_tokens.cljs:175, src/app/main/ui/viewer/share_link.cljs:205, src/app/main/ui/workspace/sidebar/assets/groups.cljs:159, src/app/main/ui/workspace/tokens/export/modal.cljs:44, src/app/main/ui/workspace/tokens/import/modal.cljs:269, src/app/main/ui/workspace/tokens/management/create/form.cljs:632, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:228
msgid "labels.cancel"
msgstr "取消"
@@ -1652,11 +1650,11 @@ msgstr "取消"
msgid "labels.canva"
msgstr "油畫"
-#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:102, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:128, src/app/main/ui/workspace/libraries.cljs:623, src/app/main/ui/workspace/sidebar/debug.cljs:40, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar.cljs:243, src/app/main/ui/workspace/tokens/export.cljs:24, src/app/main/ui/workspace/tokens/import.cljs:18, src/app/main/ui/workspace/tokens/management/create/modals.cljs:90, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:442
+#: src/app/main/data/common.cljs:96, src/app/main/ui/dashboard/comments.cljs:103, src/app/main/ui/dashboard/projects.cljs:99, src/app/main/ui/exports/files.cljs:209, src/app/main/ui/settings/access_tokens.cljs:170, src/app/main/ui/settings/subscription.cljs:246, src/app/main/ui/viewer/login.cljs:71, src/app/main/ui/viewer/share_link.cljs:176, src/app/main/ui/workspace/comments.cljs:129, src/app/main/ui/workspace/libraries.cljs:656, src/app/main/ui/workspace/sidebar/debug.cljs:41, src/app/main/ui/workspace/sidebar/layers.cljs:302, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:43, src/app/main/ui/workspace/sidebar/shortcuts.cljs:496, src/app/main/ui/workspace/sidebar.cljs:244, src/app/main/ui/workspace/tokens/export.cljs:25, src/app/main/ui/workspace/tokens/import.cljs:19, src/app/main/ui/workspace/tokens/management/create/modals.cljs:91, src/app/main/ui/workspace/tokens/settings/menu.cljs:78, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:58, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:161, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:441
msgid "labels.close"
msgstr "關閉"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:186
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:181
msgid "labels.collapse"
msgstr "摺疊"
@@ -1668,11 +1666,11 @@ msgstr "留言"
msgid "labels.comment.mark-as-solved"
msgstr "標記為已解決"
-#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:126
+#: src/app/main/ui/viewer/comments.cljs:71, src/app/main/ui/workspace/comments.cljs:127
msgid "labels.comments"
msgstr "評論"
-#: src/app/main/ui/dashboard/sidebar.cljs:899, src/app/main/ui/workspace/main_menu.cljs:116
+#: src/app/main/ui/dashboard/sidebar.cljs:840, src/app/main/ui/workspace/main_menu.cljs:144
msgid "labels.community"
msgstr "社群"
@@ -1680,7 +1678,7 @@ msgstr "社群"
msgid "labels.confirm-password"
msgstr "確認密碼"
-#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
+#: src/app/main/ui/dashboard/import.cljs:521, src/app/main/ui/dashboard/team.cljs:787, src/app/main/ui/exports/files.cljs:196, src/app/main/ui/onboarding/newsletter.cljs:106, src/app/main/ui/settings/subscription.cljs:195, src/app/main/ui/settings/subscription.cljs:210
msgid "labels.continue"
msgstr "繼續"
@@ -1692,7 +1690,7 @@ msgstr "繼續"
msgid "labels.continue-with-penpot"
msgstr "以Penpot帳戶繼續"
-#: src/app/main/ui/dashboard/team.cljs:692
+#: src/app/main/ui/dashboard/team.cljs:650
msgid "labels.copy-invitation-link"
msgstr "複製連結"
@@ -1700,7 +1698,7 @@ msgstr "複製連結"
msgid "labels.copyright"
msgstr "Kaleidos @2025"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:205
msgid "labels.create"
msgstr "建立"
@@ -1720,7 +1718,7 @@ msgstr "自訂字體"
msgid "labels.dashboard"
msgstr "控制台"
-#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:980, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:221, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:607, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:64, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:362
+#: src/app/main/ui/dashboard/file_menu.cljs:329, src/app/main/ui/dashboard/fonts.cljs:267, src/app/main/ui/dashboard/fonts.cljs:343, src/app/main/ui/dashboard/fonts.cljs:357, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1158, src/app/main/ui/settings/access_tokens.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:224, src/app/main/ui/workspace/sidebar/versions.cljs:215, src/app/main/ui/workspace/tokens/management/create/form.cljs:626, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:361
msgid "labels.delete"
msgstr "刪除"
@@ -1732,7 +1730,7 @@ msgstr "刪除留言"
msgid "labels.delete-comment-thread"
msgstr "刪除 thread"
-#: src/app/main/ui/dashboard/team.cljs:698
+#: src/app/main/ui/dashboard/team.cljs:941
msgid "labels.delete-invitation"
msgstr "刪除邀請"
@@ -1749,15 +1747,15 @@ msgstr "開發者"
msgid "labels.director"
msgstr "導演"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:211
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:214
msgid "labels.discard"
msgstr "捨棄"
-#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:724
+#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:79, src/app/main/ui/dashboard/files.cljs:178, src/app/main/ui/dashboard/projects.cljs:227, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/sidebar.cljs:725
msgid "labels.drafts"
msgstr "草稿"
-#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:978, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:51
+#: src/app/main/ui/comments.cljs:1005, src/app/main/ui/dashboard/fonts.cljs:264, src/app/main/ui/dashboard/team.cljs:1156, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:220, src/app/main/ui/workspace/tokens/themes.cljs:51
msgid "labels.edit"
msgstr "編輯"
@@ -1765,7 +1763,7 @@ msgstr "編輯"
msgid "labels.edit-file"
msgstr "編輯檔案"
-#: src/app/main/ui/dashboard/team.cljs:130, src/app/main/ui/dashboard/team.cljs:315, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:597, src/app/main/ui/onboarding/team_choice.cljs:57
+#: src/app/main/ui/dashboard/team.cljs:132, src/app/main/ui/dashboard/team.cljs:317, src/app/main/ui/dashboard/team.cljs:566, src/app/main/ui/dashboard/team.cljs:599, src/app/main/ui/onboarding/team_choice.cljs:57
msgid "labels.editor"
msgstr "編輯者"
@@ -1774,11 +1772,11 @@ msgstr "編輯者"
msgid "labels.event"
msgstr "事件"
-#: src/app/main/ui/dashboard/team.cljs:714
+#: src/app/main/ui/dashboard/team.cljs:668
msgid "labels.expired-invitation"
msgstr "過期"
-#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:137
+#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/workspace/tokens/sidebar.cljs:133
msgid "labels.export"
msgstr "匯出"
@@ -1806,7 +1804,7 @@ msgstr "字體提供者"
msgid "labels.font-variants"
msgstr "樣式"
-#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:737
+#: src/app/main/ui/dashboard/fonts.cljs:61, src/app/main/ui/dashboard/sidebar.cljs:738
msgid "labels.fonts"
msgstr "字型"
@@ -1820,11 +1818,11 @@ msgstr "執行長或創辦人"
msgid "labels.freelancer"
msgstr "自由工作者"
-#: src/app/main/ui/dashboard/sidebar.cljs:922, src/app/main/ui/workspace/main_menu.cljs:148
+#: src/app/main/ui/dashboard/sidebar.cljs:834, src/app/main/ui/workspace/main_menu.cljs:176
msgid "labels.github-repo"
msgstr "Github 倉庫"
-#: src/app/main/ui/dashboard/sidebar.cljs:935, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:177
+#: src/app/main/ui/dashboard/sidebar.cljs:809, src/app/main/ui/settings/sidebar.cljs:136, src/app/main/ui/workspace/main_menu.cljs:205
msgid "labels.give-feedback"
msgstr "給予迴響"
@@ -1836,19 +1834,19 @@ msgstr "返回"
msgid "labels.graphic-design"
msgstr "平面設計"
-#: src/app/main/ui/dashboard/sidebar.cljs:894, src/app/main/ui/workspace/main_menu.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1084, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1109, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1295
+#: src/app/main/ui/dashboard/sidebar.cljs:792, src/app/main/ui/workspace/main_menu.cljs:136, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1085, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1110, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1296
msgid "labels.help-center"
msgstr "説明中心"
-#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:73
+#: src/app/main/ui/viewer/comments.cljs:104, src/app/main/ui/workspace/comments.cljs:74
msgid "labels.hide-resolved-comments"
msgstr "隱藏已解決的評論"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:134
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:130
msgid "labels.import"
msgstr "匯入"
-#: src/app/main/ui/dashboard/team.cljs:1046
+#: src/app/main/ui/dashboard/team.cljs:1224
msgid "labels.inactive"
msgstr "未啟用"
@@ -1868,7 +1866,7 @@ msgstr "內部錯誤"
msgid "labels.invision"
msgstr "InVision 軟體"
-#: src/app/main/ui/dashboard/sidebar.cljs:435, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108, src/app/main/ui/dashboard/team.cljs:784
+#: src/app/main/ui/dashboard/sidebar.cljs:436, src/app/main/ui/dashboard/team.cljs:102, src/app/main/ui/dashboard/team.cljs:110, src/app/main/ui/dashboard/team.cljs:944
msgid "labels.invitations"
msgstr "邀請"
@@ -1876,7 +1874,7 @@ msgstr "邀請"
msgid "labels.language"
msgstr "語言"
-#: src/app/main/ui/dashboard/sidebar.cljs:917, src/app/main/ui/workspace/main_menu.cljs:140
+#: src/app/main/ui/workspace/main_menu.cljs:168
msgid "labels.libraries-and-templates"
msgstr "圖庫與範本"
@@ -1892,7 +1890,7 @@ msgstr "登錄或註冊"
msgid "labels.login"
msgstr "登入"
-#: src/app/main/ui/dashboard/sidebar.cljs:941
+#: src/app/main/ui/dashboard/sidebar.cljs:1053
msgid "labels.logout"
msgstr "登出"
@@ -1900,11 +1898,11 @@ msgstr "登出"
msgid "labels.marketing"
msgstr "行銷"
-#: src/app/main/ui/dashboard/team.cljs:510
+#: src/app/main/ui/dashboard/team.cljs:512
msgid "labels.member"
msgstr "成員"
-#: src/app/main/ui/dashboard/sidebar.cljs:431, src/app/main/ui/dashboard/team.cljs:98, src/app/main/ui/dashboard/team.cljs:106
+#: src/app/main/ui/dashboard/sidebar.cljs:432, src/app/main/ui/dashboard/team.cljs:100, src/app/main/ui/dashboard/team.cljs:108
msgid "labels.members"
msgstr "成員"
@@ -1912,15 +1910,15 @@ msgstr "成員"
msgid "labels.new-password"
msgstr "新密碼"
-#: src/app/main/ui/dashboard/templates.cljs:293, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
+#: src/app/main/ui/dashboard/templates.cljs:301, src/app/main/ui/onboarding/questions.cljs:54, src/app/main/ui/viewer.cljs:112
msgid "labels.next"
msgstr "下一個"
-#: src/app/main/ui/dashboard/comments.cljs:121, src/app/main/ui/workspace/comments.cljs:164
+#: src/app/main/ui/dashboard/comments.cljs:122, src/app/main/ui/workspace/comments.cljs:165
msgid "labels.no-comments-available"
msgstr "你都瞭解了!新的評論通知將顯示在這裡。"
-#: src/app/main/ui/dashboard/team.cljs:759
+#: src/app/main/ui/dashboard/team.cljs:737
msgid "labels.no-invitations"
msgstr "沒有待處理的邀請。"
@@ -1937,7 +1935,7 @@ msgstr "喔不!"
msgid "labels.notifications"
msgstr "通知"
-#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1176
+#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1354
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "%s 個檔案"
@@ -1947,7 +1945,7 @@ msgid "labels.num-of-frames"
msgid_plural "labels.num-of-frames"
msgstr[0] "1 版面"
-#: src/app/main/ui/dashboard/team.cljs:1171
+#: src/app/main/ui/dashboard/team.cljs:1349
msgid "labels.num-of-projects"
msgid_plural "labels.num-of-projects"
msgstr[0] "%s 個專案"
@@ -1965,7 +1963,7 @@ msgstr "原有密碼"
msgid "labels.only-yours"
msgstr "只有你"
-#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:309, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:338
+#: src/app/main/ui/comments.cljs:923, src/app/main/ui/comments.cljs:988, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:310, src/app/main/ui/workspace/sidebar/options/menus/text.cljs:339
msgid "labels.options"
msgstr "選項"
@@ -1981,7 +1979,7 @@ msgstr "其他(請註明)"
msgid "labels.other-short"
msgstr "其他"
-#: src/app/main/ui/dashboard/team.cljs:322, src/app/main/ui/dashboard/team.cljs:562, src/app/main/ui/dashboard/team.cljs:1157
+#: src/app/main/ui/dashboard/team.cljs:324, src/app/main/ui/dashboard/team.cljs:564, src/app/main/ui/dashboard/team.cljs:1335
msgid "labels.owner"
msgstr "擁有者"
@@ -1989,7 +1987,7 @@ msgstr "擁有者"
msgid "labels.password"
msgstr "密碼"
-#: src/app/main/ui/dashboard/team.cljs:715
+#: src/app/main/ui/dashboard/team.cljs:669
msgid "labels.pending-invitation"
msgstr "待辦"
@@ -2013,11 +2011,11 @@ msgstr "產品管理"
msgid "labels.profile"
msgstr "個人檔案"
-#: src/app/main/ui/dashboard/sidebar.cljs:717
+#: src/app/main/ui/dashboard/sidebar.cljs:718
msgid "labels.projects"
msgstr "專案"
-#: src/app/main/ui/dashboard/sidebar.cljs:909, src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:132
+#: src/app/main/ui/settings/sidebar.cljs:129, src/app/main/ui/workspace/main_menu.cljs:160
msgid "labels.release-notes"
msgstr "更新日誌"
@@ -2031,11 +2029,11 @@ msgstr "重新載入檔案"
msgid "labels.remove"
msgstr "移除"
-#: src/app/main/ui/dashboard/team.cljs:353
+#: src/app/main/ui/dashboard/team.cljs:355
msgid "labels.remove-member"
msgstr "移除團隊成員"
-#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:452, src/app/main/ui/workspace/sidebar/assets/groups.cljs:166, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:61
+#: src/app/main/ui/dashboard/file_menu.cljs:281, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:453, src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/versions.cljs:191, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename"
msgstr "重新命名"
@@ -2063,7 +2061,7 @@ msgstr "新回覆"
msgid "labels.reply.thread"
msgstr "回覆"
-#: src/app/main/ui/dashboard/team.cljs:695
+#: src/app/main/ui/dashboard/team.cljs:938
msgid "labels.resend-invitation"
msgstr "重新發送邀請"
@@ -2075,15 +2073,15 @@ msgstr "還原"
msgid "labels.retry"
msgstr "重試"
-#: src/app/main/ui/dashboard/team.cljs:511, src/app/main/ui/dashboard/team.cljs:785
+#: src/app/main/ui/dashboard/team.cljs:513, src/app/main/ui/dashboard/team.cljs:945
msgid "labels.role"
msgstr "角色"
-#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/create/form.cljs:618, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
+#: src/app/main/ui/dashboard/fonts.cljs:393, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:206, src/app/main/ui/workspace/tokens/management/create/form.cljs:637, src/app/main/ui/workspace/tokens/settings/menu.cljs:108
msgid "labels.save"
msgstr "儲存"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:715
+#: src/app/main/ui/workspace/sidebar/layers.cljs:421, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:730
msgid "labels.search"
msgstr "搜尋"
@@ -2111,11 +2109,11 @@ msgstr "系統正在進行定期保養。"
msgid "labels.service-unavailable.main-message"
msgstr "暫停服務"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:79
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:75
msgid "labels.sets"
msgstr "套"
-#: src/app/main/ui/dashboard/sidebar.cljs:445, src/app/main/ui/dashboard/team.cljs:99, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
+#: src/app/main/ui/dashboard/sidebar.cljs:446, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:115, src/app/main/ui/settings/options.cljs:87, src/app/main/ui/settings/sidebar.cljs:109
msgid "labels.settings"
msgstr "設定"
@@ -2127,11 +2125,11 @@ msgstr "分享"
msgid "labels.share-prototype"
msgstr "分享原型"
-#: src/app/main/ui/dashboard/sidebar.cljs:744
+#: src/app/main/ui/dashboard/sidebar.cljs:745
msgid "labels.shared-libraries"
msgstr "檔案庫"
-#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:55, src/app/main/ui/workspace/comments.cljs:137
+#: src/app/main/ui/viewer/comments.cljs:83, src/app/main/ui/workspace/comments.cljs:56, src/app/main/ui/workspace/comments.cljs:138
msgid "labels.show-all-comments"
msgstr "顯示所有留言"
@@ -2139,11 +2137,11 @@ msgstr "顯示所有留言"
msgid "labels.show-comments-list"
msgstr "顯示留言列表"
-#: src/app/main/ui/workspace/comments.cljs:67, src/app/main/ui/workspace/comments.cljs:139
+#: src/app/main/ui/workspace/comments.cljs:68, src/app/main/ui/workspace/comments.cljs:140
msgid "labels.show-mentions"
msgstr "僅顯示您的提及"
-#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:61, src/app/main/ui/workspace/comments.cljs:138
+#: src/app/main/ui/viewer/comments.cljs:92, src/app/main/ui/workspace/comments.cljs:62, src/app/main/ui/workspace/comments.cljs:139
msgid "labels.show-your-comments"
msgstr "僅顯示您的評論"
@@ -2155,7 +2153,7 @@ msgstr "sketch"
msgid "labels.start"
msgstr "開始"
-#: src/app/main/ui/dashboard/team.cljs:786
+#: src/app/main/ui/dashboard/team.cljs:954
msgid "labels.status"
msgstr "狀態"
@@ -2177,7 +2175,7 @@ msgstr "隊員"
msgid "labels.themes"
msgstr "佈景主題"
-#: src/app/main/ui/dashboard/sidebar.cljs:904, src/app/main/ui/workspace/main_menu.cljs:124
+#: src/app/main/ui/workspace/main_menu.cljs:152
msgid "labels.tutorials"
msgstr "教學"
@@ -2205,15 +2203,15 @@ msgstr "上傳自訂字體"
msgid "labels.uploading"
msgstr "正在上傳…"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:245
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:246
msgid "labels.view-only"
msgstr "僅供查閱"
-#: src/app/main/ui/dashboard/team.cljs:129, src/app/main/ui/dashboard/team.cljs:312, src/app/main/ui/dashboard/team.cljs:565, src/app/main/ui/dashboard/team.cljs:601, src/app/main/ui/onboarding/team_choice.cljs:56
+#: src/app/main/ui/dashboard/team.cljs:131, src/app/main/ui/dashboard/team.cljs:314, src/app/main/ui/dashboard/team.cljs:567, src/app/main/ui/dashboard/team.cljs:603, src/app/main/ui/onboarding/team_choice.cljs:56
msgid "labels.viewer"
msgstr "檢視者"
-#: src/app/main/ui/dashboard/sidebar.cljs:440, src/app/main/ui/dashboard/team.cljs:101, src/app/main/ui/dashboard/team.cljs:111, src/app/main/ui/dashboard/team.cljs:956
+#: src/app/main/ui/dashboard/sidebar.cljs:441, src/app/main/ui/dashboard/team.cljs:103, src/app/main/ui/dashboard/team.cljs:113, src/app/main/ui/dashboard/team.cljs:1134
msgid "labels.webhooks"
msgstr "Webhook"
@@ -2221,11 +2219,11 @@ msgstr "Webhook"
msgid "labels.write-new-comment"
msgstr "撰寫新留言"
-#: src/app/main/ui/dashboard/team.cljs:266
+#: src/app/main/ui/dashboard/team.cljs:268
msgid "labels.you"
msgstr "(你)"
-#: src/app/main/ui/dashboard/sidebar.cljs:886
+#: src/app/main/ui/dashboard/sidebar.cljs:1006
msgid "labels.your-account"
msgstr "你的帳戶"
@@ -2234,23 +2232,23 @@ msgstr "你的帳戶"
msgid "labels.youtube"
msgstr "YouTube"
-#: src/app/main/ui/workspace/colorpicker.cljs:449, src/app/main/ui/workspace/colorpicker.cljs:450, src/app/main/ui/workspace/colorpicker.cljs:452
+#: src/app/main/ui/workspace/colorpicker.cljs:486, src/app/main/ui/workspace/colorpicker.cljs:487, src/app/main/ui/workspace/colorpicker.cljs:489
msgid "media.choose-image"
msgstr "選擇圖片"
-#: src/app/main/ui/workspace/colorpicker.cljs:244
+#: src/app/main/ui/workspace/colorpicker.cljs:256
msgid "media.gradient"
msgstr "坡度"
-#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:44, src/app/main/ui/ds/utilities/swatch.cljs:57, src/app/main/ui/inspect/attributes/common.cljs:63, src/app/main/ui/workspace/colorpicker.cljs:246, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:251
+#: src/app/main/data/workspace/media.cljs:270, src/app/main/ui/components/color_bullet.cljs:33, src/app/main/ui/components/color_bullet.cljs:46, src/app/main/ui/ds/utilities/swatch.cljs:45, src/app/main/ui/ds/utilities/swatch.cljs:58, src/app/main/ui/inspect/attributes/common.cljs:44, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:65, src/app/main/ui/workspace/colorpicker.cljs:258, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:395
msgid "media.image"
msgstr "圖片"
-#: src/app/main/ui/inspect/attributes/common.cljs:74
+#: src/app/main/ui/inspect/attributes/common.cljs:55
msgid "media.image.short"
msgstr "圖"
-#: src/app/main/ui/workspace/colorpicker.cljs:442
+#: src/app/main/ui/workspace/colorpicker.cljs:479
msgid "media.keep-aspect-ratio"
msgstr "維持長寬比"
@@ -2268,7 +2266,7 @@ msgstr "正在載入圖片…"
msgid "media.radial"
msgstr "放射狀的"
-#: src/app/main/ui/workspace/colorpicker.cljs:242
+#: src/app/main/ui/workspace/colorpicker.cljs:254
msgid "media.solid"
msgstr "實心的"
@@ -2336,19 +2334,19 @@ msgstr "建立權杖(token)"
msgid "modals.create-access-token.title"
msgstr "產生存取權杖(token)"
-#: src/app/main/ui/dashboard/team.cljs:949
+#: src/app/main/ui/dashboard/team.cljs:1127
msgid "modals.create-webhook.submit-label"
msgstr "設置Webhook"
-#: src/app/main/ui/dashboard/team.cljs:914
+#: src/app/main/ui/dashboard/team.cljs:1092
msgid "modals.create-webhook.title"
msgstr "設置Webhook"
-#: src/app/main/ui/dashboard/team.cljs:925
+#: src/app/main/ui/dashboard/team.cljs:1103
msgid "modals.create-webhook.url.label"
msgstr "訊息負載網址"
-#: src/app/main/ui/dashboard/team.cljs:926
+#: src/app/main/ui/dashboard/team.cljs:1104
msgid "modals.create-webhook.url.placeholder"
msgstr "https://example.com/postreceive"
@@ -2392,11 +2390,11 @@ msgstr "您確定要刪除此對話嗎?此主題下的所有留言都將被刪
msgid "modals.delete-comment-thread.title"
msgstr "刪除對話"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:155
msgid "modals.delete-component-annotation.message"
msgstr "您確實要刪除該註釋嗎?"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:154
msgid "modals.delete-component-annotation.title"
msgstr "刪除註釋"
@@ -2440,11 +2438,11 @@ msgstr "您確實要刪除該字體嗎?如果在文件中使用,它將不會
msgid "modals.delete-font.title"
msgstr "刪除字型"
-#: src/app/main/ui/workspace/context_menu.cljs:670, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
+#: src/app/main/ui/workspace/context_menu.cljs:673, src/app/main/ui/workspace/sidebar/sitemap.cljs:72
msgid "modals.delete-page.body"
msgstr "您確定要刪除這個頁面嗎?"
-#: src/app/main/ui/workspace/context_menu.cljs:669, src/app/main/ui/workspace/sidebar/sitemap.cljs:70
+#: src/app/main/ui/workspace/context_menu.cljs:672, src/app/main/ui/workspace/sidebar/sitemap.cljs:71
msgid "modals.delete-page.title"
msgstr "刪除頁面"
@@ -2485,27 +2483,27 @@ msgid "modals.delete-shared-confirm.title"
msgid_plural "modals.delete-shared-confirm.title"
msgstr[0] "刪除文件"
-#: src/app/main/ui/dashboard/sidebar.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:425
msgid "modals.delete-team-confirm.accept"
msgstr "刪除團體"
-#: src/app/main/ui/dashboard/sidebar.cljs:423
+#: src/app/main/ui/dashboard/sidebar.cljs:424
msgid "modals.delete-team-confirm.message"
msgstr "您確定要刪除該團隊嗎?與團隊相關的所有專案和文件將永久刪除。"
-#: src/app/main/ui/dashboard/sidebar.cljs:422
+#: src/app/main/ui/dashboard/sidebar.cljs:423
msgid "modals.delete-team-confirm.title"
msgstr "正在刪除團體"
-#: src/app/main/ui/dashboard/team.cljs:459
+#: src/app/main/ui/dashboard/team.cljs:461
msgid "modals.delete-team-member-confirm.accept"
msgstr "刪除成員"
-#: src/app/main/ui/dashboard/team.cljs:458
+#: src/app/main/ui/dashboard/team.cljs:460
msgid "modals.delete-team-member-confirm.message"
msgstr "您確定要從團隊中刪除該成員嗎?"
-#: src/app/main/ui/dashboard/team.cljs:457
+#: src/app/main/ui/dashboard/team.cljs:459
msgid "modals.delete-team-member-confirm.title"
msgstr "刪除團隊成員"
@@ -2514,51 +2512,51 @@ msgid "modals.delete-unpublish-shared-confirm.activated.hint"
msgid_plural "modals.delete-unpublish-shared-confirm.activated.hint"
msgstr[0] "此文件中已使用的資產將保留在那裡(不會破壞任何設計)。"
-#: src/app/main/ui/dashboard/team.cljs:1019
+#: src/app/main/ui/dashboard/team.cljs:1197
msgid "modals.delete-webhook.accept"
msgstr "刪除 webhook"
-#: src/app/main/ui/dashboard/team.cljs:1018
+#: src/app/main/ui/dashboard/team.cljs:1196
msgid "modals.delete-webhook.message"
msgstr "您確定要刪除此 webhook 嗎?"
-#: src/app/main/ui/dashboard/team.cljs:1017
+#: src/app/main/ui/dashboard/team.cljs:1195
msgid "modals.delete-webhook.title"
msgstr "刪除 Webhook"
-#: src/app/main/ui/dashboard/team.cljs:948
+#: src/app/main/ui/dashboard/team.cljs:1126
msgid "modals.edit-webhook.submit-label"
msgstr "修改 Webhook"
-#: src/app/main/ui/dashboard/team.cljs:913
+#: src/app/main/ui/dashboard/team.cljs:1091
msgid "modals.edit-webhook.title"
msgstr "修改 Webhook"
-#: src/app/main/ui/dashboard/team.cljs:247
+#: src/app/main/ui/dashboard/team.cljs:249
msgid "modals.invite-member-confirm.accept"
msgstr "發送邀請"
-#: src/app/main/ui/dashboard/team.cljs:243, src/app/main/ui/onboarding/team_choice.cljs:203
+#: src/app/main/ui/dashboard/team.cljs:245, src/app/main/ui/onboarding/team_choice.cljs:203
msgid "modals.invite-member.emails"
msgstr "電子郵件,以逗號分隔"
-#: src/app/main/ui/dashboard/team.cljs:227
+#: src/app/main/ui/dashboard/team.cljs:229
msgid "modals.invite-member.repeated-invitation"
msgstr "有些電子郵件來自現任團隊成員。他們的邀請將不會被發送。"
-#: src/app/main/ui/dashboard/team.cljs:220
+#: src/app/main/ui/dashboard/team.cljs:222
msgid "modals.invite-team-member.text"
msgstr "您可以邀請成員加入團隊,以便他們可以存取此文件和所有團隊文件。"
-#: src/app/main/ui/dashboard/team.cljs:216
+#: src/app/main/ui/dashboard/team.cljs:218
msgid "modals.invite-team-member.title"
msgstr "邀請成員加入團隊"
-#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:425
+#: src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:427
msgid "modals.leave-and-close-confirm.hint"
msgstr "由於您是該團隊的唯一成員,因此該團隊及其專案和文件將一起被刪除。"
-#: src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:424
+#: src/app/main/ui/dashboard/sidebar.cljs:412, src/app/main/ui/dashboard/team.cljs:426
msgid "modals.leave-and-close-confirm.message"
msgstr "您確定要離開 %s 團隊嗎?"
@@ -2582,15 +2580,15 @@ msgstr "選擇要上位的會員"
msgid "modals.leave-and-reassign.title"
msgstr "離開前"
-#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/sidebar.cljs:413, src/app/main/ui/dashboard/team.cljs:426, src/app/main/ui/dashboard/team.cljs:448
+#: src/app/main/ui/dashboard/sidebar.cljs:392, src/app/main/ui/dashboard/sidebar.cljs:414, src/app/main/ui/dashboard/team.cljs:428, src/app/main/ui/dashboard/team.cljs:450
msgid "modals.leave-confirm.accept"
msgstr "離開團隊"
-#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/team.cljs:447
+#: src/app/main/ui/dashboard/sidebar.cljs:391, src/app/main/ui/dashboard/team.cljs:449
msgid "modals.leave-confirm.message"
msgstr "您確定要離開這個團隊嗎?"
-#: src/app/main/ui/dashboard/sidebar.cljs:389, src/app/main/ui/dashboard/sidebar.cljs:410, src/app/main/ui/dashboard/team.cljs:423, src/app/main/ui/dashboard/team.cljs:446
+#: src/app/main/ui/dashboard/sidebar.cljs:390, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:425, src/app/main/ui/dashboard/team.cljs:448
msgid "modals.leave-confirm.title"
msgstr "正在離開團隊"
@@ -2609,35 +2607,35 @@ msgid "modals.move-shared-confirm.title"
msgid_plural "modals.move-shared-confirm.title"
msgstr[0] "移動圖庫"
-#: src/app/main/ui/workspace/main_menu.cljs:274, src/app/main/ui/workspace/nudge.cljs:46
+#: src/app/main/ui/workspace/main_menu.cljs:302, src/app/main/ui/workspace/nudge.cljs:46
msgid "modals.nudge-title"
msgstr "微調量"
-#: src/app/main/ui/dashboard/team.cljs:378
+#: src/app/main/ui/dashboard/team.cljs:380
msgid "modals.promote-owner-confirm.accept"
msgstr "轉讓所有權"
-#: src/app/main/ui/dashboard/team.cljs:377
+#: src/app/main/ui/dashboard/team.cljs:379
msgid "modals.promote-owner-confirm.hint"
msgstr "如果您轉移所有權,您的角色將變為管理員,並失去對該團隊的一些權限。 "
-#: src/app/main/ui/dashboard/team.cljs:376
+#: src/app/main/ui/dashboard/team.cljs:378
msgid "modals.promote-owner-confirm.message"
msgstr "您是此團隊的當前擁有者。您是否確實要使 %s 成為團隊的新擁有者?"
-#: src/app/main/ui/dashboard/team.cljs:375
+#: src/app/main/ui/dashboard/team.cljs:377
msgid "modals.promote-owner-confirm.title"
msgstr "新團隊老大"
-#: src/app/main/ui/workspace/libraries.cljs:270
+#: src/app/main/ui/workspace/libraries.cljs:295
msgid "modals.publish-empty-library.accept"
msgstr "發布"
-#: src/app/main/ui/workspace/libraries.cljs:269
+#: src/app/main/ui/workspace/libraries.cljs:294
msgid "modals.publish-empty-library.message"
msgstr "你的圖庫是空的。您確定要發布它嗎?"
-#: src/app/main/ui/workspace/libraries.cljs:268
+#: src/app/main/ui/workspace/libraries.cljs:293
msgid "modals.publish-empty-library.title"
msgstr "發布空圖庫"
@@ -2685,19 +2683,19 @@ msgstr "您即將更新共用圖庫中的元件。這可能會影響使用它的
msgid "modals.update-remote-component-in-bulk.message"
msgstr "更新共用圖庫中的元件"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:424
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
msgid "modals.update-remote-component.accept"
msgstr "更新"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:423
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
msgid "modals.update-remote-component.cancel"
msgstr "取消"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:422
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
msgid "modals.update-remote-component.hint"
msgstr "您即將更新共用圖庫中的元件。這可能會影響使用它的其他文件。"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:421
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:420
msgid "modals.update-remote-component.message"
msgstr "更新共用圖庫中的元件"
@@ -2801,11 +2799,11 @@ msgstr "中斷維護:我們將在5分鐘內進行短暫維護。"
msgid "notifications.by-code.upgrade-version"
msgstr "有新版本可用,請重新整理頁面"
-#: src/app/main/ui/dashboard/team.cljs:168, src/app/main/ui/dashboard/team.cljs:645
+#: src/app/main/ui/dashboard/team.cljs:170, src/app/main/ui/dashboard/team.cljs:867
msgid "notifications.invitation-email-sent"
msgstr "邀請已成功發送"
-#: src/app/main/ui/dashboard/team.cljs:666
+#: src/app/main/ui/dashboard/team.cljs:635
msgid "notifications.invitation-link-copied"
msgstr "邀請連結已複製"
@@ -2934,7 +2932,7 @@ msgstr "邀請成員"
msgid "onboarding.choice.team-up.invite-members-info"
msgstr "記得把每個人都包括在內。開發人員、設計師、經理......多元化加起來:)"
-#: src/app/main/ui/dashboard/team.cljs:232, src/app/main/ui/onboarding/team_choice.cljs:194
+#: src/app/main/ui/dashboard/team.cljs:234, src/app/main/ui/onboarding/team_choice.cljs:194
msgid "onboarding.choice.team-up.roles"
msgstr "邀請角色:"
@@ -3147,665 +3145,649 @@ msgstr "Penpot"
msgid "profile.recovery.go-to-login"
msgstr "前往登入"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:239
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:366
msgid "settings.detach"
msgstr "分離"
-#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:90, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:376, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:967, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1181, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:197, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:206, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:360, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:404, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:415, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:462, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:345, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:259, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:173
+#: src/app/main/ui/inspect/exports.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:107, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:377, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:454, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:987, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1216, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:137, src/app/main/ui/workspace/sidebar/options/menus/constraints.cljs:148, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:223, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:246, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:346, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:361, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:112, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:513, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:524, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:567, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:578, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:607, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:351, src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:331, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:382, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:400, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:414, src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:214
msgid "settings.multiple"
msgstr "混合"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:283
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:423
msgid "settings.remove-color"
msgstr "移除顏色"
-#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:288
+#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:428
msgid "settings.select-this-color"
msgstr "使用此樣式選擇項目"
# SECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:409
msgid "shortcut-section.basics"
msgstr "基本"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:421
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:415
msgid "shortcut-section.dashboard"
msgstr "儀表板"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:424
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
msgid "shortcut-section.viewer"
msgstr "檢視者"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:418
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:412
msgid "shortcut-section.workspace"
msgstr "工作區"
# SUBSECTIONS
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:56
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
msgid "shortcut-subsection.alignment"
msgstr "對齊"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:57
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
msgid "shortcut-subsection.edit"
msgstr "編輯"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:58
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
msgid "shortcut-subsection.general-dashboard"
msgstr "一般"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:59
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
msgid "shortcut-subsection.general-viewer"
msgstr "一般"
-#: src/app/main/ui/workspace/main_menu.cljs:845, src/app/main/ui/workspace/sidebar/shortcuts.cljs:60
+#: src/app/main/ui/workspace/main_menu.cljs:873, src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
msgid "shortcut-subsection.main-menu"
msgstr "主功能表"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:61
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
msgid "shortcut-subsection.modify-layers"
msgstr "修改圖層"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:62
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
msgid "shortcut-subsection.navigation-dashboard"
msgstr "導航"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:63
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
msgid "shortcut-subsection.navigation-viewer"
msgstr "導航"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:64
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
msgid "shortcut-subsection.navigation-workspace"
msgstr "導航"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:65
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
msgid "shortcut-subsection.panels"
msgstr "面板"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:66
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
msgid "shortcut-subsection.path-editor"
msgstr "路徑"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:67
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
msgid "shortcut-subsection.shape"
msgstr "形狀"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:68
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
msgid "shortcut-subsection.text-editor"
msgstr "文字"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:69
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
msgid "shortcut-subsection.tools"
msgstr "工具"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:70
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
msgid "shortcut-subsection.zoom-viewer"
msgstr "縮放"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:71
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
msgid "shortcut-subsection.zoom-workspace"
msgstr "縮放"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:72
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
msgid "shortcuts.add-comment"
msgstr "評論"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:73
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
msgid "shortcuts.add-node"
msgstr "新增節點"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:74
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
msgid "shortcuts.align-bottom"
msgstr "底部對齊"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:75
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
msgid "shortcuts.align-center"
msgstr "居中對齊"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:76
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
msgid "shortcuts.align-hcenter"
msgstr "水平居中對齊"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:77
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
msgid "shortcuts.align-justify"
msgstr "兩端對齊"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:78
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
msgid "shortcuts.align-left"
msgstr "左對齊"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:79
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
msgid "shortcuts.align-right"
msgstr "右對齊"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:80
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
msgid "shortcuts.align-top"
msgstr "頂部對齊"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:81
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
msgid "shortcuts.align-vcenter"
msgstr "垂直居中對齊"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:82
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
msgid "shortcuts.artboard-selection"
msgstr "從選擇中建立板"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:83
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
msgid "shortcuts.bold"
msgstr "切換粗體"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:84
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
msgid "shortcuts.bool-difference"
msgstr "布林差集"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:85
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
msgid "shortcuts.bool-exclude"
msgstr "布林排除"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:86
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
msgid "shortcuts.bool-intersection"
msgstr "布林交集"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:87
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
msgid "shortcuts.bool-union"
msgstr "布林聯集"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:88
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
msgid "shortcuts.bring-back"
msgstr "置於最底層"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:89
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
msgid "shortcuts.bring-backward"
msgstr "向後發送"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:90
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
msgid "shortcuts.bring-forward"
msgstr "向前移動"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:91
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
msgid "shortcuts.bring-front"
msgstr "置於最前面"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:92
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
msgid "shortcuts.clear-undo"
msgstr "清除undo"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:93
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:95
msgid "shortcuts.copy"
msgstr "複製"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:94
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
msgid "shortcuts.copy-link"
msgstr "將連結複製到剪貼簿"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
msgid "shortcuts.create-new-project"
msgstr "建立新的"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:97
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
msgid "shortcuts.cut"
msgstr "剪下"
-#: src/app/main/ui/workspace/right_header.cljs:84, src/app/main/ui/workspace/sidebar/shortcuts.cljs:98
+#: src/app/main/ui/workspace/right_header.cljs:85, src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
msgid "shortcuts.decrease-zoom"
msgstr "縮小"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:99
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
msgid "shortcuts.delete"
msgstr "刪除"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:100
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
msgid "shortcuts.delete-node"
msgstr "刪除節點"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:101
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
msgid "shortcuts.detach-component"
msgstr "分離元件"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:102
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
msgid "shortcuts.draw-curve"
msgstr "曲線"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:103
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
msgid "shortcuts.draw-ellipse"
msgstr "橢圓"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:104
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
msgid "shortcuts.draw-frame"
msgstr "畫板"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:105
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
msgid "shortcuts.draw-nodes"
msgstr "繪製路徑"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:106
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
msgid "shortcuts.draw-path"
msgstr "路徑"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:107
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
msgid "shortcuts.draw-rect"
msgstr "矩形"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:108
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
msgid "shortcuts.draw-text"
msgstr "文字"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:109
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
msgid "shortcuts.duplicate"
msgstr "複本"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:110
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
msgid "shortcuts.escape"
msgstr "取消"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:111
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
msgid "shortcuts.export-shapes"
msgstr "匯出形狀"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:112
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
msgid "shortcuts.fit-all"
msgstr "縮放以適合全部"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:113
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
msgid "shortcuts.flip-horizontal"
msgstr "水平翻轉"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:114
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
msgid "shortcuts.flip-vertical"
msgstr "垂直翻轉"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:115
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
msgid "shortcuts.font-size-dec"
msgstr "減小字體大小"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:116
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
msgid "shortcuts.font-size-inc"
msgstr "增加字體大小"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:117
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
msgid "shortcuts.go-to-drafts"
msgstr "轉至草稿"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:118
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
msgid "shortcuts.go-to-libs"
msgstr "轉至共享圖庫"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:119
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
msgid "shortcuts.go-to-search"
msgstr "搜尋"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:120
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
msgid "shortcuts.group"
msgstr "群組"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:121
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
msgid "shortcuts.h-distribute"
msgstr "水平分佈"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:122
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
msgid "shortcuts.hide-ui"
msgstr "顯示/隱藏 UI"
-#: src/app/main/ui/workspace/right_header.cljs:89, src/app/main/ui/workspace/sidebar/shortcuts.cljs:123
+#: src/app/main/ui/workspace/right_header.cljs:90, src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
msgid "shortcuts.increase-zoom"
msgstr "放大"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:124
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
msgid "shortcuts.insert-image"
msgstr "插入圖片"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:125
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
msgid "shortcuts.italic"
msgstr "切換斜體"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:126
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
msgid "shortcuts.join-nodes"
msgstr "加入節點"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:127
-msgid "shortcuts.letter-spacing-dec"
-msgstr "減少字母間距"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:128
-msgid "shortcuts.letter-spacing-inc"
-msgstr "增加字母間距"
-
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:129
-msgid "shortcuts.line-height-dec"
-msgstr "減少行高"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
-msgid "shortcuts.line-height-inc"
-msgstr "增加行高"
-
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.line-through"
msgstr "切換刪除線"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:130
msgid "shortcuts.make-corner"
msgstr "製作轉角"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:131
msgid "shortcuts.make-curve"
msgstr "製作曲線"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:132
msgid "shortcuts.mask"
msgstr "遮罩"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:133
msgid "shortcuts.merge-nodes"
msgstr "合併節點"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:134
msgid "shortcuts.move"
msgstr "移動"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:135
msgid "shortcuts.move-fast-down"
msgstr "快速向下移動"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:136
msgid "shortcuts.move-fast-left"
msgstr "快速向左移動"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:137
msgid "shortcuts.move-fast-right"
msgstr "快速向右移動"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:138
msgid "shortcuts.move-fast-up"
msgstr "快速上升"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:139
msgid "shortcuts.move-nodes"
msgstr "移動節點"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:140
msgid "shortcuts.move-unit-down"
msgstr "下移"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:141
msgid "shortcuts.move-unit-left"
msgstr "向左移動"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:142
msgid "shortcuts.move-unit-right"
msgstr "右移"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:143
msgid "shortcuts.move-unit-up"
msgstr "向上移動"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:144
msgid "shortcuts.next-frame"
msgstr "下一個畫板"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:517
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:513
msgid "shortcuts.not-found"
msgstr "未找到快捷方式"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:145
msgid "shortcuts.opacity-0"
msgstr "將不透明度設為 100%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:146
msgid "shortcuts.opacity-1"
msgstr "將不透明度設為 10%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:147
msgid "shortcuts.opacity-2"
msgstr "將不透明度設為 20%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:148
msgid "shortcuts.opacity-3"
msgstr "將不透明度設為 30%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:149
msgid "shortcuts.opacity-4"
msgstr "將不透明度設為 40%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:150
msgid "shortcuts.opacity-5"
msgstr "將不透明度設為 50%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:151
msgid "shortcuts.opacity-6"
msgstr "將不透明度設為 60%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:152
msgid "shortcuts.opacity-7"
msgstr "將不透明度設為 70%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:153
msgid "shortcuts.opacity-8"
msgstr "將不透明度設為 80%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:154
msgid "shortcuts.opacity-9"
msgstr "將不透明度設為 90%"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:155
msgid "shortcuts.open-color-picker"
msgstr "顏色選擇器"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:156
msgid "shortcuts.open-comments"
msgstr "前往查看者留言區"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:157
msgid "shortcuts.open-dashboard"
msgstr "轉至儀表板"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:158
msgid "shortcuts.open-inspect"
msgstr "進入查看者檢查區塊"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:159
msgid "shortcuts.open-interactions"
msgstr "進入查看者互動區"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:160
msgid "shortcuts.open-viewer"
msgstr "進入查看者互動區"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:161
msgid "shortcuts.open-workspace"
msgstr "轉至工作區"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:261
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:255
msgid "shortcuts.or"
msgstr " 或 "
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:162
msgid "shortcuts.paste"
msgstr "貼上"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:163
msgid "shortcuts.prev-frame"
msgstr "上一個畫板"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:164
msgid "shortcuts.redo"
msgstr "復原"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
msgid "shortcuts.rename"
msgstr "重新命名"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:166
msgid "shortcuts.reset-zoom"
msgstr "重置縮放"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:167
msgid "shortcuts.scale"
msgstr "縮放"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:168
msgid "shortcuts.search-placeholder"
msgstr "搜尋快捷鍵"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:169
msgid "shortcuts.select-all"
msgstr "全選"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:170
msgid "shortcuts.select-next"
msgstr "選取下一層"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:171
msgid "shortcuts.select-parent-layer"
msgstr "選取父層"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:172
msgid "shortcuts.select-prev"
msgstr "選取前一層"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:173
msgid "shortcuts.separate-nodes"
msgstr "分離節點"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:174
msgid "shortcuts.show-pixel-grid"
msgstr "顯示/隱藏像素格線"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:175
msgid "shortcuts.show-shortcuts"
msgstr "顯示/隱藏快捷方式"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:176
msgid "shortcuts.snap-nodes"
msgstr "對齊到節點"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:177
msgid "shortcuts.snap-pixel-grid"
msgstr "對齊到像素網格"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:178
msgid "shortcuts.start-editing"
msgstr "開始編輯"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:179
msgid "shortcuts.start-measure"
msgstr "開始測量"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:180
msgid "shortcuts.stop-measure"
msgstr "停止測量"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:181
msgid "shortcuts.thumbnail-set"
msgstr "設定縮圖"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:497, src/app/main/ui/workspace/sidebar/shortcuts.cljs:506
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:491, src/app/main/ui/workspace/sidebar/shortcuts.cljs:502
msgid "shortcuts.title"
msgstr "鍵盤快速鍵"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:182
msgid "shortcuts.toggle-alignment"
msgstr "切換動態對齊"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:183
msgid "shortcuts.toggle-assets"
msgstr "切換資產"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:184
msgid "shortcuts.toggle-colorpalette"
msgstr "切換調色板"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
msgid "shortcuts.toggle-focus-mode"
msgstr "切換專注模式"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:186
msgid "shortcuts.toggle-fullscreen"
msgstr "切換全螢幕"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:187
msgid "shortcuts.toggle-guides"
msgstr "顯示/隱藏導引線"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:188
msgid "shortcuts.toggle-history"
msgstr "切換歷史記錄"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:189
msgid "shortcuts.toggle-layers"
msgstr "切換圖層"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:190
msgid "shortcuts.toggle-layout-flex"
msgstr "新增/移除彈性佈局"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:191
msgid "shortcuts.toggle-layout-grid"
msgstr "新增/移除網格佈局"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:192
msgid "shortcuts.toggle-lock"
msgstr "鎖定選擇"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:193
msgid "shortcuts.toggle-lock-size"
msgstr "鎖定比例"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:194
msgid "shortcuts.toggle-rulers"
msgstr "顯示/隱藏尺規"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:195
msgid "shortcuts.toggle-snap-guides"
msgstr "對齊到導引線"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:196
msgid "shortcuts.toggle-snap-ruler-guide"
msgstr "對齊到標尺指導線"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:197
msgid "shortcuts.toggle-textpalette"
msgstr "切換文字調色板"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:198
msgid "shortcuts.toggle-theme"
msgstr "更改主題"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-visibility"
msgstr "顯示 / 隱藏"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-zoom-style"
msgstr "切換縮放模式"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
msgid "shortcuts.underline"
msgstr "顯示/隱藏底線"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.undo"
msgstr "撤回"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:209
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:203
msgid "shortcuts.ungroup"
msgstr "取消群組"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:210
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:204
msgid "shortcuts.unmask"
msgstr "解除遮罩"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:211
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:205
msgid "shortcuts.v-distribute"
msgstr "垂直分佈"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:212
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:206
msgid "shortcuts.zoom-lense-decrease"
msgstr "縮小焦距"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:213
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:207
msgid "shortcuts.zoom-lense-increase"
msgstr "放大焦距"
-#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:214
+#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:208
msgid "shortcuts.zoom-selected"
msgstr "縮放至選取範圍"
@@ -3861,19 +3843,19 @@ msgstr "密碼 - Penpot"
msgid "title.settings.profile"
msgstr "個人資料 - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:803
+#: src/app/main/ui/dashboard/team.cljs:981
msgid "title.team-invitations"
msgstr "邀請 - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:533
+#: src/app/main/ui/dashboard/team.cljs:535
msgid "title.team-members"
msgstr "成員 - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1118
+#: src/app/main/ui/dashboard/team.cljs:1296
msgid "title.team-settings"
msgstr "設定 - %s - Penpot"
-#: src/app/main/ui/dashboard/team.cljs:1071
+#: src/app/main/ui/dashboard/team.cljs:1249
msgid "title.team-webhooks"
msgstr "Webhooks - %s - Penpot"
@@ -3943,43 +3925,43 @@ msgstr "點擊時顯示互動"
msgid "viewer.header.sitemap"
msgstr "網站地圖"
-#: src/app/main/ui/dashboard/team.cljs:1025
+#: src/app/main/ui/dashboard/team.cljs:1203
msgid "webhooks.last-delivery.success"
msgstr "上次交付成功。"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:59
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:56
msgid "workspace.align.hcenter"
msgstr "水平居中對齊 (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:75
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:72
msgid "workspace.align.hdistribute"
msgstr "水平間距分佈 (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:48
msgid "workspace.align.hleft"
msgstr "左對齊 (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:67
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:64
msgid "workspace.align.hright"
msgstr "右對齊 (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:100
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:97
msgid "workspace.align.vbottom"
msgstr "底部對齊 (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:92
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:89
msgid "workspace.align.vcenter"
msgstr "垂直居中對齊 (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:102
msgid "workspace.align.vdistribute"
msgstr "垂直間距分佈 (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:84
+#: src/app/main/ui/workspace/sidebar/options/menus/align.cljs:81
msgid "workspace.align.vtop"
msgstr "頂部對齊 (%s)"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:163
+#: src/app/main/ui/workspace/sidebar/assets.cljs:172
msgid "workspace.assets.add-library"
msgstr "新增圖庫"
@@ -3988,19 +3970,19 @@ msgstr "新增圖庫"
msgid "workspace.assets.assets"
msgstr "資產"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets.cljs:152
msgid "workspace.assets.box-filter-all"
msgstr "所有資源"
-#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:485, src/app/main/ui/workspace/sidebar/assets.cljs:148
+#: src/app/main/ui/dashboard/grid.cljs:148, src/app/main/ui/dashboard/grid.cljs:180, src/app/main/ui/workspace/sidebar/assets/colors.cljs:489, src/app/main/ui/workspace/sidebar/assets.cljs:158
msgid "workspace.assets.colors"
msgstr "顏色"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:493
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:497
msgid "workspace.assets.colors.add-color"
msgstr "新增顏色"
-#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:144
+#: src/app/main/ui/dashboard/grid.cljs:144, src/app/main/ui/dashboard/grid.cljs:159, src/app/main/ui/workspace/sidebar/assets/components.cljs:560, src/app/main/ui/workspace/sidebar/assets.cljs:155
msgid "workspace.assets.components"
msgstr "元件"
@@ -4008,19 +3990,19 @@ msgstr "元件"
msgid "workspace.assets.components.add-component"
msgstr "新增元件"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:140
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
msgid "workspace.assets.create-group"
msgstr "建立群組"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:152
msgid "workspace.assets.create-group-hint"
msgstr "您的項目將自動命名為「群組名稱 / 項目名稱」"
-#: src/app/main/ui/workspace/context_menu.cljs:679, src/app/main/ui/workspace/sidebar/assets/colors.cljs:249, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:442
+#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:251, src/app/main/ui/workspace/sidebar/assets/components.cljs:641, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:443
msgid "workspace.assets.delete"
msgstr "刪除"
-#: src/app/main/ui/workspace/context_menu.cljs:684
+#: src/app/main/ui/workspace/context_menu.cljs:687
msgid "workspace.assets.duplicate"
msgstr "複本"
@@ -4028,11 +4010,11 @@ msgstr "複本"
msgid "workspace.assets.duplicate-main"
msgstr "複製主要資源"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:245, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:438
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:247, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:439
msgid "workspace.assets.edit"
msgstr "編輯"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:177
+#: src/app/main/ui/workspace/sidebar/assets.cljs:186
msgid "workspace.assets.filter"
msgstr "篩選資源"
@@ -4041,23 +4023,23 @@ msgstr "篩選資源"
msgid "workspace.assets.graphics"
msgstr "圖形"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:576
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:190, src/app/main/ui/workspace/sidebar/assets/components.cljs:576
msgid "workspace.assets.grid-view"
msgstr "網格視圖"
-#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:253, src/app/main/ui/workspace/sidebar/assets/components.cljs:629, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:447
+#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:255, src/app/main/ui/workspace/sidebar/assets/components.cljs:625, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:448
msgid "workspace.assets.group"
msgstr "群組"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:150
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:151
msgid "workspace.assets.group-name"
msgstr "群組名稱"
-#: src/app/main/ui/workspace/sidebar/assets/components.cljs:572
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:191, src/app/main/ui/workspace/sidebar/assets/components.cljs:572
msgid "workspace.assets.list-view"
msgstr "列表視圖"
-#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:617
+#: src/app/main/ui/workspace/sidebar/assets/file_library.cljs:108, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:631
msgid "workspace.assets.local-library"
msgstr "本地圖庫"
@@ -4069,15 +4051,15 @@ msgstr "未找到資源"
msgid "workspace.assets.open-library"
msgstr "開啟圖庫檔案"
-#: src/app/main/ui/workspace/context_menu.cljs:682, src/app/main/ui/workspace/sidebar/assets/colors.cljs:241, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:433
+#: src/app/main/ui/workspace/context_menu.cljs:685, src/app/main/ui/workspace/sidebar/assets/colors.cljs:243, src/app/main/ui/workspace/sidebar/assets/components.cljs:616, src/app/main/ui/workspace/sidebar/assets/groups.cljs:67, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:434
msgid "workspace.assets.rename"
msgstr "重新命名"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:141
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:142
msgid "workspace.assets.rename-group"
msgstr "重新命名群組"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:174
+#: src/app/main/ui/workspace/sidebar/assets.cljs:183
msgid "workspace.assets.search"
msgstr "搜尋資源"
@@ -4092,20 +4074,20 @@ msgstr[0] "選取了 %s 項目"
msgid "workspace.assets.shared-library"
msgstr "共享圖庫"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:237
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:235
msgid "workspace.assets.sidebar.components"
msgid_plural "workspace.assets.sidebar.components"
msgstr[0] "1個元件"
-#: src/app/main/ui/workspace/sidebar/assets.cljs:193
+#: src/app/main/ui/workspace/sidebar/assets.cljs:204
msgid "workspace.assets.sort"
msgstr "排序"
-#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:396, src/app/main/ui/workspace/sidebar/assets.cljs:152
+#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:207, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:397, src/app/main/ui/workspace/sidebar/assets.cljs:161
msgid "workspace.assets.typography"
msgstr "字體排版設計"
-#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:404
+#: src/app/main/ui/workspace/sidebar/assets/typographies.cljs:405
msgid "workspace.assets.typography.add-typography"
msgstr "新增字體排版"
@@ -4130,7 +4112,7 @@ msgstr "字距"
msgid "workspace.assets.typography.line-height"
msgstr "行高"
-#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:546, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
+#: src/app/main/ui/dashboard/grid.cljs:217, src/app/main/ui/workspace/libraries.cljs:579, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:480, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:506, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:613, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:633
msgid "workspace.assets.typography.sample"
msgstr "Ag"
@@ -4142,59 +4124,59 @@ msgstr "文字樣式"
msgid "workspace.assets.typography.text-transform"
msgstr "文字變換"
-#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:69
+#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:70
msgid "workspace.assets.ungroup"
msgstr "取消群組"
-#: src/app/main/ui/workspace/context_menu.cljs:791
+#: src/app/main/ui/workspace/context_menu.cljs:794
msgid "workspace.context-menu.grid-cells.area"
msgstr "建立區域"
-#: src/app/main/ui/workspace/context_menu.cljs:794
+#: src/app/main/ui/workspace/context_menu.cljs:797
msgid "workspace.context-menu.grid-cells.create-board"
msgstr "建立版面"
-#: src/app/main/ui/workspace/context_menu.cljs:786
+#: src/app/main/ui/workspace/context_menu.cljs:789
msgid "workspace.context-menu.grid-cells.merge"
msgstr "合併單元格"
-#: src/app/main/ui/workspace/context_menu.cljs:749
+#: src/app/main/ui/workspace/context_menu.cljs:752
msgid "workspace.context-menu.grid-track.column.add-after"
msgstr "在右邊新增 1 列"
-#: src/app/main/ui/workspace/context_menu.cljs:748
+#: src/app/main/ui/workspace/context_menu.cljs:751
msgid "workspace.context-menu.grid-track.column.add-before"
msgstr "在左邊新增 1 列"
-#: src/app/main/ui/workspace/context_menu.cljs:750
+#: src/app/main/ui/workspace/context_menu.cljs:753
msgid "workspace.context-menu.grid-track.column.delete"
msgstr "刪除欄位"
-#: src/app/main/ui/workspace/context_menu.cljs:751
+#: src/app/main/ui/workspace/context_menu.cljs:754
msgid "workspace.context-menu.grid-track.column.delete-shapes"
msgstr "刪除欄位和圖形"
-#: src/app/main/ui/workspace/context_menu.cljs:747
+#: src/app/main/ui/workspace/context_menu.cljs:750
msgid "workspace.context-menu.grid-track.column.duplicate"
msgstr "複製欄位"
-#: src/app/main/ui/workspace/context_menu.cljs:756
+#: src/app/main/ui/workspace/context_menu.cljs:759
msgid "workspace.context-menu.grid-track.row.add-after"
msgstr "在下方新增 1 行"
-#: src/app/main/ui/workspace/context_menu.cljs:755
+#: src/app/main/ui/workspace/context_menu.cljs:758
msgid "workspace.context-menu.grid-track.row.add-before"
msgstr "在上方新增 1 行"
-#: src/app/main/ui/workspace/context_menu.cljs:757
+#: src/app/main/ui/workspace/context_menu.cljs:760
msgid "workspace.context-menu.grid-track.row.delete"
msgstr "刪除列"
-#: src/app/main/ui/workspace/context_menu.cljs:758
+#: src/app/main/ui/workspace/context_menu.cljs:761
msgid "workspace.context-menu.grid-track.row.delete-shapes"
msgstr "刪除列和圖形"
-#: src/app/main/ui/workspace/context_menu.cljs:754
+#: src/app/main/ui/workspace/context_menu.cljs:757
msgid "workspace.context-menu.grid-track.row.duplicate"
msgstr "複製列"
@@ -4202,7 +4184,7 @@ msgstr "複製列"
msgid "workspace.focus.focus-mode"
msgstr "焦點模式"
-#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:706
+#: src/app/main/ui/workspace/context_menu.cljs:395, src/app/main/ui/workspace/context_menu.cljs:709
msgid "workspace.focus.focus-off"
msgstr "退出焦點模式"
@@ -4222,11 +4204,11 @@ msgstr "線性漸層"
msgid "workspace.gradients.radial"
msgstr "放射狀漸層"
-#: src/app/main/ui/workspace/main_menu.cljs:246
+#: src/app/main/ui/workspace/main_menu.cljs:274
msgid "workspace.header.menu.disable-dynamic-alignment"
msgstr "關閉動態對齊"
-#: src/app/main/ui/workspace/main_menu.cljs:200
+#: src/app/main/ui/workspace/main_menu.cljs:228
msgid "workspace.header.menu.disable-scale-content"
msgstr "關閉等比縮放"
@@ -4235,23 +4217,23 @@ msgstr "關閉等比縮放"
msgid "workspace.header.menu.disable-scale-text"
msgstr "關閉文字縮放"
-#: src/app/main/ui/workspace/main_menu.cljs:231
+#: src/app/main/ui/workspace/main_menu.cljs:259
msgid "workspace.header.menu.disable-snap-guides"
msgstr "禁用對齊至導向線"
-#: src/app/main/ui/workspace/main_menu.cljs:261
+#: src/app/main/ui/workspace/main_menu.cljs:289
msgid "workspace.header.menu.disable-snap-pixel-grid"
msgstr "關閉對齊至像素"
-#: src/app/main/ui/workspace/main_menu.cljs:215
+#: src/app/main/ui/workspace/main_menu.cljs:243
msgid "workspace.header.menu.disable-snap-ruler-guides"
msgstr "關閉對齊至尺規導向線"
-#: src/app/main/ui/workspace/main_menu.cljs:247
+#: src/app/main/ui/workspace/main_menu.cljs:275
msgid "workspace.header.menu.enable-dynamic-alignment"
msgstr "啟用動態對齊"
-#: src/app/main/ui/workspace/main_menu.cljs:201
+#: src/app/main/ui/workspace/main_menu.cljs:229
msgid "workspace.header.menu.enable-scale-content"
msgstr "啟用等比縮放"
@@ -4260,51 +4242,51 @@ msgstr "啟用等比縮放"
msgid "workspace.header.menu.enable-scale-text"
msgstr "啟用文字縮放"
-#: src/app/main/ui/workspace/main_menu.cljs:232
+#: src/app/main/ui/workspace/main_menu.cljs:260
msgid "workspace.header.menu.enable-snap-guides"
msgstr "對齊至導向線"
-#: src/app/main/ui/workspace/main_menu.cljs:262
+#: src/app/main/ui/workspace/main_menu.cljs:290
msgid "workspace.header.menu.enable-snap-pixel-grid"
msgstr "啟用對齊至像素"
-#: src/app/main/ui/workspace/main_menu.cljs:216
+#: src/app/main/ui/workspace/main_menu.cljs:244
msgid "workspace.header.menu.enable-snap-ruler-guides"
msgstr "對齊至尺規導向線"
-#: src/app/main/ui/workspace/main_menu.cljs:394
+#: src/app/main/ui/workspace/main_menu.cljs:422
msgid "workspace.header.menu.hide-artboard-names"
msgstr "隱藏版面名稱"
-#: src/app/main/ui/workspace/main_menu.cljs:348
+#: src/app/main/ui/workspace/main_menu.cljs:376
msgid "workspace.header.menu.hide-guides"
msgstr "隱藏導向線"
-#: src/app/main/ui/workspace/main_menu.cljs:365
+#: src/app/main/ui/workspace/main_menu.cljs:393
msgid "workspace.header.menu.hide-palette"
msgstr "隱藏顏色調色盤"
-#: src/app/main/ui/workspace/main_menu.cljs:406
+#: src/app/main/ui/workspace/main_menu.cljs:434
msgid "workspace.header.menu.hide-pixel-grid"
msgstr "隱藏像素網格"
-#: src/app/main/ui/workspace/main_menu.cljs:332
+#: src/app/main/ui/workspace/main_menu.cljs:360
msgid "workspace.header.menu.hide-rules"
msgstr "隱藏尺規"
-#: src/app/main/ui/workspace/main_menu.cljs:379
+#: src/app/main/ui/workspace/main_menu.cljs:407
msgid "workspace.header.menu.hide-textpalette"
msgstr "隱藏字型面板"
-#: src/app/main/ui/workspace/main_menu.cljs:872
+#: src/app/main/ui/workspace/main_menu.cljs:900
msgid "workspace.header.menu.option.edit"
msgstr "編輯"
-#: src/app/main/ui/workspace/main_menu.cljs:861
+#: src/app/main/ui/workspace/main_menu.cljs:889
msgid "workspace.header.menu.option.file"
msgstr "檔案"
-#: src/app/main/ui/workspace/main_menu.cljs:918
+#: src/app/main/ui/workspace/main_menu.cljs:946
msgid "workspace.header.menu.option.help-info"
msgstr "幫助和資訊"
@@ -4313,59 +4295,59 @@ msgstr "幫助和資訊"
msgid "workspace.header.menu.option.power-up"
msgstr "升級您的計劃"
-#: src/app/main/ui/workspace/main_menu.cljs:894
+#: src/app/main/ui/workspace/main_menu.cljs:922
msgid "workspace.header.menu.option.preferences"
msgstr "偏好設定"
-#: src/app/main/ui/workspace/main_menu.cljs:883
+#: src/app/main/ui/workspace/main_menu.cljs:911
msgid "workspace.header.menu.option.view"
msgstr "檢視"
-#: src/app/main/ui/workspace/main_menu.cljs:478
+#: src/app/main/ui/workspace/main_menu.cljs:506
msgid "workspace.header.menu.redo"
msgstr "復原上一步操作"
-#: src/app/main/ui/workspace/main_menu.cljs:449
+#: src/app/main/ui/workspace/main_menu.cljs:477
msgid "workspace.header.menu.select-all"
msgstr "全選"
-#: src/app/main/ui/workspace/main_menu.cljs:395
+#: src/app/main/ui/workspace/main_menu.cljs:423
msgid "workspace.header.menu.show-artboard-names"
msgstr "顯示版面名稱"
-#: src/app/main/ui/workspace/main_menu.cljs:349
+#: src/app/main/ui/workspace/main_menu.cljs:377
msgid "workspace.header.menu.show-guides"
msgstr "顯示導向線"
-#: src/app/main/ui/workspace/main_menu.cljs:366
+#: src/app/main/ui/workspace/main_menu.cljs:394
msgid "workspace.header.menu.show-palette"
msgstr "顯示顏色調色盤"
-#: src/app/main/ui/workspace/main_menu.cljs:407
+#: src/app/main/ui/workspace/main_menu.cljs:435
msgid "workspace.header.menu.show-pixel-grid"
msgstr "顯示像素網格"
-#: src/app/main/ui/workspace/main_menu.cljs:333
+#: src/app/main/ui/workspace/main_menu.cljs:361
msgid "workspace.header.menu.show-rules"
msgstr "顯示尺規"
-#: src/app/main/ui/workspace/main_menu.cljs:380
+#: src/app/main/ui/workspace/main_menu.cljs:408
msgid "workspace.header.menu.show-textpalette"
msgstr "顯示字型面板"
-#: src/app/main/ui/workspace/main_menu.cljs:288
+#: src/app/main/ui/workspace/main_menu.cljs:316
msgid "workspace.header.menu.toggle-dark-theme"
msgstr "切換到深色主題"
-#: src/app/main/ui/workspace/main_menu.cljs:286, src/app/main/ui/workspace/main_menu.cljs:289
+#: src/app/main/ui/workspace/main_menu.cljs:314, src/app/main/ui/workspace/main_menu.cljs:317
msgid "workspace.header.menu.toggle-light-theme"
msgstr "切換到明亮主題"
-#: src/app/main/ui/workspace/main_menu.cljs:464
+#: src/app/main/ui/workspace/main_menu.cljs:492
msgid "workspace.header.menu.undo"
msgstr "撤回"
-#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:94
+#: src/app/main/ui/viewer/header.cljs:98, src/app/main/ui/workspace/right_header.cljs:95
msgid "workspace.header.reset-zoom"
msgstr "重設"
@@ -4381,7 +4363,7 @@ msgstr "已儲存"
msgid "workspace.header.saving"
msgstr "正在儲存"
-#: src/app/main/ui/workspace/right_header.cljs:239
+#: src/app/main/ui/workspace/right_header.cljs:240
msgid "workspace.header.share"
msgstr "共享"
@@ -4390,11 +4372,11 @@ msgstr "共享"
msgid "workspace.header.unsaved"
msgstr "變更尚未儲存"
-#: src/app/main/ui/workspace/right_header.cljs:244
+#: src/app/main/ui/workspace/right_header.cljs:245
msgid "workspace.header.viewer"
msgstr "檢視模式 (%s)"
-#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:77
+#: src/app/main/ui/viewer/header.cljs:79, src/app/main/ui/workspace/right_header.cljs:78
msgid "workspace.header.zoom"
msgstr "縮放"
@@ -4406,7 +4388,7 @@ msgstr "填滿 - 按比例縮放以填滿"
msgid "workspace.header.zoom-fit"
msgstr "填滿 - 按比例縮小以適合"
-#: src/app/main/ui/workspace/right_header.cljs:97
+#: src/app/main/ui/workspace/right_header.cljs:98
msgid "workspace.header.zoom-fit-all"
msgstr "縮放至適合顯示全部"
@@ -4414,19 +4396,19 @@ msgstr "縮放至適合顯示全部"
msgid "workspace.header.zoom-full-screen"
msgstr "全螢幕"
-#: src/app/main/ui/workspace/right_header.cljs:104
+#: src/app/main/ui/workspace/right_header.cljs:105
msgid "workspace.header.zoom-selected"
msgstr "縮放至選取範圍"
-#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:273, src/app/main/ui/workspace/sidebar/options/menus/grid_cell.cljs:275, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:621
msgid "workspace.layout_grid.editor.options.edit-grid"
msgstr "編輯網格"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1300
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1301
msgid "workspace.layout_grid.editor.options.exit"
msgstr "離開"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:490, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:491
msgid "workspace.layout_grid.editor.padding.expand"
msgstr "顯示四邊內距選項"
@@ -4442,7 +4424,7 @@ msgstr "完成"
msgid "workspace.layout_grid.editor.top-bar.locate"
msgstr "定位"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1326
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1327
msgid "workspace.layout_grid.editor.top-bar.locate.tooltip"
msgstr "定位網格佈局"
@@ -4451,10 +4433,6 @@ msgstr "定位網格佈局"
msgid "workspace.libraries.add"
msgstr "新增"
-#: src/app/main/ui/workspace/libraries.cljs:106, src/app/main/ui/workspace/libraries.cljs:132
-msgid "workspace.libraries.colors"
-msgstr "%s 顏色"
-
#: src/app/main/ui/workspace/color_palette.cljs:147
msgid "workspace.libraries.colors.empty-palette"
msgstr "您的圖庫中還沒有顏色樣式"
@@ -4481,43 +4459,35 @@ msgstr "最近使用的顏色"
msgid "workspace.libraries.colors.rgb-complementary"
msgstr "RGB 互補色"
-#: src/app/main/ui/workspace/colorpicker.cljs:346
+#: src/app/main/ui/workspace/colorpicker.cljs:358
msgid "workspace.libraries.colors.rgba"
msgstr "RGBA"
-#: src/app/main/ui/workspace/colorpicker.cljs:516
+#: src/app/main/ui/workspace/colorpicker.cljs:557
msgid "workspace.libraries.colors.save-color"
msgstr "儲存顏色樣式"
-#: src/app/main/ui/workspace/libraries.cljs:100, src/app/main/ui/workspace/libraries.cljs:124
-msgid "workspace.libraries.components"
-msgstr "%s 元件"
-
-#: src/app/main/ui/workspace/libraries.cljs:371
+#: src/app/main/ui/workspace/libraries.cljs:404
msgid "workspace.libraries.empty.add-some"
msgstr "或增加這些來試試:"
-#: src/app/main/ui/workspace/libraries.cljs:365
+#: src/app/main/ui/workspace/libraries.cljs:398
msgid "workspace.libraries.empty.no-libraries"
msgstr "您的團隊中沒有共享圖庫,您可以尋找"
-#: src/app/main/ui/workspace/libraries.cljs:369
+#: src/app/main/ui/workspace/libraries.cljs:402
msgid "workspace.libraries.empty.some-templates"
msgstr "這裡的一些範本"
-#: src/app/main/ui/workspace/libraries.cljs:297
+#: src/app/main/ui/workspace/libraries.cljs:322
msgid "workspace.libraries.file-library"
msgstr "檔案圖庫"
-#: src/app/main/ui/workspace/libraries.cljs:103, src/app/main/ui/workspace/libraries.cljs:128
-msgid "workspace.libraries.graphics"
-msgstr "%s 圖形"
-
-#: src/app/main/ui/workspace/libraries.cljs:291
+#: src/app/main/ui/workspace/libraries.cljs:316
msgid "workspace.libraries.in-this-file"
msgstr "此檔案中的圖庫"
-#: src/app/main/ui/workspace/libraries.cljs:609, src/app/main/ui/workspace/libraries.cljs:627
+#: src/app/main/ui/workspace/libraries.cljs:642, src/app/main/ui/workspace/libraries.cljs:660
msgid "workspace.libraries.libraries"
msgstr "檔案庫"
@@ -4526,11 +4496,11 @@ msgstr "檔案庫"
msgid "workspace.libraries.library"
msgstr "檔案庫"
-#: src/app/main/ui/workspace/libraries.cljs:467
+#: src/app/main/ui/workspace/libraries.cljs:500
msgid "workspace.libraries.library-updates"
msgstr "圖庫更新"
-#: src/app/main/ui/workspace/libraries.cljs:360
+#: src/app/main/ui/workspace/libraries.cljs:393
msgid "workspace.libraries.loading"
msgstr "載入中…"
@@ -4539,79 +4509,75 @@ msgstr "載入中…"
msgid "workspace.libraries.more-templates"
msgstr "您可以搜尋 "
-#: src/app/main/ui/workspace/libraries.cljs:465
+#: src/app/main/ui/workspace/libraries.cljs:498
msgid "workspace.libraries.no-libraries-need-sync"
msgstr "沒有需要更新的共享圖庫"
-#: src/app/main/ui/workspace/libraries.cljs:378
+#: src/app/main/ui/workspace/libraries.cljs:411
msgid "workspace.libraries.no-matches-for"
msgstr "沒有找到符合 '%s' 的"
-#: src/app/main/ui/workspace/libraries.cljs:334
+#: src/app/main/ui/workspace/libraries.cljs:367
msgid "workspace.libraries.search-shared-libraries"
msgstr "搜尋共享圖庫"
-#: src/app/main/ui/workspace/libraries.cljs:330
+#: src/app/main/ui/workspace/libraries.cljs:363
msgid "workspace.libraries.shared-libraries"
msgstr "共享圖庫"
-#: src/app/main/ui/workspace/libraries.cljs:352
+#: src/app/main/ui/workspace/libraries.cljs:385
msgid "workspace.libraries.shared-library-btn"
msgstr "連接圖庫"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:325
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:326
msgid "workspace.libraries.text.multiple-typography"
msgstr "多種字體樣式"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:329
msgid "workspace.libraries.text.multiple-typography-tooltip"
msgstr "解除所有字體樣式的連結"
-#: src/app/main/ui/workspace/libraries.cljs:109, src/app/main/ui/workspace/libraries.cljs:136
-msgid "workspace.libraries.typography"
-msgstr "%s 字體樣式"
-
-#: src/app/main/ui/workspace/libraries.cljs:323
+#: src/app/main/ui/workspace/libraries.cljs:354
msgid "workspace.libraries.unlink-library-btn"
msgstr "取消圖庫連接"
-#: src/app/main/ui/workspace/libraries.cljs:487
+#: src/app/main/ui/workspace/libraries.cljs:520
msgid "workspace.libraries.update"
msgstr "更新"
-#: src/app/main/ui/workspace/libraries.cljs:563
+#: src/app/main/ui/workspace/libraries.cljs:596
msgid "workspace.libraries.update.see-all-changes"
msgstr "查看所有變更"
-#: src/app/main/ui/workspace/libraries.cljs:611
+#: src/app/main/ui/workspace/libraries.cljs:644
msgid "workspace.libraries.updates"
msgstr "更新"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:745
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:746
msgid "workspace.options.add-interaction"
msgstr "按一下 + 按鈕來新增互動。"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:96
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:97
msgid "workspace.options.blur-options.add-blur"
msgstr "加入模糊效果"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:117
+#: 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/blur.cljs:92, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:93, src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:111
msgid "workspace.options.blur-options.title"
msgstr "模糊"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:92
msgid "workspace.options.blur-options.title.group"
msgstr "群組模糊效果"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:91
msgid "workspace.options.blur-options.title.multiple"
msgstr "選擇模糊效果"
-#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:114
msgid "workspace.options.blur-options.toggle-blur"
msgstr "切換模糊效果"
@@ -4619,39 +4585,39 @@ msgstr "切換模糊效果"
msgid "workspace.options.canvas-background"
msgstr "畫布背景"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:630
msgid "workspace.options.clip-content"
msgstr "裁切內容"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:917, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:923, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1149
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:937, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:943, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1183
msgid "workspace.options.component"
msgstr "元件"
-#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:193
+#: src/app/main/ui/inspect/annotation.cljs:19, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:196
msgid "workspace.options.component.annotation"
msgstr "註解"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:931
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:951
msgid "workspace.options.component.copy"
msgstr "複製"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:185
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:188
msgid "workspace.options.component.create-annotation"
msgstr "建立註解"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:184
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:187
msgid "workspace.options.component.edit-annotation"
msgstr "建立註解"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:930, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1153
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:950, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1187
msgid "workspace.options.component.main"
msgstr "主要"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:706
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:721
msgid "workspace.options.component.swap"
msgstr "替換元件"
-#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:765
msgid "workspace.options.component.swap.empty"
msgstr "這個圖庫目前沒有資源"
@@ -4695,7 +4661,7 @@ msgstr "上"
msgid "workspace.options.constraints.topbottom"
msgstr "上和下"
-#: src/app/main/ui/workspace/sidebar/options.cljs:157
+#: src/app/main/ui/workspace/sidebar/options.cljs:181
msgid "workspace.options.design"
msgstr "設計"
@@ -4708,20 +4674,20 @@ msgstr "匯出"
msgid "workspace.options.export-multiple"
msgstr "匯出已選取項目"
-#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:249
+#: src/app/main/ui/inspect/exports.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:275
msgid "workspace.options.export-object"
msgid_plural "workspace.options.export-object"
msgstr[0] "匯出 %s 元素"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:188
+#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:214
msgid "workspace.options.export.add-export"
msgstr "新增匯出"
-#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:235
+#: 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/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:229
+#: src/app/main/ui/inspect/exports.cljs:179, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:255
msgid "workspace.options.export.suffix"
msgstr "後綴"
@@ -4729,7 +4695,7 @@ msgstr "後綴"
msgid "workspace.options.exporting-complete"
msgstr "完成匯出"
-#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:248
+#: src/app/main/ui/exports/assets.cljs:170, src/app/main/ui/exports/assets.cljs:241, src/app/main/ui/inspect/exports.cljs:195, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274
msgid "workspace.options.exporting-object"
msgstr "正在匯出…"
@@ -4741,27 +4707,27 @@ msgstr "匯出失敗"
msgid "workspace.options.exporting-object-slow"
msgstr "匯出異常緩慢"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:111, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:221
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:121, src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:261
msgid "workspace.options.fill"
msgstr "填充"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:194
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:234
msgid "workspace.options.fill.add-fill"
msgstr "新增填充顏色"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:208
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:248
msgid "workspace.options.fill.remove-fill"
msgstr "移除填充顏色"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:392
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:474
msgid "workspace.options.fit-content"
msgstr "調整畫布以符合內容大小"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:182
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:183
msgid "workspace.options.flows.add-flow-start"
msgstr "新增流程起點"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:178
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:179
msgid "workspace.options.flows.flow"
msgstr "流程"
@@ -4770,19 +4736,19 @@ msgstr "流程"
msgid "workspace.options.flows.flow-start"
msgstr "流程起點"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:165
msgid "workspace.options.flows.flow-starts"
msgstr "流程起點"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:155
msgid "workspace.options.flows.remove-flow"
msgstr "移除流程"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:31
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:32
msgid "workspace.options.grid.auto"
msgstr "自動"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
msgid "workspace.options.grid.column"
msgstr "欄"
@@ -4791,7 +4757,7 @@ msgstr "欄"
msgid "workspace.options.grid.grid-title"
msgstr "網格"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:200, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:201, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:243
msgid "workspace.options.grid.params.color"
msgstr "顏色"
@@ -4800,15 +4766,15 @@ msgstr "顏色"
msgid "workspace.options.grid.params.columns"
msgstr "欄"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:263
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:266
msgid "workspace.options.grid.params.gutter"
msgstr "網格間距"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:250
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:253
msgid "workspace.options.grid.params.height"
msgstr "高度"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:274
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:277
msgid "workspace.options.grid.params.margin"
msgstr "邊距"
@@ -4817,7 +4783,7 @@ msgstr "邊距"
msgid "workspace.options.grid.params.rows"
msgstr "列"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:220, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:294
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:222, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:297
msgid "workspace.options.grid.params.set-default"
msgstr "設置為預設值"
@@ -4831,159 +4797,159 @@ msgstr "尺寸"
msgid "workspace.options.grid.params.type"
msgstr "類型"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:237
msgid "workspace.options.grid.params.type.bottom"
msgstr "下"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:235
msgid "workspace.options.grid.params.type.center"
msgstr "中"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:232
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:234
msgid "workspace.options.grid.params.type.left"
msgstr "左"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:236
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:238
msgid "workspace.options.grid.params.type.right"
msgstr "右"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:229
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
msgid "workspace.options.grid.params.type.stretch"
msgstr "延展"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:233
msgid "workspace.options.grid.params.type.top"
msgstr "上"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:215, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:295
msgid "workspace.options.grid.params.use-default"
msgstr "使用預設"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:251
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:254
msgid "workspace.options.grid.params.width"
msgstr "寬度"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:160
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:161
msgid "workspace.options.grid.row"
msgstr "列"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:159
msgid "workspace.options.grid.square"
msgstr "正方形"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:120
msgid "workspace.options.group-fill"
msgstr "群組填充"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:43
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:45
msgid "workspace.options.group-stroke"
msgstr "群組描邊"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:326
msgid "workspace.options.guides.add-guide"
msgstr "新增輔助線"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:187
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:188
msgid "workspace.options.guides.remove-guide"
msgstr "移除輔助線"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:320
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:323
msgid "workspace.options.guides.title"
msgstr "輔助線"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:183
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:184
msgid "workspace.options.guides.toggle-guide"
msgstr "切換輔助線"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:501, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:520
msgid "workspace.options.height"
msgstr "高度"
-#: src/app/main/ui/workspace/sidebar/options.cljs:161
+#: src/app/main/ui/workspace/sidebar/options.cljs:185
msgid "workspace.options.inspect"
msgstr "檢視"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:474
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:475
msgid "workspace.options.interaction-action"
msgstr "動作"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:373
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:43, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:374
msgid "workspace.options.interaction-after-delay"
msgstr "延遲執行"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:620
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:621
msgid "workspace.options.interaction-animation"
msgstr "動畫"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
msgid "workspace.options.interaction-animation-dissolve"
msgstr "淡出"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:411
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:412
msgid "workspace.options.interaction-animation-none"
msgstr "無"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:418
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:419
msgid "workspace.options.interaction-animation-push"
msgstr "推動"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:413
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:414
msgid "workspace.options.interaction-animation-slide"
msgstr "滑動"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:397
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:398
msgid "workspace.options.interaction-auto"
msgstr "自動"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:610
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:611
msgid "workspace.options.interaction-background"
msgstr "新增背景疊加層"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:596
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:597
msgid "workspace.options.interaction-close-outside"
msgstr "點擊外部時關閉"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
msgid "workspace.options.interaction-close-overlay"
msgstr "關閉疊加層"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58
msgid "workspace.options.interaction-close-overlay-dest"
msgstr "關閉疊加層:%s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:462
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:463
msgid "workspace.options.interaction-delay"
msgstr "延遲"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:484
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:485
msgid "workspace.options.interaction-destination"
msgstr "終點"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:667
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:668
msgid "workspace.options.interaction-duration"
msgstr "持續時間"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:680
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:681
msgid "workspace.options.interaction-easing"
msgstr "緩衝效果"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
msgid "workspace.options.interaction-easing-ease"
msgstr "緩衝"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:423
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
msgid "workspace.options.interaction-easing-ease-in"
msgstr "緩慢開始"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:426
msgid "workspace.options.interaction-easing-ease-in-out"
msgstr "先慢後快再慢"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:424
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:425
msgid "workspace.options.interaction-easing-ease-out"
msgstr "逐漸減速"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:421
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:422
msgid "workspace.options.interaction-easing-linear"
msgstr "線性"
@@ -4992,47 +4958,47 @@ msgstr "線性"
msgid "workspace.options.interaction-in"
msgstr "進場"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
msgid "workspace.options.interaction-mouse-enter"
msgstr "滑鼠移入"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:41, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:371
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:42, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:372
msgid "workspace.options.interaction-mouse-leave"
msgstr "滑鼠移出"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:464, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:470, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:669, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:671, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:675
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:465, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:466, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:471, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:670, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:672, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:676
msgid "workspace.options.interaction-ms"
msgstr "毫秒"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:375
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
msgid "workspace.options.interaction-navigate-to"
msgstr "導航至"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:51
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52
msgid "workspace.options.interaction-navigate-to-dest"
msgstr "導航至:%s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:52, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:57, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:387
msgid "workspace.options.interaction-none"
msgstr "(尚未設置)"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:697
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:698
msgid "workspace.options.interaction-offset-effect"
msgstr "位移效果"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:36, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:366
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:37, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:367
msgid "workspace.options.interaction-on-click"
msgstr "點擊觸發"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:376
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
msgid "workspace.options.interaction-open-overlay"
msgstr "開啟覆蓋層"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:53
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:54
msgid "workspace.options.interaction-open-overlay-dest"
msgstr "開啟覆蓋層:%s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:61, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:381
msgid "workspace.options.interaction-open-url"
msgstr "開啟URL"
@@ -5041,87 +5007,87 @@ msgstr "開啟URL"
msgid "workspace.options.interaction-out"
msgstr "離開"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:410
msgid "workspace.options.interaction-pos-bottom-center"
msgstr "底部中心"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
msgid "workspace.options.interaction-pos-bottom-left"
msgstr "左下角"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:408
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:409
msgid "workspace.options.interaction-pos-bottom-right"
msgstr "右下角"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
msgid "workspace.options.interaction-pos-center"
msgstr "置中"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:403
msgid "workspace.options.interaction-pos-manual"
msgstr "手動"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:407
msgid "workspace.options.interaction-pos-top-center"
msgstr "頂部中心"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:404
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
msgid "workspace.options.interaction-pos-top-left"
msgstr "左上角"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:405
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406
msgid "workspace.options.interaction-pos-top-right"
msgstr "右上角"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:530
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:531
msgid "workspace.options.interaction-position"
msgstr "位置"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:500
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:501
msgid "workspace.options.interaction-preserve-scroll"
msgstr "保持滾動位置"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:379
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:60, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:380
msgid "workspace.options.interaction-prev-screen"
msgstr "上一個畫面"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:521
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:522
msgid "workspace.options.interaction-relative-to"
msgstr "相對於"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:58, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:385, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:399, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:59, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:386, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:400, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:401
msgid "workspace.options.interaction-self"
msgstr "自身"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:377
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:378
msgid "workspace.options.interaction-toggle-overlay"
msgstr "切換覆蓋層"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:55
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:56
msgid "workspace.options.interaction-toggle-overlay-dest"
msgstr "切換覆蓋層:%s"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:451
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:452
msgid "workspace.options.interaction-trigger"
msgstr "觸發"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:509
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:510
msgid "workspace.options.interaction-url"
msgstr "網址"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:38, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:368
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
msgid "workspace.options.interaction-while-hovering"
msgstr "滑鼠懸停時"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:39, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:369
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:40, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:370
msgid "workspace.options.interaction-while-pressing"
msgstr "當按住時"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:731
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:732
msgid "workspace.options.interactions"
msgstr "互動"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:735
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:736
msgid "workspace.options.interactions.add-interaction"
msgstr "新增互動"
@@ -5130,67 +5096,67 @@ msgstr "新增互動"
msgid "workspace.options.interactions.remove-interaction"
msgstr "移除互動"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:169
msgid "workspace.options.layer-options.blend-mode.color"
msgstr "顏色"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:147
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:158
msgid "workspace.options.layer-options.blend-mode.color-burn"
msgstr "顏色加深"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:150
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:161
msgid "workspace.options.layer-options.blend-mode.color-dodge"
msgstr "顏色增亮"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:145
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
msgid "workspace.options.layer-options.blend-mode.darken"
msgstr "變暗"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:154
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:165
msgid "workspace.options.layer-options.blend-mode.difference"
msgstr "差值"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:166
msgid "workspace.options.layer-options.blend-mode.exclusion"
msgstr "排除"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:153
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:164
msgid "workspace.options.layer-options.blend-mode.hard-light"
msgstr "強光"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:167
msgid "workspace.options.layer-options.blend-mode.hue"
msgstr "色調"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:148
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
msgid "workspace.options.layer-options.blend-mode.lighten"
msgstr "變亮"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:170
msgid "workspace.options.layer-options.blend-mode.luminosity"
msgstr "亮度"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:146
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
msgid "workspace.options.layer-options.blend-mode.multiply"
msgstr "圖層混合"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:144
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:155
msgid "workspace.options.layer-options.blend-mode.normal"
msgstr "正常"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:162
msgid "workspace.options.layer-options.blend-mode.overlay"
msgstr "疊層"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:157
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:168
msgid "workspace.options.layer-options.blend-mode.saturation"
msgstr "飽和度"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:149
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:160
msgid "workspace.options.layer-options.blend-mode.screen"
msgstr "螢幕疊加"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:152
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:163
msgid "workspace.options.layer-options.blend-mode.soft-light"
msgstr "柔光"
@@ -5209,7 +5175,7 @@ msgstr "群組圖層"
msgid "workspace.options.layer-options.title.multiple"
msgstr "選擇圖層"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:196, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:202
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:207, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:213
msgid "workspace.options.layer-options.toggle-layer"
msgstr "切換圖層可見性"
@@ -5218,19 +5184,19 @@ msgstr "切換圖層可見性"
msgid "workspace.options.layout-item.advanced-ops"
msgstr "進階選項"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:559
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:560
msgid "workspace.options.layout-item.layout-item-max-h"
msgstr "最高"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:526
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:527
msgid "workspace.options.layout-item.layout-item-max-w"
msgstr "Max.Width"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:543
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:544
msgid "workspace.options.layout-item.layout-item-min-h"
msgstr "Min.Height"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:510
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_item.cljs:511
msgid "workspace.options.layout-item.layout-item-min-w"
msgstr "Min.Width"
@@ -5344,15 +5310,15 @@ msgstr "元素間距"
msgid "workspace.options.layout.top"
msgstr "上"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:156
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:179
msgid "workspace.options.more-colors"
msgstr "更多顏色"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:140
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:161
msgid "workspace.options.more-lib-colors"
msgstr "更多圖層顏色"
-#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:192
msgid "workspace.options.opacity"
msgstr "不透明度"
@@ -5361,35 +5327,35 @@ msgstr "不透明度"
msgid "workspace.options.position"
msgstr "位置"
-#: src/app/main/ui/workspace/sidebar/options.cljs:159
+#: src/app/main/ui/workspace/sidebar/options.cljs:183
msgid "workspace.options.prototype"
msgstr "原型"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:81
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:98
msgid "workspace.options.radius"
msgstr "圓角半徑"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
msgid "workspace.options.radius-bottom-left"
msgstr "左下角"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:143
msgid "workspace.options.radius-bottom-right"
msgstr "右下角"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:102
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:119
msgid "workspace.options.radius-top-left"
msgstr "左上角"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:110
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:127
msgid "workspace.options.radius-top-right"
msgstr "右上角"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:152
msgid "workspace.options.radius.hide-all-corners"
msgstr "合併獨立圓角半徑"
-#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:136
+#: src/app/main/ui/workspace/sidebar/options/menus/border_radius.cljs:153
msgid "workspace.options.radius.show-single-corners"
msgstr "顯示獨立圓角半徑"
@@ -5401,7 +5367,7 @@ msgstr "最近"
msgid "workspace.options.retry"
msgstr "重試"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:455
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:595, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:600
msgid "workspace.options.rotation"
msgstr "旋轉"
@@ -5409,31 +5375,31 @@ msgstr "旋轉"
msgid "workspace.options.search-font"
msgstr "搜尋字型"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:749
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:750
msgid "workspace.options.select-a-shape"
msgstr "選擇一個形狀、畫板或組合,並拖動連接至其他畫板。"
-#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:113
+#: src/app/main/ui/workspace/sidebar/options/menus/color_selection.cljs:132
msgid "workspace.options.selection-color"
msgstr "已選顏色"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:109
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:119
msgid "workspace.options.selection-fill"
msgstr "選取填充"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:42
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
msgid "workspace.options.selection-stroke"
msgstr "選取描邊"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:341
msgid "workspace.options.shadow-options.add-shadow"
msgstr "新增陰影"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:198, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:200
+#: src/app/main/ui/inspect/attributes/shadow.cljs:47, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:203, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:205
msgid "workspace.options.shadow-options.blur"
msgstr "模糊"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:231
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:236
msgid "workspace.options.shadow-options.color"
msgstr "陰影顏色"
@@ -5445,55 +5411,56 @@ msgstr "陰影效果"
msgid "workspace.options.shadow-options.inner-shadow"
msgstr "內陰影"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:188
+#: src/app/main/ui/inspect/attributes/shadow.cljs:45, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:193
msgid "workspace.options.shadow-options.offsetx"
msgstr "X"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:220
+#: src/app/main/ui/inspect/attributes/shadow.cljs:46, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:225
msgid "workspace.options.shadow-options.offsety"
msgstr "Y"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:178, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:348
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:183, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:354
msgid "workspace.options.shadow-options.remove-shadow"
msgstr "移除陰影"
-#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:209, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:211
+#: src/app/main/ui/inspect/attributes/shadow.cljs:48, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:214, src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:216
msgid "workspace.options.shadow-options.spread"
msgstr "擴散"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:330
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:336
msgid "workspace.options.shadow-options.title"
msgstr "陰影"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:329
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:335
msgid "workspace.options.shadow-options.title.group"
msgstr "群組陰影"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:328
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:334
msgid "workspace.options.shadow-options.title.multiple"
msgstr "選取陰影"
-#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:174
+#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:179
msgid "workspace.options.shadow-options.toggle-shadow"
msgstr "切換陰影"
-#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:241
+#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:285
msgid "workspace.options.show-fill-on-export"
msgstr "在匯出中顯示"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:499
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:645
msgid "workspace.options.show-in-viewer"
msgstr "在檢視模式中顯示"
-#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:164
+#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:165
msgid "workspace.options.size"
msgstr "尺寸"
-#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:352
+#: src/app/main/ui/workspace/sidebar/options/drawing/frame.cljs:70, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:434
msgid "workspace.options.size-presets"
msgstr "尺寸預設"
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:44
+#, unused
msgid "workspace.options.stroke"
msgstr "邊框"
@@ -5502,7 +5469,7 @@ msgstr "邊框"
msgid "workspace.options.stroke-cap.circle-marker"
msgstr "圓形標記"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:131
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:168
msgid "workspace.options.stroke-cap.circle-marker-short"
msgstr "圓形"
@@ -5511,7 +5478,7 @@ msgstr "圓形"
msgid "workspace.options.stroke-cap.diamond-marker"
msgstr "鑽石標記"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:132
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:169
msgid "workspace.options.stroke-cap.diamond-marker-short"
msgstr "鑽石"
@@ -5520,19 +5487,19 @@ msgstr "鑽石"
msgid "workspace.options.stroke-cap.line-arrow"
msgstr "箭頭線"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:128
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:165
msgid "workspace.options.stroke-cap.line-arrow-short"
msgstr "箭頭"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:126
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:163
msgid "workspace.options.stroke-cap.none"
msgstr "無"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:134
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:171
msgid "workspace.options.stroke-cap.round"
msgstr "圓角"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:135
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:172
msgid "workspace.options.stroke-cap.square"
msgstr "正方形"
@@ -5541,7 +5508,7 @@ msgstr "正方形"
msgid "workspace.options.stroke-cap.square-marker"
msgstr "方形標記"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:130
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:167
msgid "workspace.options.stroke-cap.square-marker-short"
msgstr "矩形"
@@ -5550,83 +5517,83 @@ msgstr "矩形"
msgid "workspace.options.stroke-cap.triangle-arrow"
msgstr "三角箭頭"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:129
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
msgid "workspace.options.stroke-cap.triangle-arrow-short"
msgstr "三角"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:210
msgid "workspace.options.stroke-color"
msgstr "描邊顏色"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:166
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:207
msgid "workspace.options.stroke-width"
msgstr "描邊寬度"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:180
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:189
msgid "workspace.options.stroke.add-stroke"
msgstr "新增描邊顏色"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:97
msgid "workspace.options.stroke.center"
msgstr "置中"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:107
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:138
msgid "workspace.options.stroke.dashed"
msgstr "虛線"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:106
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:137
msgid "workspace.options.stroke.dotted"
msgstr "點線"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:90
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:98
msgid "workspace.options.stroke.inner"
msgstr "裏面"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:108
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:139
msgid "workspace.options.stroke.mixed"
msgstr "混合"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:91
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:99
msgid "workspace.options.stroke.outer"
msgstr "外面"
-#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:193
+#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:202
msgid "workspace.options.stroke.remove-stroke"
msgstr "移除描邊"
-#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:105
+#: src/app/main/ui/workspace/sidebar/options/rows/stroke_row.cljs:136
msgid "workspace.options.stroke.solid"
msgstr "實線"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:122
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:123
msgid "workspace.options.text-options.align-bottom"
msgstr "對齊底部"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:118
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:119
msgid "workspace.options.text-options.align-middle"
msgstr "對齊中間"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:114
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:115
msgid "workspace.options.text-options.align-top"
msgstr "對齊頂部"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:89
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:90
msgid "workspace.options.text-options.direction-ltr"
msgstr "左至右"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:94
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:95
msgid "workspace.options.text-options.direction-rtl"
msgstr "右至左"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:159
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:160
msgid "workspace.options.text-options.grow-auto-height"
msgstr "自動高度"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:155
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:156
msgid "workspace.options.text-options.grow-auto-width"
msgstr "自動寬度"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:151
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:152
msgid "workspace.options.text-options.grow-fixed"
msgstr "固定"
@@ -5648,35 +5615,35 @@ msgstr "小寫"
msgid "workspace.options.text-options.none"
msgstr "無"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:186
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:187
msgid "workspace.options.text-options.strikethrough"
msgstr "刪除線 (%s)"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:58
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:59
msgid "workspace.options.text-options.text-align-center"
msgstr "置中"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:66
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:67
msgid "workspace.options.text-options.text-align-justify"
msgstr "對齊兩端"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:54
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:55
msgid "workspace.options.text-options.text-align-left"
msgstr "左對齊"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:62
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:63
msgid "workspace.options.text-options.text-align-right"
msgstr "右對齊"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:200
msgid "workspace.options.text-options.title"
msgstr "文字"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:199
msgid "workspace.options.text-options.title-group"
msgstr "群組文字"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:197
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:198
msgid "workspace.options.text-options.title-selection"
msgstr "選取文字"
@@ -5685,7 +5652,7 @@ msgstr "選取文字"
msgid "workspace.options.text-options.titlecase"
msgstr "標題大小寫"
-#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:181
+#: src/app/main/ui/workspace/sidebar/options/menus/text.cljs:182
msgid "workspace.options.text-options.underline"
msgstr "底線"
@@ -5694,19 +5661,19 @@ msgstr "底線"
msgid "workspace.options.text-options.uppercase"
msgstr "大寫"
-#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:753
+#: src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:754
msgid "workspace.options.use-play-button"
msgstr "使用標題上的播放按鈕來執行原型檢視。"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:400
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:489, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:508
msgid "workspace.options.width"
msgstr "寬度"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:431
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:547, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:564
msgid "workspace.options.x"
msgstr "X軸"
-#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:442
+#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:557, src/app/main/ui/workspace/sidebar/options/menus/measures.cljs:575
msgid "workspace.options.y"
msgstr "Y 軸"
@@ -5750,104 +5717,104 @@ msgstr "分離節點(%s)"
msgid "workspace.path.actions.snap-nodes"
msgstr "對齊節點(%s)"
-#: src/app/main/ui/workspace/plugins.cljs:83
+#: src/app/main/ui/workspace/plugins.cljs:84
msgid "workspace.plugins.button-open"
msgstr "開啟"
-#: src/app/main/ui/workspace/plugins.cljs:197
+#: src/app/main/ui/workspace/plugins.cljs:198
#, markdown
msgid "workspace.plugins.discover"
msgstr "探索更多外掛(%s)"
-#: src/app/main/ui/workspace/plugins.cljs:204
+#: src/app/main/ui/workspace/plugins.cljs:205
msgid "workspace.plugins.empty-plugins"
msgstr "尚未安裝任何外掛"
-#: src/app/main/ui/workspace/plugins.cljs:191
+#: src/app/main/ui/workspace/plugins.cljs:192
msgid "workspace.plugins.error.manifest"
msgstr "外掛清單有誤。"
-#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:755, src/app/main/ui/workspace/plugins.cljs:82
+#: src/app/main/data/plugins.cljs:89, src/app/main/ui/workspace/main_menu.cljs:783, src/app/main/ui/workspace/plugins.cljs:83
msgid "workspace.plugins.error.need-editor"
msgstr "您需要具備編輯者權限才能使用此外掛"
-#: src/app/main/ui/workspace/plugins.cljs:187
+#: src/app/main/ui/workspace/plugins.cljs:188
msgid "workspace.plugins.error.url"
msgstr "此外掛不存在,或 URL 不正確。"
-#: src/app/main/ui/workspace/plugins.cljs:183
+#: src/app/main/ui/workspace/plugins.cljs:184
msgid "workspace.plugins.install"
msgstr "安裝"
-#: src/app/main/ui/workspace/plugins.cljs:213
+#: src/app/main/ui/workspace/plugins.cljs:214
msgid "workspace.plugins.installed-plugins"
msgstr "安裝外掛"
-#: src/app/main/ui/workspace/main_menu.cljs:710
+#: src/app/main/ui/workspace/main_menu.cljs:738
msgid "workspace.plugins.menu.plugins-manager"
msgstr "外掛管理員"
-#: src/app/main/ui/workspace/main_menu.cljs:906
+#: src/app/main/ui/workspace/main_menu.cljs:934
msgid "workspace.plugins.menu.title"
msgstr "外掛"
-#: src/app/main/ui/workspace/plugins.cljs:374
+#: src/app/main/ui/workspace/plugins.cljs:375
msgid "workspace.plugins.permissions-update.title"
msgstr "更新此外掛"
-#: src/app/main/ui/workspace/plugins.cljs:378
+#: src/app/main/ui/workspace/plugins.cljs:379
msgid "workspace.plugins.permissions-update.warning"
msgstr "此外掛自您上次打開以來已被修改。現在它還需要存取以下內容:"
-#: src/app/main/ui/workspace/plugins.cljs:278
+#: src/app/main/ui/workspace/plugins.cljs:279
msgid "workspace.plugins.permissions.allow-download"
msgstr "開始檔案下載。"
-#: src/app/main/ui/workspace/plugins.cljs:271
+#: src/app/main/ui/workspace/plugins.cljs:272
msgid "workspace.plugins.permissions.comment-read"
msgstr "閱讀您的留言和回覆。"
-#: src/app/main/ui/workspace/plugins.cljs:265
+#: src/app/main/ui/workspace/plugins.cljs:266
msgid "workspace.plugins.permissions.comment-write"
msgstr "閱讀並修改您的留言,並以您的名義回覆。"
-#: src/app/main/ui/workspace/plugins.cljs:238
+#: src/app/main/ui/workspace/plugins.cljs:239
msgid "workspace.plugins.permissions.content-read"
msgstr "使用者有權存取閱讀的檔案內容。"
-#: src/app/main/ui/workspace/plugins.cljs:232
+#: src/app/main/ui/workspace/plugins.cljs:233
msgid "workspace.plugins.permissions.content-write"
msgstr "使用者有權存取閱讀以及修改檔案內容。"
-#: src/app/main/ui/workspace/plugins.cljs:325
+#: src/app/main/ui/workspace/plugins.cljs:326
msgid "workspace.plugins.permissions.disclaimer"
msgstr "請注意,此外掛由外部廠商建立,因此在授權存取之前,請確保您信任它。我們重視您的資料隱私與安全。如有任何疑慮,請聯絡我們的客服。"
-#: src/app/main/ui/workspace/plugins.cljs:258
+#: src/app/main/ui/workspace/plugins.cljs:259
msgid "workspace.plugins.permissions.library-read"
msgstr "讀取您的圖庫與資源。"
-#: src/app/main/ui/workspace/plugins.cljs:252
+#: src/app/main/ui/workspace/plugins.cljs:253
msgid "workspace.plugins.permissions.library-write"
msgstr "讀取以及修改您的圖庫與資源。"
-#: src/app/main/ui/workspace/plugins.cljs:318
+#: src/app/main/ui/workspace/plugins.cljs:319
msgid "workspace.plugins.permissions.title"
msgstr "'%s' 外掛需要訪問以下內容:"
-#: src/app/main/ui/workspace/plugins.cljs:245
+#: src/app/main/ui/workspace/plugins.cljs:246
msgid "workspace.plugins.permissions.user-read"
msgstr "讀取當前使用者的個人資料資訊。"
-#: src/app/main/ui/workspace/plugins.cljs:209
+#: src/app/main/ui/workspace/plugins.cljs:210
msgid "workspace.plugins.plugin-list-link"
msgstr "外掛列表"
-#: src/app/main/ui/workspace/plugins.cljs:86
+#: src/app/main/ui/workspace/plugins.cljs:87
msgid "workspace.plugins.remove-plugin"
msgstr "移除外掛"
-#: src/app/main/ui/workspace/plugins.cljs:178
+#: src/app/main/ui/workspace/plugins.cljs:179
msgid "workspace.plugins.search-placeholder"
msgstr "寫入外掛網址"
@@ -5855,23 +5822,23 @@ msgstr "寫入外掛網址"
msgid "workspace.plugins.success"
msgstr "外掛已正確載入。"
-#: src/app/main/ui/workspace/plugins.cljs:172
+#: src/app/main/ui/workspace/plugins.cljs:173
msgid "workspace.plugins.title"
msgstr "外掛"
-#: src/app/main/ui/workspace/plugins.cljs:438
+#: src/app/main/ui/workspace/plugins.cljs:439
msgid "workspace.plugins.try-out.cancel"
msgstr "不是現在"
-#: src/app/main/ui/workspace/plugins.cljs:431
+#: src/app/main/ui/workspace/plugins.cljs:432
msgid "workspace.plugins.try-out.message"
msgstr "想看看嗎?它將在您當前的團隊中以新草稿開啟。(如果不想,您隨時可以在任何檔案的已安裝外掛中找到它。)"
-#: src/app/main/ui/workspace/plugins.cljs:427
+#: src/app/main/ui/workspace/plugins.cljs:428
msgid "workspace.plugins.try-out.title"
msgstr "'%s' 外掛已為您的使用者安裝!"
-#: src/app/main/ui/workspace/plugins.cljs:444
+#: src/app/main/ui/workspace/plugins.cljs:445
msgid "workspace.plugins.try-out.try"
msgstr "嘗試外掛"
@@ -5883,7 +5850,7 @@ msgstr "新增彈性布局"
msgid "workspace.shape.menu.add-grid"
msgstr "新增網格佈局"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1015, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1039
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1016, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1040
msgid "workspace.shape.menu.add-layout"
msgstr "新增佈局"
@@ -5923,7 +5890,7 @@ msgstr "複製屬性"
msgid "workspace.shape.menu.copy-text"
msgstr "複製為純文字"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:481
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
msgid "workspace.shape.menu.create-annotation"
msgstr "建立注釋"
@@ -5931,11 +5898,11 @@ msgstr "建立注釋"
msgid "workspace.shape.menu.create-artboard-from-selection"
msgstr "選擇面板"
-#: src/app/main/ui/workspace/context_menu.cljs:588
+#: src/app/main/ui/workspace/context_menu.cljs:590
msgid "workspace.shape.menu.create-component"
msgstr "建立元件"
-#: src/app/main/ui/workspace/context_menu.cljs:592
+#: src/app/main/ui/workspace/context_menu.cljs:594
msgid "workspace.shape.menu.create-multiple-components"
msgstr "建立多個元件"
@@ -5943,7 +5910,7 @@ msgstr "建立多個元件"
msgid "workspace.shape.menu.cut"
msgstr "剪下"
-#: src/app/main/ui/workspace/context_menu.cljs:625, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:779, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1057
+#: src/app/main/ui/workspace/context_menu.cljs:627, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:780, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1058
msgid "workspace.shape.menu.delete"
msgstr "刪除"
@@ -5951,15 +5918,15 @@ msgstr "刪除"
msgid "workspace.shape.menu.delete-flow-start"
msgstr "刪除流程開始"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:486
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:495
msgid "workspace.shape.menu.detach-instance"
msgstr "分離實例"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:485
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:494
msgid "workspace.shape.menu.detach-instances-in-bulk"
msgstr "分離實例"
-#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:87
+#: src/app/main/ui/workspace/context_menu.cljs:445, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
msgid "workspace.shape.menu.difference"
msgstr "差異"
@@ -5971,11 +5938,11 @@ msgstr "複本"
msgid "workspace.shape.menu.edit"
msgstr "編輯"
-#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:97
+#: src/app/main/ui/workspace/context_menu.cljs:451, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:111
msgid "workspace.shape.menu.exclude"
msgstr "排除"
-#: src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:101
+#: src/app/main/ui/workspace/context_menu.cljs:436, src/app/main/ui/workspace/context_menu.cljs:458, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:115
msgid "workspace.shape.menu.flatten"
msgstr "扁平化"
@@ -6008,19 +5975,19 @@ msgstr "前往主要元件檔案"
msgid "workspace.shape.menu.group"
msgstr "群組"
-#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:159
+#: src/app/main/ui/workspace/context_menu.cljs:475, src/app/main/ui/workspace/sidebar/layer_item.cljs:155
msgid "workspace.shape.menu.hide"
msgstr "隱藏"
-#: src/app/main/ui/workspace/context_menu.cljs:701, src/app/main/ui/workspace/main_menu.cljs:420
+#: src/app/main/ui/workspace/context_menu.cljs:704, src/app/main/ui/workspace/main_menu.cljs:448
msgid "workspace.shape.menu.hide-ui"
msgstr "顯示/隱藏使用者介面"
-#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:92
+#: src/app/main/ui/workspace/context_menu.cljs:448, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:106
msgid "workspace.shape.menu.intersection"
msgstr "交集"
-#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:209
+#: src/app/main/ui/workspace/context_menu.cljs:483, src/app/main/ui/workspace/sidebar/layer_item.cljs:163, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:220
msgid "workspace.shape.menu.lock"
msgstr "鎖定"
@@ -6028,7 +5995,7 @@ msgstr "鎖定"
msgid "workspace.shape.menu.mask"
msgstr "遮罩"
-#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:698
+#: src/app/main/ui/workspace/context_menu.cljs:208, src/app/main/ui/workspace/context_menu.cljs:701
msgid "workspace.shape.menu.paste"
msgstr "貼上"
@@ -6048,7 +6015,7 @@ msgstr "移除彈性佈局"
msgid "workspace.shape.menu.remove-grid"
msgstr "移除網格佈局"
-#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1033
+#: src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1034
msgid "workspace.shape.menu.remove-layout"
msgstr "移除佈局"
@@ -6056,11 +6023,11 @@ msgstr "移除佈局"
msgid "workspace.shape.menu.rename"
msgstr "重新命名"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:490
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499
msgid "workspace.shape.menu.reset-overrides"
msgstr "重設覆蓋"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:496
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:505
msgid "workspace.shape.menu.restore-main"
msgstr "還原主要元件"
@@ -6068,15 +6035,15 @@ msgstr "還原主要元件"
msgid "workspace.shape.menu.select-layer"
msgstr "選擇圖層"
-#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:158
+#: src/app/main/ui/workspace/context_menu.cljs:472, src/app/main/ui/workspace/sidebar/layer_item.cljs:154
msgid "workspace.shape.menu.show"
msgstr "顯示"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:478
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:487, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1111
msgid "workspace.shape.menu.show-in-assets"
msgstr "在資源面板中顯示"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:499, src/app/main/ui/workspace/sidebar/assets/components.cljs:634
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:508, src/app/main/ui/workspace/sidebar/assets/components.cljs:630
msgid "workspace.shape.menu.show-main"
msgstr "顯示主要元件"
@@ -6089,6 +6056,7 @@ msgid "workspace.shape.menu.thumbnail-set"
msgstr "設置為縮圖"
#: src/app/main/ui/workspace/context_menu.cljs:436
+#, unused
msgid "workspace.shape.menu.transform-to-path"
msgstr "轉換為路徑"
@@ -6096,11 +6064,11 @@ msgstr "轉換為路徑"
msgid "workspace.shape.menu.ungroup"
msgstr "取消群組"
-#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:82
+#: src/app/main/ui/workspace/context_menu.cljs:442, src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:96
msgid "workspace.shape.menu.union"
msgstr "合併"
-#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:166, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:215
+#: src/app/main/ui/workspace/context_menu.cljs:480, src/app/main/ui/workspace/sidebar/layer_item.cljs:162, src/app/main/ui/workspace/sidebar/options/menus/layer.cljs:226
msgid "workspace.shape.menu.unlock"
msgstr "解除鎖定"
@@ -6113,7 +6081,7 @@ msgstr "取消遮罩"
msgid "workspace.shape.menu.update-components-in-bulk"
msgstr "更新主要元件"
-#: src/app/main/ui/workspace/sidebar/assets/common.cljs:502
+#: src/app/main/ui/workspace/sidebar/assets/common.cljs:511
msgid "workspace.shape.menu.update-main"
msgstr "更新主要元件"
@@ -6125,11 +6093,11 @@ msgstr "摺疊側邊欄"
msgid "workspace.sidebar.expand"
msgstr "展開側邊欄"
-#: src/app/main/ui/workspace/right_header.cljs:230, src/app/main/ui/workspace/right_header.cljs:231
+#: src/app/main/ui/workspace/right_header.cljs:231, src/app/main/ui/workspace/right_header.cljs:232
msgid "workspace.sidebar.history"
msgstr "歷史紀錄"
-#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:143
+#: src/app/main/ui/workspace/sidebar/layers.cljs:510, src/app/main/ui/workspace/sidebar.cljs:134, src/app/main/ui/workspace/sidebar.cljs:137, src/app/main/ui/workspace/sidebar.cljs:144
msgid "workspace.sidebar.layers"
msgstr "層級"
@@ -6169,11 +6137,11 @@ msgstr "文字"
msgid "workspace.sidebar.options.svg-attrs.title"
msgstr "匯入的 SVG 屬性"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:238
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:239
msgid "workspace.sidebar.sitemap"
msgstr "頁"
-#: src/app/main/ui/workspace/sidebar/sitemap.cljs:248
+#: src/app/main/ui/workspace/sidebar/sitemap.cljs:249
msgid "workspace.sidebar.sitemap.add-page"
msgstr "增加頁面"
@@ -6190,11 +6158,11 @@ msgstr "%s 個啟用的主題"
msgid "workspace.tokens.add set"
msgstr "新增集"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:161
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:136
msgid "workspace.tokens.applied-to"
msgstr "應用於"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:338
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:337
msgid "workspace.tokens.back-to-themes"
msgstr "返回主題列表"
@@ -6202,15 +6170,15 @@ msgstr "返回主題列表"
msgid "workspace.tokens.create-new-theme"
msgstr "立即建立您的第一個主題。"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:100, src/app/main/ui/workspace/tokens/themes.cljs:44
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:96, src/app/main/ui/workspace/tokens/themes.cljs:44
msgid "workspace.tokens.create-one"
msgstr "建立一個。"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:534
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:552
msgid "workspace.tokens.create-token"
msgstr "建立新的 %s 權杖(token)"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:337
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:338
msgid "workspace.tokens.delete"
msgstr "刪除權杖(token)"
@@ -6218,15 +6186,15 @@ msgstr "刪除權杖(token)"
msgid "workspace.tokens.delete-theme-title"
msgstr "刪除主題"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:334
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:335
msgid "workspace.tokens.duplicate"
msgstr "複製權杖(token)"
-#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:321
+#: src/app/main/ui/workspace/tokens/management/context_menu.cljs:322
msgid "workspace.tokens.edit"
msgstr "編輯權杖(token)"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:328
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:327
msgid "workspace.tokens.edit-theme-title"
msgstr "編輯主題"
@@ -6234,11 +6202,7 @@ msgstr "編輯主題"
msgid "workspace.tokens.edit-themes"
msgstr "編輯主題"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:533
-msgid "workspace.tokens.edit-token"
-msgstr "編輯權杖(token)"
-
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:540
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:558
msgid "workspace.tokens.enter-token-name"
msgstr "輸入 %s 權杖(token)名稱"
@@ -6259,7 +6223,7 @@ msgstr "主題"
msgid "workspace.tokens.no-active-theme"
msgstr "目前沒有啟用的主題"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:76
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:72
msgid "workspace.tokens.no-permisions-set"
msgstr "您需要是編輯者才能啟用/停用集"
@@ -6267,11 +6231,11 @@ msgstr "您需要是編輯者才能啟用/停用集"
msgid "workspace.tokens.no-permission-themes"
msgstr "您需要是編輯者才能使用主題"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:480
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:483
msgid "workspace.tokens.no-sets-create"
msgstr "目前尚未定義任何集,請先建立一個。"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:97, src/app/main/ui/workspace/tokens/sets/lists.cljs:103
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:93, src/app/main/ui/workspace/tokens/sets/lists.cljs:99
msgid "workspace.tokens.no-sets-yet"
msgstr "目前尚未定義任何集。"
@@ -6283,16 +6247,16 @@ msgstr "目前尚未定義主題。"
msgid "workspace.tokens.no-themes-currently"
msgstr "現主時您沒有任何主題。"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:145
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:120
#, fuzzy
msgid "workspace.tokens.original-value"
msgstr "原始值:%s"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:153
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:128
msgid "workspace.tokens.ref-not-valid"
msgstr "參照無效或不在任何啟用的集內"
-#: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:39, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:44, src/app/main/ui/workspace/tokens/management/token_pill.cljs:146
+#: 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:100, 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 "解析後的值:%s"
@@ -6301,11 +6265,11 @@ msgstr "解析後的值:%s"
msgid "workspace.tokens.save-theme"
msgstr "儲存主題"
-#: src/app/main/ui/workspace/tokens/sets/lists.cljs:209, src/app/main/ui/workspace/tokens/sets/lists.cljs:315
+#: src/app/main/ui/workspace/tokens/sets/lists.cljs:204, src/app/main/ui/workspace/tokens/sets/lists.cljs:309
msgid "workspace.tokens.select-set"
msgstr "選擇集。"
-#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:343
+#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:342
msgid "workspace.tokens.set-selection-theme"
msgstr "定義此主題選項應使用哪些權杖(token)集:"
@@ -6318,22 +6282,22 @@ msgstr "權杖集未啟用"
msgid "workspace.tokens.theme-name"
msgstr "主題 %s"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:589, src/app/main/ui/workspace/tokens/management/create/form.cljs:590
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:608, src/app/main/ui/workspace/tokens/management/create/form.cljs:609
#, fuzzy
msgid "workspace.tokens.token-description"
msgstr "描述"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:539
+#: src/app/main/ui/workspace/colorpicker/color_tokens.cljs:83, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:109, src/app/main/ui/workspace/tokens/management/create/form.cljs:557
msgid "workspace.tokens.token-name"
msgstr "名稱"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:66
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:69
msgid "workspace.tokens.token-name-validation-error"
msgstr ""
" 不是有效的權杖(token)名稱。\n"
"權杖名稱應該只包含字母和數字,並由 . 字元分隔,且不得以 $ 符號開頭。"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:567
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:585
msgid "workspace.tokens.token-value"
msgstr "值"
@@ -6341,19 +6305,19 @@ msgstr "值"
msgid "workspace.tokens.tokens-section-title"
msgstr "權杖(TOKENS) - %s"
-#: src/app/main/ui/workspace/tokens/sidebar.cljs:125
+#: src/app/main/ui/workspace/tokens/sidebar.cljs:121
msgid "workspace.tokens.tools"
msgstr "工具"
-#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:156
+#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:131
msgid "workspace.tokens.value-not-valid"
msgstr "該值無效"
-#: src/app/main/ui/workspace/tokens/management/create/form.cljs:563
+#: src/app/main/ui/workspace/tokens/management/create/form.cljs:581
msgid "workspace.tokens.warning-name-change"
msgstr "重新命名此權杖(token)將會中斷對其舊名稱的任何參照。"
-#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:145
+#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
msgid "workspace.toolbar.assets"
msgstr "資源"
@@ -6361,7 +6325,7 @@ msgstr "資源"
msgid "workspace.toolbar.color-palette"
msgstr "色彩調色板(%s)"
-#: src/app/main/ui/workspace/right_header.cljs:216, src/app/main/ui/workspace/right_header.cljs:217
+#: src/app/main/ui/workspace/right_header.cljs:217, src/app/main/ui/workspace/right_header.cljs:218
msgid "workspace.toolbar.comments"
msgstr "留言 (%s)"
@@ -6568,19 +6532,19 @@ msgstr "操作覆蓋%s"
msgid "workspace.undo.title"
msgstr "歷史"
-#: src/app/main/data/workspace/libraries.cljs:1223, src/app/main/ui/workspace/sidebar/versions.cljs:84
+#: src/app/main/data/workspace/libraries.cljs:1228, src/app/main/ui/workspace/sidebar/versions.cljs:84
msgid "workspace.updates.dismiss"
msgstr "解散"
-#: src/app/main/data/workspace/libraries.cljs:1221
+#: src/app/main/data/workspace/libraries.cljs:1226
msgid "workspace.updates.more-info"
msgstr "更多資訊"
-#: src/app/main/data/workspace/libraries.cljs:1219
+#: src/app/main/data/workspace/libraries.cljs:1224
msgid "workspace.updates.there-are-updates"
msgstr "共用檔案庫有更新"
-#: src/app/main/data/workspace/libraries.cljs:1225
+#: src/app/main/data/workspace/libraries.cljs:1230
msgid "workspace.updates.update"
msgstr "更新"
@@ -6640,11 +6604,11 @@ msgstr "請問您想要還原此版本嗎?"
msgid "workspace.versions.snapshot-menu"
msgstr "開啟快照選單"
-#: src/app/main/ui/workspace/sidebar.cljs:236
+#: src/app/main/ui/workspace/sidebar.cljs:237
msgid "workspace.versions.tab.actions"
msgstr "操作"
-#: src/app/main/ui/workspace/sidebar.cljs:234
+#: src/app/main/ui/workspace/sidebar.cljs:235
msgid "workspace.versions.tab.history"
msgstr "歷史紀錄"
diff --git a/frontend/yarn.lock b/frontend/yarn.lock
index cf273005f2..00f66ea374 100644
--- a/frontend/yarn.lock
+++ b/frontend/yarn.lock
@@ -22,16 +22,35 @@ __metadata:
languageName: node
linkType: hard
-"@asamuzakjp/css-color@npm:^3.2.0":
- version: 3.2.0
- resolution: "@asamuzakjp/css-color@npm:3.2.0"
+"@asamuzakjp/css-color@npm:^4.0.3":
+ version: 4.0.4
+ resolution: "@asamuzakjp/css-color@npm:4.0.4"
dependencies:
- "@csstools/css-calc": "npm:^2.1.3"
- "@csstools/css-color-parser": "npm:^3.0.9"
- "@csstools/css-parser-algorithms": "npm:^3.0.4"
- "@csstools/css-tokenizer": "npm:^3.0.3"
- lru-cache: "npm:^10.4.3"
- checksum: 10c0/a4bf1c831751b1fae46b437e37e8a38c0b5bd58d23230157ae210bd1e905fe509b89b7c243e63d1522d852668a6292ed730a160e21342772b4e5b7b8ea14c092
+ "@csstools/css-calc": "npm:^2.1.4"
+ "@csstools/css-color-parser": "npm:^3.0.10"
+ "@csstools/css-parser-algorithms": "npm:^3.0.5"
+ "@csstools/css-tokenizer": "npm:^3.0.4"
+ lru-cache: "npm:^11.1.0"
+ checksum: 10c0/5a4eb3c8594f58f3df06c867a6cda4a33f702f5cd682d6afa5074813f16fd05e732653ac79bd6fc66390554e158ac478103ad5e885fd9cf154b69bb67639e82f
+ languageName: node
+ linkType: hard
+
+"@asamuzakjp/dom-selector@npm:^6.5.4":
+ version: 6.5.4
+ resolution: "@asamuzakjp/dom-selector@npm:6.5.4"
+ dependencies:
+ "@asamuzakjp/nwsapi": "npm:^2.3.9"
+ bidi-js: "npm:^1.0.3"
+ css-tree: "npm:^3.1.0"
+ is-potential-custom-element-name: "npm:^1.0.1"
+ checksum: 10c0/aeb032b0f7832c891d5f9900b381fe0c7187343eb46a353f07ffbaac2d222bb80ac7504006e7e1b4c45af9e640fd093e14f951870a146d3ad80fd67670c9a115
+ languageName: node
+ linkType: hard
+
+"@asamuzakjp/nwsapi@npm:^2.3.9":
+ version: 2.3.9
+ resolution: "@asamuzakjp/nwsapi@npm:2.3.9"
+ checksum: 10c0/869b81382e775499c96c45c6dbe0d0766a6da04bcf0abb79f5333535c4e19946851acaa43398f896e2ecc5a1de9cf3db7cf8c4b1afac1ee3d15e21584546d74d
languageName: node
linkType: hard
@@ -483,14 +502,14 @@ __metadata:
languageName: node
linkType: hard
-"@csstools/color-helpers@npm:^5.0.2":
- version: 5.0.2
- resolution: "@csstools/color-helpers@npm:5.0.2"
- checksum: 10c0/bebaddb28b9eb58b0449edd5d0c0318fa88f3cb079602ee27e88c9118070d666dcc4e09a5aa936aba2fde6ba419922ade07b7b506af97dd7051abd08dfb2959b
+"@csstools/color-helpers@npm:^5.1.0":
+ version: 5.1.0
+ resolution: "@csstools/color-helpers@npm:5.1.0"
+ checksum: 10c0/b7f99d2e455cf1c9b41a67a5327d5d02888cd5c8802a68b1887dffef537d9d4bc66b3c10c1e62b40bbed638b6c1d60b85a232f904ed7b39809c4029cb36567db
languageName: node
linkType: hard
-"@csstools/css-calc@npm:^2.1.3, @csstools/css-calc@npm:^2.1.4":
+"@csstools/css-calc@npm:^2.1.4":
version: 2.1.4
resolution: "@csstools/css-calc@npm:2.1.4"
peerDependencies:
@@ -500,20 +519,20 @@ __metadata:
languageName: node
linkType: hard
-"@csstools/css-color-parser@npm:^3.0.9":
- version: 3.0.10
- resolution: "@csstools/css-color-parser@npm:3.0.10"
+"@csstools/css-color-parser@npm:^3.0.10":
+ version: 3.1.0
+ resolution: "@csstools/css-color-parser@npm:3.1.0"
dependencies:
- "@csstools/color-helpers": "npm:^5.0.2"
+ "@csstools/color-helpers": "npm:^5.1.0"
"@csstools/css-calc": "npm:^2.1.4"
peerDependencies:
"@csstools/css-parser-algorithms": ^3.0.5
"@csstools/css-tokenizer": ^3.0.4
- checksum: 10c0/8f8a2395b117c2f09366b5c9bf49bc740c92a65b6330fe3cc1e76abafd0d1000e42a657d7b0a3814846a66f1d69896142f7e36d7a4aca77de977e5cc5f944747
+ checksum: 10c0/0e0c670ad54ec8ec4d9b07568b80defd83b9482191f5e8ca84ab546b7be6db5d7cc2ba7ac9fae54488b129a4be235d6183d3aab4416fec5e89351f73af4222c5
languageName: node
linkType: hard
-"@csstools/css-parser-algorithms@npm:^3.0.4":
+"@csstools/css-parser-algorithms@npm:^3.0.5":
version: 3.0.5
resolution: "@csstools/css-parser-algorithms@npm:3.0.5"
peerDependencies:
@@ -522,7 +541,16 @@ __metadata:
languageName: node
linkType: hard
-"@csstools/css-tokenizer@npm:^3.0.3":
+"@csstools/css-syntax-patches-for-csstree@npm:^1.0.14":
+ version: 1.0.14
+ resolution: "@csstools/css-syntax-patches-for-csstree@npm:1.0.14"
+ peerDependencies:
+ postcss: ^8.4
+ checksum: 10c0/e431cf5aa4ccd6a40f4a417663ac7178c822c5427b9c8473e466257dc46dd9698e3852d5517ec220b7d1d1ea911e9007ecb429464329ae169a0aa68b56f1c3ac
+ languageName: node
+ linkType: hard
+
+"@csstools/css-tokenizer@npm:^3.0.4":
version: 3.0.4
resolution: "@csstools/css-tokenizer@npm:3.0.4"
checksum: 10c0/3b589f8e9942075a642213b389bab75a2d50d05d203727fcdac6827648a5572674caff07907eff3f9a2389d86a4ee47308fafe4f8588f4a77b7167c588d2559f
@@ -561,6 +589,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/aix-ppc64@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/aix-ppc64@npm:0.25.9"
+ conditions: os=aix & cpu=ppc64
+ languageName: node
+ linkType: hard
+
"@esbuild/android-arm64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/android-arm64@npm:0.25.5"
@@ -568,6 +603,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/android-arm64@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/android-arm64@npm:0.25.9"
+ conditions: os=android & cpu=arm64
+ languageName: node
+ linkType: hard
+
"@esbuild/android-arm@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/android-arm@npm:0.25.5"
@@ -575,6 +617,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/android-arm@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/android-arm@npm:0.25.9"
+ conditions: os=android & cpu=arm
+ languageName: node
+ linkType: hard
+
"@esbuild/android-x64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/android-x64@npm:0.25.5"
@@ -582,6 +631,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/android-x64@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/android-x64@npm:0.25.9"
+ conditions: os=android & cpu=x64
+ languageName: node
+ linkType: hard
+
"@esbuild/darwin-arm64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/darwin-arm64@npm:0.25.5"
@@ -589,6 +645,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/darwin-arm64@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/darwin-arm64@npm:0.25.9"
+ conditions: os=darwin & cpu=arm64
+ languageName: node
+ linkType: hard
+
"@esbuild/darwin-x64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/darwin-x64@npm:0.25.5"
@@ -596,6 +659,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/darwin-x64@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/darwin-x64@npm:0.25.9"
+ conditions: os=darwin & cpu=x64
+ languageName: node
+ linkType: hard
+
"@esbuild/freebsd-arm64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/freebsd-arm64@npm:0.25.5"
@@ -603,6 +673,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/freebsd-arm64@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/freebsd-arm64@npm:0.25.9"
+ conditions: os=freebsd & cpu=arm64
+ languageName: node
+ linkType: hard
+
"@esbuild/freebsd-x64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/freebsd-x64@npm:0.25.5"
@@ -610,6 +687,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/freebsd-x64@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/freebsd-x64@npm:0.25.9"
+ conditions: os=freebsd & cpu=x64
+ languageName: node
+ linkType: hard
+
"@esbuild/linux-arm64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/linux-arm64@npm:0.25.5"
@@ -617,6 +701,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/linux-arm64@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/linux-arm64@npm:0.25.9"
+ conditions: os=linux & cpu=arm64
+ languageName: node
+ linkType: hard
+
"@esbuild/linux-arm@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/linux-arm@npm:0.25.5"
@@ -624,6 +715,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/linux-arm@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/linux-arm@npm:0.25.9"
+ conditions: os=linux & cpu=arm
+ languageName: node
+ linkType: hard
+
"@esbuild/linux-ia32@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/linux-ia32@npm:0.25.5"
@@ -631,6 +729,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/linux-ia32@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/linux-ia32@npm:0.25.9"
+ conditions: os=linux & cpu=ia32
+ languageName: node
+ linkType: hard
+
"@esbuild/linux-loong64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/linux-loong64@npm:0.25.5"
@@ -638,6 +743,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/linux-loong64@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/linux-loong64@npm:0.25.9"
+ conditions: os=linux & cpu=loong64
+ languageName: node
+ linkType: hard
+
"@esbuild/linux-mips64el@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/linux-mips64el@npm:0.25.5"
@@ -645,6 +757,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/linux-mips64el@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/linux-mips64el@npm:0.25.9"
+ conditions: os=linux & cpu=mips64el
+ languageName: node
+ linkType: hard
+
"@esbuild/linux-ppc64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/linux-ppc64@npm:0.25.5"
@@ -652,6 +771,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/linux-ppc64@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/linux-ppc64@npm:0.25.9"
+ conditions: os=linux & cpu=ppc64
+ languageName: node
+ linkType: hard
+
"@esbuild/linux-riscv64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/linux-riscv64@npm:0.25.5"
@@ -659,6 +785,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/linux-riscv64@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/linux-riscv64@npm:0.25.9"
+ conditions: os=linux & cpu=riscv64
+ languageName: node
+ linkType: hard
+
"@esbuild/linux-s390x@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/linux-s390x@npm:0.25.5"
@@ -666,6 +799,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/linux-s390x@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/linux-s390x@npm:0.25.9"
+ conditions: os=linux & cpu=s390x
+ languageName: node
+ linkType: hard
+
"@esbuild/linux-x64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/linux-x64@npm:0.25.5"
@@ -673,6 +813,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/linux-x64@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/linux-x64@npm:0.25.9"
+ conditions: os=linux & cpu=x64
+ languageName: node
+ linkType: hard
+
"@esbuild/netbsd-arm64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/netbsd-arm64@npm:0.25.5"
@@ -680,6 +827,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/netbsd-arm64@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/netbsd-arm64@npm:0.25.9"
+ conditions: os=netbsd & cpu=arm64
+ languageName: node
+ linkType: hard
+
"@esbuild/netbsd-x64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/netbsd-x64@npm:0.25.5"
@@ -687,6 +841,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/netbsd-x64@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/netbsd-x64@npm:0.25.9"
+ conditions: os=netbsd & cpu=x64
+ languageName: node
+ linkType: hard
+
"@esbuild/openbsd-arm64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/openbsd-arm64@npm:0.25.5"
@@ -694,6 +855,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/openbsd-arm64@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/openbsd-arm64@npm:0.25.9"
+ conditions: os=openbsd & cpu=arm64
+ languageName: node
+ linkType: hard
+
"@esbuild/openbsd-x64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/openbsd-x64@npm:0.25.5"
@@ -701,6 +869,20 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/openbsd-x64@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/openbsd-x64@npm:0.25.9"
+ conditions: os=openbsd & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@esbuild/openharmony-arm64@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/openharmony-arm64@npm:0.25.9"
+ conditions: os=openharmony & cpu=arm64
+ languageName: node
+ linkType: hard
+
"@esbuild/sunos-x64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/sunos-x64@npm:0.25.5"
@@ -708,6 +890,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/sunos-x64@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/sunos-x64@npm:0.25.9"
+ conditions: os=sunos & cpu=x64
+ languageName: node
+ linkType: hard
+
"@esbuild/win32-arm64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/win32-arm64@npm:0.25.5"
@@ -715,6 +904,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/win32-arm64@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/win32-arm64@npm:0.25.9"
+ conditions: os=win32 & cpu=arm64
+ languageName: node
+ linkType: hard
+
"@esbuild/win32-ia32@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/win32-ia32@npm:0.25.5"
@@ -722,6 +918,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/win32-ia32@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/win32-ia32@npm:0.25.9"
+ conditions: os=win32 & cpu=ia32
+ languageName: node
+ linkType: hard
+
"@esbuild/win32-x64@npm:0.25.5":
version: 0.25.5
resolution: "@esbuild/win32-x64@npm:0.25.5"
@@ -729,6 +932,13 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/win32-x64@npm:0.25.9":
+ version: 0.25.9
+ resolution: "@esbuild/win32-x64@npm:0.25.9"
+ conditions: os=win32 & cpu=x64
+ languageName: node
+ linkType: hard
+
"@gulp-sourcemaps/identity-map@npm:^2.0.1":
version: 2.0.1
resolution: "@gulp-sourcemaps/identity-map@npm:2.0.1"
@@ -2507,16 +2717,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/node-fetch@npm:^2.6.12":
- version: 2.6.12
- resolution: "@types/node-fetch@npm:2.6.12"
- dependencies:
- "@types/node": "npm:*"
- form-data: "npm:^4.0.0"
- checksum: 10c0/7693acad5499b7df2d1727d46cff092a63896dc04645f36b973dd6dd754a59a7faba76fcb777bdaa35d80625c6a9dd7257cca9c401a4bab03b04480cda7fd1af
- languageName: node
- linkType: hard
-
"@types/node@npm:*":
version: 24.0.3
resolution: "@types/node@npm:24.0.3"
@@ -3249,6 +3449,15 @@ __metadata:
languageName: node
linkType: hard
+"bidi-js@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "bidi-js@npm:1.0.3"
+ dependencies:
+ require-from-string: "npm:^2.0.2"
+ checksum: 10c0/fdddea4aa4120a34285486f2267526cd9298b6e8b773ad25e765d4f104b6d7437ab4ba542e6939e3ac834a7570bcf121ee2cf6d3ae7cd7082c4b5bedc8f271e1
+ languageName: node
+ linkType: hard
+
"binary-extensions@npm:^2.0.0":
version: 2.3.0
resolution: "binary-extensions@npm:2.3.0"
@@ -3499,6 +3708,16 @@ __metadata:
languageName: node
linkType: hard
+"chalk@npm:4.1.2, chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.2, chalk@npm:~4.1.2":
+ version: 4.1.2
+ resolution: "chalk@npm:4.1.2"
+ dependencies:
+ ansi-styles: "npm:^4.1.0"
+ supports-color: "npm:^7.1.0"
+ checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880
+ languageName: node
+ linkType: hard
+
"chalk@npm:^2.4.1, chalk@npm:^2.4.2":
version: 2.4.2
resolution: "chalk@npm:2.4.2"
@@ -3520,16 +3739,6 @@ __metadata:
languageName: node
linkType: hard
-"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.2, chalk@npm:~4.1.2":
- version: 4.1.2
- resolution: "chalk@npm:4.1.2"
- dependencies:
- ansi-styles: "npm:^4.1.0"
- supports-color: "npm:^7.1.0"
- checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880
- languageName: node
- linkType: hard
-
"chalk@npm:^5.2.0, chalk@npm:^5.3.0":
version: 5.4.1
resolution: "chalk@npm:5.4.1"
@@ -3857,18 +4066,18 @@ __metadata:
languageName: node
linkType: hard
-"compression@npm:^1.8.0":
- version: 1.8.0
- resolution: "compression@npm:1.8.0"
+"compression@npm:^1.8.1":
+ version: 1.8.1
+ resolution: "compression@npm:1.8.1"
dependencies:
bytes: "npm:3.1.2"
compressible: "npm:~2.0.18"
debug: "npm:2.6.9"
negotiator: "npm:~0.6.4"
- on-headers: "npm:~1.0.2"
+ on-headers: "npm:~1.1.0"
safe-buffer: "npm:5.2.1"
vary: "npm:~1.1.2"
- checksum: 10c0/804d3c8430939f4fd88e5128333f311b4035f6425a7f2959d74cfb5c98ef3a3e3e18143208f3f9d0fcae4cd3bcf3d2fbe525e0fcb955e6e146e070936f025a24
+ checksum: 10c0/85114b0b91c16594dc8c671cd9b05ef5e465066a60e5a4ed8b4551661303559a896ed17bb72c4234c04064e078f6ca86a34b8690349499a43f6fc4b844475da4
languageName: node
linkType: hard
@@ -3888,21 +4097,20 @@ __metadata:
languageName: node
linkType: hard
-"concurrently@npm:^9.1.2":
- version: 9.1.2
- resolution: "concurrently@npm:9.1.2"
+"concurrently@npm:^9.2.1":
+ version: 9.2.1
+ resolution: "concurrently@npm:9.2.1"
dependencies:
- chalk: "npm:^4.1.2"
- lodash: "npm:^4.17.21"
- rxjs: "npm:^7.8.1"
- shell-quote: "npm:^1.8.1"
- supports-color: "npm:^8.1.1"
- tree-kill: "npm:^1.2.2"
- yargs: "npm:^17.7.2"
+ chalk: "npm:4.1.2"
+ rxjs: "npm:7.8.2"
+ shell-quote: "npm:1.8.3"
+ supports-color: "npm:8.1.1"
+ tree-kill: "npm:1.2.2"
+ yargs: "npm:17.7.2"
bin:
conc: dist/bin/concurrently.js
concurrently: dist/bin/concurrently.js
- checksum: 10c0/88e00269366aa885ca2b97fd53b04e7af2b0f31774d991bfc0e88c0de61cdebdf115ddacc9c897fbd1f1b90369014637fa77045a171d072a75693332b36dcc70
+ checksum: 10c0/da37f239f82eb7ac24f5ddb56259861e5f1d6da2ade7602b6ea7ad3101b13b5ccec02a77b7001402d1028ff2fdc38eed55644b32853ad5abf30e057002a963aa
languageName: node
linkType: hard
@@ -4146,13 +4354,14 @@ __metadata:
languageName: node
linkType: hard
-"cssstyle@npm:^4.2.1":
- version: 4.4.0
- resolution: "cssstyle@npm:4.4.0"
+"cssstyle@npm:^5.3.0":
+ version: 5.3.0
+ resolution: "cssstyle@npm:5.3.0"
dependencies:
- "@asamuzakjp/css-color": "npm:^3.2.0"
- rrweb-cssom: "npm:^0.8.0"
- checksum: 10c0/6a9f7e32679abb959643ac169abfc920f5d32bbf4d61cd34b49a683e4dd2f42036cba6f503c75396a760f2872070e2def02cf2046850c43263f7ecb75f8aa80a
+ "@asamuzakjp/css-color": "npm:^4.0.3"
+ "@csstools/css-syntax-patches-for-csstree": "npm:^1.0.14"
+ css-tree: "npm:^3.1.0"
+ checksum: 10c0/6ceddc5b696d1220b9a3e41775860f58d29046cdbabc1e6b9c19bc48a6bfdcde749c45023417abf7ca3319429566c079a3e6f6e191ceab159dbced6187cb8b7c
languageName: node
linkType: hard
@@ -4183,13 +4392,13 @@ __metadata:
languageName: node
linkType: hard
-"data-urls@npm:^5.0.0":
- version: 5.0.0
- resolution: "data-urls@npm:5.0.0"
+"data-urls@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "data-urls@npm:6.0.0"
dependencies:
whatwg-mimetype: "npm:^4.0.0"
- whatwg-url: "npm:^14.0.0"
- checksum: 10c0/1b894d7d41c861f3a4ed2ae9b1c3f0909d4575ada02e36d3d3bc584bdd84278e20709070c79c3b3bff7ac98598cb191eb3e86a89a79ea4ee1ef360e1694f92ad
+ whatwg-url: "npm:^15.0.0"
+ checksum: 10c0/952102a8e6282fea112f7120d79fac482a2f99e20c67f9cb069d661c00627305b042e1f7e3cef8e4bbc795b42c5d481bbc9c6effeff5bb1427f9acaf1722bd35
languageName: node
linkType: hard
@@ -4904,7 +5113,7 @@ __metadata:
languageName: node
linkType: hard
-"esbuild@npm:^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0, esbuild@npm:^0.25.0, esbuild@npm:^0.25.5":
+"esbuild@npm:^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0, esbuild@npm:^0.25.0":
version: 0.25.5
resolution: "esbuild@npm:0.25.5"
dependencies:
@@ -4990,6 +5199,95 @@ __metadata:
languageName: node
linkType: hard
+"esbuild@npm:^0.25.9":
+ version: 0.25.9
+ resolution: "esbuild@npm:0.25.9"
+ dependencies:
+ "@esbuild/aix-ppc64": "npm:0.25.9"
+ "@esbuild/android-arm": "npm:0.25.9"
+ "@esbuild/android-arm64": "npm:0.25.9"
+ "@esbuild/android-x64": "npm:0.25.9"
+ "@esbuild/darwin-arm64": "npm:0.25.9"
+ "@esbuild/darwin-x64": "npm:0.25.9"
+ "@esbuild/freebsd-arm64": "npm:0.25.9"
+ "@esbuild/freebsd-x64": "npm:0.25.9"
+ "@esbuild/linux-arm": "npm:0.25.9"
+ "@esbuild/linux-arm64": "npm:0.25.9"
+ "@esbuild/linux-ia32": "npm:0.25.9"
+ "@esbuild/linux-loong64": "npm:0.25.9"
+ "@esbuild/linux-mips64el": "npm:0.25.9"
+ "@esbuild/linux-ppc64": "npm:0.25.9"
+ "@esbuild/linux-riscv64": "npm:0.25.9"
+ "@esbuild/linux-s390x": "npm:0.25.9"
+ "@esbuild/linux-x64": "npm:0.25.9"
+ "@esbuild/netbsd-arm64": "npm:0.25.9"
+ "@esbuild/netbsd-x64": "npm:0.25.9"
+ "@esbuild/openbsd-arm64": "npm:0.25.9"
+ "@esbuild/openbsd-x64": "npm:0.25.9"
+ "@esbuild/openharmony-arm64": "npm:0.25.9"
+ "@esbuild/sunos-x64": "npm:0.25.9"
+ "@esbuild/win32-arm64": "npm:0.25.9"
+ "@esbuild/win32-ia32": "npm:0.25.9"
+ "@esbuild/win32-x64": "npm:0.25.9"
+ dependenciesMeta:
+ "@esbuild/aix-ppc64":
+ optional: true
+ "@esbuild/android-arm":
+ optional: true
+ "@esbuild/android-arm64":
+ optional: true
+ "@esbuild/android-x64":
+ optional: true
+ "@esbuild/darwin-arm64":
+ optional: true
+ "@esbuild/darwin-x64":
+ optional: true
+ "@esbuild/freebsd-arm64":
+ optional: true
+ "@esbuild/freebsd-x64":
+ optional: true
+ "@esbuild/linux-arm":
+ optional: true
+ "@esbuild/linux-arm64":
+ optional: true
+ "@esbuild/linux-ia32":
+ optional: true
+ "@esbuild/linux-loong64":
+ optional: true
+ "@esbuild/linux-mips64el":
+ optional: true
+ "@esbuild/linux-ppc64":
+ optional: true
+ "@esbuild/linux-riscv64":
+ optional: true
+ "@esbuild/linux-s390x":
+ optional: true
+ "@esbuild/linux-x64":
+ optional: true
+ "@esbuild/netbsd-arm64":
+ optional: true
+ "@esbuild/netbsd-x64":
+ optional: true
+ "@esbuild/openbsd-arm64":
+ optional: true
+ "@esbuild/openbsd-x64":
+ optional: true
+ "@esbuild/openharmony-arm64":
+ optional: true
+ "@esbuild/sunos-x64":
+ optional: true
+ "@esbuild/win32-arm64":
+ optional: true
+ "@esbuild/win32-ia32":
+ optional: true
+ "@esbuild/win32-x64":
+ optional: true
+ bin:
+ esbuild: bin/esbuild
+ checksum: 10c0/aaa1284c75fcf45c82f9a1a117fe8dc5c45628e3386bda7d64916ae27730910b51c5aec7dd45a6ba19256be30ba2935e64a8f011a3f0539833071e06bf76d5b3
+ languageName: node
+ linkType: hard
+
"escalade@npm:^3.1.1, escalade@npm:^3.2.0":
version: 3.2.0
resolution: "escalade@npm:3.2.0"
@@ -5094,10 +5392,10 @@ __metadata:
languageName: node
linkType: hard
-"eventsource-parser@npm:^3.0.2":
- version: 3.0.2
- resolution: "eventsource-parser@npm:3.0.2"
- checksum: 10c0/067c6e60b7c68a4577630cc7e11d2aaeef52005e377a213308c7c2350596a175d5a179671d85f570726dce3f451c15d174ece4479ce68a1805686c88950d08dd
+"eventsource-parser@npm:^3.0.6":
+ version: 3.0.6
+ resolution: "eventsource-parser@npm:3.0.6"
+ checksum: 10c0/70b8ccec7dac767ef2eca43f355e0979e70415701691382a042a2df8d6a68da6c2fca35363669821f3da876d29c02abe9b232964637c1b6635c940df05ada78a
languageName: node
linkType: hard
@@ -5512,11 +5810,11 @@ __metadata:
"@types/node": "npm:^22.15.21"
"@zip.js/zip.js": "patch:@zip.js/zip.js@npm%3A2.7.60#~/.yarn/patches/@zip.js-zip.js-npm-2.7.60-b6b814410b.patch"
autoprefixer: "npm:^10.4.21"
- compression: "npm:^1.8.0"
- concurrently: "npm:^9.1.2"
+ compression: "npm:^1.8.1"
+ concurrently: "npm:^9.2.1"
date-fns: "npm:^4.1.0"
- esbuild: "npm:^0.25.5"
- eventsource-parser: "npm:^3.0.2"
+ esbuild: "npm:^0.25.9"
+ eventsource-parser: "npm:^3.0.6"
express: "npm:^5.1.0"
fancy-log: "npm:^2.0.0"
getopts: "npm:^2.3.0"
@@ -5529,7 +5827,7 @@ __metadata:
gulp-sourcemaps: "npm:^3.0.0"
gulp-svg-sprite: "npm:^2.0.3"
js-beautify: "npm:^1.15.4"
- jsdom: "npm:^26.1.0"
+ jsdom: "npm:^27.0.0"
lodash: "npm:^4.17.21"
lodash.debounce: "npm:^4.0.8"
map-stream: "npm:0.0.7"
@@ -5547,8 +5845,8 @@ __metadata:
pretty-time: "npm:^1.1.0"
prop-types: "npm:^15.8.1"
randomcolor: "npm:^0.6.2"
- react: "npm:19.1.0"
- react-dom: "npm:19.1.0"
+ react: "npm:19.1.1"
+ react-dom: "npm:19.1.1"
react-error-boundary: "npm:^6.0.0"
react-virtualized: "npm:^9.22.6"
rimraf: "npm:^6.0.1"
@@ -5562,8 +5860,8 @@ __metadata:
svg-sprite: "npm:^2.0.4"
tdigest: "npm:^0.1.2"
tinycolor2: "npm:^1.6.0"
- typescript: "npm:^5.8.3"
- ua-parser-js: "npm:2.0.3"
+ typescript: "npm:^5.9.2"
+ ua-parser-js: "npm:2.0.5"
vite: "npm:^6.3.5"
vitest: "npm:^3.2.0"
wasm-pack: "npm:^0.13.1"
@@ -7440,36 +7738,36 @@ __metadata:
languageName: node
linkType: hard
-"jsdom@npm:^26.1.0":
- version: 26.1.0
- resolution: "jsdom@npm:26.1.0"
+"jsdom@npm:^27.0.0":
+ version: 27.0.0
+ resolution: "jsdom@npm:27.0.0"
dependencies:
- cssstyle: "npm:^4.2.1"
- data-urls: "npm:^5.0.0"
+ "@asamuzakjp/dom-selector": "npm:^6.5.4"
+ cssstyle: "npm:^5.3.0"
+ data-urls: "npm:^6.0.0"
decimal.js: "npm:^10.5.0"
html-encoding-sniffer: "npm:^4.0.0"
http-proxy-agent: "npm:^7.0.2"
https-proxy-agent: "npm:^7.0.6"
is-potential-custom-element-name: "npm:^1.0.1"
- nwsapi: "npm:^2.2.16"
- parse5: "npm:^7.2.1"
+ parse5: "npm:^7.3.0"
rrweb-cssom: "npm:^0.8.0"
saxes: "npm:^6.0.0"
symbol-tree: "npm:^3.2.4"
- tough-cookie: "npm:^5.1.1"
+ tough-cookie: "npm:^6.0.0"
w3c-xmlserializer: "npm:^5.0.0"
- webidl-conversions: "npm:^7.0.0"
+ webidl-conversions: "npm:^8.0.0"
whatwg-encoding: "npm:^3.1.1"
whatwg-mimetype: "npm:^4.0.0"
- whatwg-url: "npm:^14.1.1"
- ws: "npm:^8.18.0"
+ whatwg-url: "npm:^15.0.0"
+ ws: "npm:^8.18.2"
xml-name-validator: "npm:^5.0.0"
peerDependencies:
canvas: ^3.0.0
peerDependenciesMeta:
canvas:
optional: true
- checksum: 10c0/5b14a5bc32ce077a06fb42d1ab95b1191afa5cbbce8859e3b96831c5143becbbcbf0511d4d4934e922d2901443ced2cdc3b734c1cf30b5f73b3e067ce457d0f4
+ checksum: 10c0/cc977bd0f48f92b275166b3e64622d83c2073dc309b790ed806246365985743295a7735bc8519a186ccffd42d1f2c16a0fa52a4ea79d2b329a948756db64ade1
languageName: node
linkType: hard
@@ -7707,7 +8005,7 @@ __metadata:
languageName: node
linkType: hard
-"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0, lru-cache@npm:^10.4.3":
+"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0":
version: 10.4.3
resolution: "lru-cache@npm:10.4.3"
checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb
@@ -7721,6 +8019,13 @@ __metadata:
languageName: node
linkType: hard
+"lru-cache@npm:^11.1.0":
+ version: 11.2.1
+ resolution: "lru-cache@npm:11.2.1"
+ checksum: 10c0/6f0e6b27f368d5e464e7813bd5b0af8f9a81a3a7ce2f40509841fdef07998b2588869f3e70edfbdb3bf705857f7bb21cca58fb01e1a1dc2440a83fcedcb7e8d8
+ languageName: node
+ linkType: hard
+
"lru-cache@npm:^5.1.1":
version: 5.1.1
resolution: "lru-cache@npm:5.1.1"
@@ -8387,13 +8692,6 @@ __metadata:
languageName: node
linkType: hard
-"nwsapi@npm:^2.2.16":
- version: 2.2.20
- resolution: "nwsapi@npm:2.2.20"
- checksum: 10c0/07f4dafa3186aef7c007863e90acd4342a34ba9d44b22f14f644fdb311f6086887e21c2fc15efaa826c2bc39ab2bc841364a1a630e7c87e0cb723ba59d729297
- languageName: node
- linkType: hard
-
"nyc@npm:^15.1.0":
version: 15.1.0
resolution: "nyc@npm:15.1.0"
@@ -8485,10 +8783,10 @@ __metadata:
languageName: node
linkType: hard
-"on-headers@npm:~1.0.2":
- version: 1.0.2
- resolution: "on-headers@npm:1.0.2"
- checksum: 10c0/f649e65c197bf31505a4c0444875db0258e198292f34b884d73c2f751e91792ef96bb5cf89aa0f4fecc2e4dc662461dda606b1274b0e564f539cae5d2f5fc32f
+"on-headers@npm:~1.1.0":
+ version: 1.1.0
+ resolution: "on-headers@npm:1.1.0"
+ checksum: 10c0/2c3b6b0d68ec9adbd561dc2d61c9b14da8ac03d8a2f0fd9e97bdf0600c887d5d97f664ff3be6876cf40cda6e3c587d73a4745e10b426ac50c7664fc5a0dfc0a1
languageName: node
linkType: hard
@@ -8700,7 +8998,7 @@ __metadata:
languageName: node
linkType: hard
-"parse5@npm:^7.2.1":
+"parse5@npm:^7.3.0":
version: 7.3.0
resolution: "parse5@npm:7.3.0"
dependencies:
@@ -9391,7 +9689,18 @@ __metadata:
languageName: node
linkType: hard
-"react-dom@npm:19.1.0, react-dom@npm:^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0":
+"react-dom@npm:19.1.1":
+ version: 19.1.1
+ resolution: "react-dom@npm:19.1.1"
+ dependencies:
+ scheduler: "npm:^0.26.0"
+ peerDependencies:
+ react: ^19.1.1
+ checksum: 10c0/8c91198510521299c56e4e8d5e3a4508b2734fb5e52f29eeac33811de64e76fe586ad32c32182e2e84e070d98df67125da346c3360013357228172dbcd20bcdd
+ languageName: node
+ linkType: hard
+
+"react-dom@npm:^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0":
version: 19.1.0
resolution: "react-dom@npm:19.1.0"
dependencies:
@@ -9458,7 +9767,14 @@ __metadata:
languageName: node
linkType: hard
-"react@npm:19.1.0, react@npm:^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0":
+"react@npm:19.1.1":
+ version: 19.1.1
+ resolution: "react@npm:19.1.1"
+ checksum: 10c0/8c9769a2dfd02e603af6445058325e6c8a24b47b185d0e461f66a6454765ddcaecb3f0a90184836c68bb509f3c38248359edbc42f0d07c23eb500a5c30c87b4e
+ languageName: node
+ linkType: hard
+
+"react@npm:^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0":
version: 19.1.0
resolution: "react@npm:19.1.0"
checksum: 10c0/530fb9a62237d54137a13d2cfb67a7db6a2156faed43eecc423f4713d9b20c6f2728b026b45e28fcd72e8eadb9e9ed4b089e99f5e295d2f0ad3134251bdd3698
@@ -9614,6 +9930,13 @@ __metadata:
languageName: node
linkType: hard
+"require-from-string@npm:^2.0.2":
+ version: 2.0.2
+ resolution: "require-from-string@npm:2.0.2"
+ checksum: 10c0/aaa267e0c5b022fc5fd4eef49d8285086b15f2a1c54b28240fdf03599cbd9c26049fee3eab894f2e1f6ca65e513b030a7c264201e3f005601e80c49fb2937ce2
+ languageName: node
+ linkType: hard
+
"require-main-filename@npm:^2.0.0":
version: 2.0.0
resolution: "require-main-filename@npm:2.0.0"
@@ -9816,14 +10139,7 @@ __metadata:
languageName: node
linkType: hard
-"rxjs@npm:8.0.0-alpha.14":
- version: 8.0.0-alpha.14
- resolution: "rxjs@npm:8.0.0-alpha.14"
- checksum: 10c0/14e4b487455c0940e3d87985cc3f2917ec88ce8cd3ede06071eb071a841d729549d43cab198757863838a4e22c1d7d3e9816f08d37357fa7e3506bdd6f8af56e
- languageName: node
- linkType: hard
-
-"rxjs@npm:^7.4.0, rxjs@npm:^7.8.1":
+"rxjs@npm:7.8.2, rxjs@npm:^7.4.0, rxjs@npm:^7.8.1":
version: 7.8.2
resolution: "rxjs@npm:7.8.2"
dependencies:
@@ -9832,6 +10148,13 @@ __metadata:
languageName: node
linkType: hard
+"rxjs@npm:8.0.0-alpha.14":
+ version: 8.0.0-alpha.14
+ resolution: "rxjs@npm:8.0.0-alpha.14"
+ checksum: 10c0/14e4b487455c0940e3d87985cc3f2917ec88ce8cd3ede06071eb071a841d729549d43cab198757863838a4e22c1d7d3e9816f08d37357fa7e3506bdd6f8af56e
+ languageName: node
+ linkType: hard
+
"safe-array-concat@npm:^1.1.3":
version: 1.1.3
resolution: "safe-array-concat@npm:1.1.3"
@@ -10271,7 +10594,7 @@ __metadata:
languageName: node
linkType: hard
-"shell-quote@npm:^1.6.1, shell-quote@npm:^1.8.1":
+"shell-quote@npm:1.8.3, shell-quote@npm:^1.6.1":
version: 1.8.3
resolution: "shell-quote@npm:1.8.3"
checksum: 10c0/bee87c34e1e986cfb4c30846b8e6327d18874f10b535699866f368ade11ea4ee45433d97bf5eada22c4320c27df79c3a6a7eb1bf3ecfc47f2c997d9e5e2672fd
@@ -10887,6 +11210,15 @@ __metadata:
languageName: node
linkType: hard
+"supports-color@npm:8.1.1, supports-color@npm:^8.0.0, supports-color@npm:^8.1.1":
+ version: 8.1.1
+ resolution: "supports-color@npm:8.1.1"
+ dependencies:
+ has-flag: "npm:^4.0.0"
+ checksum: 10c0/ea1d3c275dd604c974670f63943ed9bd83623edc102430c05adb8efc56ba492746b6e95386e7831b872ec3807fd89dd8eb43f735195f37b5ec343e4234cc7e89
+ languageName: node
+ linkType: hard
+
"supports-color@npm:^5.3.0, supports-color@npm:^5.4.0, supports-color@npm:^5.5.0":
version: 5.5.0
resolution: "supports-color@npm:5.5.0"
@@ -10905,15 +11237,6 @@ __metadata:
languageName: node
linkType: hard
-"supports-color@npm:^8.0.0, supports-color@npm:^8.1.1":
- version: 8.1.1
- resolution: "supports-color@npm:8.1.1"
- dependencies:
- has-flag: "npm:^4.0.0"
- checksum: 10c0/ea1d3c275dd604c974670f63943ed9bd83623edc102430c05adb8efc56ba492746b6e95386e7831b872ec3807fd89dd8eb43f735195f37b5ec343e4234cc7e89
- languageName: node
- linkType: hard
-
"supports-preserve-symlinks-flag@npm:^1.0.0":
version: 1.0.0
resolution: "supports-preserve-symlinks-flag@npm:1.0.0"
@@ -11178,21 +11501,21 @@ __metadata:
languageName: node
linkType: hard
-"tldts-core@npm:^6.1.86":
- version: 6.1.86
- resolution: "tldts-core@npm:6.1.86"
- checksum: 10c0/8133c29375f3f99f88fce5f4d62f6ecb9532b106f31e5423b27c1eb1b6e711bd41875184a456819ceaed5c8b94f43911b1ad57e25c6eb86e1fc201228ff7e2af
+"tldts-core@npm:^7.0.14":
+ version: 7.0.14
+ resolution: "tldts-core@npm:7.0.14"
+ checksum: 10c0/e35f006e3376c70ea2cde436fc808b3017322de62246e7e4a733cc09a60959711cd9dbfd91b67ffe52fbee215d9e41911a39b6c20e8f45544b09f7662355753f
languageName: node
linkType: hard
-"tldts@npm:^6.1.32":
- version: 6.1.86
- resolution: "tldts@npm:6.1.86"
+"tldts@npm:^7.0.5":
+ version: 7.0.14
+ resolution: "tldts@npm:7.0.14"
dependencies:
- tldts-core: "npm:^6.1.86"
+ tldts-core: "npm:^7.0.14"
bin:
tldts: bin/cli.js
- checksum: 10c0/27ae7526d9d78cb97b2de3f4d102e0b4321d1ccff0648a7bb0e039ed54acbce86bacdcd9cd3c14310e519b457854e7bafbef1f529f58a1e217a737ced63f0940
+ checksum: 10c0/87dd69b68e07c0cb3913c4b7fb4a57a3b4826a664637725ab9226aa01a4786d003c181b0525d09bfb1bb0c16802b4350620443da64d9e947a7ff4c19f2f4acbf
languageName: node
linkType: hard
@@ -11237,16 +11560,16 @@ __metadata:
languageName: node
linkType: hard
-"tough-cookie@npm:^5.1.1":
- version: 5.1.2
- resolution: "tough-cookie@npm:5.1.2"
+"tough-cookie@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "tough-cookie@npm:6.0.0"
dependencies:
- tldts: "npm:^6.1.32"
- checksum: 10c0/5f95023a47de0f30a902bba951664b359725597d8adeabc66a0b93a931c3af801e1e697dae4b8c21a012056c0ea88bd2bf4dfe66b2adcf8e2f42cd9796fe0626
+ tldts: "npm:^7.0.5"
+ checksum: 10c0/7b17a461e9c2ac0d0bea13ab57b93b4346d0b8c00db174c963af1e46e4ea8d04148d2a55f2358fc857db0c0c65208a98e319d0c60693e32e0c559a9d9cf20cb5
languageName: node
linkType: hard
-"tr46@npm:^5.1.0":
+"tr46@npm:^5.1.1":
version: 5.1.1
resolution: "tr46@npm:5.1.1"
dependencies:
@@ -11271,7 +11594,7 @@ __metadata:
languageName: node
linkType: hard
-"tree-kill@npm:^1.2.2":
+"tree-kill@npm:1.2.2, tree-kill@npm:^1.2.2":
version: 1.2.2
resolution: "tree-kill@npm:1.2.2"
bin:
@@ -11420,23 +11743,23 @@ __metadata:
languageName: node
linkType: hard
-"typescript@npm:^5.8.3":
- version: 5.8.3
- resolution: "typescript@npm:5.8.3"
+"typescript@npm:^5.9.2":
+ version: 5.9.2
+ resolution: "typescript@npm:5.9.2"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
- checksum: 10c0/5f8bb01196e542e64d44db3d16ee0e4063ce4f3e3966df6005f2588e86d91c03e1fb131c2581baf0fb65ee79669eea6e161cd448178986587e9f6844446dbb48
+ checksum: 10c0/cd635d50f02d6cf98ed42de2f76289701c1ec587a363369255f01ed15aaf22be0813226bff3c53e99d971f9b540e0b3cc7583dbe05faded49b1b0bed2f638a18
languageName: node
linkType: hard
-"typescript@patch:typescript@npm%3A^5.8.3#optional!builtin":
- version: 5.8.3
- resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5"
+"typescript@patch:typescript@npm%3A^5.9.2#optional!builtin":
+ version: 5.9.2
+ resolution: "typescript@patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
- checksum: 10c0/39117e346ff8ebd87ae1510b3a77d5d92dae5a89bde588c747d25da5c146603a99c8ee588c7ef80faaf123d89ed46f6dbd918d534d641083177d5fac38b8a1cb
+ checksum: 10c0/34d2a8e23eb8e0d1875072064d5e1d9c102e0bdce56a10a25c0b917b8aa9001a9cf5c225df12497e99da107dc379360bc138163c66b55b95f5b105b50578067e
languageName: node
linkType: hard
@@ -11447,18 +11770,17 @@ __metadata:
languageName: node
linkType: hard
-"ua-parser-js@npm:2.0.3":
- version: 2.0.3
- resolution: "ua-parser-js@npm:2.0.3"
+"ua-parser-js@npm:2.0.5":
+ version: 2.0.5
+ resolution: "ua-parser-js@npm:2.0.5"
dependencies:
- "@types/node-fetch": "npm:^2.6.12"
detect-europe-js: "npm:^0.1.2"
is-standalone-pwa: "npm:^0.1.1"
- node-fetch: "npm:^2.7.0"
ua-is-frozen: "npm:^0.1.2"
+ undici: "npm:^7.12.0"
bin:
ua-parser-js: script/cli.js
- checksum: 10c0/0fd098a19c11ecddf35f65a9a86a44e4d6147fbed4ad1813d0142c55d305ba2220f41b48c5a60f082552ff4a93bbb5edb1b24de0af45271d1735b63794fef1e0
+ checksum: 10c0/9967792d8a41a417547a49fea042beba5436ff33c173caebc64356e3377044e59ee4540175f98e3ce20d45ddc39f848bfa9a91f3c394667e4dbf9421476281ce
languageName: node
linkType: hard
@@ -11504,6 +11826,13 @@ __metadata:
languageName: node
linkType: hard
+"undici@npm:^7.12.0":
+ version: 7.16.0
+ resolution: "undici@npm:7.16.0"
+ checksum: 10c0/efd867792e9f233facf9efa0a087e2d9c3e4415c0b234061b9b40307ca4fa01d945fee4d43c7b564e1b80e0d519bcc682f9f6e0de13c717146c00a80e2f1fb0f
+ languageName: node
+ linkType: hard
+
"unique-filename@npm:^4.0.0":
version: 4.0.0
resolution: "unique-filename@npm:4.0.0"
@@ -11931,10 +12260,10 @@ __metadata:
languageName: node
linkType: hard
-"webidl-conversions@npm:^7.0.0":
- version: 7.0.0
- resolution: "webidl-conversions@npm:7.0.0"
- checksum: 10c0/228d8cb6d270c23b0720cb2d95c579202db3aaf8f633b4e9dd94ec2000a04e7e6e43b76a94509cdb30479bd00ae253ab2371a2da9f81446cc313f89a4213a2c4
+"webidl-conversions@npm:^8.0.0":
+ version: 8.0.0
+ resolution: "webidl-conversions@npm:8.0.0"
+ checksum: 10c0/3244e8a6534163bc3ee5f5f48b507b4bb74e34e7cc7c86a50cd02734753042b88343dae48321f34ad61ddc6b5c90cb1a5b2ee757b8be8e6fadc587a9f3db76cd
languageName: node
linkType: hard
@@ -11961,13 +12290,13 @@ __metadata:
languageName: node
linkType: hard
-"whatwg-url@npm:^14.0.0, whatwg-url@npm:^14.1.1":
- version: 14.2.0
- resolution: "whatwg-url@npm:14.2.0"
+"whatwg-url@npm:^15.0.0":
+ version: 15.0.0
+ resolution: "whatwg-url@npm:15.0.0"
dependencies:
- tr46: "npm:^5.1.0"
- webidl-conversions: "npm:^7.0.0"
- checksum: 10c0/f746fc2f4c906607d09537de1227b13f9494c171141e5427ed7d2c0dd0b6a48b43d8e71abaae57d368d0c06b673fd8ec63550b32ad5ed64990c7b0266c2b4272
+ tr46: "npm:^5.1.1"
+ webidl-conversions: "npm:^8.0.0"
+ checksum: 10c0/7b4f633fcd8fea6d588fb5694a9c4631382b41d31270e1fb3b755923f2c267d456ea1c7122124689e430b6a4e73c7e43e0731f833b33bfedcfffa2a7b4efbfc0
languageName: node
linkType: hard
@@ -12193,7 +12522,22 @@ __metadata:
languageName: node
linkType: hard
-"ws@npm:^8.18.0, ws@npm:^8.2.3":
+"ws@npm:^8.18.2":
+ version: 8.18.3
+ resolution: "ws@npm:8.18.3"
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ">=5.0.2"
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+ checksum: 10c0/eac918213de265ef7cb3d4ca348b891a51a520d839aa51cdb8ca93d4fa7ff9f6ccb339ccee89e4075324097f0a55157c89fa3f7147bde9d8d7e90335dc087b53
+ languageName: node
+ linkType: hard
+
+"ws@npm:^8.2.3":
version: 8.18.2
resolution: "ws@npm:8.18.2"
peerDependencies:
@@ -12313,6 +12657,21 @@ __metadata:
languageName: node
linkType: hard
+"yargs@npm:17.7.2, yargs@npm:^17.3.1, yargs@npm:^17.7.2":
+ version: 17.7.2
+ resolution: "yargs@npm:17.7.2"
+ dependencies:
+ cliui: "npm:^8.0.1"
+ escalade: "npm:^3.1.1"
+ get-caller-file: "npm:^2.0.5"
+ require-directory: "npm:^2.1.1"
+ string-width: "npm:^4.2.3"
+ y18n: "npm:^5.0.5"
+ yargs-parser: "npm:^21.1.1"
+ checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05
+ languageName: node
+ linkType: hard
+
"yargs@npm:^15.0.2":
version: 15.4.1
resolution: "yargs@npm:15.4.1"
@@ -12332,21 +12691,6 @@ __metadata:
languageName: node
linkType: hard
-"yargs@npm:^17.3.1, yargs@npm:^17.7.2":
- version: 17.7.2
- resolution: "yargs@npm:17.7.2"
- dependencies:
- cliui: "npm:^8.0.1"
- escalade: "npm:^3.1.1"
- get-caller-file: "npm:^2.0.5"
- require-directory: "npm:^2.1.1"
- string-width: "npm:^4.2.3"
- y18n: "npm:^5.0.5"
- yargs-parser: "npm:^21.1.1"
- checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05
- languageName: node
- linkType: hard
-
"yocto-queue@npm:^0.1.0":
version: 0.1.0
resolution: "yocto-queue@npm:0.1.0"
diff --git a/library/CHANGES.md b/library/CHANGES.md
index 22cd12ea2e..0810204a34 100644
--- a/library/CHANGES.md
+++ b/library/CHANGES.md
@@ -1,5 +1,16 @@
# CHANGELOG
+## 1.0.11
+
+- Set correct path if it is not provided on addComponent
+
+
+## 1.0.10
+
+- Enable variant/v1 feature by default
+- Add variant attrs handling to addComponent method
+
+
## 1.0.9
- Fix dependencies declaration on package.json
diff --git a/library/deps.edn b/library/deps.edn
index 0b2473bf81..9edca59650 100644
--- a/library/deps.edn
+++ b/library/deps.edn
@@ -21,7 +21,7 @@
:dev
{:extra-paths ["dev"]
:extra-deps
- {thheller/shadow-cljs {:mvn/version "3.1.7"}
+ {thheller/shadow-cljs {:mvn/version "3.2.1"}
com.bhauman/rebel-readline {:mvn/version "RELEASE"}
org.clojure/tools.namespace {:mvn/version "RELEASE"}
criterium/criterium {:mvn/version "RELEASE"}}}
diff --git a/library/docs/variants.md b/library/docs/variants.md
new file mode 100644
index 0000000000..5b09a14afe
--- /dev/null
+++ b/library/docs/variants.md
@@ -0,0 +1,35 @@
+# Variants
+
+## General
+
+Variants are components that are grouped and share a set of properties. In this document they are referred simply as **components**. The group itself is called a **VariantComponent**.
+
+A VariantComponent must contain at least **one** component.
+
+## Components
+
+- Each component has a `variant-id` attribute. **All components in the same VariantComponent share the same `variant-id`.**
+- Each component has a `variant-properties` attribute, which consists on a list/map of properties. For example: `[{ name: "Property 1", value: "Value 1" } { name: "Property 2", value: "Value 2" }]`.
+ * All components within a VariantComponent must have the same number of properties, with identical keys and in the same order.
+ * The values can be the same or different across components.
+
+## Main shapes of components
+
+### Variant container
+
+All main shapes for components of the same VariantComponent must be direct children of a **variant container**. A variant container is a frame with the following characteristics:
+- Its `id` equals the shared `variant-id` of its child components.
+- It has an attribute `is-variant-container` set to `true`.
+- A variant container without children is invalid. It must have at least one child.
+- The first child of the variant container is used to represent visually the entire VariantComponent in different places on Penpot, so the order of the children is significant.
+- When created in the interface of Penpot, it may include some attributes (e.g., flex layout, stroke color `#bb97d8`, border radius `20`). These attributes are not mandatory. (TBD: Will the SDK create those attributes by itself?).
+
+### Main shape
+
+The main shape of a component that belongs to a VariantComponent includes some extra attributes:
+* `variant-id`: same value as its component's `variant-id` and the variant container's `id`.
+* `variant-name`: a string composed by taking the values of the `variant-properties` of its component, removing the empty ones, and joining the remaining with `", "`. Example: `[{ name: 'Property 1', value: 'Value 1' } { name: 'Property 2', value: '' } { name: 'Property 3', value: 'Value 3' }]` becomes `Value 1, Value 3`.
+
+### Copies of the components
+
+Copies of components within a VariantComponent do not have any special attributes and behave like ordinary copies.
diff --git a/library/package.json b/library/package.json
index 13851f6d6d..048f4c53f3 100644
--- a/library/package.json
+++ b/library/package.json
@@ -1,6 +1,6 @@
{
"name": "@penpot/library",
- "version": "1.0.9",
+ "version": "1.0.11",
"license": "MPL-2.0",
"author": "Kaleidos INC",
"packageManager": "yarn@4.9.1+sha512.f95ce356460e05be48d66401c1ae64ef84d163dd689964962c6888a9810865e39097a5e9de748876c2e0bf89b232d583c33982773e9903ae7a76257270986538",
diff --git a/manage.sh b/manage.sh
index 32b348ffe7..174276b7d8 100755
--- a/manage.sh
+++ b/manage.sh
@@ -170,6 +170,7 @@ function build-imagemagick-docker-image {
function build {
echo ">> build start: $1"
local version=$(print-current-version);
+ local script=${2:-build}
pull-devenv-if-not-exists;
docker volume create ${DEVENV_PNAME}_user_data;
@@ -182,7 +183,7 @@ function build {
-e SHADOWCLJS_EXTRA_PARAMS=$SHADOWCLJS_EXTRA_PARAMS \
-e JAVA_OPTS="$JAVA_OPTS" \
-w /home/penpot/penpot/$1 \
- $DEVENV_IMGNAME:latest sudo -EH -u penpot ./scripts/build $version
+ $DEVENV_IMGNAME:latest sudo -EH -u penpot ./scripts/$script $version
echo ">> build end: $1"
}
@@ -246,6 +247,22 @@ function build-exporter-bundle {
echo ">> bundle exporter end";
}
+function build-storybook-bundle {
+ echo ">> bundle storybook start";
+
+ mkdir -p ./bundles
+ local version=$(print-current-version);
+ local bundle_dir="./bundles/storybook";
+
+ build "frontend" "build-storybook";
+
+ rm -rf $bundle_dir;
+ mv ./frontend/storybook-static $bundle_dir;
+ echo $version > $bundle_dir/version.txt;
+ put-license-file $bundle_dir;
+ echo ">> bundle storybook end";
+}
+
function build-docs-bundle {
echo ">> bundle docs start";
@@ -265,21 +282,40 @@ function build-docs-bundle {
function build-frontend-docker-image {
rsync -avr --delete ./bundles/frontend/ ./docker/images/bundle-frontend/;
pushd ./docker/images;
- docker build -t penpotapp/frontend:$CURRENT_BRANCH -t penpotapp/frontend:latest -f Dockerfile.frontend .;
+ docker build \
+ -t penpotapp/frontend:$CURRENT_BRANCH -t penpotapp/frontend:latest \
+ --build-arg BUNDLE_PATH="./bundle-frontend/" \
+ -f Dockerfile.frontend .;
popd;
}
function build-backend-docker-image {
rsync -avr --delete ./bundles/backend/ ./docker/images/bundle-backend/;
pushd ./docker/images;
- docker build -t penpotapp/backend:$CURRENT_BRANCH -t penpotapp/backend:latest -f Dockerfile.backend .;
+ docker build \
+ -t penpotapp/backend:$CURRENT_BRANCH -t penpotapp/backend:latest \
+ --build-arg BUNDLE_PATH="./bundle-backend/" \
+ -f Dockerfile.backend .;
popd;
}
function build-exporter-docker-image {
rsync -avr --delete ./bundles/exporter/ ./docker/images/bundle-exporter/;
pushd ./docker/images;
- docker build -t penpotapp/exporter:$CURRENT_BRANCH -t penpotapp/exporter:latest -f Dockerfile.exporter .;
+ docker build \
+ -t penpotapp/exporter:$CURRENT_BRANCH -t penpotapp/exporter:latest \
+ --build-arg BUNDLE_PATH="./bundle-exporter/" \
+ -f Dockerfile.exporter .;
+ popd;
+}
+
+function build-storybook-docker-image {
+ rsync -avr --delete ./bundles/storybook/ ./docker/images/bundle-storybook/;
+ pushd ./docker/images;
+ docker build \
+ -t penpotapp/storybook:$CURRENT_BRANCH -t penpotapp/storybook:latest \
+ --build-arg BUNDLE_PATH="./bundle-storybook/" \
+ -f Dockerfile.storybook .;
popd;
}
@@ -303,12 +339,14 @@ function usage {
echo "- build-frontend-bundle Build frontend bundle"
echo "- build-backend-bundle Build backend bundle."
echo "- build-exporter-bundle Build exporter bundle."
+ echo "- build-storybook-bundle Build storybook bundle."
echo "- build-docs-bundle Build docs bundle."
echo ""
echo "- build-docker-images Build all docker images (frontend, backend and exporter)."
echo "- build-frontend-docker-image Build frontend docker images."
echo "- build-backend-docker-image Build backend docker images."
echo "- build-exporter-docker-image Build exporter docker images."
+ echo "- build-storybook-docker-image Build storybook docker images."
echo ""
echo "- version Show penpot's version."
}
@@ -361,6 +399,7 @@ case $1 in
build-frontend-bundle;
build-backend-bundle;
build-exporter-bundle;
+ build-storybook-bundle;
;;
build-frontend-bundle)
@@ -374,6 +413,10 @@ case $1 in
build-exporter-bundle)
build-exporter-bundle;
;;
+
+ build-storybook-bundle)
+ build-storybook-bundle;
+ ;;
build-docs-bundle)
build-docs-bundle;
@@ -388,6 +431,7 @@ case $1 in
build-frontend-docker-image
build-backend-docker-image
build-exporter-docker-image
+ build-storybook-docker-image
;;
build-frontend-docker-image)
@@ -401,6 +445,10 @@ case $1 in
build-exporter-docker-image)
build-exporter-docker-image
;;
+
+ build-storybook-docker-image)
+ build-storybook-docker-image
+ ;;
*)
usage
diff --git a/render-wasm/Cargo.lock b/render-wasm/Cargo.lock
index ed1ebde4b1..9a9d050849 100644
--- a/render-wasm/Cargo.lock
+++ b/render-wasm/Cargo.lock
@@ -298,6 +298,14 @@ version = "0.4.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
+[[package]]
+name = "macros"
+version = "0.1.0"
+dependencies = [
+ "heck",
+ "syn",
+]
+
[[package]]
name = "memchr"
version = "2.7.4"
@@ -359,9 +367,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
-version = "1.0.88"
+version = "1.0.101"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c3a7fc5db1e57d5a779a352c8cdb57b29aa4c40cc69c3a68a7fedc815fbf2f9"
+checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de"
dependencies = [
"unicode-ident",
]
@@ -422,6 +430,7 @@ dependencies = [
"gl",
"glam",
"indexmap",
+ "macros",
"skia-safe",
"uuid",
]
@@ -548,9 +557,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.82"
+version = "2.0.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83540f837a8afc019423a8edb95b52a8effe46957ee402287f4292fae35be021"
+checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
dependencies = [
"proc-macro2",
"quote",
diff --git a/render-wasm/Cargo.toml b/render-wasm/Cargo.toml
index 1a327e507c..82cde41199 100644
--- a/render-wasm/Cargo.toml
+++ b/render-wasm/Cargo.toml
@@ -6,6 +6,8 @@ repository = "https://github.com/penpot/penpot"
license-file = "../LICENSE"
description = "Wasm-based canvas renderer for Penpot"
+build = "build.rs"
+
[features]
default = []
profile = ["profile-macros", "profile-raf"]
@@ -22,12 +24,13 @@ bezier-rs = "0.4.0"
gl = "0.14.0"
glam = "0.24.2"
indexmap = "2.7.1"
+macros = { path = "macros" }
skia-safe = { version = "0.87.0", default-features = false, features = [
"gl",
"svg",
"textlayout",
"binary-cache",
- "webp"
+ "webp",
] }
uuid = { version = "1.11.0", features = ["v4", "js"] }
diff --git a/render-wasm/build b/render-wasm/build
index e518367005..df93f15baa 100755
--- a/render-wasm/build
+++ b/render-wasm/build
@@ -13,9 +13,13 @@ export SKIA_BINARIES_URL=${SKIA_BINARIES_URL:-"https://github.com/penpot/skia-bi
cargo build $_CARGO_PARAMS
-cp target/wasm32-unknown-emscripten/$_BUILD_MODE/render_wasm.js ../frontend/resources/public/js/$_BUILD_NAME.js
+_SHARED_FILE=$(find target/wasm32-unknown-emscripten -name render_wasm_shared.js | head -n 1);
+
+cat target/wasm32-unknown-emscripten/$_BUILD_MODE/render_wasm.js "$_SHARED_FILE" > ../frontend/resources/public/js/$_BUILD_NAME.js
cp target/wasm32-unknown-emscripten/$_BUILD_MODE/render_wasm.wasm ../frontend/resources/public/js/$_BUILD_NAME.wasm
sed -i "s/render_wasm.wasm/$_BUILD_NAME.wasm?version=develop/g" ../frontend/resources/public/js/$_BUILD_NAME.js;
+exit $?
+
popd
diff --git a/render-wasm/build.rs b/render-wasm/build.rs
new file mode 100644
index 0000000000..8f5ce28f5f
--- /dev/null
+++ b/render-wasm/build.rs
@@ -0,0 +1,3 @@
+// We need this empty script so OUT_DIR is automatically set and we can build
+// the macros crate
+fn main() {}
diff --git a/render-wasm/docs/serialization.md b/render-wasm/docs/serialization.md
index 36cbc5833c..41c4741ba7 100644
--- a/render-wasm/docs/serialization.md
+++ b/render-wasm/docs/serialization.md
@@ -25,7 +25,7 @@ Horizontal constraints are serialized as `u8`:
| ----- | --------- |
| 0 | Left |
| 1 | Right |
-| 2 | LeftRight |
+| 2 | Leftright |
| 3 | Center |
| 4 | Scale |
| \_ | None |
@@ -38,11 +38,22 @@ Vertical constraints are serialized as `u8`:
| ----- | --------- |
| 0 | Top |
| 1 | Bottom |
-| 2 | TopBottom |
+| 2 | Topbottom |
| 3 | Center |
| 4 | Scale |
| \_ | None |
+## Vertical Alignment
+
+Vertical alignment is serialized as `u8`:
+
+| Value | Field |
+| ----- | ------ |
+| 0 | Top |
+| 1 | Center |
+| 2 | Bottom |
+| \_ | Top |
+
## Paths
Paths are made of segments of **28 bytes** each. The layout (assuming positions in a `Uint8Array`) is the following:
@@ -126,16 +137,17 @@ Gradient stops are serialized as a sequence of `16` chunks with the following la
Stroke caps are serialized as `u8`:
-| Value | Field |
-| ----- | --------- |
-| 1 | Line |
-| 2 | Triangle |
-| 3 | Rectangle |
-| 4 | Circle |
-| 5 | Diamond |
-| 6 | Round |
-| 7 | Square |
-| \_ | None |
+| Value | Field |
+| ----- | ------------- |
+| 0 | None |
+| 1 | LineArrow |
+| 2 | TriangleArrow |
+| 3 | SquareMarker |
+| 4 | CircleMarker |
+| 5 | DiamondMarker |
+| 6 | Round |
+| 7 | Square |
+| \_ | None |
## Stroke Sytles
@@ -209,16 +221,6 @@ Shadow styles are serialized as `u8`:
| 3 | Stretch |
| \_ | error |
-### Align self
-
-| Value | Field |
-| ----- | ------- |
-| 0 | Start |
-| 1 | End |
-| 2 | Center |
-| 3 | Stretch |
-| \_ | error |
-
### Align Content
| Value | Field |
@@ -257,25 +259,27 @@ Shadow styles are serialized as `u8`:
### Align Self
-| Value | Field |
-| ----- | ------- |
-| 0 | Auto |
-| 1 | Start |
-| 2 | End |
-| 3 | Center |
-| 4 | Stretch |
-| \_ | error |
+| Value | Field |
+| ----- | ------------- |
+| 0 | (none) |
+| 1 | Auto |
+| 2 | Start |
+| 3 | End |
+| 4 | Center |
+| 5 | Stretch |
+| \_ | (unsupported) |
### Justify Self
-| Value | Field |
-| ----- | ------- |
-| 0 | Auto |
-| 1 | Start |
-| 2 | End |
-| 3 | Center |
-| 4 | Stretch |
-| \_ | error |
+| Value | Field |
+| ----- | ------------- |
+| 0 | (none) |
+| 1 | Auto |
+| 2 | Start |
+| 3 | End |
+| 4 | Center |
+| 5 | Stretch |
+| \_ | (unsupported) |
### Wrap type
diff --git a/render-wasm/macros/Cargo.lock b/render-wasm/macros/Cargo.lock
new file mode 100644
index 0000000000..8b4fd748ae
--- /dev/null
+++ b/render-wasm/macros/Cargo.lock
@@ -0,0 +1,52 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "heck"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
+
+[[package]]
+name = "macros"
+version = "0.1.0"
+dependencies = [
+ "heck",
+ "syn",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.101"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.106"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d"
diff --git a/render-wasm/macros/Cargo.toml b/render-wasm/macros/Cargo.toml
new file mode 100644
index 0000000000..6c2abd7509
--- /dev/null
+++ b/render-wasm/macros/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "macros"
+version = "0.1.0"
+edition = "2024"
+
+[lib]
+proc-macro = true
+
+[dependencies]
+heck = "0.5.0"
+syn = "2.0.106"
diff --git a/render-wasm/macros/src/lib.rs b/render-wasm/macros/src/lib.rs
new file mode 100644
index 0000000000..a0eec23ca6
--- /dev/null
+++ b/render-wasm/macros/src/lib.rs
@@ -0,0 +1,103 @@
+use std::collections::HashMap;
+use std::fs;
+use std::io::Write;
+use std::path::Path;
+use std::sync;
+
+use heck::{ToKebabCase, ToPascalCase};
+use proc_macro::TokenStream;
+
+type Result = std::result::Result;
+
+#[proc_macro_derive(ToJs)]
+pub fn derive_to_cljs(input: TokenStream) -> TokenStream {
+ let input = syn::parse_macro_input!(input as syn::DeriveInput);
+ let enum_id = input.ident.to_string();
+ let data_enum = match input.data {
+ syn::Data::Enum(data_enum) => data_enum,
+ _ => panic!("ToCljs can only be derived for enums"),
+ };
+
+ let raw_variants = data_enum
+ .variants
+ .to_owned()
+ .into_iter()
+ .collect::>();
+
+ let variants = parse_variants(&raw_variants).expect("Failed to parse variants");
+ let js_code = generate_js_for_enum(&enum_id, &mut variants.into_iter().collect::>());
+
+ if let Err(e) = write_enum_to_temp_file(&js_code) {
+ eprintln!("Error writing enum {} to file: {}", enum_id, e);
+ }
+
+ TokenStream::new() // we don't need to return any generated code
+}
+
+fn parse_variants(variants: &[syn::Variant]) -> Result> {
+ let mut res = HashMap::new();
+ for variant in variants {
+ let value_expr = variant
+ .discriminant
+ .clone()
+ .ok_or(format!(
+ "No discriminant found for variant {}",
+ variant.ident
+ ))?
+ .1;
+ let discriminant = parse_discriminant_value(value_expr)?;
+ res.insert(variant.ident.to_string(), discriminant);
+ }
+
+ Ok(res)
+}
+
+fn parse_discriminant_value(value: syn::Expr) -> Result {
+ match value {
+ syn::Expr::Lit(syn::ExprLit {
+ lit: syn::Lit::Int(int),
+ ..
+ }) => Ok(int.base10_digits().parse().unwrap()),
+ _ => Err(format!("Invalid discriminant value")),
+ }
+}
+
+fn generate_js_for_enum(id: &str, variants: &mut [(String, u32)]) -> String {
+ variants.sort_by_key(|(_, discriminant)| *discriminant);
+
+ let output_variants: String = variants
+ .into_iter()
+ .map(|(variant, discriminant)| {
+ format!(r#" "{}": {},"#, variant.to_kebab_case(), discriminant)
+ })
+ .collect::>()
+ .join("\n");
+
+ format!(
+ "export const {} = {{\n{}\n}};",
+ id.to_pascal_case(),
+ output_variants
+ )
+}
+
+static INIT: sync::Once = sync::Once::new();
+
+fn write_enum_to_temp_file(js_code: &str) -> std::io::Result<()> {
+ let out_dir = std::env::var("OUT_DIR").expect("OUT_DIR environment variable is not set");
+ let out_path = Path::new(&out_dir).join("render_wasm_shared.js");
+
+ // clean the file the first time this function is called
+ INIT.call_once(|| {
+ fs::OpenOptions::new()
+ .create(true)
+ .write(true)
+ .truncate(true)
+ .open(&out_path)
+ .expect("Failed to open output file");
+ });
+
+ let mut file = fs::OpenOptions::new().append(true).open(&out_path)?;
+ writeln!(file, "{}\n", js_code)?;
+
+ Ok(())
+}
diff --git a/render-wasm/src/main.rs b/render-wasm/src/main.rs
index 756d23336e..06ad75eb3d 100644
--- a/render-wasm/src/main.rs
+++ b/render-wasm/src/main.rs
@@ -17,7 +17,7 @@ mod wasm;
use indexmap::IndexSet;
use math::{Bounds, Matrix};
use mem::SerializableResult;
-use shapes::{BoolType, StructureEntry, StructureEntryType, TransformEntry, Type};
+use shapes::{StructureEntry, StructureEntryType, TransformEntry};
use skia_safe as skia;
use state::State;
use utils::uuid_from_u32_quartet;
@@ -237,20 +237,6 @@ pub extern "C" fn set_shape_masked_group(masked: bool) {
});
}
-#[no_mangle]
-pub extern "C" fn set_shape_bool_type(raw_bool_type: u8) {
- with_current_shape_mut!(state, |shape: &mut Shape| {
- shape.set_bool_type(BoolType::from(raw_bool_type));
- });
-}
-
-#[no_mangle]
-pub extern "C" fn set_shape_type(shape_type: u8) {
- with_current_shape_mut!(state, |shape: &mut Shape| {
- shape.set_shape_type(Type::from(shape_type));
- });
-}
-
#[no_mangle]
pub extern "C" fn set_shape_selrect(left: f32, top: f32, right: f32, bottom: f32) {
with_state_mut!(state, {
@@ -314,34 +300,6 @@ pub extern "C" fn set_children() {
}
}
-#[no_mangle]
-pub extern "C" fn store_image(
- a1: u32,
- b1: u32,
- c1: u32,
- d1: u32,
- a2: u32,
- b2: u32,
- c2: u32,
- d2: u32,
-) {
- with_state_mut!(state, {
- let image_id = uuid_from_u32_quartet(a2, b2, c2, d2);
- let image_bytes = mem::bytes();
-
- if let Err(msg) = state.render_state_mut().add_image(image_id, &image_bytes) {
- eprintln!("{}", msg);
- }
-
- mem::free_bytes();
- });
-
- with_state_mut!(state, {
- let shape_id = uuid_from_u32_quartet(a1, b1, c1, d1);
- state.update_tile_for_shape(shape_id);
- });
-}
-
#[no_mangle]
pub extern "C" fn is_image_cached(a: u32, b: u32, c: u32, d: u32) -> bool {
with_state_mut!(state, {
@@ -364,13 +322,6 @@ pub extern "C" fn set_shape_svg_raw_content() {
});
}
-#[no_mangle]
-pub extern "C" fn set_shape_blend_mode(mode: i32) {
- with_current_shape_mut!(state, |shape: &mut Shape| {
- shape.set_blend_mode(render::BlendMode::from(mode));
- });
-}
-
#[no_mangle]
pub extern "C" fn set_shape_opacity(opacity: f32) {
with_current_shape_mut!(state, |shape: &mut Shape| {
@@ -385,13 +336,6 @@ pub extern "C" fn set_shape_hidden(hidden: bool) {
});
}
-#[no_mangle]
-pub extern "C" fn set_shape_blur(blur_type: u8, hidden: bool, value: f32) {
- with_current_shape_mut!(state, |shape: &mut Shape| {
- shape.set_blur(blur_type, hidden, value);
- });
-}
-
#[no_mangle]
pub extern "C" fn set_shape_corners(r1: f32, r2: f32, r3: f32, r4: f32) {
with_current_shape_mut!(state, |shape: &mut Shape| {
@@ -399,21 +343,6 @@ pub extern "C" fn set_shape_corners(r1: f32, r2: f32, r3: f32, r4: f32) {
});
}
-#[no_mangle]
-pub extern "C" fn propagate_modifiers(pixel_precision: bool) -> *mut u8 {
- let bytes = mem::bytes();
-
- let entries: Vec<_> = bytes
- .chunks(size_of::<::BytesType>())
- .map(|data| TransformEntry::from_bytes(data.try_into().unwrap()))
- .collect();
-
- with_state!(state, {
- let result = shapes::propagate_modifiers(state, &entries, pixel_precision);
- mem::write_vec(result)
- })
-}
-
#[no_mangle]
pub extern "C" fn get_selection_rect() -> *mut u8 {
let bytes = mem::bytes();
@@ -510,6 +439,21 @@ pub extern "C" fn clean_modifiers() {
});
}
+#[no_mangle]
+pub extern "C" fn propagate_modifiers(pixel_precision: bool) -> *mut u8 {
+ let bytes = mem::bytes();
+
+ let entries: Vec<_> = bytes
+ .chunks(size_of::<::BytesType>())
+ .map(|data| TransformEntry::from_bytes(data.try_into().unwrap()))
+ .collect();
+
+ with_state!(state, {
+ let result = shapes::propagate_modifiers(state, &entries, pixel_precision);
+ mem::write_vec(result)
+ })
+}
+
#[no_mangle]
pub extern "C" fn set_modifiers() {
let bytes = mem::bytes();
@@ -527,31 +471,6 @@ pub extern "C" fn set_modifiers() {
});
}
-#[no_mangle]
-pub extern "C" fn add_shape_shadow(
- raw_color: u32,
- blur: f32,
- spread: f32,
- x: f32,
- y: f32,
- raw_style: u8,
- hidden: bool,
-) {
- with_current_shape_mut!(state, |shape: &mut Shape| {
- let color = skia::Color::new(raw_color);
- let style = shapes::ShadowStyle::from(raw_style);
- let shadow = shapes::Shadow::new(color, blur, spread, (x, y), style, hidden);
- shape.add_shadow(shadow);
- });
-}
-
-#[no_mangle]
-pub extern "C" fn clear_shape_shadows() {
- with_current_shape_mut!(state, |shape: &mut Shape| {
- shape.clear_shadows();
- });
-}
-
#[no_mangle]
pub extern "C" fn update_shape_tiles() {
with_state_mut!(state, {
diff --git a/render-wasm/src/math.rs b/render-wasm/src/math.rs
index 41460a7bae..58b395fd6a 100644
--- a/render-wasm/src/math.rs
+++ b/render-wasm/src/math.rs
@@ -24,6 +24,7 @@ pub fn is_close_to(current: f32, value: f32) -> bool {
(current - value).abs() <= THRESHOLD
}
+#[allow(dead_code)]
pub fn are_close_points(a: impl Into<(f32, f32)>, b: impl Into<(f32, f32)>) -> bool {
let (a_x, a_y) = a.into();
let (b_x, b_y) = b.into();
diff --git a/render-wasm/src/math/bools.rs b/render-wasm/src/math/bools.rs
index 5e43764826..4ada56d8a5 100644
--- a/render-wasm/src/math/bools.rs
+++ b/render-wasm/src/math/bools.rs
@@ -300,7 +300,7 @@ impl Ord for BezierStart {
type BM<'a> = BTreeMap>;
-fn init_bm(beziers: &[(BezierSource, Bezier)]) -> BM {
+fn init_bm(beziers: &[(BezierSource, Bezier)]) -> BM<'_> {
let mut bm = BM::default();
for entry @ (source, bezier) in beziers.iter() {
let value = *entry;
diff --git a/render-wasm/src/render.rs b/render-wasm/src/render.rs
index 8b37332e4c..0ca7066b0b 100644
--- a/render-wasm/src/render.rs
+++ b/render-wasm/src/render.rs
@@ -1,4 +1,3 @@
-mod blend;
mod debug;
mod fills;
pub mod filters;
@@ -22,7 +21,9 @@ use options::RenderOptions;
pub use surfaces::{SurfaceId, Surfaces};
use crate::performance;
-use crate::shapes::{Blur, BlurType, Corners, Fill, Shape, StructureEntry, Type};
+use crate::shapes::{
+ Blur, BlurType, Corners, Fill, Shadow, Shape, SolidColor, Stroke, StructureEntry, Type,
+};
use crate::state::ShapesPool;
use crate::tiles::{self, PendingTiles, TileRect};
use crate::uuid::Uuid;
@@ -31,8 +32,8 @@ use crate::wapi;
use crate::math;
use crate::math::bools;
+use indexmap::IndexSet;
-pub use blend::BlendMode;
pub use fonts::*;
pub use images::*;
@@ -58,16 +59,39 @@ impl NodeRenderState {
self.id.is_nil()
}
+ /// Calculates the clip bounds for child elements of a given shape.
+ ///
+ /// This function determines the clipping region that should be applied to child elements
+ /// when rendering. It takes into account the element's selection rectangle, transform,
+ /// and any additional modifiers.
+ ///
+ /// # Parameters
+ ///
+ /// * `element` - The shape element for which to calculate clip bounds
+ /// * `modifiers` - Optional transformation matrix to apply to the bounds
+ /// * `offset` - Optional offset (x, y) to adjust the bounds position. When provided,
+ /// the bounds are translated by the negative of this offset, effectively moving
+ /// the clipping region to compensate for coordinate system transformations.
+ /// This is useful for nested coordinate systems or when elements are grouped
+ /// and need relative positioning adjustments.
pub fn get_children_clip_bounds(
&self,
element: &Shape,
modifiers: Option<&Matrix>,
+ offset: Option<(f32, f32)>,
) -> Option<(Rect, Option, Matrix)> {
if self.id.is_nil() || !element.clip() {
return self.clip_bounds;
}
- let bounds = element.selrect();
+ let mut bounds = element.selrect();
+ if let Some(offset) = offset {
+ let x = bounds.x() - offset.0;
+ let y = bounds.y() - offset.1;
+ let width = bounds.width();
+ let height = bounds.height();
+ bounds.set_xywh(x, y, width, height);
+ }
let mut transform = element.transform;
transform.post_translate(bounds.center());
transform.pre_translate(-bounds.center());
@@ -84,6 +108,51 @@ impl NodeRenderState {
Some((bounds, corners, transform))
}
+
+ /// Calculates the clip bounds for shadow rendering of a given shape.
+ ///
+ /// This function determines the clipping region that should be applied when rendering a
+ /// shadow for a shape element. It uses the shadow bounds but calculates the
+ /// transformation center based on the original shape, not the shadow bounds.
+ ///
+ /// # Parameters
+ ///
+ /// * `element` - The shape element for which to calculate shadow clip bounds
+ /// * `modifiers` - Optional transformation matrix to apply to the bounds
+ /// * `shadow` - The shadow configuration containing blur, offset, and other properties
+ pub fn get_nested_shadow_clip_bounds(
+ &self,
+ element: &Shape,
+ modifiers: Option<&Matrix>,
+ shadow: &Shadow,
+ ) -> Option<(Rect, Option, Matrix)> {
+ if self.id.is_nil() {
+ return self.clip_bounds;
+ }
+
+ // Assert that the shape is either a Frame or Group
+ assert!(
+ matches!(element.shape_type, Type::Frame(_) | Type::Group(_)),
+ "Shape must be a Frame or Group for nested shadow clip bounds calculation"
+ );
+
+ let bounds = element.get_selrect_shadow_bounds(shadow);
+ let mut transform = element.transform;
+ transform.post_translate(element.center());
+ transform.pre_translate(-element.center());
+
+ if let Some(modifier) = modifiers {
+ transform.post_concat(modifier);
+ }
+
+ let corners = match &element.shape_type {
+ Type::Rect(data) => data.corners,
+ Type::Frame(data) => data.corners,
+ _ => None,
+ };
+
+ Some((bounds, corners, transform))
+ }
}
/// Represents the "focus mode" state used during rendering.
@@ -180,7 +249,7 @@ pub(crate) struct RenderState {
// can affect its child elements if they don't specify one themselves. If the planned
// migration to remove group-level fills is completed, this code should be removed.
pub nested_fills: Vec>,
- pub nested_blurs: Vec>,
+ pub nested_blurs: Vec >, // FIXME: why is this an option?
pub show_grid: Option,
pub focus_mode: FocusMode,
}
@@ -370,7 +439,7 @@ impl RenderState {
let paint = skia::Paint::default();
self.surfaces
- .draw_into(SurfaceId::DropShadows, SurfaceId::Current, Some(&paint));
+ .draw_into(SurfaceId::TextDropShadows, SurfaceId::Current, Some(&paint));
self.surfaces
.draw_into(SurfaceId::Fills, SurfaceId::Current, Some(&paint));
@@ -395,8 +464,8 @@ impl RenderState {
let surface_ids = SurfaceId::Strokes as u32
| SurfaceId::Fills as u32
- | SurfaceId::DropShadows as u32
- | SurfaceId::InnerShadows as u32;
+ | SurfaceId::InnerShadows as u32
+ | SurfaceId::TextDropShadows as u32;
self.surfaces.apply_mut(surface_ids, |s| {
s.canvas().clear(skia::Color::TRANSPARENT);
@@ -411,6 +480,7 @@ impl RenderState {
self.focus_mode.set_shapes(shapes);
}
+ #[allow(clippy::too_many_arguments)]
pub fn render_shape(
&mut self,
shapes: &ShapesPool,
@@ -419,6 +489,13 @@ impl RenderState {
shape: &Shape,
scale_content: Option<&f32>,
clip_bounds: Option<(Rect, Option, Matrix)>,
+ fills_surface_id: SurfaceId,
+ strokes_surface_id: SurfaceId,
+ innershadows_surface_id: SurfaceId,
+ text_drop_shadows_surface_id: SurfaceId,
+ apply_to_current_surface: bool,
+ offset: Option<(f32, f32)>,
+ parent_shadows: Option>,
) {
let shape = if let Some(scale_content) = scale_content {
&shape.scale_content(*scale_content)
@@ -426,10 +503,10 @@ impl RenderState {
shape
};
- let surface_ids = SurfaceId::Strokes as u32
- | SurfaceId::Fills as u32
- | SurfaceId::DropShadows as u32
- | SurfaceId::InnerShadows as u32;
+ let surface_ids = fills_surface_id as u32
+ | strokes_surface_id as u32
+ | innershadows_surface_id as u32
+ | text_drop_shadows_surface_id as u32;
self.surfaces.apply_mut(surface_ids, |s| {
s.canvas().save();
});
@@ -463,7 +540,7 @@ impl RenderState {
paint.set_color(skia::Color::from_argb(255, 255, 0, 0));
paint.set_stroke_width(4.);
self.surfaces
- .canvas(SurfaceId::Fills)
+ .canvas(fills_surface_id)
.draw_rect(bounds, &paint);
}
@@ -482,19 +559,20 @@ impl RenderState {
let mut nested_blur_value = 0.;
for nested_blur in self.nested_blurs.iter().flatten() {
- if !nested_blur.hidden && nested_blur.blur_type == BlurType::Layer {
+ if !nested_blur.hidden && nested_blur.blur_type == BlurType::LayerBlur {
nested_blur_value += nested_blur.value.powf(2.);
}
}
- if !shape.blur.hidden && shape.blur.blur_type == BlurType::Layer {
- nested_blur_value += shape.blur.value.powf(2.);
+ if let Some(blur) = shape.blur {
+ if !blur.hidden {
+ nested_blur_value += blur.value.powf(2.);
+ }
}
if nested_blur_value > 0. {
- shape
- .to_mut()
- .set_blur(BlurType::Layer as u8, false, nested_blur_value.sqrt());
+ let blur = Blur::new(BlurType::LayerBlur, false, nested_blur_value.sqrt());
+ shape.to_mut().set_blur(Some(blur));
}
let center = shape.center();
@@ -502,22 +580,27 @@ impl RenderState {
matrix.post_translate(center);
matrix.pre_translate(-center);
+ // Apply the additional transformation matrix if exists
+ if let Some(offset) = offset {
+ matrix.pre_translate(offset);
+ }
+
match &shape.shape_type {
Type::SVGRaw(sr) => {
if let Some(shape_modifiers) = modifiers.get(&shape.id) {
self.surfaces
- .canvas(SurfaceId::Fills)
+ .canvas(fills_surface_id)
.concat(shape_modifiers);
}
- self.surfaces.canvas(SurfaceId::Fills).concat(&matrix);
+ self.surfaces.canvas(fills_surface_id).concat(&matrix);
if let Some(svg) = shape.svg.as_ref() {
- svg.render(self.surfaces.canvas(SurfaceId::Fills))
+ svg.render(self.surfaces.canvas(fills_surface_id))
} else {
let font_manager = skia::FontMgr::from(self.fonts().font_provider().clone());
let dom_result = skia::svg::Dom::from_str(&sr.content, font_manager);
match dom_result {
Ok(dom) => {
- dom.render(self.surfaces.canvas(SurfaceId::Fills));
+ dom.render(self.surfaces.canvas(fills_surface_id));
shape.to_mut().set_svg(dom);
}
Err(e) => {
@@ -528,70 +611,153 @@ impl RenderState {
}
Type::Text(text_content) => {
- let surface_ids = SurfaceId::Strokes as u32
- | SurfaceId::Fills as u32
- | SurfaceId::DropShadows as u32
- | SurfaceId::InnerShadows as u32;
self.surfaces.apply_mut(surface_ids, |s| {
s.canvas().concat(&matrix);
});
let text_content = text_content.new_bounds(shape.selrect());
- let mut paragraphs = text_content.to_paragraphs(
- shape.image_filter(1.).as_ref(),
- shape.mask_filter(1.).as_ref(),
- );
-
- if !shape.has_visible_strokes() {
- shadows::render_text_drop_shadows(self, &shape, &mut paragraphs, antialias);
- }
-
+ let drop_shadows = shape.drop_shadow_paints();
+ let inner_shadows = shape.inner_shadow_paints();
+ let blur_filter = shape.image_filter(1.);
let count_inner_strokes = shape.count_visible_inner_strokes();
- text::render(self, &shape, &mut paragraphs, None, None);
+ let mut paragraph_builders = text_content.paragraph_builder_group_from_text(None);
+ let mut paragraphs_with_shadows =
+ text_content.paragraph_builder_group_from_text(Some(true));
+ let mut stroke_paragraphs_list = shape
+ .visible_strokes()
+ .map(|stroke| {
+ text::stroke_paragraph_builder_group_from_text(
+ &text_content,
+ stroke,
+ &shape.selrect(),
+ count_inner_strokes,
+ None,
+ )
+ })
+ .collect::>();
- for stroke in shape.visible_strokes().rev() {
- let mut stroke_paragraphs = text_content.to_stroke_paragraphs(
- stroke,
- &shape.selrect(),
- shape.image_filter(1.).as_ref(),
- shape.mask_filter(1.).as_ref(),
- count_inner_strokes,
+ let mut stroke_paragraphs_with_shadows_list = shape
+ .visible_strokes()
+ .map(|stroke| {
+ text::stroke_paragraph_builder_group_from_text(
+ &text_content,
+ stroke,
+ &shape.selrect(),
+ count_inner_strokes,
+ Some(true),
+ )
+ })
+ .collect::>();
+
+ if let Some(parent_shadows) = parent_shadows {
+ if !shape.has_visible_strokes() {
+ for shadow in &parent_shadows {
+ text::render(
+ Some(self),
+ None,
+ &shape,
+ &mut paragraphs_with_shadows,
+ text_drop_shadows_surface_id.into(),
+ Some(shadow),
+ blur_filter.as_ref(),
+ );
+ }
+ } else {
+ shadows::render_text_shadows(
+ self,
+ &shape,
+ &mut paragraphs_with_shadows,
+ &mut stroke_paragraphs_with_shadows_list,
+ text_drop_shadows_surface_id.into(),
+ &parent_shadows,
+ &blur_filter,
+ );
+ }
+ } else {
+ // 1. Text drop shadows
+ if !shape.has_visible_strokes() {
+ for shadow in &drop_shadows {
+ text::render(
+ Some(self),
+ None,
+ &shape,
+ &mut paragraphs_with_shadows,
+ text_drop_shadows_surface_id.into(),
+ Some(shadow),
+ blur_filter.as_ref(),
+ );
+ }
+ }
+
+ // 2. Text fills
+ text::render(
+ Some(self),
+ None,
+ &shape,
+ &mut paragraph_builders,
+ Some(fills_surface_id),
+ None,
+ blur_filter.as_ref(),
);
- shadows::render_text_drop_shadows(
+
+ // 3. Stroke drop shadows
+ shadows::render_text_shadows(
self,
&shape,
- &mut stroke_paragraphs,
- antialias,
+ &mut paragraphs_with_shadows,
+ &mut stroke_paragraphs_with_shadows_list,
+ text_drop_shadows_surface_id.into(),
+ &drop_shadows,
+ &blur_filter,
);
- strokes::render(
+
+ // 4. Stroke fills
+ for stroke_paragraphs in stroke_paragraphs_list.iter_mut() {
+ text::render(
+ Some(self),
+ None,
+ &shape,
+ stroke_paragraphs,
+ Some(strokes_surface_id),
+ None,
+ blur_filter.as_ref(),
+ );
+ }
+
+ // 5. Stroke inner shadows
+ shadows::render_text_shadows(
self,
&shape,
- stroke,
- None,
- None,
- Some(&mut stroke_paragraphs),
- antialias,
- None,
- );
- shadows::render_text_inner_shadows(
- self,
- &shape,
- &mut stroke_paragraphs,
- antialias,
+ &mut paragraphs_with_shadows,
+ &mut stroke_paragraphs_with_shadows_list,
+ Some(innershadows_surface_id),
+ &inner_shadows,
+ &blur_filter,
);
+
+ // 6. Fill Inner shadows
+ if !shape.has_visible_strokes() {
+ for shadow in &inner_shadows {
+ text::render(
+ Some(self),
+ None,
+ &shape,
+ &mut paragraphs_with_shadows,
+ Some(innershadows_surface_id),
+ Some(shadow),
+ blur_filter.as_ref(),
+ );
+ }
+ }
}
-
- shadows::render_text_inner_shadows(self, &shape, &mut paragraphs, antialias);
}
_ => {
- let surface_ids = SurfaceId::Strokes as u32
- | SurfaceId::Fills as u32
- | SurfaceId::DropShadows as u32
- | SurfaceId::InnerShadows as u32;
self.surfaces.apply_mut(surface_ids, |s| {
s.canvas().concat(&matrix);
});
+ // For boolean shapes, there's no need to calculate children because
+ // when painting the shape, the necessary path is already calculated
let shape = if let Type::Bool(_) = &shape.shape_type {
// If any child transform doesn't match the parent transform means
// that the children is transformed and we need to recalculate the
@@ -617,34 +783,40 @@ impl RenderState {
if let Some(fills_to_render) = self.nested_fills.last() {
let fills_to_render = fills_to_render.clone();
for fill in fills_to_render.iter() {
- fills::render(self, shape, fill, antialias);
+ fills::render(self, shape, fill, antialias, fills_surface_id);
}
}
} else {
for fill in shape.fills().rev() {
- fills::render(self, shape, fill, antialias);
+ fills::render(self, shape, fill, antialias, fills_surface_id);
}
}
for stroke in shape.visible_strokes().rev() {
- shadows::render_stroke_drop_shadows(self, shape, stroke, antialias);
- //In clipped content strokes are drawn over the contained elements in a subsequent step
- if !shape.clip() {
- strokes::render(self, shape, stroke, None, None, None, antialias, None);
- }
- shadows::render_stroke_inner_shadows(self, shape, stroke, antialias);
+ strokes::render(
+ self,
+ shape,
+ stroke,
+ Some(strokes_surface_id),
+ None,
+ antialias,
+ );
+ shadows::render_stroke_inner_shadows(
+ self,
+ shape,
+ stroke,
+ antialias,
+ innershadows_surface_id,
+ );
}
- shadows::render_fill_inner_shadows(self, shape, antialias);
- shadows::render_fill_drop_shadows(self, shape, antialias);
+ shadows::render_fill_inner_shadows(self, shape, antialias, innershadows_surface_id);
// bools::debug_render_bool_paths(self, shape, shapes, modifiers, structure);
}
};
- self.apply_drawing_to_render_canvas(Some(&shape));
- let surface_ids = SurfaceId::Strokes as u32
- | SurfaceId::Fills as u32
- | SurfaceId::DropShadows as u32
- | SurfaceId::InnerShadows as u32;
+ if apply_to_current_surface {
+ self.apply_drawing_to_render_canvas(Some(&shape));
+ }
self.surfaces.apply_mut(surface_ids, |s| {
s.canvas().restore();
});
@@ -725,8 +897,8 @@ impl RenderState {
self.reset_canvas();
let surface_ids = SurfaceId::Strokes as u32
| SurfaceId::Fills as u32
- | SurfaceId::DropShadows as u32
- | SurfaceId::InnerShadows as u32;
+ | SurfaceId::InnerShadows as u32
+ | SurfaceId::TextDropShadows as u32;
self.surfaces.apply_mut(surface_ids, |s| {
s.canvas().scale((scale, scale));
});
@@ -809,13 +981,6 @@ impl RenderState {
}
}
- match element.shape_type {
- Type::Frame(_) | Type::Group(_) => {
- self.nested_blurs.push(Some(element.blur));
- }
- _ => {}
- }
-
let mut paint = skia::Paint::default();
paint.set_blend_mode(element.blend_mode().into());
paint.set_alpha_f(element.opacity());
@@ -911,6 +1076,13 @@ impl RenderState {
&element_strokes,
scale_content,
None,
+ SurfaceId::Fills,
+ SurfaceId::Strokes,
+ SurfaceId::InnerShadows,
+ SurfaceId::TextDropShadows,
+ true,
+ None,
+ None,
);
}
@@ -957,6 +1129,85 @@ impl RenderState {
self.get_aligned_tile_bounds(self.current_tile.unwrap())
}
+ /// Renders a drop shadow effect for the given shape.
+ ///
+ /// Creates a black shadow by converting the original shadow color to black,
+ /// scaling the blur radius, and rendering the shape with the shadow offset applied.
+ #[allow(clippy::too_many_arguments)]
+ fn render_drop_black_shadow(
+ &mut self,
+ shapes: &ShapesPool,
+ modifiers: &HashMap,
+ structure: &HashMap>,
+ shape: &Shape,
+ shadow: &Shadow,
+ scale_content: Option<&f32>,
+ clip_bounds: Option<(Rect, Option, Matrix)>,
+ scale: f32,
+ translation: (f32, f32),
+ ) {
+ let mut transformed_shadow: Cow = Cow::Borrowed(shadow);
+ transformed_shadow.to_mut().offset = (0., 0.);
+ transformed_shadow.to_mut().color = skia::Color::BLACK;
+ transformed_shadow.to_mut().blur = transformed_shadow.blur * scale;
+
+ let mut plain_shape = Cow::Borrowed(shape);
+
+ // The opacity of fills and strokes shouldn't affect the shadow,
+ // so we paint everything black with the same opacity
+ plain_shape.to_mut().clear_fills();
+ if shape.has_fills() {
+ plain_shape
+ .to_mut()
+ .add_fill(Fill::Solid(SolidColor(skia::Color::BLACK)));
+ }
+
+ plain_shape.to_mut().clear_strokes();
+ for stroke in shape.strokes.iter() {
+ plain_shape.to_mut().add_stroke(Stroke {
+ fill: Fill::Solid(SolidColor(skia::Color::BLACK)),
+ width: stroke.width,
+ style: stroke.style,
+ cap_end: stroke.cap_end,
+ cap_start: stroke.cap_start,
+ kind: stroke.kind,
+ });
+ }
+
+ let mut shadow_paint = skia::Paint::default();
+ shadow_paint.set_image_filter(transformed_shadow.get_drop_shadow_filter());
+ shadow_paint.set_blend_mode(skia::BlendMode::SrcOver);
+
+ let layer_rec = skia::canvas::SaveLayerRec::default().paint(&shadow_paint);
+ self.surfaces
+ .canvas(SurfaceId::DropShadows)
+ .save_layer(&layer_rec);
+ self.surfaces
+ .canvas(SurfaceId::DropShadows)
+ .scale((scale, scale));
+ self.surfaces
+ .canvas(SurfaceId::DropShadows)
+ .translate(translation);
+
+ self.render_shape(
+ shapes,
+ modifiers,
+ structure,
+ &plain_shape,
+ scale_content,
+ clip_bounds,
+ SurfaceId::DropShadows,
+ SurfaceId::DropShadows,
+ SurfaceId::DropShadows,
+ SurfaceId::DropShadows,
+ false,
+ Some((shadow.offset.0, shadow.offset.1)),
+ None,
+ );
+
+ self.surfaces.canvas(SurfaceId::DropShadows).restore();
+ }
+
pub fn render_shape_tree_partial_uncached(
&mut self,
tree: &ShapesPool,
@@ -967,6 +1218,7 @@ impl RenderState {
) -> Result<(bool, bool), String> {
let mut iteration = 0;
let mut is_empty = true;
+
while let Some(node_render_state) = self.pending_nodes.pop() {
let NodeRenderState {
id: node_id,
@@ -1033,7 +1285,145 @@ impl RenderState {
}
self.render_shape_enter(element, mask);
+
if !node_render_state.is_root() && self.focus_mode.is_active() {
+ let scale: f32 = self.get_scale();
+ let translation = self
+ .surfaces
+ .get_render_context_translation(self.render_area, scale);
+
+ // For text shapes, render drop shadow using text rendering logic
+ if !matches!(element.shape_type, Type::Text(_)) {
+ // Shadow rendering technique: Two-pass approach for proper opacity handling
+ //
+ // The shadow rendering uses a two-pass technique to ensure that overlapping
+ // shadow areas maintain correct opacity without unwanted darkening:
+ //
+ // 1. First pass: Render shadow shape in pure black (alpha channel preserved)
+ // - This creates the shadow silhouette with proper alpha gradients
+ // - The black color acts as a mask for the final shadow color
+ //
+ // 2. Second pass: Apply actual shadow color using SrcIn blend mode
+ // - SrcIn preserves the alpha channel from the black shadow
+ // - Only the color channels are replaced, maintaining transparency
+ // - This prevents overlapping shadows from accumulating opacity
+ //
+ // This approach is essential for complex shapes with transparency where
+ // multiple shadow areas might overlap, ensuring visual consistency.
+ for shadow in element.drop_shadows_visible() {
+ let paint = skia::Paint::default();
+ let layer_rec = skia::canvas::SaveLayerRec::default().paint(&paint);
+
+ self.surfaces
+ .canvas(SurfaceId::DropShadows)
+ .save_layer(&layer_rec);
+
+ // First pass: Render shadow in black to establish alpha mask
+ self.render_drop_black_shadow(
+ tree,
+ modifiers,
+ structure,
+ element,
+ shadow,
+ scale_content.get(&element.id),
+ clip_bounds,
+ scale,
+ translation,
+ );
+
+ if !matches!(element.shape_type, Type::Bool(_)) {
+ // Nested shapes shadowing - apply black shadow to child shapes too
+ for shadow_shape_id in element.children.iter() {
+ let shadow_shape = tree.get(shadow_shape_id).unwrap();
+ if shadow_shape.hidden {
+ continue;
+ }
+ let clip_bounds = node_render_state.get_nested_shadow_clip_bounds(
+ element,
+ modifiers.get(&element.id),
+ shadow,
+ );
+
+ if !matches!(shadow_shape.shape_type, Type::Text(_)) {
+ self.render_drop_black_shadow(
+ tree,
+ modifiers,
+ structure,
+ shadow_shape,
+ shadow,
+ scale_content.get(&element.id),
+ clip_bounds,
+ scale,
+ translation,
+ );
+ } else {
+ let paint = skia::Paint::default();
+ let layer_rec =
+ skia::canvas::SaveLayerRec::default().paint(&paint);
+
+ self.surfaces
+ .canvas(SurfaceId::DropShadows)
+ .save_layer(&layer_rec);
+ self.surfaces
+ .canvas(SurfaceId::DropShadows)
+ .scale((scale, scale));
+ self.surfaces
+ .canvas(SurfaceId::DropShadows)
+ .translate(translation);
+
+ let mut transformed_shadow: Cow = Cow::Borrowed(shadow);
+ // transformed_shadow.to_mut().offset = (0., 0.);
+ transformed_shadow.to_mut().color = skia::Color::BLACK;
+ transformed_shadow.to_mut().blur =
+ transformed_shadow.blur * scale;
+
+ let mut new_shadow_paint = skia::Paint::default();
+ new_shadow_paint.set_image_filter(
+ transformed_shadow.get_drop_shadow_filter(),
+ );
+ new_shadow_paint.set_blend_mode(skia::BlendMode::SrcOver);
+
+ self.render_shape(
+ tree,
+ modifiers,
+ structure,
+ shadow_shape,
+ scale_content.get(&element.id),
+ clip_bounds,
+ SurfaceId::DropShadows,
+ SurfaceId::DropShadows,
+ SurfaceId::DropShadows,
+ SurfaceId::DropShadows,
+ true,
+ None,
+ Some(vec![new_shadow_paint.clone()]),
+ );
+ self.surfaces.canvas(SurfaceId::DropShadows).restore();
+ }
+ }
+ }
+
+ // Second pass: Apply actual shadow color using SrcIn blend mode
+ // This preserves the alpha channel from the black shadow while
+ // replacing only the color channels, preventing opacity accumulation
+ let mut paint = skia::Paint::default();
+ paint.set_color(shadow.color);
+ paint.set_blend_mode(skia::BlendMode::SrcIn);
+ self.surfaces
+ .canvas(SurfaceId::DropShadows)
+ .draw_paint(&paint);
+
+ self.surfaces.canvas(SurfaceId::DropShadows).restore();
+ }
+ }
+
+ self.surfaces
+ .draw_into(SurfaceId::DropShadows, SurfaceId::Current, None);
+
+ self.surfaces
+ .canvas(SurfaceId::DropShadows)
+ .clear(skia::Color::TRANSPARENT);
+
self.render_shape(
tree,
modifiers,
@@ -1041,11 +1431,31 @@ impl RenderState {
element,
scale_content.get(&element.id),
clip_bounds,
+ SurfaceId::Fills,
+ SurfaceId::Strokes,
+ SurfaceId::InnerShadows,
+ SurfaceId::TextDropShadows,
+ true,
+ None,
+ None,
);
+
+ self.surfaces
+ .canvas(SurfaceId::DropShadows)
+ .clear(skia::Color::TRANSPARENT);
} else if visited_children {
self.apply_drawing_to_render_canvas(Some(element));
}
+ match element.shape_type {
+ Type::Frame(_) | Type::Group(_) => {
+ if let Some(blur) = element.blur {
+ self.nested_blurs.push(Some(blur));
+ }
+ }
+ _ => {}
+ }
+
// Set the node as visited_children before processing children
self.pending_nodes.push(NodeRenderState {
id: node_id,
@@ -1056,8 +1466,11 @@ impl RenderState {
});
if element.is_recursive() {
- let children_clip_bounds =
- node_render_state.get_children_clip_bounds(element, modifiers.get(&element.id));
+ let children_clip_bounds = node_render_state.get_children_clip_bounds(
+ element,
+ modifiers.get(&element.id),
+ None,
+ );
let mut children_ids =
element.modified_children_ids(structure.get(&element.id), false);
@@ -1304,28 +1717,47 @@ impl RenderState {
performance::end_measure!("rebuild_tiles");
}
+ /// Invalidates extended rectangles and updates tiles for a set of shapes
+ ///
+ /// This function takes a set of shape IDs and for each one:
+ /// 1. Invalidates the extrect cache
+ /// 2. Updates the tiles to ensure proper rendering
+ ///
+ /// This is useful when you have a pre-computed set of shape IDs that need to be refreshed,
+ /// regardless of their relationship to other shapes (e.g., ancestors, descendants, or any other collection).
+ pub fn invalidate_and_update_tiles(
+ &mut self,
+ shape_ids: &IndexSet,
+ tree: &mut ShapesPool,
+ modifiers: &HashMap,
+ ) {
+ for shape_id in shape_ids {
+ if let Some(shape) = tree.get_mut(shape_id) {
+ shape.invalidate_extrect();
+ }
+ if let Some(shape) = tree.get(shape_id) {
+ if !shape.id.is_nil() {
+ self.update_tile_for(shape, tree, modifiers);
+ }
+ }
+ }
+ }
+
/// Processes all ancestors of a shape, invalidating their extended rectangles and updating their tiles
///
/// When a shape changes, all its ancestors need to have their extended rectangles recalculated
/// because they may contain the changed shape. This function:
- /// 1. Invalidates the extrect cache for each ancestor
- /// 2. Updates the tiles for each ancestor to ensure proper rendering
+ /// 1. Computes all ancestors of the shape
+ /// 2. Invalidates the extrect cache for each ancestor
+ /// 3. Updates the tiles for each ancestor to ensure proper rendering
pub fn process_shape_ancestors(
&mut self,
shape: &Shape,
tree: &mut ShapesPool,
modifiers: &HashMap,
) {
- for ancestor in shape.all_ancestors(tree, false) {
- if let Some(ancestor) = tree.get_mut(&ancestor) {
- ancestor.invalidate_extrect();
- }
- if let Some(ancestor) = tree.get(&ancestor) {
- if !ancestor.id.is_nil() {
- self.update_tile_for(ancestor, tree, modifiers);
- }
- }
- }
+ let ancestors = shape.all_ancestors(tree, false);
+ self.invalidate_and_update_tiles(&ancestors, tree, modifiers);
}
/// Rebuilds tiles for shapes with modifiers and processes their ancestors
@@ -1339,18 +1771,21 @@ impl RenderState {
tree: &mut ShapesPool,
modifiers: &HashMap,
) {
+ let mut ancestors = IndexSet::new();
for (uuid, matrix) in modifiers {
let mut shape = {
let Some(shape) = tree.get(uuid) else {
panic!("Invalid current shape")
};
- shape.clone()
+ let shape: Cow = Cow::Borrowed(shape);
+ shape
};
- shape.apply_transform(matrix);
- self.update_tile_for(&shape, tree, modifiers);
- self.process_shape_ancestors(&shape, tree, modifiers);
+ shape.to_mut().apply_transform(matrix);
+ ancestors.insert(*uuid);
+ ancestors.extend(shape.all_ancestors(tree, false));
}
+ self.invalidate_and_update_tiles(&ancestors, tree, modifiers);
}
pub fn get_scale(&self) -> f32 {
diff --git a/render-wasm/src/render/fills.rs b/render-wasm/src/render/fills.rs
index 2744b1be2b..fd7d240f2c 100644
--- a/render-wasm/src/render/fills.rs
+++ b/render-wasm/src/render/fills.rs
@@ -10,6 +10,7 @@ fn draw_image_fill(
image_fill: &ImageFill,
paint: &Paint,
antialias: bool,
+ surface_id: SurfaceId,
) {
let image = render_state.images.get(&image_fill.id());
if image.is_none() {
@@ -17,7 +18,7 @@ fn draw_image_fill(
}
let size = image.unwrap().dimensions();
- let canvas = render_state.surfaces.canvas(SurfaceId::Fills);
+ let canvas = render_state.surfaces.canvas(surface_id);
let container = &shape.selrect;
let path_transform = shape.to_path_transform();
@@ -90,7 +91,13 @@ fn draw_image_fill(
/**
* This SHOULD be the only public function in this module.
*/
-pub fn render(render_state: &mut RenderState, shape: &Shape, fill: &Fill, antialias: bool) {
+pub fn render(
+ render_state: &mut RenderState,
+ shape: &Shape,
+ fill: &Fill,
+ antialias: bool,
+ surface_id: SurfaceId,
+) {
let mut paint = fill.to_paint(&shape.selrect, antialias);
if let Some(image_filter) = shape.image_filter(1.) {
paint.set_image_filter(image_filter);
@@ -98,22 +105,29 @@ pub fn render(render_state: &mut RenderState, shape: &Shape, fill: &Fill, antial
match (fill, &shape.shape_type) {
(Fill::Image(image_fill), _) => {
- draw_image_fill(render_state, shape, image_fill, &paint, antialias);
+ draw_image_fill(
+ render_state,
+ shape,
+ image_fill,
+ &paint,
+ antialias,
+ surface_id,
+ );
}
(_, Type::Rect(_) | Type::Frame(_)) => {
render_state
.surfaces
- .draw_rect_to(SurfaceId::Fills, shape, &paint);
+ .draw_rect_to(surface_id, shape, &paint);
}
(_, Type::Circle) => {
render_state
.surfaces
- .draw_circle_to(SurfaceId::Fills, shape, &paint);
+ .draw_circle_to(surface_id, shape, &paint);
}
(_, Type::Path(_)) | (_, Type::Bool(_)) => {
render_state
.surfaces
- .draw_path_to(SurfaceId::Fills, shape, &paint);
+ .draw_path_to(surface_id, shape, &paint);
}
(_, Type::Group(_)) => {
// Groups can have fills but they propagate them to their children
diff --git a/render-wasm/src/render/shadows.rs b/render-wasm/src/render/shadows.rs
index d0f7e2af00..f5f4fbfccf 100644
--- a/render-wasm/src/render/shadows.rs
+++ b/render-wasm/src/render/shadows.rs
@@ -1,33 +1,20 @@
use super::{RenderState, SurfaceId};
use crate::render::strokes;
-use crate::render::text::{self};
-use crate::shapes::{Shadow, Shape, Stroke, Type};
-use skia_safe::textlayout::ParagraphBuilder;
-use skia_safe::{Paint, Path};
+use crate::shapes::{ParagraphBuilderGroup, Shadow, Shape, Stroke, Type};
+use skia_safe::{canvas::SaveLayerRec, Paint, Path};
+
+use crate::render::text;
// Fill Shadows
-pub fn render_fill_drop_shadows(render_state: &mut RenderState, shape: &Shape, antialias: bool) {
- if shape.has_fills() {
- for shadow in shape.drop_shadows().rev().filter(|s| !s.hidden()) {
- render_fill_drop_shadow(render_state, shape, shadow, antialias);
- }
- }
-}
-
-fn render_fill_drop_shadow(
+pub fn render_fill_inner_shadows(
render_state: &mut RenderState,
shape: &Shape,
- shadow: &Shadow,
antialias: bool,
+ surface_id: SurfaceId,
) {
- let paint = &shadow.get_drop_shadow_paint(antialias, shape.image_filter(1.).as_ref());
- render_shadow_paint(render_state, shape, paint, SurfaceId::DropShadows);
-}
-
-pub fn render_fill_inner_shadows(render_state: &mut RenderState, shape: &Shape, antialias: bool) {
if shape.has_fills() {
- for shadow in shape.inner_shadows().rev().filter(|s| !s.hidden()) {
- render_fill_inner_shadow(render_state, shape, shadow, antialias);
+ for shadow in shape.inner_shadows_visible() {
+ render_fill_inner_shadow(render_state, shape, shadow, antialias, surface_id);
}
}
}
@@ -37,32 +24,10 @@ fn render_fill_inner_shadow(
shape: &Shape,
shadow: &Shadow,
antialias: bool,
+ surface_id: SurfaceId,
) {
let paint = &shadow.get_inner_shadow_paint(antialias, shape.image_filter(1.).as_ref());
- render_shadow_paint(render_state, shape, paint, SurfaceId::InnerShadows);
-}
-
-pub fn render_stroke_drop_shadows(
- render_state: &mut RenderState,
- shape: &Shape,
- stroke: &Stroke,
- antialias: bool,
-) {
- if !shape.has_fills() {
- for shadow in shape.drop_shadows().rev().filter(|s| !s.hidden()) {
- let filter = shadow.get_drop_shadow_filter();
- strokes::render(
- render_state,
- shape,
- stroke,
- None,
- filter.as_ref(),
- None,
- antialias,
- None,
- )
- }
- }
+ render_shadow_paint(render_state, shape, paint, surface_id);
}
pub fn render_stroke_inner_shadows(
@@ -70,35 +35,23 @@ pub fn render_stroke_inner_shadows(
shape: &Shape,
stroke: &Stroke,
antialias: bool,
+ surface_id: SurfaceId,
) {
if !shape.has_fills() {
- for shadow in shape.inner_shadows().rev().filter(|s| !s.hidden()) {
+ for shadow in shape.inner_shadows_visible() {
let filter = shadow.get_inner_shadow_filter();
strokes::render(
render_state,
shape,
stroke,
- None,
+ Some(surface_id),
filter.as_ref(),
- None,
antialias,
- None,
)
}
}
}
-pub fn render_text_drop_shadows(
- render_state: &mut RenderState,
- shape: &Shape,
- paragraphs: &mut [Vec],
- antialias: bool,
-) {
- for shadow in shape.drop_shadows().rev().filter(|s| !s.hidden()) {
- render_text_drop_shadow(render_state, shape, shadow, paragraphs, antialias);
- }
-}
-
// Render text paths (unused)
#[allow(dead_code)]
pub fn render_text_path_stroke_drop_shadows(
@@ -108,7 +61,7 @@ pub fn render_text_path_stroke_drop_shadows(
stroke: &Stroke,
antialias: bool,
) {
- for shadow in shape.drop_shadows().rev().filter(|s| !s.hidden()) {
+ for shadow in shape.drop_shadows_visible() {
let stroke_shadow = shadow.get_drop_shadow_filter();
strokes::render_text_paths(
render_state,
@@ -122,53 +75,6 @@ pub fn render_text_path_stroke_drop_shadows(
}
}
-pub fn render_text_drop_shadow(
- render_state: &mut RenderState,
- shape: &Shape,
- shadow: &Shadow,
- paragraphs: &mut [Vec],
- antialias: bool,
-) {
- let paint = shadow.get_drop_shadow_paint(antialias, shape.image_filter(1.).as_ref());
-
- text::render(
- render_state,
- shape,
- paragraphs,
- Some(SurfaceId::DropShadows),
- Some(&paint),
- );
-}
-
-pub fn render_text_inner_shadows(
- render_state: &mut RenderState,
- shape: &Shape,
- paragraphs: &mut [Vec],
- antialias: bool,
-) {
- for shadow in shape.inner_shadows().rev().filter(|s| !s.hidden()) {
- render_text_inner_shadow(render_state, shape, shadow, paragraphs, antialias);
- }
-}
-
-pub fn render_text_inner_shadow(
- render_state: &mut RenderState,
- shape: &Shape,
- shadow: &Shadow,
- paragraphs: &mut [Vec],
- antialias: bool,
-) {
- let paint = shadow.get_inner_shadow_paint(antialias, shape.image_filter(1.).as_ref());
-
- text::render(
- render_state,
- shape,
- paragraphs,
- Some(SurfaceId::InnerShadows),
- Some(&paint),
- );
-}
-
// Render text paths (unused)
#[allow(dead_code)]
pub fn render_text_path_stroke_inner_shadows(
@@ -178,7 +84,7 @@ pub fn render_text_path_stroke_inner_shadows(
stroke: &Stroke,
antialias: bool,
) {
- for shadow in shape.inner_shadows().rev().filter(|s| !s.hidden()) {
+ for shadow in shape.inner_shadows_visible() {
let stroke_shadow = shadow.get_inner_shadow_filter();
strokes::render_text_paths(
render_state,
@@ -213,3 +119,50 @@ fn render_shadow_paint(
_ => {}
}
}
+
+pub fn render_text_shadows(
+ render_state: &mut RenderState,
+ shape: &Shape,
+ paragraphs: &mut [ParagraphBuilderGroup],
+ stroke_paragraphs_group: &mut [Vec],
+ surface_id: Option,
+ shadows: &[Paint],
+ blur_filter: &Option,
+) {
+ if stroke_paragraphs_group.is_empty() {
+ return;
+ }
+
+ let canvas = render_state
+ .surfaces
+ .canvas(surface_id.unwrap_or(SurfaceId::TextDropShadows));
+
+ for shadow in shadows {
+ let shadow_layer = SaveLayerRec::default().paint(shadow);
+ canvas.save_layer(&shadow_layer);
+
+ text::render(
+ None,
+ Some(canvas),
+ shape,
+ paragraphs,
+ surface_id,
+ None,
+ blur_filter.as_ref(),
+ );
+
+ for stroke_paragraphs in stroke_paragraphs_group.iter_mut() {
+ text::render(
+ None,
+ Some(canvas),
+ shape,
+ stroke_paragraphs,
+ surface_id,
+ None,
+ blur_filter.as_ref(),
+ );
+ }
+
+ canvas.restore();
+ }
+}
diff --git a/render-wasm/src/render/strokes.rs b/render-wasm/src/render/strokes.rs
index 778f42977d..8346d9af7e 100644
--- a/render-wasm/src/render/strokes.rs
+++ b/render-wasm/src/render/strokes.rs
@@ -3,11 +3,10 @@ use std::collections::HashMap;
use crate::math::{Matrix, Point, Rect};
use crate::shapes::{Corners, Fill, ImageFill, Path, Shape, Stroke, StrokeCap, StrokeKind, Type};
-use skia_safe::{self as skia, textlayout::ParagraphBuilder, ImageFilter, RRect};
+use skia_safe::{self as skia, ImageFilter, RRect};
use super::{RenderState, SurfaceId};
use crate::render::filters::compose_filters;
-use crate::render::text::{self};
use crate::render::{get_dest_rect, get_source_rect};
// FIXME: See if we can simplify these arguments
@@ -183,23 +182,22 @@ fn handle_stroke_cap(
) {
paint.set_style(skia::PaintStyle::Fill);
match cap {
- StrokeCap::None => {}
- StrokeCap::Line => {
+ StrokeCap::LineArrow => {
// We also draw this square cap to fill the gap between the path and the arrow
draw_square_cap(canvas, paint, p1, p2, width, 0.);
paint.set_style(skia::PaintStyle::Stroke);
draw_arrow_cap(canvas, paint, p1, p2, width * 4.);
}
- StrokeCap::Triangle => {
+ StrokeCap::TriangleArrow => {
draw_triangle_cap(canvas, paint, p1, p2, width * 4.);
}
- StrokeCap::Rectangle => {
+ StrokeCap::SquareMarker => {
draw_square_cap(canvas, paint, p1, p2, width * 4., 0.);
}
- StrokeCap::Circle => {
+ StrokeCap::CircleMarker => {
canvas.draw_circle((p1.x, p1.y), width * 2., paint);
}
- StrokeCap::Diamond => {
+ StrokeCap::DiamondMarker => {
draw_square_cap(canvas, paint, p1, p2, width * 4., 45.);
}
StrokeCap::Round => {
@@ -242,23 +240,27 @@ fn handle_stroke_caps(
paint_stroke.set_image_filter(filter.clone());
}
- handle_stroke_cap(
- canvas,
- stroke.cap_start,
- stroke.width,
- &mut paint_stroke,
- first_point,
- &points[1],
- );
+ if let Some(cap) = stroke.cap_start {
+ handle_stroke_cap(
+ canvas,
+ cap,
+ stroke.width,
+ &mut paint_stroke,
+ first_point,
+ &points[1],
+ );
+ }
- handle_stroke_cap(
- canvas,
- stroke.cap_end,
- stroke.width,
- &mut paint_stroke,
- last_point,
- &points[c_points - 2],
- );
+ if let Some(cap) = stroke.cap_end {
+ handle_stroke_cap(
+ canvas,
+ cap,
+ stroke.width,
+ &mut paint_stroke,
+ last_point,
+ &points[c_points - 2],
+ );
+ }
}
}
@@ -519,14 +521,12 @@ pub fn render(
stroke: &Stroke,
surface_id: Option,
shadow: Option<&ImageFilter>,
- paragraphs: Option<&mut Vec>>,
antialias: bool,
- paint: Option<&skia::Paint>,
) {
let scale = render_state.get_scale();
let canvas = render_state
.surfaces
- .canvas(surface_id.unwrap_or(SurfaceId::Strokes));
+ .canvas(surface_id.unwrap_or(surface_id.unwrap_or(SurfaceId::Strokes)));
let selrect = shape.selrect;
let path_transform = shape.to_path_transform();
let svg_attrs = &shape.svg_attrs;
@@ -565,15 +565,7 @@ pub fn render(
shape.image_filter(1.).as_ref(),
antialias,
),
- Type::Text(_) => {
- text::render(
- render_state,
- shape,
- paragraphs.expect("Text shapes should have paragraphs"),
- Some(SurfaceId::Strokes),
- paint,
- );
- }
+ Type::Text(_) => {}
shape_type @ (Type::Path(_) | Type::Bool(_)) => {
if let Some(path) = shape_type.path() {
draw_stroke_on_path(
diff --git a/render-wasm/src/render/surfaces.rs b/render-wasm/src/render/surfaces.rs
index 4c33e569e9..a3e6b8cc12 100644
--- a/render-wasm/src/render/surfaces.rs
+++ b/render-wasm/src/render/surfaces.rs
@@ -17,15 +17,16 @@ const TILE_SIZE_MULTIPLIER: i32 = 2;
#[repr(u32)]
#[derive(Debug, PartialEq, Clone, Copy)]
pub enum SurfaceId {
- Target = 0b0_0000_0001,
- Cache = 0b0_0000_0010,
- Current = 0b0_0000_0100,
- Fills = 0b0_0000_1000,
- Strokes = 0b0_0001_0000,
- DropShadows = 0b0_0010_0000,
- InnerShadows = 0b0_0100_0000,
- UI = 0b0_1000_0000,
- Debug = 0b1_0000_0000,
+ Target = 0b00_0000_0001,
+ Cache = 0b00_0000_0010,
+ Current = 0b00_0000_0100,
+ Fills = 0b00_0000_1000,
+ Strokes = 0b00_0001_0000,
+ DropShadows = 0b00_0010_0000,
+ InnerShadows = 0b00_0100_0000,
+ TextDropShadows = 0b00_1000_0000,
+ UI = 0b01_0000_0000,
+ Debug = 0b10_0000_0001,
}
pub struct Surfaces {
@@ -42,6 +43,8 @@ pub struct Surfaces {
drop_shadows: skia::Surface,
// used for rendering over shadows.
inner_shadows: skia::Surface,
+ // used for rendering text drop shadows
+ text_drop_shadows: skia::Surface,
// used for displaying auxiliary workspace elements
ui: skia::Surface,
// for drawing debug info.
@@ -73,6 +76,8 @@ impl Surfaces {
gpu_state.create_surface_with_isize("drop_shadows".to_string(), extra_tile_dims);
let inner_shadows =
gpu_state.create_surface_with_isize("inner_shadows".to_string(), extra_tile_dims);
+ let text_drop_shadows =
+ gpu_state.create_surface_with_isize("text_drop_shadows".to_string(), extra_tile_dims);
let shape_fills =
gpu_state.create_surface_with_isize("shape_fills".to_string(), extra_tile_dims);
let shape_strokes =
@@ -88,6 +93,7 @@ impl Surfaces {
current,
drop_shadows,
inner_shadows,
+ text_drop_shadows,
shape_fills,
shape_strokes,
ui,
@@ -166,6 +172,9 @@ impl Surfaces {
if ids & SurfaceId::InnerShadows as u32 != 0 {
f(self.get_mut(SurfaceId::InnerShadows));
}
+ if ids & SurfaceId::TextDropShadows as u32 != 0 {
+ f(self.get_mut(SurfaceId::TextDropShadows));
+ }
if ids & SurfaceId::DropShadows as u32 != 0 {
f(self.get_mut(SurfaceId::DropShadows));
}
@@ -175,20 +184,29 @@ impl Surfaces {
performance::begin_measure!("apply_mut::flags");
}
- pub fn update_render_context(&mut self, render_area: skia::Rect, scale: f32) {
- let translation = (
+ pub fn get_render_context_translation(
+ &mut self,
+ render_area: skia::Rect,
+ scale: f32,
+ ) -> (f32, f32) {
+ (
-render_area.left() + self.margins.width as f32 / scale,
-render_area.top() + self.margins.height as f32 / scale,
- );
+ )
+ }
+
+ pub fn update_render_context(&mut self, render_area: skia::Rect, scale: f32) {
+ let translation = self.get_render_context_translation(render_area, scale);
self.apply_mut(
SurfaceId::Fills as u32
| SurfaceId::Strokes as u32
- | SurfaceId::DropShadows as u32
- | SurfaceId::InnerShadows as u32,
+ | SurfaceId::InnerShadows as u32
+ | SurfaceId::TextDropShadows as u32,
|s| {
- s.canvas().restore();
- s.canvas().save();
- s.canvas().translate(translation);
+ let canvas = s.canvas();
+ canvas.reset_matrix();
+ canvas.scale((scale, scale));
+ canvas.translate(translation);
},
);
}
@@ -201,6 +219,7 @@ impl Surfaces {
SurfaceId::Current => &mut self.current,
SurfaceId::DropShadows => &mut self.drop_shadows,
SurfaceId::InnerShadows => &mut self.inner_shadows,
+ SurfaceId::TextDropShadows => &mut self.text_drop_shadows,
SurfaceId::Fills => &mut self.shape_fills,
SurfaceId::Strokes => &mut self.shape_strokes,
SurfaceId::Debug => &mut self.debug,
@@ -251,16 +270,16 @@ impl Surfaces {
pub fn reset(&mut self, color: skia::Color) {
self.canvas(SurfaceId::Fills).restore_to_count(1);
- self.canvas(SurfaceId::DropShadows).restore_to_count(1);
self.canvas(SurfaceId::InnerShadows).restore_to_count(1);
+ self.canvas(SurfaceId::TextDropShadows).restore_to_count(1);
self.canvas(SurfaceId::Strokes).restore_to_count(1);
self.canvas(SurfaceId::Current).restore_to_count(1);
self.apply_mut(
SurfaceId::Fills as u32
| SurfaceId::Strokes as u32
| SurfaceId::Current as u32
- | SurfaceId::DropShadows as u32
- | SurfaceId::InnerShadows as u32,
+ | SurfaceId::InnerShadows as u32
+ | SurfaceId::TextDropShadows as u32,
|s| {
s.canvas().clear(color).reset_matrix();
},
diff --git a/render-wasm/src/render/text.rs b/render-wasm/src/render/text.rs
index 3c263e8c8c..5ce58ac533 100644
--- a/render-wasm/src/render/text.rs
+++ b/render-wasm/src/render/text.rs
@@ -1,224 +1,414 @@
use super::{RenderState, Shape, SurfaceId};
-use crate::shapes::VerticalAlign;
-use crate::utils::get_font_collection;
-use skia_safe::{textlayout::ParagraphBuilder, Paint, Path};
+use crate::{
+ math::Rect,
+ shapes::{
+ merge_fills, set_paint_fill, ParagraphBuilderGroup, Stroke, StrokeKind, TextContent,
+ VerticalAlign,
+ },
+ utils::{get_fallback_fonts, get_font_collection},
+};
+use skia_safe::{
+ self as skia,
+ canvas::SaveLayerRec,
+ textlayout::{
+ LineMetrics, Paragraph, ParagraphBuilder, RectHeightStyle, RectWidthStyle, StyleMetrics,
+ TextDecoration, TextStyle,
+ },
+ Canvas, ImageFilter, Paint, Path,
+};
+
+pub fn stroke_paragraph_builder_group_from_text(
+ text_content: &TextContent,
+ stroke: &Stroke,
+ bounds: &Rect,
+ count_inner_strokes: usize,
+ use_shadow: Option,
+) -> Vec {
+ let fallback_fonts = get_fallback_fonts();
+ let fonts = get_font_collection();
+ let mut paragraph_group = Vec::new();
+ let remove_stroke_alpha = use_shadow.unwrap_or(false) && !stroke.is_transparent();
+
+ for paragraph in text_content.paragraphs() {
+ let mut stroke_paragraphs_map: std::collections::HashMap =
+ std::collections::HashMap::new();
+
+ for leaf in paragraph.children().iter() {
+ let text_paint: skia_safe::Handle<_> = merge_fills(leaf.fills(), *bounds);
+ let stroke_paints = get_text_stroke_paints(
+ stroke,
+ bounds,
+ &text_paint,
+ count_inner_strokes,
+ remove_stroke_alpha,
+ );
+
+ let text: String = leaf.apply_text_transform();
+
+ for (paint_idx, stroke_paint) in stroke_paints.iter().enumerate() {
+ let builder = stroke_paragraphs_map.entry(paint_idx).or_insert_with(|| {
+ let paragraph_style = paragraph.paragraph_to_style();
+ ParagraphBuilder::new(¶graph_style, fonts)
+ });
+ let stroke_paint = stroke_paint.clone();
+ let remove_alpha = use_shadow.unwrap_or(false) && !leaf.is_transparent();
+ let stroke_style =
+ leaf.to_stroke_style(&stroke_paint, fallback_fonts, remove_alpha);
+ builder.push_style(&stroke_style);
+ builder.add_text(&text);
+ }
+ }
+
+ let stroke_paragraphs: Vec = (0..stroke_paragraphs_map.len())
+ .map(|i| stroke_paragraphs_map.remove(&i).unwrap())
+ .collect();
+
+ paragraph_group.push(stroke_paragraphs);
+ }
+
+ paragraph_group
+}
+
+fn get_text_stroke_paints(
+ stroke: &Stroke,
+ bounds: &Rect,
+ text_paint: &Paint,
+ count_inner_strokes: usize,
+ remove_stroke_alpha: bool,
+) -> Vec {
+ let mut paints = Vec::new();
+
+ match stroke.kind {
+ StrokeKind::Inner => {
+ let shader = text_paint.shader();
+ let mut is_opaque = true;
+
+ if let Some(shader) = shader {
+ is_opaque = shader.is_opaque();
+ }
+
+ if is_opaque && count_inner_strokes == 1 {
+ let mut paint = text_paint.clone();
+ paint.set_style(skia::PaintStyle::Fill);
+ paint.set_anti_alias(true);
+ paints.push(paint);
+
+ let mut paint = skia::Paint::default();
+ paint.set_style(skia::PaintStyle::Stroke);
+ paint.set_blend_mode(skia::BlendMode::SrcIn);
+ paint.set_anti_alias(true);
+ paint.set_stroke_width(stroke.width * 2.0);
+ set_paint_fill(&mut paint, &stroke.fill, bounds, remove_stroke_alpha);
+ paints.push(paint);
+ } else {
+ let mut paint = skia::Paint::default();
+ if remove_stroke_alpha {
+ paint.set_color(skia::Color::BLACK);
+ paint.set_alpha(255);
+ } else {
+ paint = text_paint.clone();
+ set_paint_fill(&mut paint, &stroke.fill, bounds, false);
+ }
+
+ paint.set_style(skia::PaintStyle::Fill);
+ paint.set_anti_alias(false);
+ paints.push(paint);
+
+ let mut paint = skia::Paint::default();
+ let image_filter =
+ skia_safe::image_filters::erode((stroke.width, stroke.width), None, None);
+
+ paint.set_image_filter(image_filter);
+ paint.set_anti_alias(false);
+ paint.set_color(skia::Color::BLACK);
+ paint.set_alpha(255);
+ paint.set_blend_mode(skia::BlendMode::DstOut);
+ paints.push(paint);
+ }
+ }
+ StrokeKind::Center => {
+ let mut paint = skia::Paint::default();
+ paint.set_style(skia::PaintStyle::Stroke);
+ paint.set_anti_alias(true);
+ paint.set_stroke_width(stroke.width);
+ set_paint_fill(&mut paint, &stroke.fill, bounds, remove_stroke_alpha);
+ paints.push(paint);
+ }
+ StrokeKind::Outer => {
+ let mut paint = skia::Paint::default();
+ paint.set_style(skia::PaintStyle::Stroke);
+ paint.set_blend_mode(skia::BlendMode::DstOver);
+ paint.set_anti_alias(true);
+ paint.set_stroke_width(stroke.width * 2.0);
+ set_paint_fill(&mut paint, &stroke.fill, bounds, remove_stroke_alpha);
+ paints.push(paint);
+
+ let mut paint = skia::Paint::default();
+ paint.set_style(skia::PaintStyle::Fill);
+ paint.set_blend_mode(skia::BlendMode::Clear);
+ paint.set_color(skia::Color::TRANSPARENT);
+ paint.set_anti_alias(true);
+ paints.push(paint);
+ }
+ }
+
+ paints
+}
pub fn render(
- render_state: &mut RenderState,
+ render_state: Option<&mut RenderState>,
+ canvas: Option<&Canvas>,
shape: &Shape,
- paragraphs: &mut [Vec],
+ paragraph_builders: &mut [Vec],
surface_id: Option,
- paint: Option<&Paint>,
+ shadow: Option<&Paint>,
+ blur: Option<&ImageFilter>,
) {
- let fonts = get_font_collection();
- let canvas = render_state
- .surfaces
- .canvas(surface_id.unwrap_or(SurfaceId::Fills));
+ let render_canvas = if let Some(rs) = render_state {
+ rs.surfaces.canvas(surface_id.unwrap_or(SurfaceId::Fills))
+ } else if let Some(c) = canvas {
+ c
+ } else {
+ return;
+ };
+ if let Some(blur_filter) = blur {
+ let mut blur_paint = Paint::default();
+ blur_paint.set_image_filter(blur_filter.clone());
+ let blur_layer = SaveLayerRec::default().paint(&blur_paint);
+ render_canvas.save_layer(&blur_layer);
+ }
+
+ if let Some(shadow_paint) = shadow {
+ let layer_rec = SaveLayerRec::default().paint(shadow_paint);
+ render_canvas.save_layer(&layer_rec);
+ draw_text(render_canvas, shape, paragraph_builders);
+ render_canvas.restore();
+ } else {
+ draw_text(render_canvas, shape, paragraph_builders);
+ }
+
+ if blur.is_some() {
+ render_canvas.restore();
+ }
+
+ render_canvas.restore();
+}
+
+fn draw_text(
+ canvas: &Canvas,
+ shape: &Shape,
+ paragraph_builder_groups: &mut [Vec],
+) {
// Width
let paragraph_width = if let crate::shapes::Type::Text(text_content) = &shape.shape_type {
- text_content.get_width()
+ text_content.width()
} else {
shape.width()
};
// Height
let container_height = shape.selrect().height();
- let total_content_height = calculate_all_paragraphs_height(paragraphs, paragraph_width);
+ let total_content_height =
+ calculate_all_paragraphs_height(paragraph_builder_groups, paragraph_width);
let mut global_offset_y = match shape.vertical_align() {
VerticalAlign::Center => (container_height - total_content_height) / 2.0,
VerticalAlign::Bottom => container_height - total_content_height,
_ => 0.0,
};
- let layer_rec = skia_safe::canvas::SaveLayerRec::default();
+ let layer_rec = SaveLayerRec::default();
canvas.save_layer(&layer_rec);
- for group in paragraphs {
+ for paragraph_builder_group in paragraph_builder_groups {
let mut group_offset_y = global_offset_y;
- let group_len = group.len();
+ let group_len = paragraph_builder_group.len();
- for (index, builder) in group.iter_mut().enumerate() {
- let mut skia_paragraph = builder.build();
-
- if paint.is_some() && index == 0 {
- let text = builder.get_text().to_string();
- let mut paragraph_builder =
- ParagraphBuilder::new(&builder.get_paragraph_style(), fonts);
- let mut text_style: skia_safe::Handle<_> = builder.peek_style();
- text_style.set_foreground_paint(paint.unwrap());
- paragraph_builder.reset();
- paragraph_builder.push_style(&text_style);
- paragraph_builder.add_text(&text);
- skia_paragraph = paragraph_builder.build();
- } else if paint.is_some() && index > 0 {
- continue;
- }
-
- skia_paragraph.layout(paragraph_width);
- let paragraph_height = skia_paragraph.height();
+ for paragraph_builder in paragraph_builder_group.iter_mut() {
+ let mut paragraph = paragraph_builder.build();
+ paragraph.layout(paragraph_width);
+ let paragraph_height = paragraph.height();
let xy = (shape.selrect().x(), shape.selrect().y() + group_offset_y);
- skia_paragraph.paint(canvas, xy);
+ paragraph.paint(canvas, xy);
- for line_metrics in skia_paragraph.get_line_metrics().iter() {
- let style_metrics: Vec<_> = line_metrics
- .get_style_metrics(line_metrics.start_index..line_metrics.end_index)
- .into_iter()
- .collect();
-
- let mut current_x_offset = 0.0;
- let total_chars = line_metrics.end_index - line_metrics.start_index;
- let line_start_offset = line_metrics.left as f32;
-
- if total_chars == 0 || style_metrics.is_empty() {
- continue;
- }
-
- let line_baseline = xy.1 + line_metrics.baseline as f32;
- let full_text = builder.get_text();
-
- // 1. Caculate text decoration for line
- let mut max_underline_thickness: f32 = 0.0;
- let mut underline_y = None;
- let mut max_strike_thickness: f32 = 0.0;
- let mut strike_y = None;
- for (_style_start, style_metric) in style_metrics.iter() {
- let font_metrics = style_metric.font_metrics;
- let font_size = font_metrics
- .cap_height
- .abs()
- .max(font_metrics.x_height.abs());
- let min_thickness = (font_size * 0.06).max(1.0);
- let thickness = font_metrics
- .underline_thickness()
- .unwrap_or(1.0)
- .max(min_thickness);
- if style_metric.text_style.decoration().ty
- == skia_safe::textlayout::TextDecoration::UNDERLINE
- {
- let y =
- line_baseline + font_metrics.underline_position().unwrap_or(thickness);
- max_underline_thickness = max_underline_thickness.max(thickness);
- underline_y = Some(y);
- }
- if style_metric.text_style.decoration().ty
- == skia_safe::textlayout::TextDecoration::LINE_THROUGH
- {
- let y = line_baseline
- + font_metrics
- .strikeout_position()
- .unwrap_or(-font_metrics.cap_height / 2.0);
- max_strike_thickness = max_strike_thickness.max(thickness);
- strike_y = Some(y);
- }
- }
-
- // 2. Draw decorations per segment
- for (i, (style_start, style_metric)) in style_metrics.iter().enumerate() {
- let text_style = style_metric.text_style;
- let style_end = style_metrics
- .get(i + 1)
- .map(|(next_i, _)| *next_i)
- .unwrap_or(line_metrics.end_index);
-
- let seg_start = (*style_start).max(line_metrics.start_index);
- let seg_end = style_end.min(line_metrics.end_index);
- if seg_start >= seg_end {
- continue;
- }
-
- let start_byte = full_text
- .char_indices()
- .nth(seg_start)
- .map(|(i, _)| i)
- .unwrap_or(0);
- let end_byte = full_text
- .char_indices()
- .nth(seg_end)
- .map(|(i, _)| i)
- .unwrap_or(full_text.len());
- let segment_text = &full_text[start_byte..end_byte];
-
- let rects = skia_paragraph.get_rects_for_range(
- seg_start..seg_end,
- skia_safe::textlayout::RectHeightStyle::Tight,
- skia_safe::textlayout::RectWidthStyle::Tight,
- );
- let (segment_width, actual_x_offset) = if !rects.is_empty() {
- let total_width: f32 = rects.iter().map(|r| r.rect.width()).sum();
- let skia_x_offset = rects
- .first()
- .map(|r| r.rect.left - line_start_offset)
- .unwrap_or(0.0);
- (total_width, skia_x_offset)
- } else {
- let font = skia_paragraph.get_font_at(seg_start);
- let measured_width = font.measure_text(segment_text, None).0;
- (measured_width, current_x_offset)
- };
-
- // Underline
- if text_style.decoration().ty
- == skia_safe::textlayout::TextDecoration::UNDERLINE
- {
- if let Some(y) = underline_y {
- let thickness = max_underline_thickness;
- let text_left = xy.0 + line_start_offset + actual_x_offset;
- let text_width = segment_width;
- let r = skia_safe::Rect::new(
- text_left,
- y - thickness / 2.0,
- text_left + text_width,
- y + thickness / 2.0,
- );
- let mut decoration_paint = text_style.foreground();
- decoration_paint.set_anti_alias(true);
- canvas.draw_rect(r, &decoration_paint);
- }
- }
- // Strikethrough
- if text_style.decoration().ty
- == skia_safe::textlayout::TextDecoration::LINE_THROUGH
- {
- if let Some(y) = strike_y {
- let thickness = max_strike_thickness;
- let text_left = xy.0 + line_start_offset + actual_x_offset;
- let text_width = segment_width;
- let r = skia_safe::Rect::new(
- text_left,
- y - thickness / 2.0,
- text_left + text_width,
- y + thickness / 2.0,
- );
- let mut decoration_paint = text_style.foreground();
- decoration_paint.set_anti_alias(true);
- canvas.draw_rect(r, &decoration_paint);
- }
- }
- current_x_offset += segment_width;
- }
+ for line_metrics in paragraph.get_line_metrics().iter() {
+ render_text_decoration(canvas, ¶graph, paragraph_builder, line_metrics, xy);
}
- // Only increment group_offset_y for regular paragraphs (single element groups)
- // For stroke groups (multiple elements), keep same offset for blending
if group_len == 1 {
group_offset_y += paragraph_height;
}
- // For stroke groups (group_len > 1), don't increment group_offset_y within the group
- // This ensures all stroke variants render at the same position for proper blending
}
- // For stroke groups (multiple elements), increment global_offset_y once per group
if group_len > 1 {
- let mut first_paragraph = group[0].build();
+ let mut first_paragraph = paragraph_builder_group[0].build();
first_paragraph.layout(paragraph_width);
global_offset_y += first_paragraph.height();
} else {
- // For regular paragraphs, global_offset_y was already incremented inside the loop
global_offset_y = group_offset_y;
}
}
+}
- canvas.restore();
+fn draw_text_decorations(
+ canvas: &Canvas,
+ text_style: &TextStyle,
+ y: Option,
+ thickness: f32,
+ text_left: f32,
+ text_width: f32,
+) {
+ if let Some(y) = y {
+ let r = skia_safe::Rect::new(
+ text_left,
+ y - thickness / 2.0,
+ text_left + text_width,
+ y + thickness / 2.0,
+ );
+ let mut decoration_paint = text_style.foreground();
+ decoration_paint.set_anti_alias(true);
+ canvas.draw_rect(r, &decoration_paint);
+ }
+}
+
+fn calculate_decoration_metrics(
+ style_metrics: &Vec<(usize, &StyleMetrics)>,
+ line_baseline: f32,
+) -> (f32, Option, f32, Option) {
+ let mut max_underline_thickness: f32 = 0.0;
+ let mut underline_y = None;
+ let mut max_strike_thickness: f32 = 0.0;
+ let mut strike_y = None;
+ for (_style_start, style_metric) in style_metrics.iter() {
+ let font_metrics = style_metric.font_metrics;
+ let font_size = font_metrics
+ .cap_height
+ .abs()
+ .max(font_metrics.x_height.abs());
+ let min_thickness = (font_size * 0.06).max(1.0);
+ let thickness = font_metrics
+ .underline_thickness()
+ .unwrap_or(1.0)
+ .max(min_thickness);
+ if style_metric.text_style.decoration().ty == TextDecoration::UNDERLINE {
+ let y = line_baseline + font_metrics.underline_position().unwrap_or(thickness);
+ max_underline_thickness = max_underline_thickness.max(thickness);
+ underline_y = Some(y);
+ }
+ if style_metric.text_style.decoration().ty == TextDecoration::LINE_THROUGH {
+ let y = line_baseline
+ + font_metrics
+ .strikeout_position()
+ .unwrap_or(-font_metrics.cap_height / 2.0);
+ max_strike_thickness = max_strike_thickness.max(thickness);
+ strike_y = Some(y);
+ }
+ }
+ (
+ max_underline_thickness,
+ underline_y,
+ max_strike_thickness,
+ strike_y,
+ )
+}
+
+fn render_text_decoration(
+ canvas: &Canvas,
+ skia_paragraph: &Paragraph,
+ builder: &mut ParagraphBuilder,
+ line_metrics: &LineMetrics,
+ xy: (f32, f32),
+) {
+ let style_metrics: Vec<_> = line_metrics
+ .get_style_metrics(line_metrics.start_index..line_metrics.end_index)
+ .into_iter()
+ .collect();
+
+ let mut current_x_offset = 0.0;
+ let total_chars = line_metrics.end_index - line_metrics.start_index;
+ let line_start_offset = line_metrics.left as f32;
+
+ if total_chars == 0 || style_metrics.is_empty() {
+ return;
+ }
+
+ let line_baseline = xy.1 + line_metrics.baseline as f32;
+ let full_text = builder.get_text();
+
+ // Calculate decoration metrics
+ let (max_underline_thickness, underline_y, max_strike_thickness, strike_y) =
+ calculate_decoration_metrics(&style_metrics, line_baseline);
+
+ // Draw decorations per segment (text leaf)
+ for (i, (style_start, style_metric)) in style_metrics.iter().enumerate() {
+ let text_style = &style_metric.text_style;
+ let style_end = style_metrics
+ .get(i + 1)
+ .map(|(next_i, _)| *next_i)
+ .unwrap_or(line_metrics.end_index);
+
+ let seg_start = (*style_start).max(line_metrics.start_index);
+ let seg_end = style_end.min(line_metrics.end_index);
+ if seg_start >= seg_end {
+ continue;
+ }
+
+ let start_byte = full_text
+ .char_indices()
+ .nth(seg_start)
+ .map(|(i, _)| i)
+ .unwrap_or(0);
+ let end_byte = full_text
+ .char_indices()
+ .nth(seg_end)
+ .map(|(i, _)| i)
+ .unwrap_or(full_text.len());
+ let segment_text = &full_text[start_byte..end_byte];
+
+ let rects = skia_paragraph.get_rects_for_range(
+ seg_start..seg_end,
+ RectHeightStyle::Tight,
+ RectWidthStyle::Tight,
+ );
+ let (segment_width, actual_x_offset) = if !rects.is_empty() {
+ let total_width: f32 = rects.iter().map(|r| r.rect.width()).sum();
+ let skia_x_offset = rects
+ .first()
+ .map(|r| r.rect.left - line_start_offset)
+ .unwrap_or(0.0);
+ (total_width, skia_x_offset)
+ } else {
+ let font = skia_paragraph.get_font_at(seg_start);
+ let measured_width = font.measure_text(segment_text, None).0;
+ (measured_width, current_x_offset)
+ };
+
+ let text_left = xy.0 + line_start_offset + actual_x_offset;
+ let text_width = segment_width;
+
+ // Underline
+ if text_style.decoration().ty == TextDecoration::UNDERLINE {
+ draw_text_decorations(
+ canvas,
+ text_style,
+ underline_y,
+ max_underline_thickness,
+ text_left,
+ text_width,
+ );
+ }
+ // Strikethrough
+ if text_style.decoration().ty == TextDecoration::LINE_THROUGH {
+ draw_text_decorations(
+ canvas,
+ text_style,
+ strike_y,
+ max_strike_thickness,
+ text_left,
+ text_width,
+ );
+ }
+ current_x_offset += segment_width;
+ }
}
fn calculate_total_paragraphs_height(paragraphs: &mut [ParagraphBuilder], width: f32) -> f32 {
@@ -278,11 +468,11 @@ pub fn render_as_path(
// let text_content = text_content.new_bounds(shape.selrect());
// let paths = text_content.get_paths(antialias);
-// shadows::render_text_drop_shadows(self, &shape, &paths, antialias);
+// shadows::render_text_shadows(self, &shape, &paths, antialias);
// text::render(self, &paths, None, None);
// for stroke in shape.visible_strokes().rev() {
-// shadows::render_text_path_stroke_drop_shadows(
+// shadows::render_text_path_stroke_shadows(
// self, &shape, &paths, stroke, antialias,
// );
// strokes::render_text_paths(self, &shape, stroke, &paths, None, None, antialias);
diff --git a/render-wasm/src/shapes.rs b/render-wasm/src/shapes.rs
index 1b7a5d922c..5b421ad3e6 100644
--- a/render-wasm/src/shapes.rs
+++ b/render-wasm/src/shapes.rs
@@ -1,12 +1,12 @@
use skia_safe::{self as skia};
-use crate::render::BlendMode;
use crate::uuid::Uuid;
use std::borrow::Cow;
use std::cell::OnceCell;
use std::collections::{HashMap, HashSet};
use std::iter::once;
+mod blend;
mod blurs;
mod bools;
mod corners;
@@ -26,6 +26,7 @@ mod text;
pub mod text_paths;
mod transform;
+pub use blend::*;
pub use blurs::*;
pub use bools::*;
pub use corners::*;
@@ -44,8 +45,7 @@ pub use svgraw::*;
pub use text::*;
pub use transform::*;
-use crate::math;
-use crate::math::{Bounds, Matrix, Point};
+use crate::math::{self, Bounds, Matrix, Point};
use indexmap::IndexSet;
use crate::state::ShapesPool;
@@ -61,26 +61,12 @@ pub enum Type {
Bool(Bool),
Rect(Rect),
Path(Path),
- Circle,
- SVGRaw(SVGRaw),
Text(TextContent),
+ Circle, // FIXME: shouldn't this have a rect inside, like the Rect variant?
+ SVGRaw(SVGRaw),
}
impl Type {
- pub fn from(value: u8) -> Self {
- match value {
- 0 => Type::Frame(Frame::default()),
- 1 => Type::Group(Group::default()),
- 2 => Type::Bool(Bool::default()),
- 3 => Type::Rect(Rect::default()),
- 4 => Type::Path(Path::default()),
- 5 => Type::Text(TextContent::default()),
- 6 => Type::Circle,
- 7 => Type::SVGRaw(SVGRaw::default()),
- _ => Type::Rect(Rect::default()),
- }
- }
-
pub fn corners(&self) -> Option {
match self {
Type::Rect(Rect { corners, .. }) => *corners,
@@ -150,19 +136,6 @@ pub enum ConstraintH {
Scale,
}
-impl ConstraintH {
- pub fn from(value: u8) -> Option {
- match value {
- 0 => Some(Self::Left),
- 1 => Some(Self::Right),
- 2 => Some(Self::LeftRight),
- 3 => Some(Self::Center),
- 4 => Some(Self::Scale),
- _ => None,
- }
- }
-}
-
#[derive(Debug, Clone, PartialEq, Copy)]
pub enum VerticalAlign {
Top,
@@ -170,17 +143,6 @@ pub enum VerticalAlign {
Bottom,
}
-impl VerticalAlign {
- pub fn from(value: u8) -> Self {
- match value {
- 0 => Self::Top,
- 1 => Self::Center,
- 2 => Self::Bottom,
- _ => Self::Top,
- }
- }
-}
-
#[derive(Debug, Clone, PartialEq, Copy)]
pub enum ConstraintV {
Top,
@@ -190,19 +152,6 @@ pub enum ConstraintV {
Scale,
}
-impl ConstraintV {
- pub fn from(value: u8) -> Option {
- match value {
- 0 => Some(Self::Top),
- 1 => Some(Self::Bottom),
- 2 => Some(Self::TopBottom),
- 3 => Some(Self::Center),
- 4 => Some(Self::Scale),
- _ => None,
- }
- }
-}
-
pub type Color = skia::Color;
#[derive(Debug, Clone)]
@@ -221,7 +170,7 @@ pub struct Shape {
pub strokes: Vec,
pub blend_mode: BlendMode,
pub vertical_align: VerticalAlign,
- pub blur: Blur,
+ pub blur: Option,
pub opacity: f32,
pub hidden: bool,
pub svg: Option,
@@ -250,7 +199,7 @@ impl Shape {
vertical_align: VerticalAlign::Top,
opacity: 1.,
hidden: false,
- blur: Blur::default(),
+ blur: None,
svg: None,
svg_attrs: HashMap::new(),
shadows: Vec::with_capacity(1),
@@ -270,7 +219,11 @@ impl Shape {
.shadows
.iter_mut()
.for_each(|s| s.scale_content(value));
- result.blur.scale_content(value);
+
+ if let Some(blur) = result.blur.as_mut() {
+ blur.scale_content(value);
+ }
+
result
.layout_item
.iter_mut()
@@ -503,39 +456,39 @@ impl Shape {
}
}
- pub fn set_grid_columns(&mut self, tracks: Vec) {
+ pub fn set_grid_columns(&mut self, tracks: Vec) {
let Type::Frame(frame_data) = &mut self.shape_type else {
return;
};
let Some(Layout::GridLayout(_, grid_data)) = &mut frame_data.layout else {
return;
};
- grid_data.columns = tracks.iter().map(GridTrack::from_raw).collect();
+ grid_data.columns = tracks;
}
- pub fn set_grid_rows(&mut self, tracks: Vec) {
+ pub fn set_grid_rows(&mut self, tracks: Vec) {
let Type::Frame(frame_data) = &mut self.shape_type else {
return;
};
let Some(Layout::GridLayout(_, grid_data)) = &mut frame_data.layout else {
return;
};
- grid_data.rows = tracks.iter().map(GridTrack::from_raw).collect();
+ grid_data.rows = tracks;
}
- pub fn set_grid_cells(&mut self, cells: Vec) {
+ pub fn set_grid_cells(&mut self, cells: Vec) {
let Type::Frame(frame_data) = &mut self.shape_type else {
return;
};
let Some(Layout::GridLayout(_, grid_data)) = &mut frame_data.layout else {
return;
};
- grid_data.cells = cells.iter().map(GridCell::from_raw).collect();
+ grid_data.cells = cells;
}
- pub fn set_blur(&mut self, blur_type: u8, hidden: bool, value: f32) {
+ pub fn set_blur(&mut self, blur: Option) {
self.invalidate_extrect();
- self.blur = Blur::new(blur_type, hidden, value);
+ self.blur = blur;
}
pub fn add_child(&mut self, id: Uuid) {
@@ -551,7 +504,7 @@ impl Shape {
(added, removed)
}
- pub fn fills(&self) -> std::slice::Iter {
+ pub fn fills(&self) -> std::slice::Iter<'_, Fill> {
self.fills.iter()
}
@@ -573,6 +526,12 @@ impl Shape {
.filter(|stroke| stroke.width > MIN_STROKE_WIDTH)
}
+ pub fn has_visible_strokes(&self) -> bool {
+ self.strokes
+ .iter()
+ .any(|stroke| stroke.width > MIN_STROKE_WIDTH)
+ }
+
pub fn add_stroke(&mut self, s: Stroke) {
self.invalidate_extrect();
self.strokes.push(s)
@@ -651,7 +610,7 @@ impl Shape {
self.svg_attrs.insert(name, value);
}
- pub fn blend_mode(&self) -> crate::render::BlendMode {
+ pub fn blend_mode(&self) -> BlendMode {
self.blend_mode
}
@@ -695,12 +654,17 @@ impl Shape {
Point::new(self.selrect.x(), self.selrect.y() + self.selrect.height()),
);
- let center = self.center();
- let mut matrix = self.transform;
- matrix.post_translate(center);
- matrix.pre_translate(-center);
-
- bounds.transform_mut(&matrix);
+ // Apply this transformation only when self.transform
+ // is not the identity matrix because if it is,
+ // the result of applying this transformations would be
+ // the same identity matrix.
+ if !self.transform.is_identity() {
+ let mut matrix = self.transform;
+ let center = self.center();
+ matrix.post_translate(center);
+ matrix.pre_translate(-center);
+ bounds.transform_mut(&matrix);
+ }
bounds
}
@@ -719,6 +683,60 @@ impl Shape {
.get_or_init(|| self.calculate_extrect(shapes_pool, modifiers))
}
+ /// Calculates the bounding rectangle for a selrect shape's shadow, taking into account
+ /// stroke widths and shadow properties.
+ ///
+ /// This method computes the expanded bounds that would be needed to fully render
+ /// the shadow effect for a shape. It considers:
+ /// - The base bounds (selection rectangle)
+ /// - Maximum stroke width across all strokes, accounting for stroke rendering kind
+ /// - Shadow offset (x, y displacement)
+ /// - Shadow blur radius (expands bounds outward)
+ /// - Whether the shadow is hidden
+ ///
+ /// # Arguments
+ /// * `shadow` - The shadow configuration containing offset, blur, and visibility
+ ///
+ /// # Returns
+ /// A `math::Rect` representing the bounding rectangle that encompasses the shadow.
+ /// Returns an empty rectangle if the shadow is hidden.
+ pub fn get_selrect_shadow_bounds(&self, shadow: &Shadow) -> math::Rect {
+ let base_bounds = self.selrect();
+ let mut rect = skia::Rect::new_empty();
+
+ let mut max_stroke: Option = None;
+ for stroke in self.strokes.iter() {
+ let width = match stroke.render_kind(false) {
+ StrokeKind::Inner => -stroke.width / 2.,
+ StrokeKind::Center => 0.,
+ StrokeKind::Outer => stroke.width,
+ };
+ max_stroke = Some(max_stroke.unwrap_or(f32::MIN).max(width));
+ }
+ if !shadow.hidden() {
+ let (x, y) = shadow.offset;
+ let mut shadow_rect = base_bounds;
+ shadow_rect.left += x;
+ shadow_rect.right += x;
+ shadow_rect.top += y;
+ shadow_rect.bottom += y;
+
+ shadow_rect.left += shadow.blur;
+ shadow_rect.top += shadow.blur;
+ shadow_rect.right -= shadow.blur;
+ shadow_rect.bottom -= shadow.blur;
+
+ if let Some(max_stroke) = max_stroke {
+ shadow_rect.left -= max_stroke;
+ shadow_rect.right += max_stroke;
+ shadow_rect.top -= max_stroke;
+ shadow_rect.bottom += max_stroke;
+ }
+ rect.join(shadow_rect);
+ }
+ rect
+ }
+
pub fn calculate_extrect(
&self,
shapes_pool: &ShapesPool,
@@ -755,33 +773,37 @@ impl Shape {
bounds_rect
};
- if let Type::Text(ref text_content) = self.shape_type {
+ if let Type::Text(text_content) = &self.shape_type {
let (width, height) = text_content.visual_bounds();
rect.right = rect.left + width;
rect.bottom = rect.top + height;
}
for shadow in self.shadows.iter() {
- let (x, y) = shadow.offset;
- let mut shadow_rect = rect;
- shadow_rect.left += x;
- shadow_rect.right += x;
- shadow_rect.top += y;
- shadow_rect.bottom += y;
+ if !shadow.hidden() {
+ let (x, y) = shadow.offset;
+ let mut shadow_rect = rect;
+ shadow_rect.left += x;
+ shadow_rect.right += x;
+ shadow_rect.top += y;
+ shadow_rect.bottom += y;
- shadow_rect.left -= shadow.blur;
- shadow_rect.top -= shadow.blur;
- shadow_rect.right += shadow.blur;
- shadow_rect.bottom += shadow.blur;
+ shadow_rect.left -= shadow.blur;
+ shadow_rect.top -= shadow.blur;
+ shadow_rect.right += shadow.blur;
+ shadow_rect.bottom += shadow.blur;
- rect.join(shadow_rect);
+ rect.join(shadow_rect);
+ }
}
- if self.blur.blur_type != blurs::BlurType::None {
- rect.left -= self.blur.value;
- rect.top -= self.blur.value;
- rect.right += self.blur.value;
- rect.bottom += self.blur.value;
+ if let Some(blur) = self.blur {
+ if !blur.hidden {
+ rect.left -= blur.value;
+ rect.top -= blur.value;
+ rect.right += blur.value;
+ rect.bottom += blur.value;
+ }
}
// For groups and frames without clipping, extend the bounding rectangle to include all nested shapes
@@ -811,6 +833,10 @@ impl Shape {
rect
}
+ pub fn left_top(&self) -> Point {
+ Point::new(self.selrect.left, self.selrect.top)
+ }
+
pub fn center(&self) -> Point {
self.selrect.center()
}
@@ -900,6 +926,9 @@ impl Shape {
ancestors.insert(parent_id);
current_id = parent_id;
} else {
+ // FIXME: This should panic! I've removed it temporarily until
+ // we fix the problems with shapes without parents.
+ // panic!("Parent can't be found");
break;
}
}
@@ -907,35 +936,56 @@ impl Shape {
ancestors
}
- pub fn image_filter(&self, scale: f32) -> Option {
- if !self.blur.hidden {
- match self.blur.blur_type {
- BlurType::None => None,
- BlurType::Layer => skia::image_filters::blur(
- (self.blur.value * scale, self.blur.value * scale),
- None,
- None,
- None,
- ),
- }
- } else {
- None
- }
+ pub fn get_matrix(&self) -> Matrix {
+ let mut matrix = Matrix::new_identity();
+ matrix.post_translate(self.left_top());
+ matrix.post_rotate(self.rotation, self.center());
+ matrix
}
- pub fn mask_filter(&self, scale: f32) -> Option {
- if !self.blur.hidden {
- match self.blur.blur_type {
- BlurType::None => None,
- BlurType::Layer => skia::MaskFilter::blur(
- skia::BlurStyle::Normal,
- self.blur.value * scale,
- Some(true),
- ),
+ pub fn get_concatenated_matrix(&self, shapes: &ShapesPool) -> Matrix {
+ let mut matrix = Matrix::new_identity();
+ let mut current_id = self.id;
+ while let Some(parent_id) = shapes.get(¤t_id).and_then(|s| s.parent_id) {
+ if parent_id == Uuid::nil() {
+ break;
+ }
+
+ if let Some(parent) = shapes.get(&parent_id) {
+ matrix.pre_concat(&parent.get_matrix());
+ current_id = parent_id;
+ } else {
+ // FIXME: This should panic! I've removed it temporarily until
+ // we fix the problems with shapes without parents.
+ // panic!("Parent can't be found");
+ break;
}
- } else {
- None
}
+ matrix
+ }
+
+ pub fn image_filter(&self, scale: f32) -> Option {
+ self.blur
+ .filter(|blur| !blur.hidden)
+ .and_then(|blur| match blur.blur_type {
+ BlurType::LayerBlur => skia::image_filters::blur(
+ (blur.value * scale, blur.value * scale),
+ None,
+ None,
+ None,
+ ),
+ })
+ }
+
+ #[allow(dead_code)]
+ pub fn mask_filter(&self, scale: f32) -> Option {
+ self.blur
+ .filter(|blur| !blur.hidden)
+ .and_then(|blur| match blur.blur_type {
+ BlurType::LayerBlur => {
+ skia::MaskFilter::blur(skia::BlurStyle::Normal, blur.value * scale, Some(true))
+ }
+ })
}
pub fn is_recursive(&self) -> bool {
@@ -955,18 +1005,36 @@ impl Shape {
self.shadows.clear();
}
+ #[allow(dead_code)]
pub fn drop_shadows(&self) -> impl DoubleEndedIterator- {
self.shadows
.iter()
+ .rev()
.filter(|shadow| shadow.style() == ShadowStyle::Drop)
}
+ pub fn drop_shadows_visible(&self) -> impl DoubleEndedIterator
- {
+ self.shadows
+ .iter()
+ .rev()
+ .filter(|shadow| shadow.style() == ShadowStyle::Drop && !shadow.hidden())
+ }
+
+ #[allow(dead_code)]
pub fn inner_shadows(&self) -> impl DoubleEndedIterator
- {
self.shadows
.iter()
+ .rev()
.filter(|shadow| shadow.style() == ShadowStyle::Inner)
}
+ pub fn inner_shadows_visible(&self) -> impl DoubleEndedIterator
- {
+ self.shadows
+ .iter()
+ .rev()
+ .filter(|shadow| shadow.style() == ShadowStyle::Inner && !shadow.hidden())
+ }
+
pub fn to_path_transform(&self) -> Option
{
match self.shape_type {
Type::Path(_) | Type::Bool(_) => {
@@ -1101,15 +1169,6 @@ impl Shape {
!self.fills.is_empty()
}
- pub fn has_visible_strokes(&self) -> bool {
- self.visible_strokes().next().is_some()
- }
-
- #[allow(dead_code)]
- pub fn has_visible_inner_strokes(&self) -> bool {
- self.visible_strokes().any(|s| s.kind == StrokeKind::Inner)
- }
-
pub fn count_visible_inner_strokes(&self) -> usize {
self.visible_strokes()
.filter(|s| s.kind == StrokeKind::Inner)
@@ -1152,6 +1211,34 @@ impl Shape {
self.children_ids(include_hidden)
}
}
+
+ pub fn drop_shadow_paints(&self) -> Vec {
+ let drop_shadows: Vec<&Shadow> = self.drop_shadows_visible().collect();
+
+ drop_shadows
+ .into_iter()
+ .map(|shadow| {
+ let mut paint = skia_safe::Paint::default();
+ let filter = shadow.get_drop_shadow_filter();
+ paint.set_image_filter(filter);
+ paint
+ })
+ .collect()
+ }
+
+ pub fn inner_shadow_paints(&self) -> Vec {
+ let inner_shadows: Vec<&Shadow> = self.inner_shadows_visible().collect();
+
+ inner_shadows
+ .into_iter()
+ .map(|shadow| {
+ let mut paint = skia_safe::Paint::default();
+ let filter = shadow.get_inner_shadow_filter();
+ paint.set_image_filter(filter);
+ paint
+ })
+ .collect()
+ }
}
#[cfg(test)]
diff --git a/render-wasm/src/render/blend.rs b/render-wasm/src/shapes/blend.rs
similarity index 52%
rename from render-wasm/src/render/blend.rs
rename to render-wasm/src/shapes/blend.rs
index b54283a012..a225b58592 100644
--- a/render-wasm/src/render/blend.rs
+++ b/render-wasm/src/shapes/blend.rs
@@ -1,7 +1,7 @@
use skia_safe as skia;
#[derive(Debug, PartialEq, Clone, Copy)]
-pub struct BlendMode(skia::BlendMode);
+pub struct BlendMode(pub skia::BlendMode);
impl Default for BlendMode {
fn default() -> Self {
@@ -9,16 +9,6 @@ impl Default for BlendMode {
}
}
-impl From for BlendMode {
- fn from(value: i32) -> Self {
- if value <= skia::BlendMode::Luminosity as i32 {
- unsafe { Self(std::mem::transmute::(value)) }
- } else {
- Self::default()
- }
- }
-}
-
impl From for skia::BlendMode {
fn from(val: BlendMode) -> Self {
match val {
diff --git a/render-wasm/src/shapes/blurs.rs b/render-wasm/src/shapes/blurs.rs
index 36d3b588f2..4232f0ee1c 100644
--- a/render-wasm/src/shapes/blurs.rs
+++ b/render-wasm/src/shapes/blurs.rs
@@ -1,7 +1,6 @@
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum BlurType {
- None,
- Layer,
+ LayerBlur,
}
#[derive(Debug, Clone, Copy, PartialEq)]
@@ -11,26 +10,10 @@ pub struct Blur {
pub value: f32,
}
-impl From for BlurType {
- fn from(value: u8) -> Self {
- match value {
- 1 => BlurType::Layer,
- _ => BlurType::None,
- }
- }
-}
-
impl Blur {
- pub fn default() -> Self {
+ pub fn new(blur_type: BlurType, hidden: bool, value: f32) -> Self {
Blur {
- blur_type: BlurType::None,
- hidden: true,
- value: 0.,
- }
- }
- pub fn new(blur_type: u8, hidden: bool, value: f32) -> Self {
- Blur {
- blur_type: BlurType::from(blur_type),
+ blur_type,
hidden,
value,
}
diff --git a/render-wasm/src/shapes/bools.rs b/render-wasm/src/shapes/bools.rs
index 1bb77b699c..644c4108d2 100644
--- a/render-wasm/src/shapes/bools.rs
+++ b/render-wasm/src/shapes/bools.rs
@@ -1,42 +1,16 @@
use super::Path;
-#[derive(Debug, Clone, PartialEq)]
+#[derive(Debug, Default, Clone, PartialEq)]
pub struct Bool {
pub bool_type: BoolType,
pub path: Path,
}
-#[derive(Debug, Clone, Copy, PartialEq)]
+#[derive(Debug, Default, Clone, Copy, PartialEq)]
pub enum BoolType {
+ #[default]
Union,
Difference,
Intersection,
Exclusion,
}
-
-impl Default for Bool {
- fn default() -> Self {
- Bool {
- bool_type: BoolType::Union,
- path: Path::default(),
- }
- }
-}
-
-impl From for BoolType {
- fn from(value: u8) -> Self {
- match value {
- 0 => Self::Union,
- 1 => Self::Difference,
- 2 => Self::Intersection,
- 3 => Self::Exclusion,
- _ => Self::default(),
- }
- }
-}
-
-impl Default for BoolType {
- fn default() -> Self {
- Self::Union
- }
-}
diff --git a/render-wasm/src/shapes/fills.rs b/render-wasm/src/shapes/fills.rs
index 925fd25ddd..6a772527eb 100644
--- a/render-wasm/src/shapes/fills.rs
+++ b/render-wasm/src/shapes/fills.rs
@@ -255,7 +255,12 @@ pub fn merge_fills(fills: &[Fill], bounding_box: Rect) -> skia::Paint {
fills_paint
}
-pub fn set_paint_fill(paint: &mut Paint, fill: &Fill, bounding_box: &Rect) {
+pub fn set_paint_fill(paint: &mut Paint, fill: &Fill, bounding_box: &Rect, remove_alpha: bool) {
+ if remove_alpha {
+ paint.set_color(skia::Color::BLACK);
+ paint.set_alpha(255);
+ return;
+ }
let shader = get_fill_shader(fill, bounding_box);
if let Some(shader) = shader {
paint.set_shader(shader);
diff --git a/render-wasm/src/shapes/fonts.rs b/render-wasm/src/shapes/fonts.rs
index 7a4524cad5..86ab5d3897 100644
--- a/render-wasm/src/shapes/fonts.rs
+++ b/render-wasm/src/shapes/fonts.rs
@@ -8,16 +8,6 @@ pub enum FontStyle {
Italic,
}
-impl From for FontStyle {
- fn from(value: u8) -> Self {
- match value {
- 0 => Self::Normal,
- 1 => Self::Italic,
- _ => Self::Normal,
- }
- }
-}
-
impl fmt::Display for FontStyle {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let txt = match self {
diff --git a/render-wasm/src/shapes/layouts.rs b/render-wasm/src/shapes/layouts.rs
index edb2e80548..9bbb2dee08 100644
--- a/render-wasm/src/shapes/layouts.rs
+++ b/render-wasm/src/shapes/layouts.rs
@@ -1,4 +1,3 @@
-use crate::utils::uuid_from_u32_quartet;
use crate::uuid::Uuid;
#[derive(Debug, Clone, PartialEq)]
@@ -22,7 +21,7 @@ impl Layout {
}
}
-#[derive(Debug, Clone, PartialEq)]
+#[derive(Debug, Clone, PartialEq, Copy)]
pub enum FlexDirection {
Row,
RowReverse,
@@ -30,34 +29,12 @@ pub enum FlexDirection {
ColumnReverse,
}
-impl FlexDirection {
- pub fn from_u8(value: u8) -> Self {
- match value {
- 0 => Self::Row,
- 1 => Self::RowReverse,
- 2 => Self::Column,
- 3 => Self::ColumnReverse,
- _ => unreachable!(),
- }
- }
-}
-
-#[derive(Debug, Clone, PartialEq)]
+#[derive(Debug, Clone, PartialEq, Copy)]
pub enum GridDirection {
Row,
Column,
}
-impl GridDirection {
- pub fn from_u8(value: u8) -> Self {
- match value {
- 0 => Self::Row,
- 1 => Self::Column,
- _ => unreachable!(),
- }
- }
-}
-
#[derive(Debug, Clone, PartialEq, Copy)]
pub enum AlignItems {
Start,
@@ -66,18 +43,6 @@ pub enum AlignItems {
Stretch,
}
-impl AlignItems {
- pub fn from_u8(value: u8) -> Self {
- match value {
- 0 => Self::Start,
- 1 => Self::End,
- 2 => Self::Center,
- 3 => Self::Stretch,
- _ => unreachable!(),
- }
- }
-}
-
#[derive(Debug, Clone, PartialEq, Copy)]
pub enum AlignContent {
Start,
@@ -89,21 +54,6 @@ pub enum AlignContent {
Stretch,
}
-impl AlignContent {
- pub fn from_u8(value: u8) -> Self {
- match value {
- 0 => Self::Start,
- 1 => Self::End,
- 2 => Self::Center,
- 3 => Self::SpaceBetween,
- 4 => Self::SpaceAround,
- 5 => Self::SpaceEvenly,
- 6 => Self::Stretch,
- _ => unreachable!(),
- }
- }
-}
-
#[derive(Debug, Clone, PartialEq, Copy)]
pub enum JustifyItems {
Start,
@@ -112,18 +62,6 @@ pub enum JustifyItems {
Stretch,
}
-impl JustifyItems {
- pub fn from_u8(value: u8) -> Self {
- match value {
- 0 => Self::Start,
- 1 => Self::End,
- 2 => Self::Center,
- 3 => Self::Stretch,
- _ => unreachable!(),
- }
- }
-}
-
#[derive(Debug, Clone, PartialEq, Copy)]
pub enum JustifyContent {
Start,
@@ -135,36 +73,12 @@ pub enum JustifyContent {
Stretch,
}
-impl JustifyContent {
- pub fn from_u8(value: u8) -> Self {
- match value {
- 0 => Self::Start,
- 1 => Self::End,
- 2 => Self::Center,
- 3 => Self::SpaceBetween,
- 4 => Self::SpaceAround,
- 5 => Self::SpaceEvenly,
- 6 => Self::Stretch,
- _ => unreachable!(),
- }
- }
-}
-
#[derive(Debug, Clone, PartialEq)]
pub enum WrapType {
Wrap,
NoWrap,
}
-impl WrapType {
- pub fn from_u8(value: u8) -> Self {
- match value {
- 0 => Self::Wrap,
- 1 => Self::NoWrap,
- _ => unreachable!(),
- }
- }
-}
#[derive(Debug, Copy, Clone, PartialEq)]
pub enum GridTrackType {
Percent,
@@ -173,18 +87,6 @@ pub enum GridTrackType {
Fixed,
}
-impl GridTrackType {
- pub fn from_u8(value: u8) -> Self {
- match value {
- 0 => Self::Percent,
- 1 => Self::Flex,
- 2 => Self::Auto,
- 3 => Self::Fixed,
- _ => unreachable!(),
- }
- }
-}
-
#[derive(Debug, Clone, PartialEq)]
pub struct GridTrack {
pub track_type: GridTrackType,
@@ -192,13 +94,6 @@ pub struct GridTrack {
}
impl GridTrack {
- pub fn from_raw(raw: &RawGridTrack) -> Self {
- Self {
- track_type: GridTrackType::from_u8(raw.track_type),
- value: f32::from_le_bytes(raw.value),
- }
- }
-
pub fn scale_content(&mut self, value: f32) {
if self.track_type == GridTrackType::Fixed {
self.value *= value;
@@ -206,7 +101,7 @@ impl GridTrack {
}
}
-#[derive(Debug, Clone, PartialEq)]
+#[derive(Debug, Clone, PartialEq, Copy)]
pub struct GridCell {
pub row: i32,
pub row_span: i32,
@@ -217,37 +112,6 @@ pub struct GridCell {
pub shape: Option,
}
-impl GridCell {
- pub fn from_raw(raw: &RawGridCell) -> Self {
- Self {
- row: i32::from_le_bytes(raw.row),
- row_span: i32::from_le_bytes(raw.row_span),
- column: i32::from_le_bytes(raw.column),
- column_span: i32::from_le_bytes(raw.column_span),
- align_self: if raw.has_align_self == 1 {
- AlignSelf::from_u8(raw.align_self)
- } else {
- None
- },
- justify_self: if raw.has_justify_self == 1 {
- JustifySelf::from_u8(raw.justify_self)
- } else {
- None
- },
- shape: if raw.has_shape_id == 1 {
- Some(uuid_from_u32_quartet(
- u32::from_le_bytes(raw.shape_id_a),
- u32::from_le_bytes(raw.shape_id_b),
- u32::from_le_bytes(raw.shape_id_c),
- u32::from_le_bytes(raw.shape_id_d),
- ))
- } else {
- None
- },
- }
- }
-}
-
#[derive(Debug, Clone, PartialEq, Copy)]
pub enum Sizing {
Fill,
@@ -255,17 +119,6 @@ pub enum Sizing {
Auto,
}
-impl Sizing {
- pub fn from_u8(value: u8) -> Self {
- match value {
- 0 => Self::Fill,
- 1 => Self::Fix,
- 2 => Self::Auto,
- _ => unreachable!(),
- }
- }
-}
-
#[derive(Debug, Clone, PartialEq)]
pub struct LayoutData {
pub align_items: AlignItems,
@@ -292,6 +145,7 @@ impl LayoutData {
}
#[derive(Debug, Copy, Clone, PartialEq)]
+#[repr(u8)]
pub enum AlignSelf {
Auto,
Start,
@@ -300,39 +154,13 @@ pub enum AlignSelf {
Stretch,
}
-impl AlignSelf {
- pub fn from_u8(value: u8) -> Option {
- match value {
- 0 => Some(Self::Auto),
- 1 => Some(Self::Start),
- 2 => Some(Self::End),
- 3 => Some(Self::Center),
- 4 => Some(Self::Stretch),
- _ => None,
- }
- }
-}
-
#[derive(Debug, Copy, Clone, PartialEq)]
pub enum JustifySelf {
- Auto,
- Start,
- End,
- Center,
- Stretch,
-}
-
-impl JustifySelf {
- pub fn from_u8(value: u8) -> Option {
- match value {
- 0 => Some(Self::Auto),
- 1 => Some(Self::Start),
- 2 => Some(Self::End),
- 3 => Some(Self::Center),
- 4 => Some(Self::Stretch),
- _ => None,
- }
- }
+ Auto = 0,
+ Start = 1,
+ End = 2,
+ Center = 3,
+ Stretch = 4,
}
#[derive(Debug, Clone, PartialEq)]
@@ -385,64 +213,6 @@ impl GridData {
}
}
-// FIXME: use transmute
-#[derive(Debug)]
-#[repr(C)]
-pub struct RawGridTrack {
- track_type: u8,
- value: [u8; 4],
-}
-
-impl RawGridTrack {
- pub fn from_bytes(bytes: [u8; 5]) -> Self {
- Self {
- track_type: bytes[0],
- value: [bytes[1], bytes[2], bytes[3], bytes[4]],
- }
- }
-}
-
-#[derive(Debug)]
-#[repr(C)]
-pub struct RawGridCell {
- row: [u8; 4],
- row_span: [u8; 4],
- column: [u8; 4],
- column_span: [u8; 4],
- has_align_self: u8,
- align_self: u8,
- has_justify_self: u8,
- justify_self: u8,
- has_shape_id: u8,
- shape_id_a: [u8; 4],
- shape_id_b: [u8; 4],
- shape_id_c: [u8; 4],
- shape_id_d: [u8; 4],
-}
-
-impl RawGridCell {
- pub fn from_bytes(bytes: [u8; 37]) -> Self {
- Self {
- row: [bytes[0], bytes[1], bytes[2], bytes[3]],
- row_span: [bytes[4], bytes[5], bytes[6], bytes[7]],
- column: [bytes[8], bytes[9], bytes[10], bytes[11]],
- column_span: [bytes[12], bytes[13], bytes[14], bytes[15]],
-
- has_align_self: bytes[16],
- align_self: bytes[17],
-
- has_justify_self: bytes[18],
- justify_self: bytes[19],
-
- has_shape_id: bytes[20],
- shape_id_a: [bytes[21], bytes[22], bytes[23], bytes[24]],
- shape_id_b: [bytes[25], bytes[26], bytes[27], bytes[28]],
- shape_id_c: [bytes[29], bytes[30], bytes[31], bytes[32]],
- shape_id_d: [bytes[33], bytes[34], bytes[35], bytes[36]],
- }
- }
-}
-
#[derive(Debug, Clone, PartialEq, Copy)]
pub struct LayoutItem {
pub margin_top: f32,
diff --git a/render-wasm/src/shapes/modifiers.rs b/render-wasm/src/shapes/modifiers.rs
index e90b8e2d0c..59c2431431 100644
--- a/render-wasm/src/shapes/modifiers.rs
+++ b/render-wasm/src/shapes/modifiers.rs
@@ -1,20 +1,19 @@
use std::collections::{HashMap, HashSet, VecDeque};
-pub mod common;
+
mod constraints;
mod flex_layout;
+
+pub mod common;
pub mod grid_layout;
+use crate::math::{self as math, bools, identitish, Bounds, Matrix, Point};
use common::GetBounds;
-use crate::math::bools;
-use crate::math::{self as math, identitish, Bounds, Matrix, Point};
-
use crate::shapes::{
- auto_height, ConstraintH, ConstraintV, Frame, Group, GrowType, Layout, Modifier, Shape,
- StructureEntry, TransformEntry, Type,
+ ConstraintH, ConstraintV, Frame, Group, GrowType, Layout, Modifier, Shape, StructureEntry,
+ TransformEntry, Type,
};
-use crate::state::ShapesPool;
-use crate::state::State;
+use crate::state::{ShapesPool, State};
use crate::uuid::Uuid;
#[allow(clippy::too_many_arguments)]
@@ -196,12 +195,15 @@ fn propagate_transform(
let mut transform = entry.transform;
- if let Type::Text(content) = &shape.shape_type {
- match content.grow_type() {
+ // NOTA: No puedo utilizar un clone porque entonces estaríamos
+ // perdiendo la referencia al contenido del layout...
+ if let Type::Text(text_content) = &mut shape.shape_type.clone() {
+ if text_content.needs_update_layout() {
+ text_content.update_layout(shape.selrect);
+ }
+ match text_content.grow_type() {
GrowType::AutoHeight => {
- let paragraph_width = shape_bounds_after.width();
- let mut paragraphs = content.to_paragraphs(None, None);
- let height = auto_height(&mut paragraphs, paragraph_width);
+ let height = text_content.size.height;
let resize_transform = math::resize_matrix(
&shape_bounds_after,
&shape_bounds_after,
@@ -212,15 +214,10 @@ fn propagate_transform(
transform.post_concat(&resize_transform);
}
GrowType::AutoWidth => {
- let paragraph_width = content.get_width();
- let mut paragraphs = content.to_paragraphs(None, None);
- let height = auto_height(&mut paragraphs, paragraph_width);
- let resize_transform = math::resize_matrix(
- &shape_bounds_after,
- &shape_bounds_after,
- paragraph_width,
- height,
- );
+ let width = text_content.width();
+ let height = text_content.size.height;
+ let resize_transform =
+ math::resize_matrix(&shape_bounds_after, &shape_bounds_after, width, height);
shape_bounds_after = shape_bounds_after.transform(&resize_transform);
transform.post_concat(&resize_transform);
}
diff --git a/render-wasm/src/shapes/paths.rs b/render-wasm/src/shapes/paths.rs
index da04d49d2c..dfdc06ae01 100644
--- a/render-wasm/src/shapes/paths.rs
+++ b/render-wasm/src/shapes/paths.rs
@@ -14,23 +14,7 @@ pub enum Segment {
Close,
}
-impl Segment {
- fn xy(&self) -> Option {
- match self {
- Segment::MoveTo(xy) => Some(*xy),
- Segment::LineTo(xy) => Some(*xy),
- Segment::CurveTo((_, _, xy)) => Some(*xy),
- Segment::Close => None,
- }
- }
-
- pub fn is_close_to(&self, other: &Segment) -> bool {
- match (self.xy(), other.xy()) {
- (Some(a), Some(b)) => math::are_close_points(a, b),
- _ => false,
- }
- }
-}
+impl Segment {}
#[derive(Debug, Clone, PartialEq)]
pub struct Path {
@@ -92,8 +76,7 @@ impl Path {
}
}
- // TODO: handle error
- let open = subpaths::is_open_path(&segments).expect("Failed to determine if path is open");
+ let open = subpaths::is_open_path(&segments);
Self {
segments,
diff --git a/render-wasm/src/shapes/paths/subpaths.rs b/render-wasm/src/shapes/paths/subpaths.rs
index 4abe390d42..aa076e1ecd 100644
--- a/render-wasm/src/shapes/paths/subpaths.rs
+++ b/render-wasm/src/shapes/paths/subpaths.rs
@@ -1,11 +1,9 @@
-use super::Segment;
-use crate::math::are_close_points;
+use crate::shapes::paths::Point;
+use crate::shapes::paths::Segment;
-type Result = std::result::Result;
-
-#[derive(Debug, Clone, PartialEq)]
+#[derive(Debug, Clone)]
pub struct Subpath {
- segments: Vec,
+ pub segments: Vec,
closed: Option,
}
@@ -17,199 +15,188 @@ impl Subpath {
}
}
- pub fn starts_in(&self, other_segment: Option<&Segment>) -> bool {
- if let (Some(start), Some(end)) = (self.start(), other_segment) {
- start.is_close_to(end)
- } else {
- false
- }
+ pub fn start(&self) -> Option {
+ self.segments.first().and_then(|s| match s {
+ Segment::MoveTo(p) | Segment::LineTo(p) => Some(*p),
+ _ => None,
+ })
}
- pub fn ends_in(&self, other_segment: Option<&Segment>) -> bool {
- if let (Some(end), Some(start)) = (self.end(), other_segment) {
- end.is_close_to(start)
- } else {
- false
- }
- }
-
- pub fn start(&self) -> Option<&Segment> {
- self.segments.first()
- }
-
- pub fn end(&self) -> Option<&Segment> {
- self.segments.last()
- }
-
- pub fn is_empty(&self) -> bool {
- self.segments.is_empty()
+ pub fn end(&self) -> Option {
+ self.segments.iter().rev().find_map(|s| match s {
+ Segment::MoveTo(p) | Segment::LineTo(p) => Some(*p),
+ Segment::CurveTo((_, _, p)) => Some(*p),
+ _ => None,
+ })
}
pub fn is_closed(&self) -> bool {
self.closed.unwrap_or_else(|| self.calculate_closed())
}
- pub fn add_segment(&mut self, segment: Segment) {
- self.segments.push(segment);
- self.closed = None;
- }
-
pub fn reversed(&self) -> Self {
- let mut reversed = self.clone();
- reversed.segments.reverse();
- reversed
+ let mut rev = self.clone();
+ rev.segments.reverse();
+ rev.closed = None;
+ rev
}
fn calculate_closed(&self) -> bool {
if self.segments.is_empty() {
- return false;
+ return true;
}
-
- // Check if the path ends with a Close segment
if let Some(Segment::Close) = self.segments.last() {
return true;
}
-
- // Check if the first and last points are close to each other
- if let (Some(first), Some(last)) = (self.segments.first(), self.segments.last()) {
- let first_point = match first {
- Segment::MoveTo(xy) => xy,
- _ => return false,
- };
-
- let last_point = match last {
- Segment::LineTo(xy) => xy,
- Segment::CurveTo((_, _, xy)) => xy,
- _ => return false,
- };
-
- return are_close_points(*first_point, *last_point);
+ if let (Some(first), Some(last)) = (self.start(), self.end()) {
+ return are_close_points(first, last);
}
-
false
}
}
-impl Default for Subpath {
- fn default() -> Self {
- Self::new(vec![])
+fn are_close_points(a: Point, b: Point) -> bool {
+ let tol = 1e-1;
+ (a.0 - b.0).abs() < tol && (a.1 - b.1).abs() < tol
+}
+
+#[derive(Debug, Clone)]
+enum MergeMode {
+ EndStart,
+ StartEnd,
+ EndEnd,
+ StartStart,
+}
+
+impl TryFrom<(&Subpath, &Subpath)> for Subpath {
+ type Error = &'static str;
+ fn try_from((a, b): (&Subpath, &Subpath)) -> Result {
+ let mut segs = a.segments.clone();
+ segs.extend_from_slice(&b.segments);
+ Ok(Subpath::new(segs))
}
}
-/// Joins two subpaths into a single subpath
-impl TryFrom<(&Subpath, &Subpath)> for Subpath {
- type Error = String;
+pub fn closed_subpaths(subpaths: Vec) -> Vec {
+ let n = subpaths.len();
+ if n == 0 {
+ return vec![];
+ }
- fn try_from((subpath, other): (&Subpath, &Subpath)) -> Result {
- if subpath.is_empty() || other.is_empty() || subpath.end() != other.start() {
- return Err("Subpaths cannot be joined".to_string());
+ let mut used = vec![false; n];
+ let mut result = Vec::with_capacity(n);
+
+ for i in 0..n {
+ if used[i] {
+ continue;
}
- let mut segments = subpath.segments.clone();
- segments.extend_from_slice(&other.segments);
- Ok(Subpath::new(segments))
+ let mut current = subpaths[i].clone();
+ used[i] = true;
+ let mut merged_any = false;
+
+ loop {
+ if current.is_closed() {
+ break;
+ }
+
+ let mut did_merge = false;
+
+ for j in 0..n {
+ if used[j] || subpaths[j].is_closed() {
+ continue;
+ }
+
+ let candidate = &subpaths[j];
+ let maybe_merge = [
+ (current.end(), candidate.start(), MergeMode::EndStart),
+ (current.start(), candidate.end(), MergeMode::StartEnd),
+ (current.end(), candidate.end(), MergeMode::EndEnd),
+ (current.start(), candidate.start(), MergeMode::StartStart),
+ ]
+ .iter()
+ .find_map(|(p1, p2, mode)| {
+ if let (Some(a), Some(b)) = (p1, p2) {
+ if are_close_points(*a, *b) {
+ Some(mode.clone())
+ } else {
+ None
+ }
+ } else {
+ None
+ }
+ });
+
+ if let Some(mode) = maybe_merge {
+ if let Some(new_current) = try_merge(¤t, candidate, mode) {
+ used[j] = true;
+ current = new_current;
+ merged_any = true;
+ did_merge = true;
+ break;
+ }
+ }
+ }
+
+ if !did_merge {
+ break;
+ }
+ }
+
+ if !current.is_closed() && merged_any {
+ if let Some(start) = current.start() {
+ let mut segs = current.segments.clone();
+ segs.push(Segment::LineTo(start));
+ segs.push(Segment::Close);
+ current = Subpath::new(segs);
+ }
+ }
+
+ result.push(current);
+ }
+
+ result
+}
+
+fn try_merge(current: &Subpath, candidate: &Subpath, mode: MergeMode) -> Option {
+ match mode {
+ MergeMode::EndStart => Subpath::try_from((current, candidate)).ok(),
+ MergeMode::StartEnd => Subpath::try_from((candidate, current)).ok(),
+ MergeMode::EndEnd => Subpath::try_from((current, &candidate.reversed())).ok(),
+ MergeMode::StartStart => Subpath::try_from((&candidate.reversed(), current)).ok(),
}
}
-/// Groups segments into subpaths based on MoveTo segments
-fn get_subpaths(segments: &[Segment]) -> Vec {
- let mut subpaths: Vec = vec![];
- let mut current_subpath = Subpath::default();
+pub fn split_into_subpaths(segments: &[Segment]) -> Vec {
+ let mut subpaths = Vec::new();
+ let mut current_segments = Vec::new();
for segment in segments {
match segment {
Segment::MoveTo(_) => {
- if !current_subpath.is_empty() {
- subpaths.push(current_subpath);
+ // Start new subpath unless current is empty
+ if !current_segments.is_empty() {
+ subpaths.push(Subpath::new(current_segments.clone()));
+ current_segments.clear();
}
- current_subpath = Subpath::default();
- // Add the MoveTo segment to the new subpath
- current_subpath.add_segment(*segment);
- }
- _ => {
- current_subpath.add_segment(*segment);
+ current_segments.push(*segment);
}
+ _ => current_segments.push(*segment),
}
}
- if !current_subpath.is_empty() {
- subpaths.push(current_subpath);
+ // Push last subpath if any
+ if !current_segments.is_empty() {
+ subpaths.push(Subpath::new(current_segments));
}
subpaths
}
-/// Computes the merged candidate and the remaining, unmerged subpaths
-fn merge_paths(candidate: Subpath, others: Vec) -> Result<(Subpath, Vec)> {
- if candidate.is_closed() {
- return Ok((candidate, others));
- }
-
- let mut merged = candidate.clone();
- let mut other_without_merged = vec![];
-
- for subpath in others {
- // Only merge if the candidate is not already closed and the subpath can be meaningfully connected
- if !merged.is_closed() && !subpath.is_closed() {
- if merged.ends_in(subpath.start()) {
- merged = Subpath::try_from((&merged, &subpath))?;
- } else if merged.starts_in(subpath.end()) {
- merged = Subpath::try_from((&subpath, &merged))?;
- } else if merged.ends_in(subpath.end()) {
- merged = Subpath::try_from((&merged, &subpath.reversed()))?;
- } else if merged.starts_in(subpath.start()) {
- merged = Subpath::try_from((&subpath.reversed(), &merged))?;
- } else {
- other_without_merged.push(subpath);
- }
- } else {
- // If either subpath is closed, don't merge
- other_without_merged.push(subpath);
- }
- }
-
- Ok((merged, other_without_merged))
-}
-
-/// Searches a path for potential subpaths that can be closed and merges them
-fn closed_subpaths(
- current: &Subpath,
- others: &[Subpath],
- partial: &[Subpath],
-) -> Result> {
- let mut result = partial.to_vec();
-
- let (new_current, new_others) = if current.is_closed() {
- (current.clone(), others.to_vec())
- } else {
- merge_paths(current.clone(), others.to_vec())?
- };
-
- // we haven't found any matching subpaths -> advance
- if new_current == *current {
- result.push(current.clone());
- if new_others.is_empty() {
- return Ok(result);
- }
-
- closed_subpaths(&new_others[0], &new_others[1..], &result)
- }
- // if diffrent, we have to search again with the merged subpaths
- else {
- closed_subpaths(&new_current, &new_others, &result)
- }
-}
-
-pub fn is_open_path(segments: &[Segment]) -> Result {
- let subpaths = get_subpaths(segments);
- let closed_subpaths = if subpaths.len() > 1 {
- closed_subpaths(&subpaths[0], &subpaths[1..], &[])?
- } else {
- subpaths
- };
-
- // return true if any subpath is open
- Ok(closed_subpaths.iter().any(|subpath| !subpath.is_closed()))
+pub fn is_open_path(segments: &[Segment]) -> bool {
+ let subpaths = split_into_subpaths(segments);
+ let closed_subpaths = closed_subpaths(subpaths);
+ closed_subpaths.iter().any(|sp| !sp.is_closed())
}
#[cfg(test)]
@@ -235,8 +222,7 @@ mod tests {
Segment::Close,
];
- let result =
- subpaths::is_open_path(&segments).expect("Failed to determine if path is open");
+ let result = subpaths::is_open_path(&segments);
assert!(result, "Path should be open");
}
@@ -249,8 +235,7 @@ mod tests {
Segment::LineTo((223.0, 582.0)),
];
- let result =
- subpaths::is_open_path(&segments).expect("Failed to determine if path is open");
+ let result = subpaths::is_open_path(&segments);
assert!(!result, "Path should be closed");
}
@@ -300,16 +285,14 @@ mod tests {
Segment::LineTo((400.1158, 610.0)),
];
- let result =
- subpaths::is_open_path(&segments).expect("Failed to determine if path is open");
+ let result = subpaths::is_open_path(&segments);
assert!(result, "Path should be open");
}
#[test]
fn test_is_open_path_4() {
let segments = vec![];
- let result =
- subpaths::is_open_path(&segments).expect("Failed to determine if path is open");
+ let result = subpaths::is_open_path(&segments);
assert!(!result, "Path should be closed");
}
}
diff --git a/render-wasm/src/shapes/shadows.rs b/render-wasm/src/shapes/shadows.rs
index cf8c77f6a8..71e09a493c 100644
--- a/render-wasm/src/shapes/shadows.rs
+++ b/render-wasm/src/shapes/shadows.rs
@@ -3,28 +3,13 @@ use skia_safe::{self as skia, image_filters, ImageFilter, Paint};
use super::Color;
use crate::render::filters::compose_filters;
-#[derive(Debug, Clone, Copy, PartialEq)]
+#[derive(Debug, Default, Clone, Copy, PartialEq)]
pub enum ShadowStyle {
+ #[default]
Drop,
Inner,
}
-impl From for ShadowStyle {
- fn from(value: u8) -> Self {
- match value {
- 0 => Self::Drop,
- 1 => Self::Inner,
- _ => Self::default(),
- }
- }
-}
-
-impl Default for ShadowStyle {
- fn default() -> Self {
- Self::Drop
- }
-}
-
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct Shadow {
pub color: Color,
@@ -35,7 +20,6 @@ pub struct Shadow {
hidden: bool,
}
-// TODO: create shadows out of a chunk of bytes
impl Shadow {
pub fn new(
color: Color,
@@ -63,19 +47,6 @@ impl Shadow {
self.hidden
}
- pub fn get_drop_shadow_paint(
- &self,
- antialias: bool,
- blur_filter: Option<&ImageFilter>,
- ) -> Paint {
- let mut paint = Paint::default();
- let shadow_filter = self.get_drop_shadow_filter();
- let filter = compose_filters(blur_filter, shadow_filter.as_ref());
- paint.set_image_filter(filter);
- paint.set_anti_alias(antialias);
- paint
- }
-
pub fn get_drop_shadow_filter(&self) -> Option {
let mut filter = image_filters::drop_shadow_only(
(self.offset.0, self.offset.1),
diff --git a/render-wasm/src/shapes/shape_to_path.rs b/render-wasm/src/shapes/shape_to_path.rs
index ef63eec9dc..3996f12e7c 100644
--- a/render-wasm/src/shapes/shape_to_path.rs
+++ b/render-wasm/src/shapes/shape_to_path.rs
@@ -75,7 +75,7 @@ fn make_corner(
pub fn rect_segments(shape: &Shape, corners: Option) -> Vec {
let sr = shape.selrect;
- if let Some([r1, r2, r3, r4]) = corners {
+ let segments = if let Some([r1, r2, r3, r4]) = corners {
let p1 = (sr.x(), sr.y() + r1.y);
let p2 = (sr.x() + r1.x, sr.y());
let p3 = (sr.x() + sr.width() - r2.x, sr.y());
@@ -97,45 +97,55 @@ pub fn rect_segments(shape: &Shape, corners: Option) -> Vec {
Segment::LineTo(p1),
]
} else {
+ let p1 = (sr.x(), sr.y());
+ let p2 = (sr.x() + sr.width(), sr.y());
+ let p3 = (sr.x() + sr.width(), sr.y() + sr.height());
+ let p4 = (sr.x(), sr.y() + sr.height());
vec![
- Segment::MoveTo((sr.x(), sr.y())),
- Segment::LineTo((sr.x() + sr.width(), sr.y())),
- Segment::LineTo((sr.x() + sr.width(), sr.y() + sr.height())),
- Segment::LineTo((sr.x(), sr.y() + sr.height())),
+ Segment::MoveTo(p1),
+ Segment::LineTo(p2),
+ Segment::LineTo(p3),
+ Segment::LineTo(p4),
Segment::Close,
]
- }
+ };
+
+ transform_segments(segments, shape)
+}
+
+fn transform_point(p: (f32, f32), matrix: &skia_safe::Matrix) -> (f32, f32) {
+ let pt = skia_safe::Point::new(p.0, p.1);
+ let tp = matrix.map_point(pt);
+ (tp.x, tp.y)
}
pub fn circle_segments(shape: &Shape) -> Vec {
let sr = shape.selrect;
- let mx = sr.x() + sr.width() / 2.0;
- let my = sr.y() + sr.height() / 2.0;
- let ex = sr.x() + sr.width();
- let ey = sr.y() + sr.height();
-
let c = BEZIER_CIRCLE_C;
let c1x = sr.x() + (sr.width() / 2.0 * (1.0 - c));
let c2x = sr.x() + (sr.width() / 2.0 * (1.0 + c));
let c1y = sr.y() + (sr.height() / 2.0 * (1.0 - c));
let c2y = sr.y() + (sr.height() / 2.0 * (1.0 + c));
- let p1x = mx;
- let p1y = sr.y();
- let p2x = ex;
- let p2y = my;
- let p3x = mx;
- let p3y = ey;
- let p4x = sr.x();
- let p4y = my;
+ let mx = sr.x() + sr.width() / 2.0;
+ let my = sr.y() + sr.height() / 2.0;
+ let ex = sr.x() + sr.width();
+ let ey = sr.y() + sr.height();
- vec![
- Segment::MoveTo((p1x, p1y)),
- Segment::CurveTo(((c2x, p1y), (p2x, c1y), (p2x, p2y))),
- Segment::CurveTo(((p2x, c2y), (c2x, p3y), (p3x, p3y))),
- Segment::CurveTo(((c1x, p3y), (p4x, c2y), (p4x, p4y))),
- Segment::CurveTo(((p4x, c1y), (c1x, p1y), (p1x, p1y))),
- ]
+ let p1 = (mx, sr.y());
+ let p2 = (ex, my);
+ let p3 = (mx, ey);
+ let p4 = (sr.x(), my);
+
+ let segments = vec![
+ Segment::MoveTo(p1),
+ Segment::CurveTo(((c2x, p1.1), (p2.0, c1y), p2)),
+ Segment::CurveTo(((p2.0, c2y), (c2x, p3.1), p3)),
+ Segment::CurveTo(((c1x, p3.1), (p4.0, c2y), p4)),
+ Segment::CurveTo(((p4.0, c1y), (c1x, p1.1), p1)),
+ ];
+
+ transform_segments(segments, shape)
}
fn join_paths(path: Path, other: Path) -> Path {
@@ -144,6 +154,31 @@ fn join_paths(path: Path, other: Path) -> Path {
Path::new(segments)
}
+fn transform_segments(segments: Vec, shape: &Shape) -> Vec {
+ let mut matrix = shape.transform;
+ let center = shape.center();
+ matrix.post_translate(center);
+ matrix.pre_translate(-center);
+
+ if !matrix.is_identity() {
+ segments
+ .into_iter()
+ .map(|seg| match seg {
+ Segment::MoveTo(p) => Segment::MoveTo(transform_point(p, &matrix)),
+ Segment::LineTo(p) => Segment::LineTo(transform_point(p, &matrix)),
+ Segment::CurveTo((h1, h2, p)) => Segment::CurveTo((
+ transform_point(h1, &matrix),
+ transform_point(h2, &matrix),
+ transform_point(p, &matrix),
+ )),
+ Segment::Close => Segment::Close,
+ })
+ .collect()
+ } else {
+ segments
+ }
+}
+
impl ToPath for Shape {
fn to_path(
&self,
@@ -174,7 +209,10 @@ impl ToPath for Shape {
};
result = join_paths(result, shape.to_path(shapes, modifiers, structure));
}
- result
+ // Force closure of the group path
+ let mut segments = result.segments().clone();
+ segments.push(Segment::Close);
+ Path::new(segments)
}
Type::Bool(bool_data) => bool_data.path,
@@ -187,13 +225,14 @@ impl ToPath for Shape {
Type::SVGRaw(_) => Path::default(),
- Type::Text(text) => {
- let text_paths = TextPaths::new(text);
+ Type::Text(ref text) => {
+ let text_paths = TextPaths::new(text.clone());
let mut result = Path::default();
for (path, _) in text_paths.get_paths(true) {
result = join_paths(result, Path::from_skia_path(path));
}
- result
+
+ Path::new(transform_segments(result.segments().clone(), &shape))
}
}
}
diff --git a/render-wasm/src/shapes/strokes.rs b/render-wasm/src/shapes/strokes.rs
index e080a782c3..108b03bcd3 100644
--- a/render-wasm/src/shapes/strokes.rs
+++ b/render-wasm/src/shapes/strokes.rs
@@ -4,7 +4,7 @@ use std::collections::HashMap;
use super::Corners;
-#[derive(Debug, Clone, PartialEq)]
+#[derive(Debug, Clone, PartialEq, Copy)]
pub enum StrokeStyle {
Solid,
Dotted,
@@ -12,44 +12,17 @@ pub enum StrokeStyle {
Mixed,
}
-impl From for StrokeStyle {
- fn from(value: u8) -> Self {
- match value {
- 1 => StrokeStyle::Dotted,
- 2 => StrokeStyle::Dashed,
- 3 => StrokeStyle::Mixed,
- _ => StrokeStyle::Solid,
- }
- }
-}
-
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum StrokeCap {
- None,
- Line,
- Triangle,
- Rectangle,
- Circle,
- Diamond,
+ LineArrow,
+ TriangleArrow,
+ SquareMarker,
+ CircleMarker,
+ DiamondMarker,
Round,
Square,
}
-impl From for StrokeCap {
- fn from(value: u8) -> Self {
- match value {
- 1 => StrokeCap::Line,
- 2 => StrokeCap::Triangle,
- 3 => StrokeCap::Rectangle,
- 4 => StrokeCap::Circle,
- 5 => StrokeCap::Diamond,
- 6 => StrokeCap::Round,
- 7 => StrokeCap::Square,
- _ => StrokeCap::None,
- }
- }
-}
-
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum StrokeKind {
Inner,
@@ -62,8 +35,8 @@ pub struct Stroke {
pub fill: Fill,
pub width: f32,
pub style: StrokeStyle,
- pub cap_end: StrokeCap,
- pub cap_start: StrokeCap,
+ pub cap_end: Option,
+ pub cap_start: Option,
pub kind: StrokeKind,
}
@@ -77,35 +50,50 @@ impl Stroke {
}
}
- pub fn new_center_stroke(width: f32, style: u8, cap_start: u8, cap_end: u8) -> Self {
+ pub fn new_center_stroke(
+ width: f32,
+ style: StrokeStyle,
+ cap_start: Option,
+ cap_end: Option,
+ ) -> Self {
Stroke {
fill: Fill::Solid(SolidColor(skia::Color::TRANSPARENT)),
width,
- style: StrokeStyle::from(style),
- cap_end: StrokeCap::from(cap_end),
- cap_start: StrokeCap::from(cap_start),
+ style,
+ cap_end,
+ cap_start,
kind: StrokeKind::Center,
}
}
- pub fn new_inner_stroke(width: f32, style: u8, cap_start: u8, cap_end: u8) -> Self {
+ pub fn new_inner_stroke(
+ width: f32,
+ style: StrokeStyle,
+ cap_start: Option,
+ cap_end: Option,
+ ) -> Self {
Stroke {
fill: Fill::Solid(SolidColor(skia::Color::TRANSPARENT)),
width,
- style: StrokeStyle::from(style),
- cap_end: StrokeCap::from(cap_end),
- cap_start: StrokeCap::from(cap_start),
+ style,
+ cap_end,
+ cap_start,
kind: StrokeKind::Inner,
}
}
- pub fn new_outer_stroke(width: f32, style: u8, cap_start: u8, cap_end: u8) -> Self {
+ pub fn new_outer_stroke(
+ width: f32,
+ style: StrokeStyle,
+ cap_start: Option,
+ cap_end: Option,
+ ) -> Self {
Stroke {
fill: Fill::Solid(SolidColor(skia::Color::TRANSPARENT)),
width,
- style: StrokeStyle::from(style),
- cap_end: StrokeCap::from(cap_end),
- cap_start: StrokeCap::from(cap_start),
+ style,
+ cap_end,
+ cap_start,
kind: StrokeKind::Outer,
}
}
@@ -264,4 +252,11 @@ impl Stroke {
paint
}
+
+ pub fn is_transparent(&self) -> bool {
+ match &self.fill {
+ Fill::Solid(SolidColor(color)) => color.a() == 0,
+ _ => false,
+ }
+ }
}
diff --git a/render-wasm/src/shapes/text.rs b/render-wasm/src/shapes/text.rs
index 6cbfbd3052..e31bac1195 100644
--- a/render-wasm/src/shapes/text.rs
+++ b/render-wasm/src/shapes/text.rs
@@ -1,37 +1,138 @@
use crate::{
math::{Matrix, Rect},
- render::{default_font, filters::compose_filters, DEFAULT_EMOJI_FONT},
+ render::{default_font, DEFAULT_EMOJI_FONT},
};
+
+use core::f32;
+use macros::ToJs;
use skia_safe::{
self as skia,
- paint::Paint,
- textlayout::{ParagraphBuilder, ParagraphStyle},
- ImageFilter, MaskFilter,
+ paint::{self, Paint},
+ textlayout::ParagraphBuilder,
+ textlayout::ParagraphStyle,
+ textlayout::PositionWithAffinity,
};
use std::collections::HashSet;
use super::FontFamily;
-use crate::shapes::{self, merge_fills, set_paint_fill, Stroke, StrokeKind};
-use crate::utils::{get_fallback_fonts, get_font_collection, uuid_from_u32};
-use crate::wasm::fills::parse_fills_from_bytes;
+use crate::math::Point;
+use crate::shapes::{self, merge_fills};
+use crate::utils::{get_fallback_fonts, get_font_collection};
use crate::Uuid;
-#[derive(Debug, PartialEq, Clone, Copy)]
+// TODO: maybe move this to the wasm module?
+pub type ParagraphBuilderGroup = Vec;
+
+#[repr(u8)]
+#[derive(Debug, PartialEq, Clone, Copy, ToJs)]
pub enum GrowType {
- Fixed,
- AutoWidth,
- AutoHeight,
+ Fixed = 0,
+ AutoWidth = 1,
+ AutoHeight = 2,
}
-impl GrowType {
- pub fn from(grow_type: u8) -> Self {
- match grow_type {
- 0 => Self::Fixed,
- 1 => Self::AutoWidth,
- 2 => Self::AutoHeight,
- _ => unreachable!(),
+#[derive(Debug, PartialEq, Copy, Clone)]
+pub struct TextContentSize {
+ pub width: f32,
+ pub height: f32,
+ pub max_width: f32,
+}
+
+const DEFAULT_TEXT_CONTENT_SIZE: f32 = 0.01;
+
+impl TextContentSize {
+ pub fn default() -> Self {
+ Self {
+ width: DEFAULT_TEXT_CONTENT_SIZE,
+ height: DEFAULT_TEXT_CONTENT_SIZE,
+ max_width: DEFAULT_TEXT_CONTENT_SIZE,
}
}
+
+ pub fn new(width: f32, height: f32, max_width: f32) -> Self {
+ Self {
+ width,
+ height,
+ max_width,
+ }
+ }
+
+ pub fn new_with_size(width: f32, height: f32) -> Self {
+ Self {
+ width,
+ height,
+ max_width: DEFAULT_TEXT_CONTENT_SIZE,
+ }
+ }
+
+ pub fn set_size(&mut self, width: f32, height: f32) {
+ self.width = width;
+ self.height = height;
+ }
+
+ pub fn copy_finite_size(&mut self, size: TextContentSize) {
+ if f32::is_finite(size.width) {
+ self.width = size.width;
+ }
+ if f32::is_finite(size.max_width) {
+ self.max_width = size.max_width;
+ } else {
+ self.max_width = size.width;
+ }
+ if f32::is_finite(size.height) {
+ self.height = size.height;
+ }
+ }
+}
+
+#[derive(Debug)]
+pub struct TextContentLayoutResult(
+ Vec,
+ Vec>,
+ TextContentSize,
+);
+
+#[derive(Debug)]
+pub struct TextContentLayout {
+ pub paragraph_builders: Vec,
+ pub paragraphs: Vec>,
+}
+
+impl Clone for TextContentLayout {
+ fn clone(&self) -> Self {
+ Self {
+ paragraph_builders: vec![],
+ paragraphs: vec![],
+ }
+ }
+}
+
+impl PartialEq for TextContentLayout {
+ fn eq(&self, _other: &Self) -> bool {
+ true
+ }
+}
+
+impl TextContentLayout {
+ pub fn new() -> Self {
+ Self {
+ paragraph_builders: vec![],
+ paragraphs: vec![],
+ }
+ }
+
+ pub fn set(
+ &mut self,
+ paragraph_builders: Vec,
+ paragraphs: Vec>,
+ ) {
+ self.paragraph_builders = paragraph_builders;
+ self.paragraphs = paragraphs;
+ }
+
+ pub fn needs_update(&self) -> bool {
+ self.paragraph_builders.is_empty() || self.paragraphs.is_empty()
+ }
}
#[derive(Debug, PartialEq, Clone)]
@@ -39,30 +140,8 @@ pub struct TextContent {
pub paragraphs: Vec,
pub bounds: Rect,
pub grow_type: GrowType,
-}
-
-pub fn build_paragraphs_with_width(
- paragraphs: &mut [Vec],
- width: f32,
-) -> Vec> {
- paragraphs
- .iter_mut()
- .map(|builders| {
- builders
- .iter_mut()
- .map(|builder| {
- let mut paragraph = builder.build();
- // For auto-width, always layout with infinite width first to get intrinsic width
- paragraph.layout(f32::MAX);
- let intrinsic_width = paragraph.max_intrinsic_width().ceil();
- // Use the larger of the requested width or intrinsic width to prevent line breaks
- let final_width = f32::max(width, intrinsic_width);
- paragraph.layout(final_width);
- paragraph
- })
- .collect()
- })
- .collect()
+ pub size: TextContentSize,
+ pub layout: TextContentLayout,
}
impl TextContent {
@@ -71,6 +150,8 @@ impl TextContent {
paragraphs: Vec::new(),
bounds,
grow_type,
+ size: TextContentSize::default(),
+ layout: TextContentLayout::new(),
}
}
@@ -81,18 +162,19 @@ impl TextContent {
paragraphs,
bounds,
grow_type,
+ size: TextContentSize::new_with_size(bounds.width(), bounds.height()),
+ layout: TextContentLayout::new(),
}
}
+ pub fn bounds(&self) -> Rect {
+ self.bounds
+ }
+
pub fn set_xywh(&mut self, x: f32, y: f32, w: f32, h: f32) {
self.bounds = Rect::from_xywh(x, y, w, h);
}
- #[allow(dead_code)]
- pub fn width(&self) -> f32 {
- self.bounds.width()
- }
-
#[allow(dead_code)]
pub fn x(&self) -> f32 {
self.bounds.x()
@@ -107,91 +189,15 @@ impl TextContent {
self.paragraphs.push(paragraph);
}
- pub fn to_paragraphs(
- &self,
- blur: Option<&ImageFilter>,
- blur_mask: Option<&MaskFilter>,
- ) -> Vec> {
- let fonts = get_font_collection();
- let fallback_fonts = get_fallback_fonts();
- let mut paragraph_group = Vec::new();
-
- for paragraph in &self.paragraphs {
- let paragraph_style = paragraph.paragraph_to_style();
- let mut builder = ParagraphBuilder::new(¶graph_style, fonts);
- for leaf in ¶graph.children {
- let text_style = leaf.to_style(&self.bounds, fallback_fonts, blur, blur_mask);
- let text = leaf.apply_text_transform();
- builder.push_style(&text_style);
- builder.add_text(&text);
- }
- paragraph_group.push(vec![builder]);
- }
-
- paragraph_group
+ pub fn paragraphs(&self) -> &[Paragraph] {
+ &self.paragraphs
}
- pub fn to_stroke_paragraphs(
- &self,
- stroke: &Stroke,
- bounds: &Rect,
- blur: Option<&ImageFilter>,
- blur_mask: Option<&MaskFilter>,
- count_inner_strokes: usize,
- ) -> Vec> {
- let fallback_fonts = get_fallback_fonts();
- let fonts = get_font_collection();
- let mut paragraph_group = Vec::new();
-
- for paragraph in &self.paragraphs {
- let mut stroke_paragraphs_map: std::collections::HashMap =
- std::collections::HashMap::new();
-
- for leaf in paragraph.children.iter() {
- let mut text_paint = merge_fills(&leaf.fills, *bounds);
- if let Some(blur_mask) = blur_mask {
- text_paint.set_mask_filter(blur_mask.clone());
- }
- let stroke_paints = get_text_stroke_paints(
- stroke,
- bounds,
- &text_paint,
- blur,
- blur_mask,
- count_inner_strokes,
- );
- let text: String = leaf.apply_text_transform();
-
- for (paint_idx, stroke_paint) in stroke_paints.iter().enumerate() {
- let builder = stroke_paragraphs_map.entry(paint_idx).or_insert_with(|| {
- let paragraph_style = paragraph.paragraph_to_style();
- ParagraphBuilder::new(¶graph_style, fonts)
- });
- let stroke_paint = stroke_paint.clone();
- let stroke_style =
- leaf.to_stroke_style(&stroke_paint, fallback_fonts, blur, blur_mask);
- builder.push_style(&stroke_style);
- builder.add_text(&text);
- }
- }
-
- let stroke_paragraphs: Vec = (0..stroke_paragraphs_map.len())
- .map(|i| stroke_paragraphs_map.remove(&i).unwrap())
- .collect();
-
- paragraph_group.push(stroke_paragraphs);
- }
-
- paragraph_group
- }
-
- pub fn get_width(&self) -> f32 {
+ pub fn width(&self) -> f32 {
if self.grow_type() == GrowType::AutoWidth {
- let temp_paragraphs = self.to_paragraphs(None, None);
- let mut temp_paragraphs = temp_paragraphs;
- auto_width(&mut temp_paragraphs, f32::MAX).ceil()
+ self.size.width
} else {
- self.width()
+ self.bounds.width()
}
}
@@ -204,10 +210,7 @@ impl TextContent {
}
pub fn visual_bounds(&self) -> (f32, f32) {
- let paragraph_width = self.get_width();
- let mut paragraphs = self.to_paragraphs(None, None);
- let paragraph_height = auto_height(&mut paragraphs, paragraph_width);
- (paragraph_width, paragraph_height)
+ (self.size.width, self.size.height)
}
pub fn transform(&mut self, transform: &Matrix) {
@@ -219,6 +222,149 @@ impl TextContent {
let p2 = transform.map_point(skia::Point::new(right, bottom));
self.bounds = Rect::from_ltrb(p1.x, p1.y, p2.x, p2.y);
}
+
+ pub fn get_caret_position_at(&self, point: &Point) -> Option {
+ let mut offset_y = 0.0;
+ let paragraphs = self.layout.paragraphs.iter().flatten();
+
+ for paragraph in paragraphs {
+ let start_y = offset_y;
+ let end_y = offset_y + paragraph.height();
+ if point.y > start_y && point.y < end_y {
+ let position_with_affinity = paragraph.get_glyph_position_at_coordinate(*point);
+ return Some(position_with_affinity);
+ }
+ offset_y += paragraph.height();
+ }
+ None
+ }
+
+ /// Builds the ParagraphBuilders necessary to render
+ /// this text.
+ pub fn paragraph_builder_group_from_text(
+ &self,
+ use_shadow: Option,
+ ) -> Vec {
+ let fonts = get_font_collection();
+ let fallback_fonts = get_fallback_fonts();
+ let mut paragraph_group = Vec::new();
+
+ for paragraph in self.paragraphs() {
+ let paragraph_style = paragraph.paragraph_to_style();
+ let mut builder = ParagraphBuilder::new(¶graph_style, fonts);
+ for leaf in paragraph.children() {
+ let remove_alpha = use_shadow.unwrap_or(false) && !leaf.is_transparent();
+ let text_style = leaf.to_style(&self.bounds(), fallback_fonts, remove_alpha);
+ let text = leaf.apply_text_transform();
+ builder.push_style(&text_style);
+ builder.add_text(&text);
+ }
+ paragraph_group.push(vec![builder]);
+ }
+
+ paragraph_group
+ }
+
+ /// Performs a text auto layout without width limits.
+ /// This should be the same as text_auto_layout.
+ fn build_paragraphs_from_paragraph_builders(
+ &self,
+ paragraph_builders: &mut [ParagraphBuilderGroup],
+ width: f32,
+ ) -> Vec> {
+ let paragraphs = paragraph_builders
+ .iter_mut()
+ .map(|builders| {
+ builders
+ .iter_mut()
+ .map(|builder| {
+ let mut paragraph = builder.build();
+ // For auto-width, always layout with infinite width first to get intrinsic width
+ paragraph.layout(width);
+ paragraph
+ })
+ .collect()
+ })
+ .collect();
+ paragraphs
+ }
+
+ /// Performs an Auto Width text layout.
+ fn text_layout_auto_width(&self) -> TextContentLayoutResult {
+ let mut paragraph_builders = self.paragraph_builder_group_from_text(None);
+ let paragraphs =
+ self.build_paragraphs_from_paragraph_builders(&mut paragraph_builders, f32::MAX);
+ let (width, height) =
+ paragraphs
+ .iter()
+ .flatten()
+ .fold((0.0, 0.0), |(auto_width, auto_height), paragraph| {
+ (
+ f32::max(paragraph.max_intrinsic_width(), auto_width),
+ auto_height + paragraph.height(),
+ )
+ });
+
+ let size = TextContentSize::new(width.ceil(), height.ceil(), width.ceil());
+ TextContentLayoutResult(paragraph_builders, paragraphs, size)
+ }
+
+ /// Private function that performs
+ /// Performs an Auto Height text layout.
+ fn text_layout_auto_height(&self) -> TextContentLayoutResult {
+ let width = self.width();
+ let mut paragraph_builders = self.paragraph_builder_group_from_text(None);
+ let paragraphs =
+ self.build_paragraphs_from_paragraph_builders(&mut paragraph_builders, f32::INFINITY);
+ let height = paragraphs
+ .iter()
+ .flatten()
+ .fold(0.0, |auto_height, paragraph| {
+ auto_height + paragraph.height()
+ });
+
+ let size = TextContentSize::new_with_size(width.ceil(), height.ceil());
+ TextContentLayoutResult(paragraph_builders, paragraphs, size)
+ }
+
+ /// Performs a Fixed text layout.
+ fn text_layout_fixed(&self) -> TextContentLayoutResult {
+ let width = self.width();
+ let mut paragraph_builders = self.paragraph_builder_group_from_text(None);
+ let paragraphs =
+ self.build_paragraphs_from_paragraph_builders(&mut paragraph_builders, width);
+
+ let size = TextContentSize::new_with_size(width.ceil(), f32::INFINITY);
+ TextContentLayoutResult(paragraph_builders, paragraphs, size)
+ }
+
+ pub fn needs_update_layout(&self) -> bool {
+ self.layout.needs_update()
+ }
+
+ pub fn set_layout_from_result(&mut self, result: TextContentLayoutResult) {
+ self.layout.set(result.0, result.1);
+ self.size.copy_finite_size(result.2);
+ }
+
+ pub fn update_layout(&mut self, selrect: Rect) -> TextContentSize {
+ self.size.set_size(selrect.width(), selrect.height());
+ match self.grow_type() {
+ GrowType::AutoHeight => {
+ let result = self.text_layout_auto_height();
+ self.set_layout_from_result(result);
+ }
+ GrowType::AutoWidth => {
+ let result = self.text_layout_auto_width();
+ self.set_layout_from_result(result);
+ }
+ GrowType::Fixed => {
+ let result = self.text_layout_fixed();
+ self.set_layout_from_result(result);
+ }
+ }
+ self.size
+ }
}
impl Default for TextContent {
@@ -227,17 +373,31 @@ impl Default for TextContent {
paragraphs: vec![],
bounds: Rect::default(),
grow_type: GrowType::Fixed,
+ size: TextContentSize::default(),
+ layout: TextContentLayout::new(),
}
}
}
+pub type TextAlign = skia::textlayout::TextAlign;
+pub type TextDirection = skia::textlayout::TextDirection;
+pub type TextDecoration = skia::textlayout::TextDecoration;
+
+#[derive(Debug, PartialEq, Clone, Copy)]
+pub enum TextTransform {
+ Lowercase,
+ Uppercase,
+ Capitalize,
+}
+
+// FIXME: Rethink this type. We'll probably need to move the serialization to the
+// wasm module and store here meaningful model values (and/or skia type aliases)
#[derive(Debug, PartialEq, Clone)]
pub struct Paragraph {
- num_leaves: u32,
- text_align: u8,
- text_direction: u8,
- text_decoration: u8,
- text_transform: u8,
+ text_align: TextAlign,
+ text_direction: TextDirection,
+ text_decoration: Option,
+ text_transform: Option,
line_height: f32,
letter_spacing: f32,
typography_ref_file: Uuid,
@@ -248,11 +408,10 @@ pub struct Paragraph {
impl Default for Paragraph {
fn default() -> Self {
Self {
- num_leaves: 0,
- text_align: 0,
- text_direction: 0,
- text_decoration: 0,
- text_transform: 0,
+ text_align: TextAlign::default(),
+ text_direction: TextDirection::LTR,
+ text_decoration: None,
+ text_transform: None,
line_height: 1.0,
letter_spacing: 0.0,
typography_ref_file: Uuid::nil(),
@@ -265,11 +424,10 @@ impl Default for Paragraph {
impl Paragraph {
#[allow(clippy::too_many_arguments)]
pub fn new(
- num_leaves: u32,
- text_align: u8,
- text_direction: u8,
- text_decoration: u8,
- text_transform: u8,
+ text_align: TextAlign,
+ text_direction: TextDirection,
+ text_decoration: Option,
+ text_transform: Option,
line_height: f32,
letter_spacing: f32,
typography_ref_file: Uuid,
@@ -277,7 +435,6 @@ impl Paragraph {
children: Vec,
) -> Self {
Self {
- num_leaves,
text_align,
text_direction,
text_decoration,
@@ -295,8 +452,7 @@ impl Paragraph {
self.children = children;
}
- #[allow(dead_code)]
- pub fn get_children(&self) -> &Vec {
+ pub fn children(&self) -> &[TextLeaf] {
&self.children
}
@@ -305,20 +461,11 @@ impl Paragraph {
self.children.push(leaf);
}
+ // FIXME: move serialization to wasm module
pub fn paragraph_to_style(&self) -> ParagraphStyle {
let mut style = ParagraphStyle::default();
- style.set_text_align(match self.text_align {
- 0 => skia::textlayout::TextAlign::Left,
- 1 => skia::textlayout::TextAlign::Center,
- 2 => skia::textlayout::TextAlign::Right,
- 3 => skia::textlayout::TextAlign::Justify,
- _ => skia::textlayout::TextAlign::Left,
- });
- style.set_text_direction(match self.text_direction {
- 0 => skia::textlayout::TextDirection::LTR,
- 1 => skia::textlayout::TextDirection::RTL,
- _ => skia::textlayout::TextDirection::LTR,
- });
+ style.set_text_align(self.text_align);
+ style.set_text_direction(self.text_direction);
if !self.children.is_empty() {
let reference_child = self
@@ -328,7 +475,7 @@ impl Paragraph {
.unwrap_or(&self.children[0]);
let mut strut_style = skia::textlayout::StrutStyle::default();
- let line_height = self.line_height.max(1.0);
+ let line_height = self.line_height.max(0.0);
strut_style.set_font_size(reference_child.font_size);
strut_style.set_height(line_height);
strut_style.set_height_override(true);
@@ -363,12 +510,11 @@ pub struct TextLeaf {
font_family: FontFamily,
font_size: f32,
letter_spacing: f32,
- font_style: u8,
font_weight: i32,
font_variant_id: Uuid,
- text_decoration: u8,
- text_transform: u8,
- text_direction: u8,
+ text_decoration: Option,
+ text_transform: Option,
+ text_direction: TextDirection,
fills: Vec,
}
@@ -379,10 +525,9 @@ impl TextLeaf {
font_family: FontFamily,
font_size: f32,
letter_spacing: f32,
- font_style: u8,
- text_decoration: u8,
- text_transform: u8,
- text_direction: u8,
+ text_decoration: Option,
+ text_transform: Option,
+ text_direction: TextDirection,
font_weight: i32,
font_variant_id: Uuid,
fills: Vec,
@@ -392,7 +537,6 @@ impl TextLeaf {
font_family,
font_size,
letter_spacing,
- font_style,
text_decoration,
text_transform,
text_direction,
@@ -402,18 +546,29 @@ impl TextLeaf {
}
}
+ pub fn set_text(&mut self, text: String) {
+ self.text = text;
+ }
+
+ pub fn fills(&self) -> &[shapes::Fill] {
+ &self.fills
+ }
+
pub fn to_style(
&self,
content_bounds: &Rect,
fallback_fonts: &HashSet,
- _blur: Option<&ImageFilter>,
- blur_mask: Option<&MaskFilter>,
+ remove_alpha: bool,
) -> skia::textlayout::TextStyle {
let mut style = skia::textlayout::TextStyle::default();
- let mut paint = merge_fills(&self.fills, *content_bounds);
- if let Some(blur_mask) = blur_mask {
- paint.set_mask_filter(blur_mask.clone());
+ let mut paint = paint::Paint::default();
+
+ if remove_alpha {
+ paint.set_color(skia::Color::BLACK);
+ paint.set_alpha(255);
+ } else {
+ paint = merge_fills(&self.fills, *content_bounds);
}
style.set_foreground_paint(&paint);
@@ -422,11 +577,8 @@ impl TextLeaf {
style.set_half_leading(false);
style.set_decoration_type(match self.text_decoration {
- 0 => skia::textlayout::TextDecoration::NO_DECORATION,
- 1 => skia::textlayout::TextDecoration::UNDERLINE,
- 2 => skia::textlayout::TextDecoration::LINE_THROUGH,
- 3 => skia::textlayout::TextDecoration::OVERLINE,
- _ => skia::textlayout::TextDecoration::NO_DECORATION,
+ Some(text_decoration) => text_decoration,
+ None => skia::textlayout::TextDecoration::NO_DECORATION,
});
// Trick to avoid showing the text decoration
@@ -448,19 +600,25 @@ impl TextLeaf {
&self,
stroke_paint: &Paint,
fallback_fonts: &HashSet,
- blur: Option<&ImageFilter>,
- blur_mask: Option<&MaskFilter>,
+ remove_alpha: bool,
) -> skia::textlayout::TextStyle {
- let mut style = self.to_style(&Rect::default(), fallback_fonts, blur, blur_mask);
- style.set_foreground_paint(stroke_paint);
+ let mut style = self.to_style(&Rect::default(), fallback_fonts, remove_alpha);
+ if remove_alpha {
+ let mut paint = skia::Paint::default();
+ paint.set_style(stroke_paint.style());
+ paint.set_stroke_width(stroke_paint.stroke_width());
+ paint.set_color(skia::Color::BLACK);
+ paint.set_alpha(255);
+ style.set_foreground_paint(&paint);
+ } else {
+ style.set_foreground_paint(stroke_paint);
+ }
+
style.set_font_size(self.font_size);
style.set_letter_spacing(self.letter_spacing);
style.set_decoration_type(match self.text_decoration {
- 0 => skia::textlayout::TextDecoration::NO_DECORATION,
- 1 => skia::textlayout::TextDecoration::UNDERLINE,
- 2 => skia::textlayout::TextDecoration::LINE_THROUGH,
- 3 => skia::textlayout::TextDecoration::OVERLINE,
- _ => skia::textlayout::TextDecoration::NO_DECORATION,
+ Some(text_decoration) => text_decoration,
+ None => skia::textlayout::TextDecoration::NO_DECORATION,
});
style
}
@@ -471,9 +629,9 @@ impl TextLeaf {
pub fn apply_text_transform(&self) -> String {
match self.text_transform {
- 1 => self.text.to_uppercase(),
- 2 => self.text.to_lowercase(),
- 3 => self
+ Some(TextTransform::Uppercase) => self.text.to_uppercase(),
+ Some(TextTransform::Lowercase) => self.text.to_lowercase(),
+ Some(TextTransform::Capitalize) => self
.text
.split_whitespace()
.map(|word| {
@@ -485,346 +643,18 @@ impl TextLeaf {
})
.collect::>()
.join(" "),
- _ => self.text.clone(),
+ None => self.text.clone(),
}
}
pub fn scale_content(&mut self, value: f32) {
self.font_size *= value;
}
-}
-const RAW_PARAGRAPH_DATA_SIZE: usize = std::mem::size_of::();
-const RAW_LEAF_DATA_SIZE: usize = std::mem::size_of::();
-pub const RAW_LEAF_FILLS_SIZE: usize = 160;
-
-#[repr(C)]
-#[derive(Debug, Clone, Copy)]
-pub struct RawTextLeaf {
- font_style: u8,
- text_decoration: u8,
- text_transform: u8,
- font_size: f32,
- letter_spacing: f32,
- font_weight: i32,
- font_id: [u32; 4],
- font_family: [u8; 4],
- font_variant_id: [u32; 4],
- text_length: u32,
- total_fills: u32,
-}
-
-impl From<[u8; RAW_LEAF_DATA_SIZE]> for RawTextLeaf {
- fn from(bytes: [u8; RAW_LEAF_DATA_SIZE]) -> Self {
- unsafe { std::mem::transmute(bytes) }
- }
-}
-
-impl TryFrom<&[u8]> for RawTextLeaf {
- type Error = String;
- fn try_from(bytes: &[u8]) -> Result {
- let data: [u8; RAW_LEAF_DATA_SIZE] = bytes
- .get(0..RAW_LEAF_DATA_SIZE)
- .and_then(|slice| slice.try_into().ok())
- .ok_or("Invalid text leaf data".to_string())?;
- Ok(RawTextLeaf::from(data))
- }
-}
-
-#[allow(dead_code)]
-#[repr(C)]
-#[derive(Debug, Clone)]
-pub struct RawTextLeafData {
- font_style: u8,
- text_decoration: u8,
- text_transform: u8,
- text_direction: u8,
- font_size: f32,
- letter_spacing: f32,
- font_weight: i32,
- font_id: [u32; 4],
- font_family: [u8; 4],
- font_variant_id: [u32; 4],
- text_length: u32,
- total_fills: u32,
- fills: Vec,
-}
-
-impl From<&[u8]> for RawTextLeafData {
- fn from(bytes: &[u8]) -> Self {
- let text_leaf: RawTextLeaf = RawTextLeaf::try_from(bytes).unwrap();
- let total_fills = text_leaf.total_fills as usize;
-
- // Use checked_mul to prevent overflow
- let fills_size = total_fills
- .checked_mul(RAW_LEAF_FILLS_SIZE)
- .expect("Overflow occurred while calculating fills size");
-
- let fills_start = RAW_LEAF_DATA_SIZE;
- let fills_end = fills_start + fills_size;
- let buffer = &bytes[fills_start..fills_end];
- let fills = parse_fills_from_bytes(buffer, total_fills);
-
- Self {
- font_style: text_leaf.font_style,
- text_decoration: text_leaf.text_decoration,
- text_transform: text_leaf.text_transform,
- text_direction: 0, // TODO: Añadirlo
- font_size: text_leaf.font_size,
- letter_spacing: text_leaf.letter_spacing,
- font_weight: text_leaf.font_weight,
- font_id: text_leaf.font_id,
- font_family: text_leaf.font_family,
- font_variant_id: text_leaf.font_variant_id,
- text_length: text_leaf.text_length,
- total_fills: text_leaf.total_fills,
- fills,
- }
- }
-}
-
-#[repr(C)]
-#[repr(align(4))]
-#[derive(Debug, Clone, Copy)]
-pub struct RawParagraphData {
- num_leaves: u32,
- text_align: u8,
- text_direction: u8,
- text_decoration: u8,
- text_transform: u8,
- line_height: f32,
- letter_spacing: f32,
- typography_ref_file: [u32; 4],
- typography_ref_id: [u32; 4],
-}
-
-impl From<[u8; RAW_PARAGRAPH_DATA_SIZE]> for RawParagraphData {
- fn from(bytes: [u8; RAW_PARAGRAPH_DATA_SIZE]) -> Self {
- unsafe { std::mem::transmute(bytes) }
- }
-}
-
-impl TryFrom<&[u8]> for RawParagraphData {
- type Error = String;
- fn try_from(bytes: &[u8]) -> Result {
- let data: [u8; RAW_PARAGRAPH_DATA_SIZE] = bytes
- .get(0..RAW_PARAGRAPH_DATA_SIZE)
- .and_then(|slice| slice.try_into().ok())
- .ok_or("Invalid paragraph data".to_string())?;
- Ok(RawParagraphData::from(data))
- }
-}
-
-impl RawTextData {
- fn text_from_bytes(buffer: &[u8], offset: usize, text_length: u32) -> (String, usize) {
- let text_length = text_length as usize;
- let text_end = offset + text_length;
-
- if text_end > buffer.len() {
- panic!(
- "Invalid text range: offset={}, text_end={}, buffer_len={}",
- offset,
- text_end,
- buffer.len()
- );
- }
-
- let text_utf8 = buffer[offset..text_end].to_vec();
- if text_utf8.is_empty() {
- return (String::new(), text_end);
- }
-
- let text = String::from_utf8_lossy(&text_utf8).to_string();
- (text, text_end)
- }
-}
-
-pub struct RawTextData {
- pub paragraph: Paragraph,
-}
-
-impl From<&Vec> for RawTextData {
- fn from(bytes: &Vec) -> Self {
- let paragraph = RawParagraphData::try_from(&bytes[..RAW_PARAGRAPH_DATA_SIZE]).unwrap();
- let mut offset = RAW_PARAGRAPH_DATA_SIZE;
- let mut raw_text_leaves: Vec = Vec::new();
- let mut text_leaves: Vec = Vec::new();
-
- for _ in 0..paragraph.num_leaves {
- let text_leaf = RawTextLeafData::from(&bytes[offset..]);
- raw_text_leaves.push(text_leaf.clone());
- offset += RAW_LEAF_DATA_SIZE + (text_leaf.total_fills as usize * RAW_LEAF_FILLS_SIZE);
- }
-
- for text_leaf in raw_text_leaves.iter() {
- let (text, new_offset) =
- RawTextData::text_from_bytes(bytes, offset, text_leaf.text_length);
- offset = new_offset;
-
- let font_id = uuid_from_u32(text_leaf.font_id);
- let font_variant_id = uuid_from_u32(text_leaf.font_variant_id);
-
- let font_family = FontFamily::new(
- font_id,
- text_leaf.font_weight as u32,
- text_leaf.font_style.into(),
- );
-
- let new_text_leaf = TextLeaf::new(
- text,
- font_family,
- text_leaf.font_size,
- text_leaf.letter_spacing,
- text_leaf.font_style,
- text_leaf.text_decoration,
- text_leaf.text_transform,
- text_leaf.text_direction,
- text_leaf.font_weight,
- font_variant_id,
- text_leaf.fills.clone(),
- );
- text_leaves.push(new_text_leaf);
- }
-
- let typography_ref_file = uuid_from_u32(paragraph.typography_ref_file);
- let typography_ref_id = uuid_from_u32(paragraph.typography_ref_id);
-
- let paragraph = Paragraph::new(
- paragraph.num_leaves,
- paragraph.text_align,
- paragraph.text_direction,
- paragraph.text_decoration,
- paragraph.text_transform,
- paragraph.line_height,
- paragraph.letter_spacing,
- typography_ref_file,
- typography_ref_id,
- text_leaves.clone(),
- );
-
- Self { paragraph }
- }
-}
-
-pub fn get_built_paragraphs(
- paragraphs: &mut [Vec],
- width: f32,
-) -> Vec> {
- build_paragraphs_with_width(paragraphs, width)
-}
-
-pub fn auto_width(paragraphs: &mut [Vec], width: f32) -> f32 {
- let built_paragraphs = get_built_paragraphs(paragraphs, width);
-
- built_paragraphs
- .iter()
- .flatten()
- .fold(0.0, |auto_width, p| {
- f32::max(p.max_intrinsic_width(), auto_width)
+ pub fn is_transparent(&self) -> bool {
+ self.fills.iter().all(|fill| match fill {
+ shapes::Fill::Solid(shapes::SolidColor(color)) => color.a() == 0,
+ _ => false,
})
-}
-
-pub fn auto_height(paragraphs: &mut [Vec], width: f32) -> f32 {
- paragraphs.iter_mut().fold(0.0, |auto_height, p| {
- p.iter_mut().fold(auto_height, |auto_height, paragraph| {
- let mut paragraph = paragraph.build();
- paragraph.layout(width);
- auto_height + paragraph.height()
- })
- })
-}
-
-fn get_text_stroke_paints(
- stroke: &Stroke,
- bounds: &Rect,
- text_paint: &Paint,
- blur: Option<&ImageFilter>,
- blur_mask: Option<&MaskFilter>,
- count_inner_strokes: usize,
-) -> Vec {
- let mut paints = Vec::new();
-
- match stroke.kind {
- StrokeKind::Inner => {
- let shader = text_paint.shader();
- let mut is_opaque = true;
-
- if shader.is_some() {
- is_opaque = shader.unwrap().is_opaque();
- }
-
- if is_opaque && count_inner_strokes == 1 {
- let mut paint = text_paint.clone();
- paint.set_style(skia::PaintStyle::Fill);
- paint.set_anti_alias(true);
- if let Some(blur) = blur {
- paint.set_image_filter(blur.clone());
- }
- paints.push(paint);
- let mut paint = skia::Paint::default();
- paint.set_style(skia::PaintStyle::Stroke);
- paint.set_blend_mode(skia::BlendMode::SrcIn);
- paint.set_anti_alias(true);
- paint.set_stroke_width(stroke.width * 2.0);
- set_paint_fill(&mut paint, &stroke.fill, bounds);
- if let Some(blur) = blur {
- paint.set_image_filter(blur.clone());
- }
- paints.push(paint);
- } else {
- let mut paint = text_paint.clone();
- paint.set_style(skia::PaintStyle::Fill);
- paint.set_anti_alias(false);
- set_paint_fill(&mut paint, &stroke.fill, bounds);
- paints.push(paint);
-
- let mut paint = skia::Paint::default();
- let image_filter =
- skia_safe::image_filters::erode((stroke.width, stroke.width), None, None);
-
- let filter = compose_filters(blur, image_filter.as_ref());
- paint.set_image_filter(filter);
- paint.set_anti_alias(false);
- paint.set_blend_mode(skia::BlendMode::DstOut);
- paints.push(paint);
- }
- }
- StrokeKind::Center => {
- let mut paint = skia::Paint::default();
- paint.set_style(skia::PaintStyle::Stroke);
- paint.set_anti_alias(true);
- paint.set_stroke_width(stroke.width);
-
- set_paint_fill(&mut paint, &stroke.fill, bounds);
- if let Some(blur) = blur {
- paint.set_image_filter(blur.clone());
- }
-
- paints.push(paint);
- }
- StrokeKind::Outer => {
- let mut paint = skia::Paint::default();
- paint.set_style(skia::PaintStyle::Stroke);
- paint.set_blend_mode(skia::BlendMode::DstOver);
- paint.set_anti_alias(true);
- paint.set_stroke_width(stroke.width * 2.0);
- set_paint_fill(&mut paint, &stroke.fill, bounds);
- if let Some(blur_mask) = blur_mask {
- paint.set_mask_filter(blur_mask.clone());
- }
- paints.push(paint);
-
- let mut paint = skia::Paint::default();
- paint.set_style(skia::PaintStyle::Fill);
- paint.set_blend_mode(skia::BlendMode::Clear);
- paint.set_color(skia::Color::TRANSPARENT);
- paint.set_anti_alias(true);
- if let Some(blur_mask) = blur_mask {
- paint.set_mask_filter(blur_mask.clone());
- }
- paints.push(paint);
- }
}
-
- paints
}
diff --git a/render-wasm/src/shapes/text_paths.rs b/render-wasm/src/shapes/text_paths.rs
index 11c987055e..4bc1d1d628 100644
--- a/render-wasm/src/shapes/text_paths.rs
+++ b/render-wasm/src/shapes/text_paths.rs
@@ -12,17 +12,16 @@ pub struct TextPaths(TextContent);
// It's an example of how to convert texts to paths
#[allow(dead_code)]
impl TextPaths {
- pub fn new(content: TextContent) -> Self {
- Self(content)
+ pub fn new(text_content: TextContent) -> Self {
+ Self(text_content)
}
pub fn get_paths(&self, antialias: bool) -> Vec<(skia::Path, skia::Paint)> {
let mut paths = Vec::new();
-
let mut offset_y = self.bounds.y();
- let mut paragraphs = self.to_paragraphs(None, None);
+ let mut paragraph_builders = self.0.paragraph_builder_group_from_text(None);
- for paragraphs in paragraphs.iter_mut() {
+ for paragraphs in paragraph_builders.iter_mut() {
for paragraph_builder in paragraphs.iter_mut() {
// 1. Get paragraph and set the width layout
let mut skia_paragraph = paragraph_builder.build();
diff --git a/render-wasm/src/state/shapes_pool.rs b/render-wasm/src/state/shapes_pool.rs
index 125a80a141..e349594742 100644
--- a/render-wasm/src/state/shapes_pool.rs
+++ b/render-wasm/src/state/shapes_pool.rs
@@ -78,4 +78,13 @@ impl ShapesPool {
let idx = *self.shapes_uuid_to_idx.get(id)?;
Some(&self.shapes[idx])
}
+
+ #[allow(dead_code)]
+ pub fn iter(&self) -> std::slice::Iter<'_, Shape> {
+ self.shapes.iter()
+ }
+
+ pub fn iter_mut(&mut self) -> std::slice::IterMut<'_, Shape> {
+ self.shapes.iter_mut()
+ }
}
diff --git a/render-wasm/src/view.rs b/render-wasm/src/view.rs
index a78c11f6a3..8f21a27eae 100644
--- a/render-wasm/src/view.rs
+++ b/render-wasm/src/view.rs
@@ -1,5 +1,7 @@
use skia_safe::Rect;
+use crate::math::{Matrix, Point};
+
#[derive(Debug, Copy, Clone)]
pub(crate) struct Viewbox {
pub pan_x: f32,
@@ -53,7 +55,18 @@ impl Viewbox {
.set_wh(self.width / self.zoom, self.height / self.zoom);
}
+ pub fn pan(&self) -> Point {
+ Point::new(self.pan_x, self.pan_y)
+ }
+
pub fn zoom(&self) -> f32 {
self.zoom
}
+
+ pub fn get_matrix(&self) -> Matrix {
+ let mut matrix = Matrix::new_identity();
+ matrix.post_translate(self.pan());
+ matrix.post_scale((self.zoom, self.zoom), None);
+ matrix
+ }
}
diff --git a/render-wasm/src/wasm.rs b/render-wasm/src/wasm.rs
index b905da4687..8002e462c4 100644
--- a/render-wasm/src/wasm.rs
+++ b/render-wasm/src/wasm.rs
@@ -1,6 +1,10 @@
+pub mod blend;
+pub mod blurs;
pub mod fills;
pub mod fonts;
-pub mod layout;
+pub mod layouts;
pub mod paths;
+pub mod shadows;
+pub mod shapes;
pub mod strokes;
pub mod text;
diff --git a/render-wasm/src/wasm/blend.rs b/render-wasm/src/wasm/blend.rs
new file mode 100644
index 0000000000..d0dcbad118
--- /dev/null
+++ b/render-wasm/src/wasm/blend.rs
@@ -0,0 +1,65 @@
+use macros::ToJs;
+use skia_safe as skia;
+
+use crate::shapes::BlendMode;
+use crate::{with_current_shape_mut, STATE};
+
+#[derive(Debug, PartialEq, Clone, Copy, ToJs)]
+#[repr(u8)]
+#[allow(dead_code)]
+pub enum RawBlendMode {
+ Normal = 3,
+ Screen = 14,
+ Overlay = 15,
+ Darken = 16,
+ Lighten = 17,
+ ColorDodge = 18,
+ ColorBurn = 19,
+ HardLight = 20,
+ SoftLight = 21,
+ Difference = 22,
+ Exclusion = 23,
+ Multiply = 24,
+ Hue = 25,
+ Saturation = 26,
+ Color = 27,
+ Luminosity = 28,
+}
+
+impl From for RawBlendMode {
+ fn from(value: u8) -> Self {
+ unsafe { std::mem::transmute(value) }
+ }
+}
+
+impl From for BlendMode {
+ fn from(value: RawBlendMode) -> Self {
+ match value {
+ RawBlendMode::Normal => BlendMode(skia::BlendMode::SrcOver),
+ RawBlendMode::Screen => BlendMode(skia::BlendMode::Screen),
+ RawBlendMode::Overlay => BlendMode(skia::BlendMode::Overlay),
+ RawBlendMode::Darken => BlendMode(skia::BlendMode::Darken),
+ RawBlendMode::Lighten => BlendMode(skia::BlendMode::Lighten),
+ RawBlendMode::ColorDodge => BlendMode(skia::BlendMode::ColorDodge),
+ RawBlendMode::ColorBurn => BlendMode(skia::BlendMode::ColorBurn),
+ RawBlendMode::HardLight => BlendMode(skia::BlendMode::HardLight),
+ RawBlendMode::SoftLight => BlendMode(skia::BlendMode::SoftLight),
+ RawBlendMode::Difference => BlendMode(skia::BlendMode::Difference),
+ RawBlendMode::Exclusion => BlendMode(skia::BlendMode::Exclusion),
+ RawBlendMode::Multiply => BlendMode(skia::BlendMode::Multiply),
+ RawBlendMode::Hue => BlendMode(skia::BlendMode::Hue),
+ RawBlendMode::Saturation => BlendMode(skia::BlendMode::Saturation),
+ RawBlendMode::Color => BlendMode(skia::BlendMode::Color),
+ RawBlendMode::Luminosity => BlendMode(skia::BlendMode::Luminosity),
+ }
+ }
+}
+
+#[no_mangle]
+pub extern "C" fn set_shape_blend_mode(mode: u8) {
+ let mode = RawBlendMode::from(mode);
+
+ with_current_shape_mut!(state, |shape: &mut Shape| {
+ shape.set_blend_mode(mode.into());
+ });
+}
diff --git a/render-wasm/src/wasm/blurs.rs b/render-wasm/src/wasm/blurs.rs
new file mode 100644
index 0000000000..700ac053bc
--- /dev/null
+++ b/render-wasm/src/wasm/blurs.rs
@@ -0,0 +1,40 @@
+use macros::ToJs;
+
+use crate::shapes::{Blur, BlurType};
+use crate::{with_current_shape_mut, STATE};
+
+#[derive(Debug, Clone, Copy, PartialEq, ToJs)]
+#[repr(u8)]
+#[allow(dead_code)]
+pub enum RawBlurType {
+ LayerBlur = 0, // odd naming to comply with cljs value
+}
+
+impl From for RawBlurType {
+ fn from(value: u8) -> Self {
+ unsafe { std::mem::transmute(value) }
+ }
+}
+
+impl From for BlurType {
+ fn from(value: RawBlurType) -> Self {
+ match value {
+ RawBlurType::LayerBlur => BlurType::LayerBlur,
+ }
+ }
+}
+
+#[no_mangle]
+pub extern "C" fn set_shape_blur(blur_type: u8, hidden: bool, value: f32) {
+ with_current_shape_mut!(state, |shape: &mut Shape| {
+ let blur_type = RawBlurType::from(blur_type);
+ shape.set_blur(Some(Blur::new(blur_type.into(), hidden, value)));
+ });
+}
+
+#[no_mangle]
+pub extern "C" fn clear_shape_blur() {
+ with_current_shape_mut!(state, |shape: &mut Shape| {
+ shape.set_blur(None);
+ });
+}
diff --git a/render-wasm/src/wasm/fills.rs b/render-wasm/src/wasm/fills.rs
index 29c0d573d6..24935e7491 100644
--- a/render-wasm/src/wasm/fills.rs
+++ b/render-wasm/src/wasm/fills.rs
@@ -1,16 +1,18 @@
-mod gradient;
-mod image;
-mod solid;
+use macros::ToJs;
use crate::mem;
use crate::shapes;
use crate::with_current_shape_mut;
use crate::STATE;
+mod gradient;
+mod image;
+mod solid;
+
const RAW_FILL_DATA_SIZE: usize = std::mem::size_of::();
#[repr(C, u8, align(4))]
-#[derive(Debug, PartialEq, Clone, Copy)]
+#[derive(Debug, PartialEq, Clone, Copy, ToJs)]
#[allow(dead_code)]
pub enum RawFillData {
Solid(solid::RawSolidData) = 0x00,
@@ -51,6 +53,7 @@ impl TryFrom<&[u8]> for RawFillData {
}
}
+// FIXME: return Result
pub fn parse_fills_from_bytes(buffer: &[u8], num_fills: usize) -> Vec {
buffer
.chunks_exact(RAW_FILL_DATA_SIZE)
diff --git a/render-wasm/src/wasm/fills/image.rs b/render-wasm/src/wasm/fills/image.rs
index 15ab5e037f..b7075899ff 100644
--- a/render-wasm/src/wasm/fills/image.rs
+++ b/render-wasm/src/wasm/fills/image.rs
@@ -1,6 +1,12 @@
+use crate::mem;
+use crate::mem::SerializableResult;
+use crate::uuid::Uuid;
+use crate::with_state_mut;
+use crate::STATE;
use crate::{shapes::ImageFill, utils::uuid_from_u32_quartet};
const FLAG_KEEP_ASPECT_RATIO: u8 = 1 << 0;
+const IMAGE_IDS_SIZE: usize = 32;
#[derive(Debug, Clone, Copy, PartialEq)]
#[repr(C)]
@@ -31,3 +37,50 @@ impl From for ImageFill {
)
}
}
+
+#[repr(C)]
+#[derive(Clone, Debug)]
+pub struct ShapeImageIds {
+ shape_id: Uuid,
+ image_id: Uuid,
+}
+
+impl From<[u8; IMAGE_IDS_SIZE]> for ShapeImageIds {
+ fn from(bytes: [u8; IMAGE_IDS_SIZE]) -> Self {
+ let shape_id = Uuid::from_bytes(bytes[0..16].try_into().unwrap());
+ let image_id = Uuid::from_bytes(bytes[16..32].try_into().unwrap());
+ ShapeImageIds { shape_id, image_id }
+ }
+}
+
+impl TryFrom> for ShapeImageIds {
+ type Error = &'static str;
+
+ fn try_from(value: Vec) -> Result {
+ let mut arr = [0u8; IMAGE_IDS_SIZE];
+ arr.copy_from_slice(&value);
+ Ok(ShapeImageIds::from(arr))
+ }
+}
+
+#[no_mangle]
+pub extern "C" fn store_image() {
+ let bytes = mem::bytes();
+ let ids = ShapeImageIds::try_from(bytes[0..IMAGE_IDS_SIZE].to_vec()).unwrap();
+ let image_bytes = &bytes[IMAGE_IDS_SIZE..];
+
+ with_state_mut!(state, {
+ if let Err(msg) = state
+ .render_state_mut()
+ .add_image(ids.image_id, image_bytes)
+ {
+ eprintln!("{}", msg);
+ }
+ });
+
+ with_state_mut!(state, {
+ state.update_tile_for_shape(ids.shape_id);
+ });
+
+ mem::free_bytes();
+}
diff --git a/render-wasm/src/wasm/fonts.rs b/render-wasm/src/wasm/fonts.rs
index b4295e63d6..bdc85ac124 100644
--- a/render-wasm/src/wasm/fonts.rs
+++ b/render-wasm/src/wasm/fonts.rs
@@ -1,9 +1,33 @@
+use macros::ToJs;
+
use crate::mem;
+use crate::shapes::{FontFamily, FontStyle};
use crate::utils::uuid_from_u32_quartet;
use crate::with_state_mut;
use crate::STATE;
-use crate::shapes::FontFamily;
+#[derive(Debug, PartialEq, Clone, Copy, ToJs)]
+#[repr(u8)]
+#[allow(dead_code)]
+pub enum RawFontStyle {
+ Normal = 0,
+ Italic = 1,
+}
+
+impl From for RawFontStyle {
+ fn from(value: u8) -> Self {
+ unsafe { std::mem::transmute(value) }
+ }
+}
+
+impl From for FontStyle {
+ fn from(value: RawFontStyle) -> Self {
+ match value {
+ RawFontStyle::Normal => FontStyle::Normal,
+ RawFontStyle::Italic => FontStyle::Italic,
+ }
+ }
+}
#[no_mangle]
pub extern "C" fn store_font(
@@ -23,8 +47,9 @@ pub extern "C" fn store_font(
with_state_mut!(state, {
let id = uuid_from_u32_quartet(a2, b2, c2, d2);
let font_bytes = mem::bytes();
+ let font_style = RawFontStyle::from(style);
- let family = FontFamily::new(id, weight, style.into());
+ let family = FontFamily::new(id, weight, font_style.into());
let _ =
state
.render_state_mut()
@@ -52,7 +77,8 @@ pub extern "C" fn is_font_uploaded(
) -> bool {
with_state_mut!(state, {
let id = uuid_from_u32_quartet(a, b, c, d);
- let family = FontFamily::new(id, weight, style.into());
+ let font_style = RawFontStyle::from(style);
+ let family = FontFamily::new(id, weight, font_style.into());
let res = state.render_state().fonts().has_family(&family, is_emoji);
res
diff --git a/render-wasm/src/wasm/layout.rs b/render-wasm/src/wasm/layout.rs
deleted file mode 100644
index 2eb7139433..0000000000
--- a/render-wasm/src/wasm/layout.rs
+++ /dev/null
@@ -1,249 +0,0 @@
-use crate::mem;
-use crate::shapes::{self, ConstraintH, ConstraintV, VerticalAlign};
-use crate::{uuid_from_u32_quartet, with_current_shape_mut, with_state, with_state_mut, STATE};
-
-#[no_mangle]
-pub extern "C" fn set_shape_constraint_h(constraint: u8) {
- with_current_shape_mut!(state, |shape: &mut Shape| {
- shape.set_constraint_h(ConstraintH::from(constraint));
- });
-}
-
-#[no_mangle]
-pub extern "C" fn set_shape_constraint_v(constraint: u8) {
- with_current_shape_mut!(state, |shape: &mut Shape| {
- shape.set_constraint_v(ConstraintV::from(constraint));
- });
-}
-
-#[no_mangle]
-pub extern "C" fn clear_shape_constraints() {
- with_current_shape_mut!(state, |shape: &mut Shape| {
- shape.clear_constraints();
- });
-}
-
-#[no_mangle]
-pub extern "C" fn set_shape_vertical_align(align: u8) {
- with_current_shape_mut!(state, |shape: &mut Shape| {
- shape.set_vertical_align(VerticalAlign::from(align));
- });
-}
-
-#[no_mangle]
-pub extern "C" fn clear_shape_layout() {
- with_current_shape_mut!(state, |shape: &mut Shape| {
- shape.clear_layout();
- });
-}
-
-#[no_mangle]
-pub extern "C" fn set_flex_layout_data(
- dir: u8,
- row_gap: f32,
- column_gap: f32,
- align_items: u8,
- align_content: u8,
- justify_items: u8,
- justify_content: u8,
- wrap_type: u8,
- padding_top: f32,
- padding_right: f32,
- padding_bottom: f32,
- padding_left: f32,
-) {
- let dir = shapes::FlexDirection::from_u8(dir);
- let align_items = shapes::AlignItems::from_u8(align_items);
- let align_content = shapes::AlignContent::from_u8(align_content);
- let justify_items = shapes::JustifyItems::from_u8(justify_items);
- let justify_content = shapes::JustifyContent::from_u8(justify_content);
- let wrap_type = shapes::WrapType::from_u8(wrap_type);
-
- with_current_shape_mut!(state, |shape: &mut Shape| {
- shape.set_flex_layout_data(
- dir,
- row_gap,
- column_gap,
- align_items,
- align_content,
- justify_items,
- justify_content,
- wrap_type,
- padding_top,
- padding_right,
- padding_bottom,
- padding_left,
- );
- });
-}
-
-#[no_mangle]
-pub extern "C" fn set_layout_child_data(
- margin_top: f32,
- margin_right: f32,
- margin_bottom: f32,
- margin_left: f32,
- h_sizing: u8,
- v_sizing: u8,
- has_max_h: bool,
- max_h: f32,
- has_min_h: bool,
- min_h: f32,
- has_max_w: bool,
- max_w: f32,
- has_min_w: bool,
- min_w: f32,
- has_align_self: bool,
- align_self: u8,
- is_absolute: bool,
- z_index: i32,
-) {
- let h_sizing = shapes::Sizing::from_u8(h_sizing);
- let v_sizing = shapes::Sizing::from_u8(v_sizing);
- let max_h = if has_max_h { Some(max_h) } else { None };
- let min_h = if has_min_h { Some(min_h) } else { None };
- let max_w = if has_max_w { Some(max_w) } else { None };
- let min_w = if has_min_w { Some(min_w) } else { None };
- let align_self = if has_align_self {
- shapes::AlignSelf::from_u8(align_self)
- } else {
- None
- };
-
- with_current_shape_mut!(state, |shape: &mut Shape| {
- shape.set_flex_layout_child_data(
- margin_top,
- margin_right,
- margin_bottom,
- margin_left,
- h_sizing,
- v_sizing,
- max_h,
- min_h,
- max_w,
- min_w,
- align_self,
- is_absolute,
- z_index,
- );
- });
-}
-
-#[no_mangle]
-pub extern "C" fn set_grid_layout_data(
- dir: u8,
- row_gap: f32,
- column_gap: f32,
- align_items: u8,
- align_content: u8,
- justify_items: u8,
- justify_content: u8,
- padding_top: f32,
- padding_right: f32,
- padding_bottom: f32,
- padding_left: f32,
-) {
- let dir = shapes::GridDirection::from_u8(dir);
- let align_items = shapes::AlignItems::from_u8(align_items);
- let align_content = shapes::AlignContent::from_u8(align_content);
- let justify_items = shapes::JustifyItems::from_u8(justify_items);
- let justify_content = shapes::JustifyContent::from_u8(justify_content);
-
- with_current_shape_mut!(state, |shape: &mut Shape| {
- shape.set_grid_layout_data(
- dir,
- row_gap,
- column_gap,
- align_items,
- align_content,
- justify_items,
- justify_content,
- padding_top,
- padding_right,
- padding_bottom,
- padding_left,
- );
- });
-}
-
-#[no_mangle]
-pub extern "C" fn set_grid_columns() {
- let bytes = mem::bytes();
-
- let entries: Vec<_> = bytes
- .chunks(size_of::())
- .map(|data| shapes::RawGridTrack::from_bytes(data.try_into().unwrap()))
- .collect();
-
- with_current_shape_mut!(state, |shape: &mut Shape| {
- shape.set_grid_columns(entries);
- });
-
- mem::free_bytes();
-}
-
-#[no_mangle]
-pub extern "C" fn set_grid_rows() {
- let bytes = mem::bytes();
-
- let entries: Vec<_> = bytes
- .chunks(size_of::())
- .map(|data| shapes::RawGridTrack::from_bytes(data.try_into().unwrap()))
- .collect();
-
- with_current_shape_mut!(state, |shape: &mut Shape| {
- shape.set_grid_rows(entries);
- });
-
- mem::free_bytes();
-}
-
-#[no_mangle]
-pub extern "C" fn set_grid_cells() {
- let bytes = mem::bytes();
-
- let entries: Vec<_> = bytes
- .chunks(size_of::())
- .map(|data| shapes::RawGridCell::from_bytes(data.try_into().unwrap()))
- .collect();
-
- with_current_shape_mut!(state, |shape: &mut Shape| {
- shape.set_grid_cells(entries);
- });
-
- mem::free_bytes();
-}
-
-#[no_mangle]
-pub extern "C" fn show_grid(a: u32, b: u32, c: u32, d: u32) {
- with_state_mut!(state, {
- let id = uuid_from_u32_quartet(a, b, c, d);
- state.render_state.show_grid = Some(id);
- });
-}
-
-#[no_mangle]
-pub extern "C" fn hide_grid() {
- with_state_mut!(state, {
- state.render_state.show_grid = None;
- });
-}
-
-#[no_mangle]
-pub extern "C" fn get_grid_coords(pos_x: f32, pos_y: f32) -> *mut u8 {
- let row: i32;
- let col: i32;
- with_state!(state, {
- if let Some((r, c)) = state.get_grid_coords(pos_x, pos_y) {
- row = r;
- col = c;
- } else {
- row = -1;
- col = -1;
- };
- });
- let mut bytes = vec![0; 8];
- bytes[0..4].clone_from_slice(&row.to_le_bytes());
- bytes[4..8].clone_from_slice(&col.to_le_bytes());
- mem::write_bytes(bytes)
-}
diff --git a/render-wasm/src/wasm/layouts.rs b/render-wasm/src/wasm/layouts.rs
new file mode 100644
index 0000000000..a97812b519
--- /dev/null
+++ b/render-wasm/src/wasm/layouts.rs
@@ -0,0 +1,90 @@
+use crate::shapes::Sizing;
+use crate::{with_current_shape_mut, STATE};
+use macros::ToJs;
+
+mod align;
+mod constraints;
+mod flex;
+mod grid;
+
+#[derive(Debug, Clone, PartialEq, Copy, ToJs)]
+#[repr(u8)]
+#[allow(dead_code)]
+pub enum RawSizing {
+ Fill = 0,
+ Fix = 1,
+ Auto = 2,
+}
+
+impl From for RawSizing {
+ fn from(value: u8) -> Self {
+ unsafe { std::mem::transmute(value) }
+ }
+}
+
+impl From for Sizing {
+ fn from(value: RawSizing) -> Self {
+ match value {
+ RawSizing::Fill => Sizing::Fill,
+ RawSizing::Fix => Sizing::Fix,
+ RawSizing::Auto => Sizing::Auto,
+ }
+ }
+}
+
+#[no_mangle]
+pub extern "C" fn clear_shape_layout() {
+ with_current_shape_mut!(state, |shape: &mut Shape| {
+ shape.clear_layout();
+ });
+}
+
+#[no_mangle]
+pub extern "C" fn set_layout_child_data(
+ margin_top: f32,
+ margin_right: f32,
+ margin_bottom: f32,
+ margin_left: f32,
+ h_sizing: u8,
+ v_sizing: u8,
+ has_max_h: bool,
+ max_h: f32,
+ has_min_h: bool,
+ min_h: f32,
+ has_max_w: bool,
+ max_w: f32,
+ has_min_w: bool,
+ min_w: f32,
+ align_self: u8,
+ is_absolute: bool,
+ z_index: i32,
+) {
+ let h_sizing = RawSizing::from(h_sizing);
+ let v_sizing = RawSizing::from(v_sizing);
+ let max_h = if has_max_h { Some(max_h) } else { None };
+ let min_h = if has_min_h { Some(min_h) } else { None };
+ let max_w = if has_max_w { Some(max_w) } else { None };
+ let min_w = if has_min_w { Some(min_w) } else { None };
+
+ let raw_align_self = align::RawAlignSelf::from(align_self);
+
+ let align_self = raw_align_self.try_into().ok();
+
+ with_current_shape_mut!(state, |shape: &mut Shape| {
+ shape.set_flex_layout_child_data(
+ margin_top,
+ margin_right,
+ margin_bottom,
+ margin_left,
+ h_sizing.into(),
+ v_sizing.into(),
+ max_h,
+ min_h,
+ max_w,
+ min_w,
+ align_self,
+ is_absolute,
+ z_index,
+ );
+ });
+}
diff --git a/render-wasm/src/wasm/layouts/align.rs b/render-wasm/src/wasm/layouts/align.rs
new file mode 100644
index 0000000000..42810588d9
--- /dev/null
+++ b/render-wasm/src/wasm/layouts/align.rs
@@ -0,0 +1,223 @@
+use macros::ToJs;
+
+use crate::shapes::{
+ AlignContent, AlignItems, AlignSelf, JustifyContent, JustifyItems, JustifySelf, VerticalAlign,
+};
+use crate::{with_current_shape_mut, STATE};
+
+#[derive(Debug, Clone, PartialEq, Copy, ToJs)]
+#[repr(u8)]
+#[allow(dead_code)]
+pub enum RawAlignItems {
+ Start = 0,
+ End = 1,
+ Center = 2,
+ Stretch = 3,
+}
+
+impl From for RawAlignItems {
+ fn from(value: u8) -> Self {
+ unsafe { std::mem::transmute(value) }
+ }
+}
+
+impl From