mirror of https://github.com/penpot/penpot.git
Merge pull request #6862 from penpot/niwinz-develop-minor-fixes
✨ Add several improvements
This commit is contained in:
commit
5b704faf79
|
|
@ -1,6 +1,6 @@
|
||||||
# CHANGELOG
|
# CHANGELOG
|
||||||
|
|
||||||
## 2.8.0 (Next / Unreleased)
|
## 2.8.0
|
||||||
|
|
||||||
### :rocket: Epics and highlights
|
### :rocket: Epics and highlights
|
||||||
|
|
||||||
|
|
@ -15,8 +15,8 @@ on [its own changelog](library/CHANGES.md)
|
||||||
**Penpot migrate from Redis to Valkey**
|
**Penpot migrate from Redis to Valkey**
|
||||||
|
|
||||||
As [Valkey](https://valkey.io/) is an opne-souce fork of [Redis](https://redis.io/)
|
As [Valkey](https://valkey.io/) is an opne-souce fork of [Redis](https://redis.io/)
|
||||||
version 7.2.4, this version of Penpot will be compatible with Redis but may diverge
|
version 7.2.4, this version of Penpot will be compatible with Redis but may diverge
|
||||||
in future versions. Therefore, **migration from Redis to ValKey is recommended for all
|
in future versions. Therefore, **migration from Redis to ValKey is recommended for all
|
||||||
on-premises instances** that want to keep up to date.
|
on-premises instances** that want to keep up to date.
|
||||||
|
|
||||||
### :heart: Community contributions (Thank you!)
|
### :heart: Community contributions (Thank you!)
|
||||||
|
|
|
||||||
|
|
@ -139,7 +139,8 @@
|
||||||
'~:status', CASE COALESCE(p.props->'~:subscription'->>'~:type', 'professional')
|
'~:status', CASE COALESCE(p.props->'~:subscription'->>'~:type', 'professional')
|
||||||
WHEN 'professional' THEN 'active'
|
WHEN 'professional' THEN 'active'
|
||||||
ELSE COALESCE(p.props->'~:subscription'->>'~:status', 'incomplete')
|
ELSE COALESCE(p.props->'~:subscription'->>'~:status', 'incomplete')
|
||||||
END
|
END,
|
||||||
|
'~:seats', p.props->'~:quantity'
|
||||||
) AS subscription
|
) AS subscription
|
||||||
FROM team_profile_rel AS tp
|
FROM team_profile_rel AS tp
|
||||||
JOIN team AS t ON (t.id = tp.team_id)
|
JOIN team AS t ON (t.id = tp.team_id)
|
||||||
|
|
|
||||||
|
|
@ -1019,8 +1019,8 @@
|
||||||
[data _]
|
[data _]
|
||||||
(let [update-colors
|
(let [update-colors
|
||||||
(fn [colors]
|
(fn [colors]
|
||||||
(into {} (filter #(-> % val types.color/valid-color?) colors)))]
|
(into {} (filter #(-> % val types.color/valid-library-color?) colors)))]
|
||||||
(update data :colors update-colors)))
|
(d/update-when data :colors update-colors)))
|
||||||
|
|
||||||
(defmethod migrate-data "legacy-52"
|
(defmethod migrate-data "legacy-52"
|
||||||
[data _]
|
[data _]
|
||||||
|
|
@ -1034,7 +1034,6 @@
|
||||||
|
|
||||||
(update data :pages-index d/update-vals update-page)))
|
(update data :pages-index d/update-vals update-page)))
|
||||||
|
|
||||||
|
|
||||||
(defmethod migrate-data "legacy-53"
|
(defmethod migrate-data "legacy-53"
|
||||||
[data _]
|
[data _]
|
||||||
(migrate-data data "legacy-26"))
|
(migrate-data data "legacy-26"))
|
||||||
|
|
@ -1517,6 +1516,17 @@
|
||||||
|
|
||||||
(d/update-when data :colors d/update-vals clear-color)))
|
(d/update-when data :colors d/update-vals clear-color)))
|
||||||
|
|
||||||
|
(defmethod migrate-data "0009-clean-library-colors"
|
||||||
|
[data _]
|
||||||
|
(d/update-when data :colors
|
||||||
|
(fn [colors]
|
||||||
|
(reduce-kv (fn [colors id color]
|
||||||
|
(if (types.color/valid-library-color? color)
|
||||||
|
colors
|
||||||
|
(dissoc colors id)))
|
||||||
|
colors
|
||||||
|
colors))))
|
||||||
|
|
||||||
(def available-migrations
|
(def available-migrations
|
||||||
(into (d/ordered-set)
|
(into (d/ordered-set)
|
||||||
["legacy-2"
|
["legacy-2"
|
||||||
|
|
@ -1580,4 +1590,5 @@
|
||||||
"0005-deprecate-image-type"
|
"0005-deprecate-image-type"
|
||||||
"0006-fix-old-texts-fills"
|
"0006-fix-old-texts-fills"
|
||||||
"0007-clear-invalid-strokes-and-fills-v2"
|
"0007-clear-invalid-strokes-and-fills-v2"
|
||||||
"0008-fix-library-colors-v4"]))
|
"0008-fix-library-colors-v4"
|
||||||
|
"0009-clean-library-colors"]))
|
||||||
|
|
|
||||||
|
|
@ -117,6 +117,7 @@
|
||||||
[:ref-id {:optional true} ::sm/uuid]
|
[:ref-id {:optional true} ::sm/uuid]
|
||||||
[:ref-file {:optional true} ::sm/uuid]])
|
[:ref-file {:optional true} ::sm/uuid]])
|
||||||
|
|
||||||
|
;; This schema represent an "applied color"
|
||||||
(def schema:color
|
(def schema:color
|
||||||
[:and
|
[:and
|
||||||
[:merge {:title "Color"}
|
[:merge {:title "Color"}
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,8 @@
|
||||||
[app.common.schema.generators :as sg]
|
[app.common.schema.generators :as sg]
|
||||||
[app.common.svg.path :as svg.path]
|
[app.common.svg.path :as svg.path]
|
||||||
[app.common.transit :as t]
|
[app.common.transit :as t]
|
||||||
[app.common.types.path :as-alias path])
|
[app.common.types.path :as-alias path]
|
||||||
|
[cuerdas.core :as str])
|
||||||
(:import
|
(:import
|
||||||
#?(:cljs [goog.string StringBuffer]
|
#?(:cljs [goog.string StringBuffer]
|
||||||
:clj [java.nio ByteBuffer ByteOrder])))
|
:clj [java.nio ByteBuffer ByteOrder])))
|
||||||
|
|
@ -530,7 +531,9 @@
|
||||||
:decode/json (fn [s]
|
:decode/json (fn [s]
|
||||||
(cond
|
(cond
|
||||||
(string? s)
|
(string? s)
|
||||||
(from-string s)
|
(if (str/empty? s)
|
||||||
|
(from-plain [])
|
||||||
|
(from-string s))
|
||||||
|
|
||||||
(vector? s)
|
(vector? s)
|
||||||
(let [decode-fn (deref decoder)]
|
(let [decode-fn (deref decoder)]
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@
|
||||||
[app.main.ui.inspect.attributes.blur :refer [blur-panel]]
|
[app.main.ui.inspect.attributes.blur :refer [blur-panel]]
|
||||||
[app.main.ui.inspect.attributes.fill :refer [fill-panel]]
|
[app.main.ui.inspect.attributes.fill :refer [fill-panel]]
|
||||||
[app.main.ui.inspect.attributes.geometry :refer [geometry-panel]]
|
[app.main.ui.inspect.attributes.geometry :refer [geometry-panel]]
|
||||||
[app.main.ui.inspect.attributes.image :refer [image-panel]]
|
|
||||||
[app.main.ui.inspect.attributes.layout :refer [layout-panel]]
|
[app.main.ui.inspect.attributes.layout :refer [layout-panel]]
|
||||||
[app.main.ui.inspect.attributes.layout-element :refer [layout-element-panel]]
|
[app.main.ui.inspect.attributes.layout-element :refer [layout-element-panel]]
|
||||||
[app.main.ui.inspect.attributes.shadow :refer [shadow-panel]]
|
[app.main.ui.inspect.attributes.shadow :refer [shadow-panel]]
|
||||||
|
|
@ -69,7 +68,6 @@
|
||||||
:stroke stroke-panel
|
:stroke stroke-panel
|
||||||
:shadow shadow-panel
|
:shadow shadow-panel
|
||||||
:blur blur-panel
|
:blur blur-panel
|
||||||
:image image-panel
|
|
||||||
:text text-panel
|
:text text-panel
|
||||||
:svg svg-panel
|
:svg svg-panel
|
||||||
:variant variant-panel*)
|
:variant variant-panel*)
|
||||||
|
|
|
||||||
|
|
@ -1,51 +0,0 @@
|
||||||
;; This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
;; License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
;;
|
|
||||||
;; Copyright (c) KALEIDOS INC
|
|
||||||
|
|
||||||
(ns app.main.ui.inspect.attributes.image
|
|
||||||
(:require-macros [app.main.style :as stl])
|
|
||||||
(:require
|
|
||||||
[app.common.files.helpers :as cfh]
|
|
||||||
[app.common.media :as cm]
|
|
||||||
[app.config :as cf]
|
|
||||||
[app.main.ui.components.copy-button :refer [copy-button*]]
|
|
||||||
[app.util.code-gen.style-css :as css]
|
|
||||||
[app.util.i18n :refer [tr]]
|
|
||||||
[cuerdas.core :as str]
|
|
||||||
[rumext.v2 :as mf]))
|
|
||||||
|
|
||||||
(defn has-image? [shape]
|
|
||||||
(= (:type shape) :image))
|
|
||||||
|
|
||||||
(mf/defc image-panel
|
|
||||||
[{:keys [objects shapes]}]
|
|
||||||
(for [shape (filter cfh/image-shape? shapes)]
|
|
||||||
[:div {:class (stl/css :attributes-block)
|
|
||||||
:key (str "image-" (:id shape))}
|
|
||||||
[:div {:class (stl/css :image-wrapper)}
|
|
||||||
[:img {:src (cf/resolve-file-media (-> shape :metadata))}]]
|
|
||||||
|
|
||||||
[:div {:class (stl/css :image-row)}
|
|
||||||
[:div {:class (stl/css :global/attr-label)}
|
|
||||||
(tr "inspect.attributes.image.width")]
|
|
||||||
[:div {:class (stl/css :global/attr-value)}
|
|
||||||
[:> copy-button* {:data (css/get-css-property objects (:metadata shape) :width)}
|
|
||||||
[:div {:class (stl/css :button-children)} (css/get-css-value objects (:metadata shape) :width)]]]]
|
|
||||||
|
|
||||||
[:div {:class (stl/css :image-row)}
|
|
||||||
[:div {:class (stl/css :global/attr-label)}
|
|
||||||
(tr "inspect.attributes.image.height")]
|
|
||||||
[:div {:class (stl/css :global/attr-value)}
|
|
||||||
[:> copy-button* {:data (css/get-css-property objects (:metadata shape) :height)}
|
|
||||||
[:div {:class (stl/css :button-children)} (css/get-css-value objects (:metadata shape) :height)]]]]
|
|
||||||
|
|
||||||
(let [mtype (-> shape :metadata :mtype)
|
|
||||||
name (:name shape)
|
|
||||||
extension (cm/mtype->extension mtype)]
|
|
||||||
[:a {:class (stl/css :download-button)
|
|
||||||
:target "_blank"
|
|
||||||
:download (cond-> name extension (str/concat extension))
|
|
||||||
:href (cf/resolve-file-media (-> shape :metadata))}
|
|
||||||
(tr "inspect.attributes.image.download")])]))
|
|
||||||
Loading…
Reference in New Issue