mirror of
https://github.com/penpot/penpot.git
synced 2025-02-15 11:38:24 -05:00
✨ Integration with library new colors
This commit is contained in:
parent
7d7008d405
commit
245c39b1f6
11 changed files with 64 additions and 38 deletions
|
@ -869,7 +869,7 @@
|
||||||
|
|
||||||
(defmethod process-change :mod-color
|
(defmethod process-change :mod-color
|
||||||
[data {:keys [color]}]
|
[data {:keys [color]}]
|
||||||
(d/update-in-when data [:colors (:id color)] merge color))
|
(d/assoc-in-when data [:colors (:id color)] color))
|
||||||
|
|
||||||
(defmethod process-change :del-color
|
(defmethod process-change :del-color
|
||||||
[data {:keys [id]}]
|
[data {:keys [id]}]
|
||||||
|
@ -965,3 +965,4 @@
|
||||||
(ex/raise :type :not-implemented
|
(ex/raise :type :not-implemented
|
||||||
:code :operation-not-implemented
|
:code :operation-not-implemented
|
||||||
:context {:type (:type op)}))
|
:context {:type (:type op)}))
|
||||||
|
|
||||||
|
|
|
@ -1 +1,3 @@
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 500" height="500" width="500"><path d="M24.7-.203C11.421-.203.001 11.217.001 24.494v451.012c0 13.277 11.417 24.695 24.691 24.697h450.608c13.28 0 24.697-11.42 24.697-24.697V24.494c0-13.276-11.42-24.697-24.697-24.697H24.699zm4.142 31.35h442.316v437.707H28.842V31.146z"/></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 500">
|
||||||
|
<path d="M24.7-.203C11.421-.203.001 11.217.001 24.494v451.012c0 13.277 11.417 24.695 24.691 24.697H475.3c13.28 0 24.697-11.42 24.697-24.697V24.494c0-13.276-11.42-24.697-24.697-24.697H24.699zm12.142 39.35h426.316v421.707H36.842V39.146z"/>
|
||||||
|
</svg>
|
||||||
|
|
Before Width: | Height: | Size: 332 B After Width: | Height: | Size: 310 B |
|
@ -68,7 +68,6 @@ ul.palette-menu .color-bullet {
|
||||||
grid-area: color;
|
grid-area: color;
|
||||||
width: 20px;
|
width: 20px;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
background-color: rgba(var(--color));
|
|
||||||
border-radius: 12px;
|
border-radius: 12px;
|
||||||
border: 1px solid $color-gray-10;
|
border: 1px solid $color-gray-10;
|
||||||
background-size: 8px;
|
background-size: 8px;
|
||||||
|
@ -95,6 +94,7 @@ ul.palette-menu .color-bullet {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAADFJREFUOE9jZGBgEAFifOANPknGUQMYhkkYEEgG+NMJKAwIAbwJbdQABnBCIgRoG4gAIF8IsXB/Rs4AAAAASUVORK5CYII=") left center;
|
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAADFJREFUOE9jZGBgEAFifOANPknGUQMYhkkYEEgG+NMJKAwIAbwJbdQABnBCIgRoG4gAIF8IsXB/Rs4AAAAASUVORK5CYII=") left center;
|
||||||
|
background-color: $color-white;
|
||||||
|
|
||||||
& > * {
|
& > * {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
|
@ -443,13 +443,10 @@
|
||||||
|
|
||||||
.colorpicker-tabs {
|
.colorpicker-tabs {
|
||||||
display: flex;
|
display: flex;
|
||||||
margin-top: 0.25rem;
|
margin: 0.5rem 0;
|
||||||
|
border-radius: 5px;
|
||||||
|
border: 1px solid $color-gray-10;
|
||||||
height: 2rem;
|
height: 2rem;
|
||||||
background-color: $color-gray-10;
|
|
||||||
|
|
||||||
.active {
|
|
||||||
background-color: $color-white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.colorpicker-tab {
|
.colorpicker-tab {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
@ -461,9 +458,21 @@
|
||||||
svg {
|
svg {
|
||||||
width: 16px;
|
width: 16px;
|
||||||
height: 16px;
|
height: 16px;
|
||||||
fill: $color-gray-30;
|
fill: $color-gray-20;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.active {
|
||||||
|
background-color: $color-gray-10;
|
||||||
|
svg {
|
||||||
|
fill: $color-gray-60;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
:hover svg {
|
||||||
|
fill: $color-primary;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,12 @@
|
||||||
(defn add-color
|
(defn add-color
|
||||||
[color]
|
[color]
|
||||||
(let [id (uuid/next)
|
(let [id (uuid/next)
|
||||||
color (assoc color :id id)]
|
color (assoc color
|
||||||
|
:id id
|
||||||
|
:name (or (:color color)
|
||||||
|
(case (get-in color [:gradient :type])
|
||||||
|
:linear "Linear gradient"
|
||||||
|
:radial "Radial gradient")))]
|
||||||
(us/assert ::cp/color color)
|
(us/assert ::cp/color color)
|
||||||
(ptk/reify ::add-color
|
(ptk/reify ::add-color
|
||||||
ptk/WatchEvent
|
ptk/WatchEvent
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
:ry (:ry shape)}))
|
:ry (:ry shape)}))
|
||||||
|
|
||||||
(defn add-fill [attrs shape]
|
(defn add-fill [attrs shape]
|
||||||
(let [fill-color-gradient-id (str "fill-color-gradient_" (:id shape))]
|
(let [fill-color-gradient-id (str "fill-color-gradient_" (:render-id shape))]
|
||||||
(if (:fill-color-gradient shape)
|
(if (:fill-color-gradient shape)
|
||||||
(obj/merge! attrs #js {:fill (str/format "url(#%s)" fill-color-gradient-id)})
|
(obj/merge! attrs #js {:fill (str/format "url(#%s)" fill-color-gradient-id)})
|
||||||
(obj/merge! attrs #js {:fill (or (:fill-color shape) "transparent")
|
(obj/merge! attrs #js {:fill (or (:fill-color shape) "transparent")
|
||||||
|
@ -33,7 +33,7 @@
|
||||||
|
|
||||||
(defn add-stroke [attrs shape]
|
(defn add-stroke [attrs shape]
|
||||||
(let [stroke-style (:stroke-style shape :none)
|
(let [stroke-style (:stroke-style shape :none)
|
||||||
stroke-color-gradient-id (str "stroke-color-gradient_" (:id shape))]
|
stroke-color-gradient-id (str "stroke-color-gradient_" (:render-id shape))]
|
||||||
(if (not= stroke-style :none)
|
(if (not= stroke-style :none)
|
||||||
(if (:stroke-color-gradient shape)
|
(if (:stroke-color-gradient shape)
|
||||||
(obj/merge! attrs
|
(obj/merge! attrs
|
||||||
|
|
|
@ -49,8 +49,8 @@
|
||||||
scale-factor-x (* scale-factor-y (:width gradient))
|
scale-factor-x (* scale-factor-y (:width gradient))
|
||||||
|
|
||||||
scale-vec (gpt/point (* scale-factor-y (/ height 2))
|
scale-vec (gpt/point (* scale-factor-y (/ height 2))
|
||||||
(* scale-factor-x (/ width 2))
|
(* scale-factor-x (/ width 2)))
|
||||||
)
|
|
||||||
tr-translate (str/fmt "translate(%s, %s)" (:x translate-vec) (:y translate-vec))
|
tr-translate (str/fmt "translate(%s, %s)" (:x translate-vec) (:y translate-vec))
|
||||||
tr-rotate (str/fmt "rotate(%s)" angle)
|
tr-rotate (str/fmt "rotate(%s)" angle)
|
||||||
tr-scale (str/fmt "scale(%s, %s)" (:x scale-vec) (:y scale-vec))
|
tr-scale (str/fmt "scale(%s, %s)" (:x scale-vec) (:y scale-vec))
|
||||||
|
@ -72,8 +72,9 @@
|
||||||
[props]
|
[props]
|
||||||
(let [attr (obj/get props "attr")
|
(let [attr (obj/get props "attr")
|
||||||
shape (obj/get props "shape")
|
shape (obj/get props "shape")
|
||||||
|
render-id (obj/get props "render-id")
|
||||||
|
|
||||||
id (str (name attr) "_" (:id shape))
|
id (str (name attr) "_" render-id)
|
||||||
gradient (get shape attr)
|
gradient (get shape attr)
|
||||||
gradient-props #js {:id id
|
gradient-props #js {:id id
|
||||||
:gradient gradient
|
:gradient gradient
|
||||||
|
|
|
@ -306,16 +306,15 @@
|
||||||
:on-change handle-change-color}]
|
:on-change handle-change-color}]
|
||||||
|
|
||||||
[:& libraries {:current-color current-color
|
[:& libraries {:current-color current-color
|
||||||
:on-select-color on-select-library-color}]]
|
:on-select-color on-select-library-color}]
|
||||||
|
|
||||||
(when on-accept
|
(when on-accept
|
||||||
[:div.actions
|
[:div.actions
|
||||||
[:button.btn-primary.btn-large
|
[:button.btn-primary.btn-large
|
||||||
{:on-click (fn []
|
{:on-click (fn []
|
||||||
;; TODO: REVIEW FOR GRADIENTS
|
(on-accept (state->data @state))
|
||||||
#_(on-accept @value-ref)
|
(modal/hide!))}
|
||||||
(modal/hide!))}
|
(t locale "workspace.libraries.colors.save-color")]])]])
|
||||||
(t locale "workspace.libraries.colors.save-color")]])])
|
|
||||||
)
|
)
|
||||||
|
|
||||||
(defn calculate-position
|
(defn calculate-position
|
||||||
|
|
|
@ -25,9 +25,9 @@
|
||||||
[app.main.data.modal :as modal]
|
[app.main.data.modal :as modal]
|
||||||
[app.main.ui.icons :as i]
|
[app.main.ui.icons :as i]
|
||||||
[app.util.i18n :as i18n :refer [t]]
|
[app.util.i18n :as i18n :refer [t]]
|
||||||
|
[app.main.ui.components.color-bullet :refer [color-bullet]]
|
||||||
[app.main.ui.workspace.colorpicker.slider-selector :refer [slider-selector]]))
|
[app.main.ui.workspace.colorpicker.slider-selector :refer [slider-selector]]))
|
||||||
|
|
||||||
|
|
||||||
(mf/defc value-saturation-selector [{:keys [hue saturation value on-change]}]
|
(mf/defc value-saturation-selector [{:keys [hue saturation value on-change]}]
|
||||||
(let [dragging? (mf/use-state false)
|
(let [dragging? (mf/use-state false)
|
||||||
calculate-pos
|
calculate-pos
|
||||||
|
@ -50,7 +50,8 @@
|
||||||
|
|
||||||
|
|
||||||
(mf/defc ramp-selector [{:keys [color disable-opacity on-change]}]
|
(mf/defc ramp-selector [{:keys [color disable-opacity on-change]}]
|
||||||
(let [{hue :h saturation :s value :v alpha :alpha} color
|
(let [{hex :hex
|
||||||
|
hue :h saturation :s value :v alpha :alpha} color
|
||||||
|
|
||||||
on-change-value-saturation
|
on-change-value-saturation
|
||||||
(fn [new-saturation new-value]
|
(fn [new-saturation new-value]
|
||||||
|
@ -80,7 +81,8 @@
|
||||||
:on-change on-change-value-saturation}]
|
:on-change on-change-value-saturation}]
|
||||||
|
|
||||||
[:div.shade-selector
|
[:div.shade-selector
|
||||||
[:div.color-bullet]
|
[:& color-bullet {:color {:color hex
|
||||||
|
:opacity alpha}}]
|
||||||
[:& slider-selector {:class "hue"
|
[:& slider-selector {:class "hue"
|
||||||
:max-value 360
|
:max-value 360
|
||||||
:value hue
|
:value hue
|
||||||
|
|
|
@ -73,22 +73,24 @@
|
||||||
on-context-menu (mf/use-callback
|
on-context-menu (mf/use-callback
|
||||||
(mf/deps shape)
|
(mf/deps shape)
|
||||||
#(on-context-menu % shape))
|
#(on-context-menu % shape))
|
||||||
filter-id (mf/use-memo filters/get-filter-id)]
|
render-id (mf/use-memo #(str (uuid/next)))]
|
||||||
|
|
||||||
[:g.shape {:on-mouse-down on-mouse-down
|
[:g.shape {:on-mouse-down on-mouse-down
|
||||||
:on-context-menu on-context-menu
|
:on-context-menu on-context-menu
|
||||||
:filter (filters/filter-str filter-id shape)}
|
:filter (filters/filter-str (str "filter_" render-id) shape)}
|
||||||
|
|
||||||
[:& filters/filters {:filter-id filter-id :shape shape}]
|
[:& filters/filters {:filter-id (str "filter_" render-id) :shape shape}]
|
||||||
|
|
||||||
(when (:fill-color-gradient shape)
|
(when (:fill-color-gradient shape)
|
||||||
[:& grad/gradient {:attr :fill-color-gradient
|
[:& grad/gradient {:attr :fill-color-gradient
|
||||||
|
:render-id render-id
|
||||||
:shape shape}])
|
:shape shape}])
|
||||||
|
|
||||||
(when (:stroke-color-gradient shape)
|
(when (:stroke-color-gradient shape)
|
||||||
[:& grad/gradient {:attr :stroke-color-gradient
|
[:& grad/gradient {:attr :stroke-color-gradient
|
||||||
|
:render-id render-id
|
||||||
:shape shape}])
|
:shape shape}])
|
||||||
|
|
||||||
[:& component {:shape shape}]])))
|
[:& component {:shape (assoc shape :render-id render-id)}]])))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -217,8 +217,9 @@
|
||||||
(st/emit! (dwl/update-color (assoc color :name name))))
|
(st/emit! (dwl/update-color (assoc color :name name))))
|
||||||
|
|
||||||
edit-color
|
edit-color
|
||||||
(fn [value]
|
(fn [new-color]
|
||||||
(st/emit! (dwl/update-color (assoc color :color value))))
|
(let [updated-color (merge new-color (select-keys color [:id :file-id :name]))]
|
||||||
|
(st/emit! (dwl/update-color updated-color))))
|
||||||
|
|
||||||
delete-color
|
delete-color
|
||||||
(fn []
|
(fn []
|
||||||
|
@ -253,7 +254,6 @@
|
||||||
:y (.-clientY event)
|
:y (.-clientY event)
|
||||||
:on-accept edit-color
|
:on-accept edit-color
|
||||||
:data color
|
:data color
|
||||||
:disable-opacity true
|
|
||||||
:position :right}))
|
:position :right}))
|
||||||
|
|
||||||
on-context-menu
|
on-context-menu
|
||||||
|
@ -321,8 +321,8 @@
|
||||||
{:x (.-clientX event)
|
{:x (.-clientX event)
|
||||||
:y (.-clientY event)
|
:y (.-clientY event)
|
||||||
:on-accept add-color
|
:on-accept add-color
|
||||||
:value "#406280"
|
:data {:color "#406280"
|
||||||
:disable-opacity true
|
:opacity 1}
|
||||||
:position :right})))]
|
:position :right})))]
|
||||||
[:div.asset-group
|
[:div.asset-group
|
||||||
[:div.group-title {:class (when (not open?) "closed")}
|
[:div.group-title {:class (when (not open?) "closed")}
|
||||||
|
@ -334,7 +334,12 @@
|
||||||
[:div.group-list
|
[:div.group-list
|
||||||
(for [color colors]
|
(for [color colors]
|
||||||
[:& color-item {:key (:id color)
|
[:& color-item {:key (:id color)
|
||||||
:color color
|
:color (if (:value color)
|
||||||
|
(-> color
|
||||||
|
(assoc :color (:value color)
|
||||||
|
:opacity 1)
|
||||||
|
(dissoc :value))
|
||||||
|
color)
|
||||||
:file-id file-id
|
:file-id file-id
|
||||||
:local? local?
|
:local? local?
|
||||||
:locale locale}])])]))
|
:locale locale}])])]))
|
||||||
|
|
Loading…
Add table
Reference in a new issue