mirror of
https://github.com/penpot/penpot.git
synced 2026-09-06 20:18:39 +00:00
Merge remote-tracking branch 'origin/staging' into develop
This commit is contained in:
commit
292390f0eb
19
AGENTS.md
19
AGENTS.md
@ -40,10 +40,27 @@ Skipping this step is the #1 cause of incorrect or incomplete work.
|
|||||||
`github.com/penpot/penpot/security/advisories/GHSA-*`, extract the GHSA ID
|
`github.com/penpot/penpot/security/advisories/GHSA-*`, extract the GHSA ID
|
||||||
from the URL and run `python3 scripts/gh.py advisories <GHSA-ID>` to fetch
|
from the URL and run `python3 scripts/gh.py advisories <GHSA-ID>` to fetch
|
||||||
full advisory details before proceeding.
|
full advisory details before proceeding.
|
||||||
|
- **Issue or PR mentioned** — When the user mentions a penpot/penpot issue or
|
||||||
|
PR (URL like `github.com/penpot/penpot/issues/<n>` / `.../pull/<n>`, or a
|
||||||
|
bare `#<n>` when context clearly refers to this repo), fetch details via CLI
|
||||||
|
instead of WebFetch:
|
||||||
|
- Issue → `gh issue view <n> --repo penpot/penpot` (add `--comments` when
|
||||||
|
discussion context matters).
|
||||||
|
- Single PR → `gh pr view <n> --repo penpot/penpot`.
|
||||||
|
- Multiple PRs (list, file, or milestone) → `python3 scripts/gh.py prs ...`.
|
||||||
|
Do this before proceeding. Only use WebFetch if the CLI fails.
|
||||||
|
|
||||||
## Writing Rules
|
## Writing Rules
|
||||||
|
|
||||||
Use the `ste` skill when the user explicitly requests STE, `/ste`, or ASD-STE100.
|
Writing rules, from Orwell, 1946. These govern prose: docs, PR text, messages. Never touch code or technical terms; swap in everyday words only where precision survives.
|
||||||
|
|
||||||
|
1. Never use a metaphor, simile or other figure of speech which you are used to seeing in print.
|
||||||
|
2. Never use a long word where a short one will do.
|
||||||
|
3. If it is possible to cut a word out, always cut it out.
|
||||||
|
4. Never use the passive where you can use the active.
|
||||||
|
5. Never use a foreign phrase, a scientific word or a jargon word if you can think of an everyday English equivalent.
|
||||||
|
6. Break any of these rules sooner than say anything outright barbarous.
|
||||||
|
Review every prose output against these rules before delivering.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@ -191,7 +191,7 @@
|
|||||||
file named “{{file-name|abbreviate:25}}”.
|
file named “{{file-name|abbreviate:25}}”.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Since this file is in your Penpot team, you can provide access by sending a view-only link.
|
Since this file is in your Personal Projects, you can provide access by sending a view-only link.
|
||||||
This will allow {{requested-by|abbreviate:25}} to view the content without making any changes.
|
This will allow {{requested-by|abbreviate:25}} to view the content without making any changes.
|
||||||
</p>
|
</p>
|
||||||
<p>To proceed, please click the button below to generate and send the view-only link:</p>
|
<p>To proceed, please click the button below to generate and send the view-only link:</p>
|
||||||
|
|||||||
@ -2,7 +2,7 @@ Hello!
|
|||||||
|
|
||||||
{{requested-by|abbreviate:25}} ({{requested-by-email}}) wants to have view-only access to the file named “{{file-name|abbreviate:25}}”.
|
{{requested-by|abbreviate:25}} ({{requested-by-email}}) wants to have view-only access to the file named “{{file-name|abbreviate:25}}”.
|
||||||
|
|
||||||
Since this file is in your Penpot team, you can provide access by sending a view-only link. This will allow {{requested-by|abbreviate:25}} to view the content without making any changes.
|
Since this file is in your Personal Projects, you can provide access by sending a view-only link. This will allow {{requested-by|abbreviate:25}} to view the content without making any changes.
|
||||||
|
|
||||||
To proceed, please click the link below to generate and send the view-only link:
|
To proceed, please click the link below to generate and send the view-only link:
|
||||||
|
|
||||||
|
|||||||
@ -191,7 +191,7 @@
|
|||||||
“{{file-name|abbreviate:25}}”.
|
“{{file-name|abbreviate:25}}”.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Please note that the file is currently in Your Penpot 's team, so direct access cannot be
|
Please note that the file is currently in Personal Projects, so direct access cannot be
|
||||||
granted. However, you have two options to provide the requested access:
|
granted. However, you have two options to provide the requested access:
|
||||||
</p>
|
</p>
|
||||||
<ul>
|
<ul>
|
||||||
|
|||||||
@ -5,7 +5,7 @@ Hello!
|
|||||||
|
|
||||||
{{requested-by|abbreviate:25}} ({{requested-by-email}}) has requested access to the file named “{{file-name|abbreviate:25}}”.
|
{{requested-by|abbreviate:25}} ({{requested-by-email}}) has requested access to the file named “{{file-name|abbreviate:25}}”.
|
||||||
|
|
||||||
Please note that the file is currently in Your Penpot 's team, so direct access cannot be granted. However, you have two options to provide the requested access:
|
Please note that the file is currently in Personal Projects, so direct access cannot be granted. However, you have two options to provide the requested access:
|
||||||
|
|
||||||
- Move the File to Another Team:
|
- Move the File to Another Team:
|
||||||
|
|
||||||
|
|||||||
@ -505,13 +505,13 @@
|
|||||||
:schema schema:request-file-access))
|
:schema schema:request-file-access))
|
||||||
|
|
||||||
(def request-file-access-yourpenpot
|
(def request-file-access-yourpenpot
|
||||||
"File access on Your Penpot request email."
|
"File access on Personal Projects request email."
|
||||||
(template-factory
|
(template-factory
|
||||||
:id ::request-file-access-yourpenpot
|
:id ::request-file-access-yourpenpot
|
||||||
:schema schema:request-file-access))
|
:schema schema:request-file-access))
|
||||||
|
|
||||||
(def request-file-access-yourpenpot-view
|
(def request-file-access-yourpenpot-view
|
||||||
"File access on Your Penpot view mode request email."
|
"File access on Personal Projects view mode request email."
|
||||||
(template-factory
|
(template-factory
|
||||||
:id ::request-file-access-yourpenpot-view
|
:id ::request-file-access-yourpenpot-view
|
||||||
:schema schema:request-file-access))
|
:schema schema:request-file-access))
|
||||||
|
|||||||
@ -209,7 +209,7 @@
|
|||||||
[:enum
|
[:enum
|
||||||
"customer_service"
|
"customer_service"
|
||||||
"low_quality"
|
"low_quality"
|
||||||
"missing_feature"
|
"missing_features"
|
||||||
"other"
|
"other"
|
||||||
"switched_service"
|
"switched_service"
|
||||||
"too_complex"
|
"too_complex"
|
||||||
|
|||||||
@ -245,7 +245,7 @@
|
|||||||
[:enum
|
[:enum
|
||||||
"customer_service"
|
"customer_service"
|
||||||
"low_quality"
|
"low_quality"
|
||||||
"missing_feature"
|
"missing_features"
|
||||||
"other"
|
"other"
|
||||||
"switched_service"
|
"switched_service"
|
||||||
"too_complex"
|
"too_complex"
|
||||||
|
|||||||
@ -336,7 +336,7 @@
|
|||||||
(doseq [{:keys [id reassign-to]} teams-to-leave]
|
(doseq [{:keys [id reassign-to]} teams-to-leave]
|
||||||
(teams/leave-team cfg {:profile-id profile-id :id id :reassign-to reassign-to}))
|
(teams/leave-team cfg {:profile-id profile-id :id id :reassign-to reassign-to}))
|
||||||
|
|
||||||
;; Process organization "Your Penpot" team: keep with prefix if needed, otherwise delete.
|
;; Process organization "Personal Projects" team: keep with prefix if needed, otherwise delete.
|
||||||
(when default-team-id
|
(when default-team-id
|
||||||
(if keep-default-team?
|
(if keep-default-team?
|
||||||
(db/exec! conn [sql:prefix-team-name-and-unset-default organization-prefix default-team-id])
|
(db/exec! conn [sql:prefix-team-name-and-unset-default organization-prefix default-team-id])
|
||||||
|
|||||||
@ -524,7 +524,7 @@
|
|||||||
;; Penpot back through two paths: ::notify-user-organizations-deletion
|
;; Penpot back through two paths: ::notify-user-organizations-deletion
|
||||||
;; (during delete-owned-organizations) and ::notify-organization-deletion.
|
;; (during delete-owned-organizations) and ::notify-organization-deletion.
|
||||||
;; Both preserve organization teams unchanged and only prefix or delete
|
;; Both preserve organization teams unchanged and only prefix or delete
|
||||||
;; imported "Your Penpot" teams according to whether they still have files.
|
;; imported "Personal Projects" teams according to whether they still have files.
|
||||||
;; Let Nitrate clean up the data associated with the deleted Penpot user:
|
;; Let Nitrate clean up the data associated with the deleted Penpot user:
|
||||||
;; owned organizations, remaining memberships, and subscription cancellation.
|
;; owned organizations, remaining memberships, and subscription cancellation.
|
||||||
(when (contains? cf/flags :admin-console)
|
(when (contains? cf/flags :admin-console)
|
||||||
|
|||||||
@ -575,7 +575,7 @@
|
|||||||
(set/difference cfeat/frontend-only-features)
|
(set/difference cfeat/frontend-only-features)
|
||||||
(set/difference cfeat/no-team-inheritable-features))
|
(set/difference cfeat/no-team-inheritable-features))
|
||||||
params {:profile-id profile-id
|
params {:profile-id profile-id
|
||||||
:name "Your Penpot"
|
:name "Personal Projects"
|
||||||
:features features
|
:features features
|
||||||
:organization-id organization-id
|
:organization-id organization-id
|
||||||
:is-default true}
|
:is-default true}
|
||||||
@ -829,7 +829,7 @@
|
|||||||
:code :only-owner-can-delete-team))
|
:code :only-owner-can-delete-team))
|
||||||
|
|
||||||
;; Protect the user's personal default team from deletion.
|
;; Protect the user's personal default team from deletion.
|
||||||
;; Organization-scoped default teams ("Your Penpot") are allowed to be deleted when they have no files.
|
;; Organization-scoped default teams ("Personal Projects") are allowed to be deleted when they have no files.
|
||||||
(when (and (:is-default team) (not in-organization?))
|
(when (and (:is-default team) (not in-organization?))
|
||||||
(ex/raise :type :validation
|
(ex/raise :type :validation
|
||||||
:code :non-deletable-team
|
:code :non-deletable-team
|
||||||
|
|||||||
@ -318,7 +318,7 @@ RETURNING id, deleted_at;")
|
|||||||
|
|
||||||
(defn manage-deleted-organization-teams
|
(defn manage-deleted-organization-teams
|
||||||
"For a deleted organization, preserve organization teams unchanged and only prefix or
|
"For a deleted organization, preserve organization teams unchanged and only prefix or
|
||||||
delete member Your Penpot teams depending on whether they still contain files."
|
delete member Personal Projects teams depending on whether they still contain files."
|
||||||
[cfg {:keys [organization-id organization-name teams]}]
|
[cfg {:keys [organization-id organization-name teams]}]
|
||||||
(let [all-team-ids (->> teams
|
(let [all-team-ids (->> teams
|
||||||
(map :id)
|
(map :id)
|
||||||
@ -347,13 +347,13 @@ RETURNING id, deleted_at;")
|
|||||||
teams-to-delete (->> your-penpot-team-ids (remove teams-with-files) (into []))]
|
teams-to-delete (->> your-penpot-team-ids (remove teams-with-files) (into []))]
|
||||||
|
|
||||||
;; Organization teams move to the fallback organization unchanged. Only imported
|
;; Organization teams move to the fallback organization unchanged. Only imported
|
||||||
;; Your Penpot teams keep the organization prefix when they still have files.
|
;; Personal Projects teams keep the organization prefix when they still have files.
|
||||||
(when (seq teams-to-prefix)
|
(when (seq teams-to-prefix)
|
||||||
(db/exec! conn [sql:prefix-teams-name-and-unset-default
|
(db/exec! conn [sql:prefix-teams-name-and-unset-default
|
||||||
organization-prefix
|
organization-prefix
|
||||||
(db/create-array conn "uuid" teams-to-prefix)]))
|
(db/create-array conn "uuid" teams-to-prefix)]))
|
||||||
|
|
||||||
;; Empty imported Your Penpot teams disappear entirely.
|
;; Empty imported Personal Projects teams disappear entirely.
|
||||||
(soft-delete-teams! cfg teams-to-delete)
|
(soft-delete-teams! cfg teams-to-delete)
|
||||||
|
|
||||||
(notifications/notify-organization-deletion cfg organization-id organization-name all-team-ids teams-to-delete)
|
(notifications/notify-organization-deletion cfg organization-id organization-name all-team-ids teams-to-delete)
|
||||||
@ -362,7 +362,7 @@ RETURNING id, deleted_at;")
|
|||||||
|
|
||||||
(sv/defmethod ::notify-organization-deletion
|
(sv/defmethod ::notify-organization-deletion
|
||||||
"For a deleted organization, preserve organization teams and only prefix or delete
|
"For a deleted organization, preserve organization teams and only prefix or delete
|
||||||
imported Your Penpot teams before notifying connected users."
|
imported Personal Projects before notifying connected users."
|
||||||
{::doc/added "2.18"
|
{::doc/added "2.18"
|
||||||
::sm/params schema:notify-organization-deletion
|
::sm/params schema:notify-organization-deletion
|
||||||
::rpc/auth false}
|
::rpc/auth false}
|
||||||
@ -382,7 +382,7 @@ RETURNING id, deleted_at;")
|
|||||||
|
|
||||||
(sv/defmethod ::notify-user-organizations-deletion
|
(sv/defmethod ::notify-user-organizations-deletion
|
||||||
"For a given user, find all owned organizations and apply the deleted-organization
|
"For a given user, find all owned organizations and apply the deleted-organization
|
||||||
transfer rules to their imported Your Penpot teams."
|
transfer rules to their imported Personal Projects teams."
|
||||||
{::doc/added "2.18"
|
{::doc/added "2.18"
|
||||||
::sm/params schema:notify-user-organizations-deletion
|
::sm/params schema:notify-user-organizations-deletion
|
||||||
::nitrate/sso false}
|
::nitrate/sso false}
|
||||||
|
|||||||
@ -232,7 +232,7 @@
|
|||||||
[:enum
|
[:enum
|
||||||
"customer_service"
|
"customer_service"
|
||||||
"low_quality"
|
"low_quality"
|
||||||
"missing_feature"
|
"missing_features"
|
||||||
"other"
|
"other"
|
||||||
"switched_service"
|
"switched_service"
|
||||||
"too_complex"
|
"too_complex"
|
||||||
|
|||||||
@ -268,7 +268,7 @@
|
|||||||
new-team (th/db-get :team {:id new-team-id})]
|
new-team (th/db-get :team {:id new-team-id})]
|
||||||
(t/is (th/success? out))
|
(t/is (th/success? out))
|
||||||
(t/is (= 1 (count (set/difference after-teams before-teams))))
|
(t/is (= 1 (count (set/difference after-teams before-teams))))
|
||||||
(t/is (= "Your Penpot" (:name new-team)))
|
(t/is (= "Personal Projects" (:name new-team)))
|
||||||
(t/is (true? (:is-default new-team))))))
|
(t/is (true? (:is-default new-team))))))
|
||||||
|
|
||||||
(t/deftest get-managed-profiles-returns-unique-members-for-owned-teams
|
(t/deftest get-managed-profiles-returns-unique-members-for-owned-teams
|
||||||
|
|||||||
@ -100,7 +100,7 @@ RUN set -eux; \
|
|||||||
|
|
||||||
FROM base AS setup-opencode
|
FROM base AS setup-opencode
|
||||||
|
|
||||||
ENV OPENCODE_VERSION=1.18.21
|
ENV OPENCODE_VERSION=1.18.25
|
||||||
|
|
||||||
RUN set -ex; \
|
RUN set -ex; \
|
||||||
ARCH="$(dpkg --print-architecture)"; \
|
ARCH="$(dpkg --print-architecture)"; \
|
||||||
|
|||||||
@ -86,7 +86,7 @@ export class DashboardPage extends BaseWebSocketPage {
|
|||||||
this.searchInput = page.getByPlaceholder("Search…");
|
this.searchInput = page.getByPlaceholder("Search…");
|
||||||
|
|
||||||
this.teamDropdown = this.sidebar.getByRole("button", {
|
this.teamDropdown = this.sidebar.getByRole("button", {
|
||||||
name: "Your Penpot",
|
name: "Personal Projects",
|
||||||
});
|
});
|
||||||
this.userAccount = this.sidebar.getByRole("button", {
|
this.userAccount = this.sidebar.getByRole("button", {
|
||||||
name: /Princesa Leia/,
|
name: /Princesa Leia/,
|
||||||
|
|||||||
@ -7,7 +7,7 @@ export class OnboardingPage extends BaseWebSocketPage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fillOnboardingInputsStep1() {
|
async fillOnboardingInputsStep1() {
|
||||||
await this.page.getByText("Personal").click();
|
await this.page.getByText("Personal", { exact: true }).click();
|
||||||
await this.page.getByText("Select option").click();
|
await this.page.getByText("Select option").click();
|
||||||
await this.page.getByText("Product Management").click();
|
await this.page.getByText("Product Management").click();
|
||||||
|
|
||||||
|
|||||||
@ -43,15 +43,25 @@
|
|||||||
(swap! storage/storage dissoc
|
(swap! storage/storage dissoc
|
||||||
nitrate-entry-pending-popup-key)))
|
nitrate-entry-pending-popup-key)))
|
||||||
|
|
||||||
|
(def ^:private offline-connectivity
|
||||||
|
{:licenses false})
|
||||||
|
|
||||||
|
(defn- air-gapped?
|
||||||
|
[]
|
||||||
|
(contains? cf/flags :air-gapped-conf))
|
||||||
|
|
||||||
(defn show-nitrate-popup
|
(defn show-nitrate-popup
|
||||||
([popup-type] (show-nitrate-popup popup-type {}))
|
([popup-type] (show-nitrate-popup popup-type {}))
|
||||||
([popup-type extra-props]
|
([popup-type extra-props]
|
||||||
(ptk/reify ::show-nitrate-popup
|
(ptk/reify ::show-nitrate-popup
|
||||||
ptk/WatchEvent
|
ptk/WatchEvent
|
||||||
(watch [_ _ _]
|
(watch [_ _ _]
|
||||||
(->> (rp/cmd! ::get-nitrate-connectivity {})
|
(if (air-gapped?)
|
||||||
(rx/map (fn [connectivity]
|
(rx/of (modal/show popup-type (merge offline-connectivity extra-props)))
|
||||||
(modal/show popup-type (merge (or connectivity {}) extra-props)))))))))
|
(->> (rp/cmd! ::get-nitrate-connectivity {})
|
||||||
|
(rx/map (fn [connectivity]
|
||||||
|
(modal/show popup-type
|
||||||
|
(merge (or connectivity {}) extra-props))))))))))
|
||||||
|
|
||||||
(defn build-admin-console-url
|
(defn build-admin-console-url
|
||||||
([path]
|
([path]
|
||||||
|
|||||||
@ -37,7 +37,7 @@
|
|||||||
(defn- get-team-name
|
(defn- get-team-name
|
||||||
[team]
|
[team]
|
||||||
(if (:is-default team)
|
(if (:is-default team)
|
||||||
(tr "dashboard.your-penpot")
|
(tr "dashboard.personal-projects")
|
||||||
(:name team)))
|
(:name team)))
|
||||||
|
|
||||||
(defn- group-by-team
|
(defn- group-by-team
|
||||||
|
|||||||
@ -43,7 +43,7 @@
|
|||||||
(mf/with-effect [team]
|
(mf/with-effect [team]
|
||||||
(when team
|
(when team
|
||||||
(let [tname (if (:is-default team)
|
(let [tname (if (:is-default team)
|
||||||
(tr "dashboard.your-penpot")
|
(tr "dashboard.personal-projects")
|
||||||
(:name team))]
|
(:name team))]
|
||||||
(case section
|
(case section
|
||||||
:fonts (dom/set-html-title (tr "title.dashboard.fonts" tname))
|
:fonts (dom/set-html-title (tr "title.dashboard.fonts" tname))
|
||||||
|
|||||||
@ -52,7 +52,7 @@
|
|||||||
|
|
||||||
(mf/with-effect [team]
|
(mf/with-effect [team]
|
||||||
(let [tname (if (:is-default team)
|
(let [tname (if (:is-default team)
|
||||||
(tr "dashboard.your-penpot")
|
(tr "dashboard.personal-projects")
|
||||||
(:name team))]
|
(:name team))]
|
||||||
(dom/set-html-title (tr "title.dashboard.shared-libraries" tname))))
|
(dom/set-html-title (tr "title.dashboard.shared-libraries" tname))))
|
||||||
|
|
||||||
|
|||||||
@ -357,7 +357,7 @@
|
|||||||
|
|
||||||
(mf/with-effect [team]
|
(mf/with-effect [team]
|
||||||
(let [tname (if (:is-default team)
|
(let [tname (if (:is-default team)
|
||||||
(tr "dashboard.your-penpot")
|
(tr "dashboard.personal-projects")
|
||||||
(:name team))]
|
(:name team))]
|
||||||
(dom/set-html-title (tr "title.dashboard.projects" tname))))
|
(dom/set-html-title (tr "title.dashboard.projects" tname))))
|
||||||
|
|
||||||
|
|||||||
@ -44,7 +44,7 @@
|
|||||||
(mf/with-effect [team]
|
(mf/with-effect [team]
|
||||||
(when team
|
(when team
|
||||||
(let [tname (if (:is-default team)
|
(let [tname (if (:is-default team)
|
||||||
(tr "dashboard.your-penpot")
|
(tr "dashboard.personal-projects")
|
||||||
(:name team))]
|
(:name team))]
|
||||||
(dom/set-html-title (tr "title.dashboard.search" tname)))))
|
(dom/set-html-title (tr "title.dashboard.search" tname)))))
|
||||||
|
|
||||||
|
|||||||
@ -438,7 +438,7 @@
|
|||||||
(when-not (contains? cf/flags :admin-console)
|
(when-not (contains? cf/flags :admin-console)
|
||||||
[:span {:class (stl/css :penpot-icon)} deprecated-icon/logo-icon])
|
[:span {:class (stl/css :penpot-icon)} deprecated-icon/logo-icon])
|
||||||
|
|
||||||
[:span {:class (stl/css :team-text)} (if (contains? cf/flags :admin-console) (tr "dashboard.personal-projects") (tr "dashboard.your-penpot"))]
|
[:span {:class (stl/css :team-text)} (tr "dashboard.personal-projects")]
|
||||||
(when (= default-team-id (:id team))
|
(when (= default-team-id (:id team))
|
||||||
tick-icon)]
|
tick-icon)]
|
||||||
|
|
||||||
@ -725,7 +725,7 @@
|
|||||||
|
|
||||||
current-organization (dtm/team->organization team)
|
current-organization (dtm/team->organization team)
|
||||||
|
|
||||||
;; Find the "your-penpot" teams, and transform them in organizations. When
|
;; Find the "personal-projects" teams, and transform them in organizations. When
|
||||||
;; the selected team is directly accessible but not listed in
|
;; the selected team is directly accessible but not listed in
|
||||||
;; membership teams, include only its organization so the organization selector can
|
;; membership teams, include only its organization so the organization selector can
|
||||||
;; show the current selection without leaking the team into the
|
;; show the current selection without leaking the team into the
|
||||||
@ -972,7 +972,7 @@
|
|||||||
:team-name-no-logo nitrate?)}
|
:team-name-no-logo nitrate?)}
|
||||||
(when-not nitrate?
|
(when-not nitrate?
|
||||||
[:span {:class (stl/css :penpot-icon)} deprecated-icon/logo-icon])
|
[:span {:class (stl/css :penpot-icon)} deprecated-icon/logo-icon])
|
||||||
[:span {:class (stl/css :team-text)} (if nitrate? (tr "dashboard.personal-projects") (tr "dashboard.default-team-name"))]]
|
[:span {:class (stl/css :team-text)} (tr "dashboard.personal-projects")]]
|
||||||
|
|
||||||
(and (contains? cf/flags :subscriptions)
|
(and (contains? cf/flags :subscriptions)
|
||||||
(not is-default?)
|
(not is-default?)
|
||||||
|
|||||||
@ -644,7 +644,7 @@
|
|||||||
(dom/set-html-title
|
(dom/set-html-title
|
||||||
(tr "title.team-members"
|
(tr "title.team-members"
|
||||||
(if (:is-default team)
|
(if (:is-default team)
|
||||||
(tr "dashboard.your-penpot")
|
(tr "dashboard.personal-projects")
|
||||||
(:name team)))))
|
(:name team)))))
|
||||||
|
|
||||||
(mf/with-effect [(:id team)]
|
(mf/with-effect [(:id team)]
|
||||||
@ -1248,7 +1248,7 @@
|
|||||||
(dom/set-html-title
|
(dom/set-html-title
|
||||||
(tr "title.team-invitations"
|
(tr "title.team-invitations"
|
||||||
(if (:is-default team)
|
(if (:is-default team)
|
||||||
(tr "dashboard.your-penpot")
|
(tr "dashboard.personal-projects")
|
||||||
(:name team)))))
|
(:name team)))))
|
||||||
|
|
||||||
(mf/with-effect [(:id team)]
|
(mf/with-effect [(:id team)]
|
||||||
@ -1528,7 +1528,7 @@
|
|||||||
(dom/set-html-title
|
(dom/set-html-title
|
||||||
(tr "title.team-webhooks"
|
(tr "title.team-webhooks"
|
||||||
(if (:is-default team)
|
(if (:is-default team)
|
||||||
(tr "dashboard.your-penpot")
|
(tr "dashboard.personal-projects")
|
||||||
(:name team)))))
|
(:name team)))))
|
||||||
|
|
||||||
(mf/with-effect []
|
(mf/with-effect []
|
||||||
@ -1635,7 +1635,7 @@
|
|||||||
(mf/with-effect [team]
|
(mf/with-effect [team]
|
||||||
(dom/set-html-title (tr "title.team-settings"
|
(dom/set-html-title (tr "title.team-settings"
|
||||||
(if (:is-default team)
|
(if (:is-default team)
|
||||||
(tr "dashboard.your-penpot")
|
(tr "dashboard.personal-projects")
|
||||||
(:name team)))))
|
(:name team)))))
|
||||||
|
|
||||||
(mf/with-effect []
|
(mf/with-effect []
|
||||||
|
|||||||
@ -839,7 +839,8 @@
|
|||||||
(mf/with-effect [handle-unmount] handle-unmount)
|
(mf/with-effect [handle-unmount] handle-unmount)
|
||||||
|
|
||||||
[:div {:class [class (stl/css-case :input-wrapper true
|
[:div {:class [class (stl/css-case :input-wrapper true
|
||||||
:resizable (not is-token-applied?))]
|
:resizable (and (not is-token-applied?)
|
||||||
|
(not disabled)))]
|
||||||
:ref wrapper-ref
|
:ref wrapper-ref
|
||||||
:on-pointer-down on-scrub-pointer-down
|
:on-pointer-down on-scrub-pointer-down
|
||||||
:on-pointer-move on-scrub-pointer-move
|
:on-pointer-move on-scrub-pointer-move
|
||||||
|
|||||||
@ -22,9 +22,10 @@
|
|||||||
column-gap: var(--sp-xs);
|
column-gap: var(--sp-xs);
|
||||||
align-items: center;
|
align-items: center;
|
||||||
inline-size: 100%;
|
inline-size: 100%;
|
||||||
|
block-size: var(--token-field-height);
|
||||||
background: var(--token-field-bg-color);
|
background: var(--token-field-bg-color);
|
||||||
border-radius: $br-8;
|
border-radius: $br-8;
|
||||||
padding-inline-end: var(--sp-xs);
|
padding: 0 var(--input-padding-size, var(--sp-s));
|
||||||
outline: $b-1 solid var(--token-field-outline-color);
|
outline: $b-1 solid var(--token-field-outline-color);
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
|
|||||||
@ -344,7 +344,7 @@
|
|||||||
(mf/defc view-menu*
|
(mf/defc view-menu*
|
||||||
{::mf/private true
|
{::mf/private true
|
||||||
::mf/wrap [mf/memo]}
|
::mf/wrap [mf/memo]}
|
||||||
[{:keys [layout toggle-flag on-close]}]
|
[{:keys [layout toggle-flag on-close on-close-all]}]
|
||||||
(let [read-only? (mf/use-ctx ctx/workspace-read-only?)
|
(let [read-only? (mf/use-ctx ctx/workspace-read-only?)
|
||||||
|
|
||||||
toggle-color-palette
|
toggle-color-palette
|
||||||
@ -365,11 +365,11 @@
|
|||||||
|
|
||||||
toggle-comments-visibility
|
toggle-comments-visibility
|
||||||
(mf/use-fn
|
(mf/use-fn
|
||||||
(mf/deps on-close)
|
(mf/deps on-close-all)
|
||||||
(fn [event]
|
(fn [event]
|
||||||
(dom/stop-propagation event)
|
(dom/stop-propagation event)
|
||||||
(st/emit! (dwcm/toggle-comments-visibility {:origin "workspace:menu"}))
|
(st/emit! (dwcm/toggle-comments-visibility {:origin "workspace:menu"}))
|
||||||
(on-close)))]
|
(on-close-all)))]
|
||||||
|
|
||||||
[:> dropdown-menu* {:show true
|
[:> dropdown-menu* {:show true
|
||||||
:class (stl/css :base-menu :sub-menu :pos-3)
|
:class (stl/css :base-menu :sub-menu :pos-3)
|
||||||
@ -1139,7 +1139,8 @@
|
|||||||
:view
|
:view
|
||||||
[:> view-menu* {:layout layout
|
[:> view-menu* {:layout layout
|
||||||
:toggle-flag toggle-flag
|
:toggle-flag toggle-flag
|
||||||
:on-close close-sub-menu}]
|
:on-close close-sub-menu
|
||||||
|
:on-close-all close-all-menus}]
|
||||||
|
|
||||||
:preferences
|
:preferences
|
||||||
[:> preferences-menu* {:layout layout
|
[:> preferences-menu* {:layout layout
|
||||||
|
|||||||
@ -413,7 +413,7 @@ msgstr "Pin this version"
|
|||||||
|
|
||||||
#: src/app/main/ui/components/context_menu_a11y.cljs:300, src/app/main/ui/dashboard/sidebar.cljs:882
|
#: src/app/main/ui/components/context_menu_a11y.cljs:300, src/app/main/ui/dashboard/sidebar.cljs:882
|
||||||
msgid "dashboard.default-team-name"
|
msgid "dashboard.default-team-name"
|
||||||
msgstr "Your Penpot"
|
msgstr "Personal Projects"
|
||||||
|
|
||||||
#: src/app/main/ui/dashboard/deleted.cljs:265
|
#: src/app/main/ui/dashboard/deleted.cljs:265
|
||||||
msgid "dashboard.delete-all-forever-confirmation.description"
|
msgid "dashboard.delete-all-forever-confirmation.description"
|
||||||
@ -1466,9 +1466,6 @@ msgid "dashboard.your-name"
|
|||||||
msgstr "Your name"
|
msgstr "Your name"
|
||||||
|
|
||||||
#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:46, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:352, src/app/main/ui/dashboard/search.cljs:47, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:616, src/app/main/ui/dashboard/team.cljs:1191, src/app/main/ui/dashboard/team.cljs:1471, src/app/main/ui/dashboard/team.cljs:1577
|
#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:46, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:352, src/app/main/ui/dashboard/search.cljs:47, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:616, src/app/main/ui/dashboard/team.cljs:1191, src/app/main/ui/dashboard/team.cljs:1471, src/app/main/ui/dashboard/team.cljs:1577
|
||||||
msgid "dashboard.your-penpot"
|
|
||||||
msgstr "Your Penpot"
|
|
||||||
|
|
||||||
msgid "dashboard.personal-projects"
|
msgid "dashboard.personal-projects"
|
||||||
msgstr "Personal Projects"
|
msgstr "Personal Projects"
|
||||||
|
|
||||||
@ -4696,7 +4693,7 @@ msgstr "You don't have access to this file."
|
|||||||
|
|
||||||
#: src/app/main/ui/static.cljs:62, src/app/main/ui/static.cljs:265, src/app/main/ui/static.cljs:271, src/app/main/ui/static.cljs:277, src/app/main/ui/static.cljs:283, src/app/main/ui/static.cljs:292, src/app/main/ui/static.cljs:301
|
#: src/app/main/ui/static.cljs:62, src/app/main/ui/static.cljs:265, src/app/main/ui/static.cljs:271, src/app/main/ui/static.cljs:277, src/app/main/ui/static.cljs:283, src/app/main/ui/static.cljs:292, src/app/main/ui/static.cljs:301
|
||||||
msgid "not-found.no-permission.go-dashboard"
|
msgid "not-found.no-permission.go-dashboard"
|
||||||
msgstr "Go to your Penpot"
|
msgstr "Go to Personal Projects"
|
||||||
|
|
||||||
#: src/app/main/ui/static.cljs:289, src/app/main/ui/static.cljs:298
|
#: src/app/main/ui/static.cljs:289, src/app/main/ui/static.cljs:298
|
||||||
msgid "not-found.no-permission.if-approves"
|
msgid "not-found.no-permission.if-approves"
|
||||||
|
|||||||
@ -420,7 +420,7 @@ msgstr "Guardar esta versión"
|
|||||||
|
|
||||||
#: src/app/main/ui/components/context_menu_a11y.cljs:300, src/app/main/ui/dashboard/sidebar.cljs:882
|
#: src/app/main/ui/components/context_menu_a11y.cljs:300, src/app/main/ui/dashboard/sidebar.cljs:882
|
||||||
msgid "dashboard.default-team-name"
|
msgid "dashboard.default-team-name"
|
||||||
msgstr "Tu Penpot"
|
msgstr "Proyectos Personales"
|
||||||
|
|
||||||
#: src/app/main/ui/dashboard/deleted.cljs:265
|
#: src/app/main/ui/dashboard/deleted.cljs:265
|
||||||
msgid "dashboard.delete-all-forever-confirmation.description"
|
msgid "dashboard.delete-all-forever-confirmation.description"
|
||||||
@ -1473,9 +1473,6 @@ msgid "dashboard.your-name"
|
|||||||
msgstr "Tu nombre"
|
msgstr "Tu nombre"
|
||||||
|
|
||||||
#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:46, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:352, src/app/main/ui/dashboard/search.cljs:47, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:616, src/app/main/ui/dashboard/team.cljs:1191, src/app/main/ui/dashboard/team.cljs:1471, src/app/main/ui/dashboard/team.cljs:1577
|
#: src/app/main/ui/dashboard/file_menu.cljs:40, src/app/main/ui/dashboard/fonts.cljs:46, src/app/main/ui/dashboard/libraries.cljs:55, src/app/main/ui/dashboard/projects.cljs:352, src/app/main/ui/dashboard/search.cljs:47, src/app/main/ui/dashboard/sidebar.cljs:411, src/app/main/ui/dashboard/team.cljs:616, src/app/main/ui/dashboard/team.cljs:1191, src/app/main/ui/dashboard/team.cljs:1471, src/app/main/ui/dashboard/team.cljs:1577
|
||||||
msgid "dashboard.your-penpot"
|
|
||||||
msgstr "Tu Penpot"
|
|
||||||
|
|
||||||
msgid "dashboard.personal-projects"
|
msgid "dashboard.personal-projects"
|
||||||
msgstr "Proyectos Personales"
|
msgstr "Proyectos Personales"
|
||||||
|
|
||||||
@ -4569,7 +4566,7 @@ msgstr "No tienes permiso para acceder a este archivo."
|
|||||||
|
|
||||||
#: src/app/main/ui/static.cljs:62, src/app/main/ui/static.cljs:265, src/app/main/ui/static.cljs:271, src/app/main/ui/static.cljs:277, src/app/main/ui/static.cljs:283, src/app/main/ui/static.cljs:292, src/app/main/ui/static.cljs:301
|
#: src/app/main/ui/static.cljs:62, src/app/main/ui/static.cljs:265, src/app/main/ui/static.cljs:271, src/app/main/ui/static.cljs:277, src/app/main/ui/static.cljs:283, src/app/main/ui/static.cljs:292, src/app/main/ui/static.cljs:301
|
||||||
msgid "not-found.no-permission.go-dashboard"
|
msgid "not-found.no-permission.go-dashboard"
|
||||||
msgstr "Ir a tu Penpot"
|
msgstr "Ir a tus Proyectos Personales"
|
||||||
|
|
||||||
#: src/app/main/ui/static.cljs:289, src/app/main/ui/static.cljs:298
|
#: src/app/main/ui/static.cljs:289, src/app/main/ui/static.cljs:298
|
||||||
msgid "not-found.no-permission.if-approves"
|
msgid "not-found.no-permission.if-approves"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user