mirror of
https://github.com/penpot/penpot.git
synced 2025-02-03 04:49:03 -05:00
Merge remote-tracking branch 'origin/staging' into develop
This commit is contained in:
commit
56cf7064f5
16 changed files with 69 additions and 122 deletions
|
@ -757,7 +757,8 @@
|
||||||
{::doc/added "1.17"}
|
{::doc/added "1.17"}
|
||||||
[{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id emails role] :as params}]
|
[{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id emails role] :as params}]
|
||||||
(db/with-atomic [conn pool]
|
(db/with-atomic [conn pool]
|
||||||
(let [team (create-team conn params)
|
(let [params (assoc params :profile-id profile-id)
|
||||||
|
team (create-team conn params)
|
||||||
profile (db/get-by-id conn :profile profile-id)
|
profile (db/get-by-id conn :profile profile-id)
|
||||||
cfg (assoc cfg ::conn conn)]
|
cfg (assoc cfg ::conn conn)]
|
||||||
|
|
||||||
|
|
|
@ -363,10 +363,10 @@
|
||||||
c2 (+ (* a2 (:x c)) (* b2 (:y c)))
|
c2 (+ (* a2 (:x c)) (* b2 (:y c)))
|
||||||
|
|
||||||
;; Cramer's rule
|
;; Cramer's rule
|
||||||
det (- (* a1 b2) (* a2 b1))]
|
det (- (* a1 b2) (* a2 b1))
|
||||||
|
det (if (mth/almost-zero? det) 0.001 det)
|
||||||
|
|
||||||
;; If almost zero the lines are parallel
|
x (/ (- (* b2 c1) (* b1 c2)) det)
|
||||||
(when (not (mth/almost-zero? det))
|
y (/ (- (* c2 a1) (* c1 a2)) det)]
|
||||||
(let [x (/ (- (* b2 c1) (* b1 c2)) det)
|
|
||||||
y (/ (- (* c2 a1) (* c1 a2)) det)]
|
(gpt/point x y)))
|
||||||
(gpt/point x y)))))
|
|
||||||
|
|
|
@ -1,15 +1,35 @@
|
||||||
FROM ubuntu:22.04 as jre-build
|
FROM ubuntu:22.04
|
||||||
|
|
||||||
ENV DEBIAN_FRONTEND=noninteractive \
|
LABEL maintainer="Andrey Antukh <niwi@niwi.nz>"
|
||||||
|
ENV LANG='en_US.UTF-8' \
|
||||||
|
LC_ALL='en_US.UTF-8' \
|
||||||
|
JAVA_HOME="/opt/jdk" \
|
||||||
|
PATH=/opt/jdk/bin:$PATH \
|
||||||
|
DEBIAN_FRONTEND=noninteractive \
|
||||||
TZ=Etc/UTC
|
TZ=Etc/UTC
|
||||||
|
|
||||||
RUN set -eux; \
|
RUN set -ex; \
|
||||||
|
useradd -U -M -u 1001 -s /bin/false -d /opt/penpot penpot; \
|
||||||
apt-get -qq update; \
|
apt-get -qq update; \
|
||||||
|
apt-get -qq upgrade; \
|
||||||
apt-get -qqy --no-install-recommends install \
|
apt-get -qqy --no-install-recommends install \
|
||||||
curl \
|
curl \
|
||||||
ca-certificates \
|
tzdata \
|
||||||
binutils \
|
locales \
|
||||||
|
ca-certificates \
|
||||||
|
imagemagick \
|
||||||
|
webp \
|
||||||
|
rlwrap \
|
||||||
|
fontconfig \
|
||||||
|
woff-tools \
|
||||||
|
woff2 \
|
||||||
|
python3 \
|
||||||
|
fontforge \
|
||||||
; \
|
; \
|
||||||
|
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen; \
|
||||||
|
locale-gen; \
|
||||||
|
mkdir -p /opt/penpot/assets; \
|
||||||
|
chown -R penpot:penpot /opt/penpot; \
|
||||||
rm -rf /var/lib/apt/lists/*;
|
rm -rf /var/lib/apt/lists/*;
|
||||||
|
|
||||||
RUN set -eux; \
|
RUN set -eux; \
|
||||||
|
@ -39,49 +59,6 @@ RUN set -eux; \
|
||||||
tar -xf /tmp/openjdk.tar.gz --strip-components=1; \
|
tar -xf /tmp/openjdk.tar.gz --strip-components=1; \
|
||||||
rm -rf /tmp/openjdk.tar.gz;
|
rm -rf /tmp/openjdk.tar.gz;
|
||||||
|
|
||||||
RUN /opt/jdk/bin/jlink \
|
|
||||||
--verbose \
|
|
||||||
--module-path /opt/jdk/jmods \
|
|
||||||
--strip-debug \
|
|
||||||
--no-man-pages \
|
|
||||||
--no-header-files \
|
|
||||||
--compress 0 \
|
|
||||||
--add-modules java.base,java.naming,java.xml,java.logging,java.net.http,java.sql,java.management,java.desktop,jdk.jfr,jdk.unsupported,jdk.management.jfr \
|
|
||||||
--output /opt/jre
|
|
||||||
|
|
||||||
|
|
||||||
FROM ubuntu:22.04
|
|
||||||
|
|
||||||
LABEL maintainer="Andrey Antukh <niwi@niwi.nz>"
|
|
||||||
ENV LANG='en_US.UTF-8' \
|
|
||||||
LC_ALL='en_US.UTF-8' \
|
|
||||||
JAVA_HOME="/opt/jre" \
|
|
||||||
PATH=/opt/jre/bin:$PATH \
|
|
||||||
TZ=Etc/UTC
|
|
||||||
|
|
||||||
COPY --from=jre-build /opt/jre /opt/jre
|
|
||||||
|
|
||||||
RUN set -ex; \
|
|
||||||
useradd -U -M -u 1001 -s /bin/false -d /opt/penpot penpot; \
|
|
||||||
apt-get -qq update; \
|
|
||||||
apt-get -qqy --no-install-recommends install \
|
|
||||||
curl \
|
|
||||||
tzdata \
|
|
||||||
locales \
|
|
||||||
ca-certificates \
|
|
||||||
imagemagick \
|
|
||||||
webp \
|
|
||||||
fontconfig \
|
|
||||||
woff-tools \
|
|
||||||
woff2 \
|
|
||||||
python3 \
|
|
||||||
fontforge \
|
|
||||||
; \
|
|
||||||
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen; \
|
|
||||||
locale-gen; \
|
|
||||||
mkdir -p /opt/penpot/assets; \
|
|
||||||
chown -R penpot:penpot /opt/penpot; \
|
|
||||||
rm -rf /var/lib/apt/lists/*;
|
|
||||||
|
|
||||||
COPY --chown=penpot:penpot ./bundle-backend/ /opt/penpot/backend/
|
COPY --chown=penpot:penpot ./bundle-backend/ /opt/penpot/backend/
|
||||||
|
|
||||||
|
|
|
@ -4,10 +4,13 @@ set -x
|
||||||
DOCKER_CLI_EXPERIMENTAL=enabled
|
DOCKER_CLI_EXPERIMENTAL=enabled
|
||||||
ORG=${PENPOT_DOCKER_NAMESPACE:-penpotapp};
|
ORG=${PENPOT_DOCKER_NAMESPACE:-penpotapp};
|
||||||
PLATFORM=${PENPOT_BUILD_PLATFORM:-linux/amd64};
|
PLATFORM=${PENPOT_BUILD_PLATFORM:-linux/amd64};
|
||||||
IMAGE=${1:-backend};
|
|
||||||
|
IMAGE=${PENPOT_BUILD_IMAGE:-backend}
|
||||||
|
PLATFORM=${PENPOT_BUILD_PLATFORM:-linux/amd64};
|
||||||
|
VERSION=${PENPOT_BUILD_VERSION:-latest}
|
||||||
|
|
||||||
DOCKER_IMAGE="$ORG/$IMAGE";
|
DOCKER_IMAGE="$ORG/$IMAGE";
|
||||||
OPTIONS="-t $DOCKER_IMAGE:$PENPOT_BUILD_VERSION";
|
OPTIONS="-t $DOCKER_IMAGE:$VERSION";
|
||||||
|
|
||||||
IFS=", "
|
IFS=", "
|
||||||
read -a TAGS <<< $PENPOT_BUILD_TAGS;
|
read -a TAGS <<< $PENPOT_BUILD_TAGS;
|
||||||
|
@ -16,10 +19,6 @@ for element in "${TAGS[@]}"; do
|
||||||
OPTIONS="$OPTIONS -t $DOCKER_IMAGE:$element";
|
OPTIONS="$OPTIONS -t $DOCKER_IMAGE:$element";
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ "$PENPOT_BUILD_PUSH" = "true" ]; then
|
|
||||||
OPTIONS="--push $OPTIONS"
|
|
||||||
fi
|
|
||||||
|
|
||||||
docker buildx inspect penpot > /dev/null 2>&1;
|
docker buildx inspect penpot > /dev/null 2>&1;
|
||||||
docker run --privileged --rm tonistiigi/binfmt --install all
|
docker run --privileged --rm tonistiigi/binfmt --install all
|
||||||
|
|
||||||
|
@ -32,4 +31,5 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
unset IFS;
|
unset IFS;
|
||||||
|
|
||||||
docker buildx build --platform ${PLATFORM// /,} $OPTIONS -f Dockerfile.$IMAGE "$@" .;
|
docker buildx build --platform ${PLATFORM// /,} $OPTIONS -f Dockerfile.$IMAGE "$@" .;
|
||||||
|
|
|
@ -134,7 +134,7 @@ services:
|
||||||
## environment variables for the backend here:
|
## environment variables for the backend here:
|
||||||
## https://help.penpot.app/technical-guide/configuration/#advanced-configuration
|
## https://help.penpot.app/technical-guide/configuration/#advanced-configuration
|
||||||
|
|
||||||
- PENPOT_FLAGS=enable-registration enable-login disable-email-verification enable-smtp enable-prepl-server
|
- PENPOT_FLAGS=enable-registration enable-login-with-password disable-email-verification enable-smtp enable-prepl-server
|
||||||
|
|
||||||
## Penpot SECRET KEY. It serves as a master key from which other keys for subsystems
|
## Penpot SECRET KEY. It serves as a master key from which other keys for subsystems
|
||||||
## (eg http sessions) are derived.
|
## (eg http sessions) are derived.
|
||||||
|
@ -260,40 +260,6 @@ services:
|
||||||
ports:
|
ports:
|
||||||
- "1080:1080"
|
- "1080:1080"
|
||||||
|
|
||||||
## An optional admin application for pentpot. It allows manage users, teams and inspect
|
|
||||||
## some parts of the database. You can read more about it on:
|
|
||||||
## https://github.com/penpot/penpot-admin
|
|
||||||
##
|
|
||||||
## If you are going to use admin, ensure to have `enable-prepl-server` in backend flags
|
|
||||||
## and uncomment the `PENPOT_PREPL_HOST` environment variable.
|
|
||||||
##
|
|
||||||
## Status: EXPERIMENTAL
|
|
||||||
|
|
||||||
# penpot-admin:
|
|
||||||
# image: "penpotapp/admin:latest"
|
|
||||||
# networks:
|
|
||||||
# - penpot
|
|
||||||
#
|
|
||||||
# depends_on:
|
|
||||||
# - penpot-postgres
|
|
||||||
# - penpot-backend
|
|
||||||
#
|
|
||||||
# environment:
|
|
||||||
# ## Adjust to the same value as on backend
|
|
||||||
# - PENPOT_PUBLIC_URI=http://localhost:9001
|
|
||||||
#
|
|
||||||
# ## Do not touch it, this is an internal routes
|
|
||||||
# - PENPOT_API_URI=http://penpot-frontend/
|
|
||||||
# - PENPOT_PREPL_URI=tcp://penpot-backend:6063/
|
|
||||||
# - PENPOT_DEBUG="false"
|
|
||||||
#
|
|
||||||
# ## Adjust to the same values as on backend
|
|
||||||
# - PENPOT_DATABASE_HOST=penpot-postgres
|
|
||||||
# - PENPOT_DATABASE_NAME=penpot
|
|
||||||
# - PENPOT_DATABASE_USERNAME=penpot
|
|
||||||
# - PENPOT_DATABASE_PASSWORD=penpot
|
|
||||||
# - PENPOT_REDIS_URI=redis://penpot-redis/0
|
|
||||||
|
|
||||||
## Example configuration of MiniIO (S3 compatible object storage service); If you don't
|
## Example configuration of MiniIO (S3 compatible object storage service); If you don't
|
||||||
## have preference, then just use filesystem, this is here just for the completeness.
|
## have preference, then just use filesystem, this is here just for the completeness.
|
||||||
|
|
||||||
|
|
|
@ -102,9 +102,9 @@ http {
|
||||||
proxy_pass http://penpot-backend:6060/api;
|
proxy_pass http://penpot-backend:6060/api;
|
||||||
}
|
}
|
||||||
|
|
||||||
location /admin {
|
# location /admin {
|
||||||
proxy_pass http://penpot-admin:6065/admin;
|
# proxy_pass http://penpot-admin:6065/admin;
|
||||||
}
|
# }
|
||||||
|
|
||||||
location /ws/notifications {
|
location /ws/notifications {
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
|
|
@ -426,8 +426,8 @@
|
||||||
(rx/ignore)))))
|
(rx/ignore)))))
|
||||||
|
|
||||||
(defn update-team-photo
|
(defn update-team-photo
|
||||||
[{:keys [file] :as params}]
|
[file]
|
||||||
(us/assert! ::di/file file)
|
(us/assert! ::di/blob file)
|
||||||
(ptk/reify ::update-team-photo
|
(ptk/reify ::update-team-photo
|
||||||
ptk/WatchEvent
|
ptk/WatchEvent
|
||||||
(watch [_ state _]
|
(watch [_ state _]
|
||||||
|
|
|
@ -56,14 +56,17 @@
|
||||||
{:layout :grid})
|
{:layout :grid})
|
||||||
|
|
||||||
(defn get-layout-initializer
|
(defn get-layout-initializer
|
||||||
[type]
|
[type from-frame?]
|
||||||
(let [initial-layout-data (if (= type :flex) initial-flex-layout initial-grid-layout)]
|
(let [initial-layout-data (if (= type :flex) initial-flex-layout initial-grid-layout)]
|
||||||
(fn [shape]
|
(fn [shape]
|
||||||
(-> shape
|
(-> shape
|
||||||
(merge shape initial-layout-data)))))
|
(merge initial-layout-data)
|
||||||
|
;; If the original shape is not a frame we set clip content and show-viewer to false
|
||||||
|
(cond-> (not from-frame?)
|
||||||
|
(assoc :show-content true :hide-in-viewer true))))))
|
||||||
|
|
||||||
(defn create-layout-from-id
|
(defn create-layout-from-id
|
||||||
[ids type]
|
[ids type from-frame?]
|
||||||
(ptk/reify ::create-layout-from-id
|
(ptk/reify ::create-layout-from-id
|
||||||
ptk/WatchEvent
|
ptk/WatchEvent
|
||||||
(watch [_ state _]
|
(watch [_ state _]
|
||||||
|
@ -71,7 +74,7 @@
|
||||||
children-ids (into [] (mapcat #(get-in objects [% :shapes])) ids)
|
children-ids (into [] (mapcat #(get-in objects [% :shapes])) ids)
|
||||||
undo-id (js/Symbol)]
|
undo-id (js/Symbol)]
|
||||||
(rx/of (dwu/start-undo-transaction undo-id)
|
(rx/of (dwu/start-undo-transaction undo-id)
|
||||||
(dwc/update-shapes ids (get-layout-initializer type))
|
(dwc/update-shapes ids (get-layout-initializer type from-frame?))
|
||||||
(ptk/data-event :layout/update ids)
|
(ptk/data-event :layout/update ids)
|
||||||
(dwc/update-shapes children-ids #(dissoc % :constraints-h :constraints-v))
|
(dwc/update-shapes children-ids #(dissoc % :constraints-h :constraints-v))
|
||||||
(dwu/commit-undo-transaction undo-id))))))
|
(dwu/commit-undo-transaction undo-id))))))
|
||||||
|
@ -173,7 +176,7 @@
|
||||||
(dws/create-artboard-from-selection new-shape-id parent-id group-index)
|
(dws/create-artboard-from-selection new-shape-id parent-id group-index)
|
||||||
(cl/remove-all-fills [new-shape-id] {:color clr/black
|
(cl/remove-all-fills [new-shape-id] {:color clr/black
|
||||||
:opacity 1})
|
:opacity 1})
|
||||||
(create-layout-from-id [new-shape-id] type)
|
(create-layout-from-id [new-shape-id] type false)
|
||||||
(dwc/update-shapes
|
(dwc/update-shapes
|
||||||
[new-shape-id]
|
[new-shape-id]
|
||||||
(fn [shape]
|
(fn [shape]
|
||||||
|
@ -193,7 +196,7 @@
|
||||||
(dws/create-artboard-from-selection new-shape-id)
|
(dws/create-artboard-from-selection new-shape-id)
|
||||||
(cl/remove-all-fills [new-shape-id] {:color clr/black
|
(cl/remove-all-fills [new-shape-id] {:color clr/black
|
||||||
:opacity 1})
|
:opacity 1})
|
||||||
(create-layout-from-id [new-shape-id] type)
|
(create-layout-from-id [new-shape-id] type false)
|
||||||
(dwc/update-shapes
|
(dwc/update-shapes
|
||||||
[new-shape-id]
|
[new-shape-id]
|
||||||
(fn [shape]
|
(fn [shape]
|
||||||
|
@ -233,7 +236,7 @@
|
||||||
(if (and single? is-frame?)
|
(if (and single? is-frame?)
|
||||||
(rx/of
|
(rx/of
|
||||||
(dwu/start-undo-transaction undo-id)
|
(dwu/start-undo-transaction undo-id)
|
||||||
(create-layout-from-id [(first selected)] :flex)
|
(create-layout-from-id [(first selected)] :flex true)
|
||||||
(dwu/commit-undo-transaction undo-id))
|
(dwu/commit-undo-transaction undo-id))
|
||||||
(rx/of
|
(rx/of
|
||||||
(dwu/start-undo-transaction undo-id)
|
(dwu/start-undo-transaction undo-id)
|
||||||
|
|
|
@ -252,9 +252,9 @@
|
||||||
[:span
|
[:span
|
||||||
(tr "auth.terms-privacy-agreement")
|
(tr "auth.terms-privacy-agreement")
|
||||||
[:div
|
[:div
|
||||||
[:a {:href "https://penpot.app/terms.html" :target "_blank"} (tr "auth.terms-of-service")]
|
[:a {:href "https://penpot.app/terms" :target "_blank"} (tr "auth.terms-of-service")]
|
||||||
[:span ",\u00A0"]
|
[:span ",\u00A0"]
|
||||||
[:a {:href "https://penpot.app/privacy.html" :target "_blank"} (tr "auth.privacy-policy")]]]]])
|
[:a {:href "https://penpot.app/privacy" :target "_blank"} (tr "auth.privacy-policy")]]]]])
|
||||||
|
|
||||||
[:& fm/submit-button
|
[:& fm/submit-button
|
||||||
{:label (tr "auth.register-submit")
|
{:label (tr "auth.register-submit")
|
||||||
|
|
|
@ -169,7 +169,7 @@
|
||||||
[:div.template-card
|
[:div.template-card
|
||||||
[:div.img-container
|
[:div.img-container
|
||||||
[:a {:tab-index "0"
|
[:a {:tab-index "0"
|
||||||
:href "https://penpot.app/libraries-templates.html" :target "_blank" :on-click handle-template-link}
|
:href "https://penpot.app/libraries-templates" :target "_blank" :on-click handle-template-link}
|
||||||
[:div.template-link
|
[:div.template-link
|
||||||
[:div.template-link-title (tr "dashboard.libraries-and-templates")]
|
[:div.template-link-title (tr "dashboard.libraries-and-templates")]
|
||||||
[:div.template-link-text (tr "dashboard.libraries-and-templates.explore")]]]]]]]
|
[:div.template-link-text (tr "dashboard.libraries-and-templates.explore")]]]]]]]
|
||||||
|
|
|
@ -746,10 +746,10 @@
|
||||||
[:li.separator {:tab-index (if show
|
[:li.separator {:tab-index (if show
|
||||||
"0"
|
"0"
|
||||||
"-1")
|
"-1")
|
||||||
:on-click #(dom/open-new-window "https://penpot.app/libraries-templates.html")
|
:on-click #(dom/open-new-window "https://penpot.app/libraries-templates")
|
||||||
:on-key-down (fn [event]
|
:on-key-down (fn [event]
|
||||||
(when (kbd/enter? event)
|
(when (kbd/enter? event)
|
||||||
(dom/open-new-window "https://penpot.app/libraries-templates.html")))
|
(dom/open-new-window "https://penpot.app/libraries-templates")))
|
||||||
:data-test "libraries-templates-profile-opt"}
|
:data-test "libraries-templates-profile-opt"}
|
||||||
[:span.text (tr "labels.libraries-and-templates")]]
|
[:span.text (tr "labels.libraries-and-templates")]]
|
||||||
[:li {:tab-index (if show
|
[:li {:tab-index (if show
|
||||||
|
@ -763,10 +763,10 @@
|
||||||
[:li {:tab-index (if show
|
[:li {:tab-index (if show
|
||||||
"0"
|
"0"
|
||||||
"-1")
|
"-1")
|
||||||
:on-click #(dom/open-new-window "https://penpot.app/terms.html")
|
:on-click #(dom/open-new-window "https://penpot.app/terms")
|
||||||
:on-key-down (fn [event]
|
:on-key-down (fn [event]
|
||||||
(when (kbd/enter? event)
|
(when (kbd/enter? event)
|
||||||
(dom/open-new-window "https://penpot.app/terms.html")))}
|
(dom/open-new-window "https://penpot.app/terms")))}
|
||||||
[:span (tr "auth.terms-of-service")]]
|
[:span (tr "auth.terms-of-service")]]
|
||||||
|
|
||||||
(when (contains? @cf/flags :user-feedback)
|
(when (contains? @cf/flags :user-feedback)
|
||||||
|
|
|
@ -888,7 +888,7 @@
|
||||||
|
|
||||||
on-file-selected
|
on-file-selected
|
||||||
(fn [file]
|
(fn [file]
|
||||||
(st/emit! (dd/update-team-photo {:file file})))]
|
(st/emit! (dd/update-team-photo file)))]
|
||||||
|
|
||||||
|
|
||||||
(mf/use-effect
|
(mf/use-effect
|
||||||
|
|
|
@ -52,7 +52,7 @@
|
||||||
:id "newsletter-news"
|
:id "newsletter-news"
|
||||||
:on-change #(toggle newsletter-news)}]
|
:on-change #(toggle newsletter-news)}]
|
||||||
[:label {:for "newsletter-news"} (tr "onboarding-v2.newsletter.news")]]]
|
[:label {:for "newsletter-news"} (tr "onboarding-v2.newsletter.news")]]]
|
||||||
[:p (tr "onboarding-v2.newsletter.privacy1") [:a {:target "_blank" :href "https://penpot.app/privacy.html"} (tr "onboarding.newsletter.policy")]]
|
[:p (tr "onboarding-v2.newsletter.privacy1") [:a {:target "_blank" :href "https://penpot.app/privacy"} (tr "onboarding.newsletter.policy")]]
|
||||||
[:p (tr "onboarding-v2.newsletter.privacy2")]]
|
[:p (tr "onboarding-v2.newsletter.privacy2")]]
|
||||||
[:div.modal-footer
|
[:div.modal-footer
|
||||||
[:button.btn-primary {:on-click accept} (tr "labels.continue")]]
|
[:button.btn-primary {:on-click accept} (tr "labels.continue")]]
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
[:div.modal-content
|
[:div.modal-content
|
||||||
[:p "Penpot’s officially beta!"]
|
[:p "Penpot’s officially beta!"]
|
||||||
[:p "We carefully analyzed everything important to us before taking this step. And now we’re ready to move forward onto the beta version. Have a play around if you haven’t yet."]
|
[:p "We carefully analyzed everything important to us before taking this step. And now we’re ready to move forward onto the beta version. Have a play around if you haven’t yet."]
|
||||||
[:a {:href "https://penpot.app/why-beta.html" :target "_blank"} "Learn why we made this decision."]]
|
[:a {:href "https://penpot.app/why-beta" :target "_blank"} "Learn why we made this decision."]]
|
||||||
[:div.modal-navigation
|
[:div.modal-navigation
|
||||||
[:button.btn-secondary {:on-click finish} "Explore Penpot Beta 1.10"]]]
|
[:button.btn-secondary {:on-click finish} "Explore Penpot Beta 1.10"]]]
|
||||||
[:img.deco {:src "images/deco-left.png" :border "0"}]
|
[:img.deco {:src "images/deco-left.png" :border "0"}]
|
||||||
|
|
|
@ -375,7 +375,7 @@
|
||||||
is-flex-container? (and is-frame? (= :flex (:layout (first shapes))))
|
is-flex-container? (and is-frame? (= :flex (:layout (first shapes))))
|
||||||
ids (->> shapes (map :id))
|
ids (->> shapes (map :id))
|
||||||
add-flex #(st/emit! (if is-frame?
|
add-flex #(st/emit! (if is-frame?
|
||||||
(dwsl/create-layout-from-id ids :flex)
|
(dwsl/create-layout-from-id ids :flex true)
|
||||||
(dwsl/create-layout-from-selection :flex)))
|
(dwsl/create-layout-from-selection :flex)))
|
||||||
remove-flex #(st/emit! (dwsl/remove-layout ids))]
|
remove-flex #(st/emit! (dwsl/remove-layout ids))]
|
||||||
|
|
||||||
|
|
|
@ -416,11 +416,11 @@
|
||||||
[:span (tr "labels.tutorials")]]
|
[:span (tr "labels.tutorials")]]
|
||||||
[:li {:on-click show-release-notes}
|
[:li {:on-click show-release-notes}
|
||||||
[:span (tr "labels.release-notes")]]
|
[:span (tr "labels.release-notes")]]
|
||||||
[:li.separator {:on-click #(dom/open-new-window "https://penpot.app/libraries-templates.html")}
|
[:li.separator {:on-click #(dom/open-new-window "https://penpot.app/libraries-templates")}
|
||||||
[:span (tr "labels.libraries-and-templates")]]
|
[:span (tr "labels.libraries-and-templates")]]
|
||||||
[:li {:on-click #(dom/open-new-window "https://github.com/penpot/penpot")}
|
[:li {:on-click #(dom/open-new-window "https://github.com/penpot/penpot")}
|
||||||
[:span (tr "labels.github-repo")]]
|
[:span (tr "labels.github-repo")]]
|
||||||
[:li {:on-click #(dom/open-new-window "https://penpot.app/terms.html")}
|
[:li {:on-click #(dom/open-new-window "https://penpot.app/terms")}
|
||||||
[:span (tr "auth.terms-of-service")]]
|
[:span (tr "auth.terms-of-service")]]
|
||||||
[:li.separator {:on-click #(st/emit! (when (contains? layout :collapse-left-sidebar) (dw/toggle-layout-flag :collapse-left-sidebar))
|
[:li.separator {:on-click #(st/emit! (when (contains? layout :collapse-left-sidebar) (dw/toggle-layout-flag :collapse-left-sidebar))
|
||||||
(-> (dw/toggle-layout-flag :shortcuts)
|
(-> (dw/toggle-layout-flag :shortcuts)
|
||||||
|
|
Loading…
Add table
Reference in a new issue